@codingfactory/mediables-vue 2.4.1 → 2.4.2
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.
- package/dist/{PixiFrameExporter-vXYgP3wU.js → PixiFrameExporter-C_1YAQeT.js} +2 -2
- package/dist/{PixiFrameExporter-vXYgP3wU.js.map → PixiFrameExporter-C_1YAQeT.js.map} +1 -1
- package/dist/{PixiFrameExporter-8_WF3thr.cjs → PixiFrameExporter-Suw6Dxf2.cjs} +2 -2
- package/dist/{PixiFrameExporter-8_WF3thr.cjs.map → PixiFrameExporter-Suw6Dxf2.cjs.map} +1 -1
- package/dist/editor-BUpGsg4D.cjs +42 -0
- package/dist/editor-BUpGsg4D.cjs.map +1 -0
- package/dist/{editor-DiiyShiW.js → editor-Cw08D0SQ.js} +310 -276
- package/dist/editor-Cw08D0SQ.js.map +1 -0
- package/dist/{index-B42SSGjg.js → index-mZS1mNLQ.js} +3 -3
- package/dist/{index-B42SSGjg.js.map → index-mZS1mNLQ.js.map} +1 -1
- package/dist/{index-CT0VqMgf.cjs → index-wOQ7eP9R.cjs} +3 -3
- package/dist/{index-CT0VqMgf.cjs.map → index-wOQ7eP9R.cjs.map} +1 -1
- package/dist/mediables-vanilla.cjs +1 -1
- package/dist/mediables-vanilla.mjs +1 -1
- package/dist/mediables-vue.cjs +1 -1
- package/dist/mediables-vue.mjs +2 -2
- package/package.json +1 -1
- package/dist/editor-Bl0mzqgX.cjs +0 -42
- package/dist/editor-Bl0mzqgX.cjs.map +0 -1
- package/dist/editor-DiiyShiW.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var Ed=Object.defineProperty;var Vd=(a,n,t)=>n in a?Ed(a,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[n]=t;var L=(a,n,t)=>Vd(a,typeof n!="symbol"?n+"":n,t);const va=require("pinia"),e=require("vue"),Le=require("pixi.js"),rt=require("./editor-Bl0mzqgX.cjs"),B=require("@ionic/vue"),Sd=require("pixi-filters");function Cd(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 Je=Cd(Le),yi=1,Nd=new Set(["free","square","circle"]);function _d(a){const n=typeof a;return n==="string"||n==="number"||n==="boolean"}function Td(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 Pi(a){if(!a||typeof a!="object")return null;const n=a;if(n.version!==yi)return null;const t=n.crop,o=t&&Td(t.rect)?{...t.rect}:null,i=t&&typeof t.shape=="string"&&Nd.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={},m=d.values;if(m&&typeof m=="object"&&!Array.isArray(m))for(const[p,h]of Object.entries(m))_d(h)&&(u[p]=h);l.push({id:d.id,enabled:d.enabled!==!1,values:u})}return{version:yi,crop:{rect:o,aspectRatio:r,shape:i},filters:l}}function Zs(a){const n=Pi(a);return n?JSON.stringify(n):null}function Md(a){try{const n=JSON.parse(a);return Pi(n)}catch{return null}}function Bd(){return{version:yi,crop:{rect:null,aspectRatio:"free",shape:"free"},filters:[]}}let Et={apiBaseUrl:"/api/v1",isAdmin:!1};function In(a){Et={...Et,...a}}function Xs(){return{...Et}}function Hs(a){Et={...a}}function Gs(a){const n=Xs();return In(a),()=>{Hs(n)}}const Id=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()},kt=va.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),m=e.ref(new Map),p=e.ref(new Map),h=e.ref(new Set),v=e.ref(new Map),y=e.ref({}),E=5*60*1e3,_=e.computed(()=>{if(Et.apiScope)return Et.apiScope;if(Et.isAdmin)return"admin"}),C=e.computed(()=>_.value==="admin");function w(){return Et.httpClient||Id}function f(ue){const se=Et.apiBaseUrl||"/api/v1",be=_.value?`/${_.value}`:"";return`${se}${be}${ue}`}function x(ue,se){return`${_.value??"default"}-${ue}-${JSON.stringify(se)}`}function $(ue){return Date.now()-ue<E}function N(){v.value.clear(),y.value={}}function g(ue){if(!ue||!ue.data)return;const se={};ue.data.forEach(be=>{const ie=`${be.file_name}-${be.collection_name||"default"}`,le=se[ie];(!le||Object.keys(be.generated_conversions||{}).length>Object.keys(le.generated_conversions||{}).length)&&(se[ie]=be)}),a.value=Object.values(se),ue.meta&&(i.value=ue.meta.current_page,r.value=Math.ceil(ue.meta.total/ue.meta.per_page))}async function S(ue=1,se={}){const be=x(ue,se),ie=v.value.get(be);if(ie&&$(ie.timestamp)){const le=ie.data;return g(le),le}t.value=!0,o.value=null;try{const le=new URLSearchParams;le.append("page",ue.toString()),le.append("per_page",s.value.toString()),C.value&&le.append("linked","1");for(const et in se)if(Object.prototype.hasOwnProperty.call(se,et)){const We=se[et];We!=null&&We!==""&&le.append(et,String(We))}const Ve=await w()(f(`/media?${le}`));return v.value.set(be,{data:Ve,timestamp:Date.now()}),g(Ve),Ve}catch(le){throw o.value=le instanceof Error?le.message:"Failed to fetch media",a.value=[],new Error(o.value)}finally{t.value=!1}}async function O(ue,se){t.value=!0,o.value=null;const be=`${ue.name}-${Date.now()}`,ie={file:ue,progress:0,status:"uploading"};m.value.set(be,ie);try{const le=new FormData;le.append("file",ue),le.append("collection",se.collection),se.ownerUuid&&(le.append("owner_uuid",se.ownerUuid),le.append("owner_type",se.ownerType||"")),se.usageUuid&&(le.append("usage_uuid",se.usageUuid),le.append("usage_type",se.usageType||""),le.append("usage_purpose",se.usagePurpose||"")),se.customProperties&&le.append("custom_properties",JSON.stringify(se.customProperties));const Ve=await w()(f("/media"),{method:"POST",body:le});return ie.status="completed",ie.progress=100,ie.media=Ve==null?void 0:Ve.data,i.value===1&&(Ve!=null&&Ve.data)&&(a.value=[Ve.data,...a.value]),N(),(Ve==null?void 0:Ve.data)||null}catch(le){throw ie.status="error",ie.error=le instanceof Error?le.message:"Upload failed",o.value=ie.error,new Error(o.value)}finally{t.value=!1,setTimeout(()=>{m.value.delete(be)},5e3)}}async function k(ue){t.value=!0,o.value=null;const se=a.value.findIndex(ie=>ie.uuid===ue);let be;se!==-1&&(be=a.value.splice(se,1)[0]);try{return await w()(f(`/media/${ue}`),{method:"DELETE"}),h.value.delete(ue),N(),!0}catch(ie){throw be&&se!==-1&&a.value.splice(se,0,be),o.value=ie instanceof Error?ie.message:"Failed to delete media",new Error(o.value)}finally{t.value=!1}}async function T(ue,se){t.value=!0,o.value=null;try{const ie=await w()(f(`/media/${ue}`),{method:"PATCH",body:se,data:se});if(ie!=null&&ie.data){const le=a.value.findIndex(ke=>ke.uuid===ue);return le!==-1&&(a.value[le]={...a.value[le],...ie.data}),N(),ie.data}return null}catch(be){throw o.value=be instanceof Error?be.message:"Failed to update media",new Error(o.value)}finally{t.value=!1}}async function F(){t.value=!0,o.value=null;try{const se=await w()(f("/media/collections"));return n.value=(se==null?void 0:se.data)||[],n.value}catch(ue){throw o.value=ue instanceof Error?ue.message:"Failed to fetch collections",n.value=[],new Error(o.value)}finally{t.value=!1}}async function A(ue,se,be="images",ie){d.value=!0,u.value=null;try{const le=new URLSearchParams;le.append("collection",be),ie&&le.append("search",ie);const Ve=await w()(f(`/media/model/${ue}/${se}?${le}`));return Ve!=null&&Ve.data?(c.value=Ve.data,Ve.data):[]}catch(le){throw u.value=le instanceof Error?le.message:"Failed to fetch model media",c.value=[],new Error(u.value)}finally{d.value=!1}}async function R(ue,se,be,ie="images"){d.value=!0,u.value=null;const le=[...c.value];try{const Ve=await w()(f(`/media/model/${ue}/${se}/attach`),{method:"POST",body:{media_uuids:be,collection:ie}});return await A(ue,se,ie),(Ve==null?void 0:Ve.data)||[]}catch(ke){throw c.value=le,u.value=ke instanceof Error?ke.message:"Failed to attach media",new Error(u.value)}finally{d.value=!1}}async function j(ue,se,be,ie="images"){d.value=!0,u.value=null;const le=[...c.value];c.value=c.value.filter(ke=>ke.uuid!==be);try{return await w()(f(`/media/model/${ue}/${se}/detach`),{method:"POST",body:{media_uuid:be,collection:ie}}),!0}catch(ke){throw c.value=le,u.value=ke instanceof Error?ke.message:"Failed to detach media",new Error(u.value)}finally{d.value=!1}}async function K(ue,se,be,ie="images"){d.value=!0,u.value=null;const le=[...c.value],ke=new Map(c.value.map(Ve=>[Ve.uuid,Ve]));c.value=be.map(Ve=>ke.get(Ve)).filter(Ve=>Ve!==void 0);try{return await w()(f(`/media/model/${ue}/${se}/reorder`),{method:"POST",body:{media_uuids:be,collection:ie}}),!0}catch(Ve){throw c.value=le,u.value=Ve instanceof Error?Ve.message:"Failed to reorder media",new Error(u.value)}finally{d.value=!1}}async function I(ue,se,be={}){const ie=w(),le=Et.apiBaseUrl||"/api/v1",ke=new FormData,Ve=se.imageData,et=Ve.match(/^data:(image\/\w+);base64,/),We=et?et[1]:"image/png",fe=Ve.replace(/^data:image\/\w+;base64,/,""),P=atob(fe),J=new Uint8Array(P.length);for(let ve=0;ve<P.length;ve++)J[ve]=P.charCodeAt(ve);const ee=new Blob([J],{type:We});ke.append("image_file",ee,`edited.${We==="image/jpeg"?"jpg":"png"}`);const te=Zs(se.state);te&&ke.append("editor_state",te),se.metadata&&(ke.append("filters",JSON.stringify(se.metadata.filters)),se.metadata.cropRect&&ke.append("crop_data",JSON.stringify(se.metadata.cropRect))),ke.append("save_as_new","true"),be.asVariant&&ke.append("as_variant","true"),be.name!==void 0&&ke.append("name",be.name);const pe=await ie(`${le}/editor/${ue}/save`,{method:"POST",body:ke});if("media"in pe&&pe.media)return pe.media;if("status_url"in pe&&pe.status_url)return D(ie,pe.status_url,be.pollTimeout??6e4);throw new Error("Unexpected response from editor save endpoint")}async function D(ue,se,be){const ie=Date.now(),le=2e3;for(;Date.now()-ie<be;){await new Promise(Ve=>setTimeout(Ve,le));const ke=await ue(se);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 Z(ue,se,be){l.value=be!==void 0?{type:ue,uuid:se,collection:be}:{type:ue,uuid:se},y.value[`${ue}-${se}`]={timestamp:Date.now()}}function W(){l.value={type:null,uuid:null},c.value=[],u.value=null}async function oe(){if(!l.value.type||!l.value.uuid)return;const ue=await A(l.value.type,l.value.uuid,l.value.collection||"images");c.value=ue||[]}function we(){a.value.forEach(ue=>h.value.add(ue.uuid))}function Ce(){h.value.clear()}function ne(ue){h.value.has(ue)?h.value.delete(ue):h.value.add(ue)}function M(ue){return h.value.has(ue)}function z(){return Array.from(m.value.values()).some(ue=>ue.status==="uploading")}function me(ue){return m.value.get(ue)||p.value.get(ue)}function ae(){return[...Array.from(m.value.values()),...Array.from(p.value.values())]}async function Y(){const ue=Array.from(h.value);let se=0;for(const be of ue)try{await k(be),se++}catch{}return Ce(),se}function Te(ue,se){var be;return se&&((be=ue.conversion_urls)!=null&&be[se])?ue.conversion_urls[se]||"":ue.original_url||ue.url||""}return{items:a,collections:n,loading:t,error:o,currentPage:i,totalPages:r,itemsPerPage:s,isAdmin:C,modelContext:l,modelMedia:c,isLoadingModelMedia:d,modelMediaError:u,selectedItems:h,uploadProgress:m,uploadQueue:p,cachedResponses:y,fetchMedia:S,uploadFile:O,deleteMedia:k,updateMedia:T,clearCache:N,fetchCollections:F,fetchModelMedia:A,attachMedia:R,detachMedia:j,reorderMedia:K,saveEditedImage:I,setModelContext:Z,clearModelContext:W,refreshModelMedia:oe,selectAllItems:we,clearSelection:Ce,toggleSelection:ne,isSelected:M,deleteSelectedItems:Y,getHttpClient:w,getApiUrl:f,hasActiveUploads:z,getUploadProgress:me,getAllUploadProgress:ae,getMediaUrl:Te}}),Js=()=>((Et.apiScope!=="admin"||Et.isAdmin!==!0)&&In({...Et,apiScope:"admin",isAdmin:!0}),kt());function Fd(a,n){try{let t=rt.getFilter(a);if(t||(rt.registerCorePixiFilters(),t=rt.getFilter(a)),!t){try{const r=rt.getAllFilters()}catch{}return null}const o={...t.defaultParams,...n};return t.createFilter(o)}catch{return null}}const Rd=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 E;if(!r){o("error",new Error("Editor not initialized"));return}const u=r.exportImage("png",.92);if(!u){o("error",new Error("Failed to export image — the image could not be processed"));return}const m=r.getSerializableState(),p=r._renderer,h=((E=p.getExportDimensions)==null?void 0:E.call(p))??{width:0,height:0},v={width:Math.round(h.width),height:Math.round(h.height)};o("save",{imageData:u,dimensions:v,state:m})}function c(){o("cancel")}function d(){if(!i.value||r)return;window.PIXI=Je,rt.initializeFilterRegistry();const u={theme:t.theme};t.preset&&(u.preset=t.preset),t.preset?t.cropShape==="circle"&&(u.cropShape="circle",u.initialAspectRatio="1:1",u.initialMode="crop"):(u.cropShape=t.cropShape==="circle"?"circle":"free",u.initialAspectRatio=t.cropShape==="circle"?"1:1":"free",u.initialMode=t.cropShape==="circle"?"crop":"adjust"),r=new rt.VanillaImageEditor(i.value,u),r.setFilterRegistry({getAllFilters:rt.getAllFilters,getFilter:rt.getFilter,getFiltersByCategory:rt.getFiltersByCategory}),r.save=function(){l()},r.on("cancel",c),t.initialImage&&r.loadImage(t.initialImage,{state:t.initialState??null,sessionKey:t.sessionKey})}return e.onMounted(()=>{i.value&&(i.value.clientWidth>0?d():(s=new ResizeObserver(u=>{const m=u[0];m&&m.contentRect.width>0&&!r&&(d(),s==null||s.disconnect(),s=null)}),s.observe(i.value)))}),e.watch(()=>t.initialImage,u=>{r&&u&&r.loadImage(u,{state:t.initialState??null,sessionKey:t.sessionKey})}),e.watch(()=>t.sessionKey,()=>{r&&t.initialImage&&r.loadImage(t.initialImage,{state:t.initialState??null,sessionKey:t.sessionKey})}),e.onUnmounted(()=>{s==null||s.disconnect(),s=null,r&&(r.destroy(),r=null)}),(u,m)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"containerRef",ref:i,class:"vanilla-editor-wrapper","data-testid":"vanilla-image-editor"},null,512))}}),Me=(a,n)=>{const t=a.__vccOpts||a;for(const[o,i]of n)t[o]=i;return t},Ys=Me(Rd,[["__scopeId","data-v-d6416384"]]),$d={class:"editor-modal-panel"},Dd={class:"editor-fill"},Ud=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},onSave:{},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=async y=>{try{s.value=!0,t.onSave&&await t.onSave(y),o("save",y)}catch(E){c(E)}finally{s.value=!1}},m=()=>{o("cancel"),h()},p=()=>{s.value||h()},h=()=>{r.value=!1,o("update:modelValue",!1),l.value&&l.value instanceof HTMLElement&&(l.value.focus(),l.value=null)},v=y=>{if(y.key==="Escape"&&r.value&&!s.value){h();return}if(y.key==="Tab"&&r.value&&i.value){const E=i.value.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])');if(E.length===0)return;const _=E[0],C=E[E.length-1];y.shiftKey&&document.activeElement===_?(y.preventDefault(),C.focus()):!y.shiftKey&&document.activeElement===C&&(y.preventDefault(),_.focus())}};return e.onMounted(()=>{document.addEventListener("keydown",v)}),e.onBeforeUnmount(()=>{document.removeEventListener("keydown",v)}),(y,E)=>(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(p,["escape"])},[e.createElementVNode("div",{class:"editor-modal-backdrop",onClick:p}),e.createElementVNode("div",$d,[e.createElementVNode("div",Dd,[e.createVNode(Ys,{"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:m,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)]))}}),Ks=Me(Ud,[["__scopeId","data-v-9ca8dea8"]]),Od={class:"media-workspace"},Ad={class:"media-workspace-toolbar"},Ld={class:"media-workspace-label"},zd=["value"],Pd={class:"media-workspace-grid"},jd=["onClick"],Wd=e.defineComponent({__name:"MediaWorkspace",props:{apiScope:{},subScopes:{},initialScopeId:{}},emits:["scope-change","update:media","upload","preview"],setup(a,{emit:n}){var m;const t=a,o=n,i=kt(),r=e.ref(t.initialScopeId??((m=t.subScopes[0])==null?void 0:m.id)??""),s=e.computed(()=>t.subScopes),l=e.computed(()=>s.value.find(p=>p.id===r.value));let c=null;function d(){c&&(c(),c=null),t.apiScope&&(c=Gs({apiScope:t.apiScope,isAdmin:t.apiScope==="admin"}))}async function u(){var h;const p={};(h=l.value)!=null&&h.collection&&(p.collection=l.value.collection),await i.fetchMedia(1,p),o("update:media",[...i.items])}return e.watch(()=>t.initialScopeId,p=>{p&&p!==r.value&&(r.value=p)}),e.watch(()=>t.subScopes,p=>{if(p.length===0){r.value="";return}p.some(h=>h.id===r.value)||(r.value=p[0].id)},{deep:!0}),e.watch(()=>t.apiScope,()=>{d(),u()}),e.watch(r,p=>{p&&(o("scope-change",p),u())}),e.onMounted(()=>{d(),u()}),e.onUnmounted(()=>{c&&(c(),c=null)}),(p,h)=>(e.openBlock(),e.createElementBlock("div",Od,[e.createElementVNode("div",Ad,[e.createElementVNode("label",Ld,[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]=v=>r.value=v),"data-testid":"scope-select",class:"media-workspace-select"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,v=>(e.openBlock(),e.createElementBlock("option",{key:v.id,value:v.id},e.toDisplayString(v.label),9,zd))),128))],512),[[e.vModelSelect,r.value]])]),e.createElementVNode("button",{type:"button",class:"media-workspace-upload","data-testid":"upload-button",onClick:h[1]||(h[1]=v=>o("upload"))}," Upload ")]),e.createElementVNode("div",Pd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(i).items,v=>(e.openBlock(),e.createElementBlock("button",{key:v.uuid,type:"button",class:"media-workspace-item","data-testid":"media-item",onClick:y=>o("preview",v)},e.toDisplayString(v.file_name),9,jd))),128))])]))}}),Zd=Me(Wd,[["__scopeId","data-v-895f26fe"]]),Xd={class:"managed-media-gallery"},Hd={class:"gallery-grid"},Gd=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",Xd,[e.createElementVNode("div",Hd,[e.renderSlot(n.$slots,"default",{},void 0,!0)])]))}}),Jd=Me(Gd,[["__scopeId","data-v-a60fdcd7"]]),Yd="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>",ji="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>",Kd="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>",Wi="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>",qd="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>",Qd="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>",eo="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>",eu="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>",qs="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>",Qs="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>",Gr="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>",tu="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>",nu="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>",Jr="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>",Fn="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>",Yr="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>",ou="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>",an="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>",au="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>",Gn="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>",iu="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>",ru="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>",Kr="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>",el="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>",po="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>",su="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>",lu="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>",cu="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>",to="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>",qr="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>",ti="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>",du="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>",uu="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>",ni="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>",mu="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>",pu="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>",fu="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>",hu="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>",tl="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>",nl="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>",vu="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>",gu="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>",yu="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>",wu="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>",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 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>",bu="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>",ku="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>",al="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>",xu="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>",Eu="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>",Un="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>",Vu="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>",Su="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>",Qr="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>",Zi="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>",Cu="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>",oi="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>",on="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>",Jn="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>",es="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>",Nu="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>",il="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>",_u="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>",rl="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>",Tu="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>",Mu="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>",Bu="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>",Iu="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>",Fu="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>",Ru="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>",$u="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>",Do="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 ts=()=>{};function Du(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 Uu(a,n={}){let t,o,i=ts;const r=c=>{clearTimeout(c),i(),i=ts};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((m,p)=>{i=n.rejectOnCancel?p:m,s=c,u&&!o&&(o=setTimeout(()=>{t&&r(t),o=null,m(s())},u)),t=setTimeout(()=>{o&&r(o),o=null,m(c())},d)})}}function Ou(a,n=200,t={}){return Du(Uu(n,t),a)}const Yn=new Map;function Au(a){const n=e.getCurrentScope();function t(l){var c;const d=Yn.get(a)||new Set;d.add(l),Yn.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=Yn.get(a);c&&(c.delete(l),c.size||r())}function r(){Yn.delete(a)}function s(l,c){var d;(d=Yn.get(a))==null||d.forEach(u=>u(l,c))}return{on:t,once:o,off:i,emit:s,reset:r}}function Lu(){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 zu(a){const n=e.ref(new Set),t=e.ref(null),o=e.ref(-1),i=Au("media-selection"),r=Lu(),s=e.computed(()=>a.value.filter(x=>n.value.has(x.uuid))),l=e.computed(()=>n.value.size);e.watch(n,x=>{i.emit({type:"selection:changed",count:x.size,selectedIds:Array.from(x)})},{deep:!0});const c=e.computed(()=>a.value.length>0&&a.value.every(x=>n.value.has(x.uuid))),d=e.computed(()=>a.value.some(x=>n.value.has(x.uuid)));function u(x){return n.value.has(x)}function m(x){n.value.has(x)?(n.value.delete(x),t.value===x&&(t.value=null,o.value=-1)):(n.value.add(x),t.value=x,o.value=a.value.findIndex($=>$.uuid===x),n.value.size===1&&r.selection())}function p(x){n.value.add(x),t.value=x,o.value=a.value.findIndex($=>$.uuid===x)}function h(x){n.value.delete(x),t.value===x&&(t.value=null,o.value=-1)}function v(){a.value.forEach(x=>n.value.add(x.uuid))}function y(){n.value.clear(),t.value=null,o.value=-1}function E(){c.value?y():v()}function _(x,$){const N=a.value.findIndex(g=>g.uuid===x);if(N!==-1)if($!=null&&$.shiftKey&&o.value!==-1){const g=Math.min(o.value,N),S=Math.max(o.value,N);for(let O=g;O<=S;O++)n.value.add(a.value[O].uuid)}else m(x)}function C(){if(a.value.length===0)return;let x=o.value+1;x>=a.value.length&&(x=0),y(),p(a.value[x].uuid)}function w(){if(a.value.length===0)return;let x=o.value-1;x<0&&(x=a.value.length-1),y(),p(a.value[x].uuid)}function f(x){switch(x.key){case"ArrowDown":x.preventDefault(),C();break;case"ArrowUp":x.preventDefault(),w();break;case"a":(x.ctrlKey||x.metaKey)&&(x.preventDefault(),v());break;case"Escape":x.preventDefault(),y();break;case" ":t.value&&(x.preventDefault(),m(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:m,select:p,deselect:h,selectAll:v,clear:y,toggleAll:E,rangeSelect:_,selectNext:C,selectPrevious:w,handleKeydown:f,selectionBus:i}}const Pu={class:"flex items-center justify-between w-full px-4"},ju={class:"p-4"},Wu={key:0,class:"mb-4 p-4 bg-gray-50 dark:bg-gray-800 rounded-lg"},Zu={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},Xu=["value"],Hu={class:"flex gap-2 mt-4"},Gu={class:"flex justify-end mb-4"},Ju={key:1,class:"flex justify-center items-center h-64"},Yu={key:2,class:"flex flex-col items-center justify-center h-64 text-center"},Ku={class:"text-sm text-theme-secondary"},qu={key:0},Qu={class:"mb-4"},em={class:"mb-4"},tm={class:"flex gap-2"},nm={class:"flex items-center justify-between px-4 py-2"},om={class:"text-sm text-theme-secondary"},am={key:0},im={key:0},rm={key:1},sm={class:"flex gap-2"},lm=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)),m=e.ref(!1),p=e.ref({}),h=e.ref(["images","documents","videos"]),v=e.ref(1),y=e.ref(!0),E=e.ref(!1),_=Js(),C=zu(c);function w(M){var se;const z=M.conversion_urls||{},me=M.proxy_url||M.original_url||M.url||"",ae=z.thumb||z.preview||M.preview_url||M.thumbnail_url||me,Y=M.custom_properties||{},Te=Y.width,ue=Y.height;return{...M,uuid:M.uuid,name:M.name||M.file_name,file_name:M.file_name,filename:M.file_name,mime_type:M.mime_type,size:M.size,collection_name:M.collection_name||"images",disk:M.disk,original_url:me,url:me,thumbnail_url:ae,conversions:M.conversions||{},conversion_urls:z,generated_conversions:M.generated_conversions||{},custom_properties:Y,caption:M.caption||null,alt_text:M.alt_text||null,created_at:M.created_at,updated_at:M.updated_at,is_image:((se=M.mime_type)==null?void 0:se.startsWith("image/"))||!1,...typeof Te=="number"?{width:Te}:{},...typeof ue=="number"?{height:ue}:{},...M.formatted_size!==void 0?{formatted_size:M.formatted_size}:{}}}e.watch(()=>t.selectedItems,M=>{u.value=new Set(M),C.clear(),M.forEach(z=>C.select(z))});const f=e.computed(()=>{var z;let M=c.value;return(z=p.value.types)!=null&&z.length&&(M=M.filter(me=>{var Y,Te;const ae=(Y=me.mime_type)==null?void 0:Y.split("/")[0];return(Te=p.value.types)==null?void 0:Te.includes(ae)})),(p.value.sizeMin!==void 0||p.value.sizeMax!==void 0)&&(M=M.filter(me=>{const ae=me.size/1048576;return!(p.value.sizeMin!==void 0&&ae<p.value.sizeMin||p.value.sizeMax!==void 0&&ae>p.value.sizeMax)})),M}),x=e.computed(()=>{var z;let M=0;return p.value.search&&M++,p.value.collection&&M++,(p.value.dateFrom||p.value.dateTo)&&M++,(z=p.value.types)!=null&&z.length&&(M+=p.value.types.length),(p.value.sizeMin!==void 0||p.value.sizeMax!==void 0)&&M++,M}),$=e.computed(()=>{const M=C.selectedCount.value;return M===0?"Select Media":`Select ${t.selectionMode==="multiple"?`${M} ${M===1?"Item":"Items"}`:"Item"}`}),N=e.computed(()=>{const M=C.selectedCount.value;return!!(M===0||t.selectionMode==="single"&&M>1||t.maxSelection&&M>t.maxSelection)}),g=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 S(M=!0){M?(l.value=!0,c.value=[],v.value=1,y.value=!0):E.value=!0;try{const z={collection:p.value.collection||t.collection,per_page:24};switch((s.value||p.value.search)&&(z.search=s.value||p.value.search||""),p.value.dateFrom&&(z.from_date=p.value.dateFrom),p.value.dateTo&&(z.to_date=p.value.dateTo),i.value){case"recent":await _.fetchMedia(v.value,z),M?c.value=_.items.map(me=>w(me)):c.value=[...c.value,..._.items.map(me=>w(me))],y.value=_.currentPage<_.totalPages;break;case"model":if(t.modelType&&t.modelId){const me=await _.fetchModelMedia(t.modelType,t.modelId,z.collection,z.search);c.value=me?me.map(ae=>w(ae)):[],y.value=!1}break;case"library":await _.fetchMedia(v.value,z),M?c.value=_.items.map(me=>w(me)):c.value=[...c.value,..._.items.map(me=>w(me))],y.value=_.currentPage<_.totalPages;break}}catch{}finally{l.value=!1,E.value=!1}}async function O(M){if(!y.value||E.value){M!=null&&M.target&&M.target.complete();return}v.value++,await S(!1),M!=null&&M.target&&(M.target.complete(),y.value||(M.target.disabled=!0))}function k(M){return M==="recent"||M==="model"||M==="library"}function T(M){i.value=M,S()}function F(M){typeof M=="string"&&k(M)&&T(M)}async function A(M){t.selectionMode==="single"?(C.clear(),C.select(M.uuid)):(C.toggle(M.uuid),t.maxSelection&&C.selectedCount.value>t.maxSelection&&(C.deselect(M.uuid),await(await B.toastController.create({message:`Maximum ${t.maxSelection} items can be selected`,duration:2e3,color:"warning"})).present()))}function R(){o("confirm",C.selectedItems.value)}function j(){o("close")}function K(M){}const I=e.ref(null),D=e.ref(!1);function Z(M){I.value=M,D.value=!0}function W(M){const z=c.value.findIndex(ae=>ae.uuid===M.uuid);z!==-1&&(c.value[z]=M);const me={};M.alt_text!==void 0&&(me.alt_text=M.alt_text),M.caption!==void 0&&(me.caption=M.caption),M.custom_properties!==void 0&&(me.custom_properties=M.custom_properties),_.updateMedia(M.uuid,me)}function oe(){S()}function we(){p.value={},s.value="",S()}const Ce=Ou(()=>{S(!0)},300);e.watch(s,()=>{t.isOpen&&Ce()});async function ne(M){try{await(await B.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 _.deleteMedia(M),await S()}}]})).present()}catch{}}return e.watch(()=>t.isOpen,M=>{M&&S()}),e.onMounted(()=>{t.selectedItems.length>0&&t.selectedItems.forEach(M=>C.select(M))}),(M,z)=>{const me=e.resolveComponent("AdminMediaGrid"),ae=e.resolveComponent("AdminMediaListItem");return e.openBlock(),e.createBlock(e.unref(B.IonModal),{"is-open":M.isOpen,onDidDismiss:j,"backdrop-dismiss":!1,class:"media-browser-modal"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonToolbar),null,{end:e.withCtx(()=>[e.createVNode(e.unref(B.IonButtons),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButton),{onClick:j},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{name:"close-outline"})]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(B.IonTitle),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(g.value),1)]),_:1})]),_:1}),e.createVNode(e.unref(B.IonToolbar),null,{default:e.withCtx(()=>[e.createElementVNode("div",Pu,[e.createVNode(e.unref(B.IonSegment),{value:i.value,onIonChange:z[0]||(z[0]=Y=>F(Y.detail.value)),class:"max-w-xs"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonSegmentButton),{value:"recent"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[15]||(z[15]=[e.createTextVNode("Recent",-1)])]),_:1})]),_:1}),t.modelType&&t.modelId?(e.openBlock(),e.createBlock(e.unref(B.IonSegmentButton),{key:0,value:"model"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[16]||(z[16]=[e.createTextVNode("Model",-1)])]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(B.IonSegmentButton),{value:"library"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[17]||(z[17]=[e.createTextVNode("Library",-1)])]),_:1})]),_:1})]),_:1},8,["value"]),e.createVNode(e.unref(B.IonButton),{fill:"clear",size:"small",onClick:z[1]||(z[1]=Y=>m.value=!m.value),class:"relative"},{"icon-only":e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{name:"filter-outline"})]),default:e.withCtx(()=>[x.value>0?(e.openBlock(),e.createBlock(e.unref(B.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(x.value),1)]),_:1})):e.createCommentVNode("",!0)]),_:1})])]),_:1})]),_:1}),e.createVNode(e.unref(B.IonContent),null,{default:e.withCtx(()=>[e.createElementVNode("div",ju,[m.value?(e.openBlock(),e.createElementBlock("div",Wu,[e.createElementVNode("div",Zu,[e.createElementVNode("div",null,[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[18]||(z[18]=[e.createTextVNode("Collection",-1)])]),_:1}),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":z[2]||(z[2]=Y=>p.value.collection=Y),class:"w-full p-2 border rounded"},[z[19]||(z[19]=e.createElementVNode("option",{value:""},"All Collections",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,Y=>(e.openBlock(),e.createElementBlock("option",{key:Y,value:Y},e.toDisplayString(Y),9,Xu))),128))],512),[[e.vModelSelect,p.value.collection]])]),e.createElementVNode("div",null,[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[20]||(z[20]=[e.createTextVNode("From Date",-1)])]),_:1}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":z[3]||(z[3]=Y=>p.value.dateFrom=Y),type:"date",class:"w-full p-2 border rounded"},null,512),[[e.vModelText,p.value.dateFrom]])]),e.createElementVNode("div",null,[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[21]||(z[21]=[e.createTextVNode("To Date",-1)])]),_:1}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":z[4]||(z[4]=Y=>p.value.dateTo=Y),type:"date",class:"w-full p-2 border rounded"},null,512),[[e.vModelText,p.value.dateTo]])])]),e.createElementVNode("div",Hu,[e.createVNode(e.unref(B.IonButton),{size:"small",onClick:oe},{default:e.withCtx(()=>[...z[22]||(z[22]=[e.createTextVNode("Apply",-1)])]),_:1}),e.createVNode(e.unref(B.IonButton),{size:"small",fill:"clear",onClick:we},{default:e.withCtx(()=>[...z[23]||(z[23]=[e.createTextVNode("Clear",-1)])]),_:1})])])):e.createCommentVNode("",!0),e.createVNode(e.unref(B.IonSearchbar),{modelValue:s.value,"onUpdate:modelValue":z[5]||(z[5]=Y=>s.value=Y),placeholder:"Search media...",debounce:300,class:"mb-4"},null,8,["modelValue"]),e.createElementVNode("div",Gu,[e.createVNode(e.unref(B.IonButtons),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButton),{fill:r.value==="grid"?"solid":"clear",size:"small",onClick:z[6]||(z[6]=Y=>r.value="grid")},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{name:"grid-outline"})]),_:1},8,["fill"]),e.createVNode(e.unref(B.IonButton),{fill:r.value==="list"?"solid":"clear",size:"small",onClick:z[7]||(z[7]=Y=>r.value="list")},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{name:"list-outline"})]),_:1},8,["fill"])]),_:1})]),l.value?(e.openBlock(),e.createElementBlock("div",Ju,[e.createVNode(e.unref(B.IonSpinner),{name:"crescent"})])):f.value.length===0?(e.openBlock(),e.createElementBlock("div",Yu,[e.createVNode(e.unref(B.IonIcon),{name:"images-outline",class:"text-6xl text-theme-secondary mb-4"}),z[24]||(z[24]=e.createElementVNode("h3",{class:"text-lg font-medium text-theme mb-2"}," No Media Found ",-1)),e.createElementVNode("p",Ku,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":f.value,"selected-items":e.unref(C).selectedItems.value,"is-loading":!1,"selection-mode":!0,columns:{mobile:2,sm:3,md:4,lg:5,xl:6},onToggleSelect:A,onPreview:K,onEdit:Z,onDelete:ne},null,8,["media-items","selected-items"])):(e.openBlock(),e.createBlock(e.unref(B.IonList),{key:4,lines:"none",class:"rounded-lg overflow-hidden"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,(Y,Te)=>(e.openBlock(),e.createBlock(ae,{key:Y.uuid,media:Y,selected:e.unref(C).isSelected(Y.uuid),"selection-mode":!0,index:Te,onToggleSelect:A,onPreview:K,onEdit:Z,onDelete:ne},null,8,["media","selected","index"]))),128))]),_:1})),!l.value&&f.value.length>0&&i.value!=="model"?(e.openBlock(),e.createBlock(e.unref(B.IonInfiniteScroll),{key:5,threshold:"100px",onIonInfinite:z[8]||(z[8]=Y=>O(Y))},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonInfiniteScrollContent),{"loading-spinner":"crescent","loading-text":"Loading more media..."})]),_:1})):e.createCommentVNode("",!0)])]),_:1}),e.createVNode(e.unref(B.IonModal),{"is-open":D.value,onDidDismiss:z[14]||(z[14]=Y=>D.value=!1)},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonToolbar),null,{end:e.withCtx(()=>[e.createVNode(e.unref(B.IonButtons),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButton),{onClick:z[9]||(z[9]=Y=>D.value=!1)},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{name:"close-outline"})]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(B.IonTitle),null,{default:e.withCtx(()=>[...z[25]||(z[25]=[e.createTextVNode("Edit Media Info",-1)])]),_:1})]),_:1})]),_:1}),e.createVNode(e.unref(B.IonContent),{class:"p-4"},{default:e.withCtx(()=>[I.value?(e.openBlock(),e.createElementBlock("div",qu,[e.createElementVNode("div",Qu,[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[26]||(z[26]=[e.createTextVNode("Caption",-1)])]),_:1}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":z[10]||(z[10]=Y=>I.value.caption=Y),type:"text",class:"w-full p-2 border rounded mt-1",placeholder:"Enter caption..."},null,512),[[e.vModelText,I.value.caption]])]),e.createElementVNode("div",em,[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[27]||(z[27]=[e.createTextVNode("Alt Text",-1)])]),_:1}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":z[11]||(z[11]=Y=>I.value.alt_text=Y),type:"text",class:"w-full p-2 border rounded mt-1",placeholder:"Enter alt text..."},null,512),[[e.vModelText,I.value.alt_text]])]),e.createElementVNode("div",tm,[e.createVNode(e.unref(B.IonButton),{onClick:z[12]||(z[12]=Y=>W(I.value))},{default:e.withCtx(()=>[...z[28]||(z[28]=[e.createTextVNode("Save",-1)])]),_:1}),e.createVNode(e.unref(B.IonButton),{fill:"clear",onClick:z[13]||(z[13]=Y=>D.value=!1)},{default:e.withCtx(()=>[...z[29]||(z[29]=[e.createTextVNode("Cancel",-1)])]),_:1})])])):e.createCommentVNode("",!0)]),_:1})]),_:1},8,["is-open"]),e.createVNode(e.unref(B.IonFooter),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonToolbar),null,{default:e.withCtx(()=>[e.createElementVNode("div",nm,[e.createElementVNode("div",om,[e.unref(C).selectedCount.value>0?(e.openBlock(),e.createElementBlock("span",am,[e.createTextVNode(e.toDisplayString(e.unref(C).selectedCount.value)+" selected ",1),t.maxSelection?(e.openBlock(),e.createElementBlock("span",im," / "+e.toDisplayString(t.maxSelection)+" max ",1)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("span",rm," Select "+e.toDisplayString(t.selectionMode==="multiple"?"items":"an item"),1))]),e.createElementVNode("div",sm,[e.createVNode(e.unref(B.IonButton),{fill:"clear",onClick:j},{default:e.withCtx(()=>[...z[30]||(z[30]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),e.createVNode(e.unref(B.IonButton),{disabled:N.value,onClick:R},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString($.value),1)]),_:1},8,["disabled"])])])]),_:1})]),_:1})]),_:1},8,["is-open"])}}}),cm=Me(lm,[["__scopeId","data-v-9a8c0954"]]),dm={key:1,class:"flex flex-col items-center justify-center py-16"},um=["draggable","onDragstart","onDragover","onDrop"],mm={key:0,class:"absolute top-2 left-2 z-20"},pm=["checked","onChange"],fm={key:2,class:"absolute top-2 right-2 z-20 opacity-0 group-hover:opacity-100 transition-opacity cursor-move"},hm=["data-media-id"],vm={key:0,class:"w-full h-full flex items-center justify-center"},gm=["src","alt","onError","onLoad"],ym={key:2,class:"w-full h-full flex items-center justify-center bg-gray-100 dark:bg-gray-700"},wm={class:"text-center"},bm={class:"text-4xl text-gray-400 mb-2"},km={class:"text-sm font-medium text-gray-500"},xm={class:"absolute inset-0 bg-black/70 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center gap-2"},Em=["onClick"],Vm=["onClick"],Sm=["onClick"],Cm={class:"p-3"},Nm={class:"text-sm font-medium truncate mb-1"},_m={class:"text-xs text-gray-600 dark:text-gray-400"},Tm={key:0},Mm={key:0,class:"text-xs text-gray-500 dark:text-gray-500 mt-1 truncate"},Bm=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(g=>g.uuid===N.uuid),d=e.computed(()=>{const N=t.columns,g=["grid","gap-4"];switch(N.mobile){case 1:g.push("grid-cols-1");break;case 2:g.push("grid-cols-2");break;case 3:g.push("grid-cols-3");break;case 4:g.push("grid-cols-4");break;default:g.push("grid-cols-2");break}switch(N.sm){case 1:g.push("sm:grid-cols-1");break;case 2:g.push("sm:grid-cols-2");break;case 3:g.push("sm:grid-cols-3");break;case 4:g.push("sm:grid-cols-4");break;case 5:g.push("sm:grid-cols-5");break;default:g.push("sm:grid-cols-3");break}switch(N.md){case 2:g.push("md:grid-cols-2");break;case 3:g.push("md:grid-cols-3");break;case 4:g.push("md:grid-cols-4");break;case 5:g.push("md:grid-cols-5");break;case 6:g.push("md:grid-cols-6");break;default:g.push("md:grid-cols-4");break}switch(N.lg){case 3:g.push("lg:grid-cols-3");break;case 4:g.push("lg:grid-cols-4");break;case 5:g.push("lg:grid-cols-5");break;case 6:g.push("lg:grid-cols-6");break;case 7:g.push("lg:grid-cols-7");break;default:g.push("lg:grid-cols-5");break}switch(N.xl){case 4:g.push("xl:grid-cols-4");break;case 5:g.push("xl:grid-cols-5");break;case 6:g.push("xl:grid-cols-6");break;case 7:g.push("xl:grid-cols-7");break;case 8:g.push("xl:grid-cols-8");break;default:g.push("xl:grid-cols-6");break}return g.join(" ")});function u(N,g,S){t.reorderable&&(i.value=g,N.dataTransfer&&(N.dataTransfer.effectAllowed="move",N.dataTransfer.setData("text/html","")))}function m(N,g){t.reorderable&&(N.preventDefault(),r.value=g)}function p(){r.value=null}function h(N,g){if(!t.reorderable||!i.value)return;N.preventDefault();const S=[...t.mediaItems],O=S.findIndex(k=>{var T;return k.uuid===((T=i.value)==null?void 0:T.uuid)});if(O!==-1&&O!==g&&i.value){const[k]=S.splice(O,1);S.splice(g,0,k),o("reorder",S)}i.value=null,r.value=null}function v(N){return N<1024?N+" B":N<1024*1024?(N/1024).toFixed(1)+" KB":(N/(1024*1024)).toFixed(1)+" MB"}function y(N){var S;return N.thumbnail_url||((S=N.conversion_urls)==null?void 0:S.thumb)||N.original_url||N.url||""}function E(N){var O,k,T;const g=((O=N.mime_type)==null?void 0:O.startsWith("image/"))||!1,S=!!(N.thumbnail_url||(k=N.conversion_urls)!=null&&k.thumb||(T=N.conversion_urls)!=null&&T.preview||N.original_url||N.url);return g&&S}function _(N){var g;return((g=N.split(".").pop())==null?void 0:g.toUpperCase())||""}function C(N){var S;const g=((S=N.mime_type)==null?void 0:S.toLowerCase())||"";return g.startsWith("image/")?"image":g.startsWith("video/")?"videocam":g.startsWith("audio/")?"musical-notes":g.includes("pdf")?"document-text":g.includes("zip")||g.includes("rar")?"archive":g.includes("sheet")||g.includes("excel")?"grid":g.includes("document")||g.includes("word")?"document-text":"document"}e.onMounted(()=>{typeof window<"u"&&"IntersectionObserver"in window&&(l.value=new IntersectionObserver(N=>{N.forEach(g=>{var S;if(g.isIntersecting){const O=g.target.getAttribute("data-media-id");O&&(s.value.add(O),(S=l.value)==null||S.unobserve(g.target))}})},{rootMargin:"50px"}))}),e.onUnmounted(()=>{l.value&&l.value.disconnect()});function w(N){return!0}function f(){l.value&&e.nextTick(()=>{document.querySelectorAll("[data-media-id]").forEach(g=>{var O;const S=g.getAttribute("data-media-id");S&&!s.value.has(S)&&((O=l.value)==null||O.observe(g))})})}e.watch(()=>t.mediaItems,()=>{s.value.clear(),f()},{immediate:!0,deep:!0});function x(N,g){const S=N.target;delete S.dataset.fallbackIndex}function $(N,g){const S=N.target,O=S.closest("[data-media-id]"),k=[g.original_url,g.url,g.thumbnail_url,"preview_url"in g?g.preview_url:void 0].filter(T=>T&&T.trim()!==""&&T!==S.src);if(k.length>0&&S.dataset.fallbackIndex){const T=parseInt(S.dataset.fallbackIndex);if(T<k.length){S.dataset.fallbackIndex=(T+1).toString(),S.src=k[T]||"";return}}else if(k.length>0){S.dataset.fallbackIndex="1",S.src=k[0]||"";return}if(S.style.display="none",O&&!O.querySelector(".media-fallback-icon")){const F=document.createElement("div");F.className="media-fallback-icon w-full h-full flex items-center justify-center bg-gray-100 dark:bg-gray-800",F.innerHTML=`
|
|
1
|
+
"use strict";var Ed=Object.defineProperty;var Vd=(a,n,t)=>n in a?Ed(a,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[n]=t;var L=(a,n,t)=>Vd(a,typeof n!="symbol"?n+"":n,t);const va=require("pinia"),e=require("vue"),Le=require("pixi.js"),rt=require("./editor-BUpGsg4D.cjs"),B=require("@ionic/vue"),Sd=require("pixi-filters");function Cd(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 Je=Cd(Le),yi=1,Nd=new Set(["free","square","circle"]);function _d(a){const n=typeof a;return n==="string"||n==="number"||n==="boolean"}function Td(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 Pi(a){if(!a||typeof a!="object")return null;const n=a;if(n.version!==yi)return null;const t=n.crop,o=t&&Td(t.rect)?{...t.rect}:null,i=t&&typeof t.shape=="string"&&Nd.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={},m=d.values;if(m&&typeof m=="object"&&!Array.isArray(m))for(const[p,h]of Object.entries(m))_d(h)&&(u[p]=h);l.push({id:d.id,enabled:d.enabled!==!1,values:u})}return{version:yi,crop:{rect:o,aspectRatio:r,shape:i},filters:l}}function Zs(a){const n=Pi(a);return n?JSON.stringify(n):null}function Md(a){try{const n=JSON.parse(a);return Pi(n)}catch{return null}}function Bd(){return{version:yi,crop:{rect:null,aspectRatio:"free",shape:"free"},filters:[]}}let Et={apiBaseUrl:"/api/v1",isAdmin:!1};function In(a){Et={...Et,...a}}function Xs(){return{...Et}}function Hs(a){Et={...a}}function Gs(a){const n=Xs();return In(a),()=>{Hs(n)}}const Id=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()},kt=va.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),m=e.ref(new Map),p=e.ref(new Map),h=e.ref(new Set),v=e.ref(new Map),y=e.ref({}),E=5*60*1e3,_=e.computed(()=>{if(Et.apiScope)return Et.apiScope;if(Et.isAdmin)return"admin"}),C=e.computed(()=>_.value==="admin");function w(){return Et.httpClient||Id}function f(ue){const se=Et.apiBaseUrl||"/api/v1",be=_.value?`/${_.value}`:"";return`${se}${be}${ue}`}function x(ue,se){return`${_.value??"default"}-${ue}-${JSON.stringify(se)}`}function $(ue){return Date.now()-ue<E}function N(){v.value.clear(),y.value={}}function g(ue){if(!ue||!ue.data)return;const se={};ue.data.forEach(be=>{const ie=`${be.file_name}-${be.collection_name||"default"}`,le=se[ie];(!le||Object.keys(be.generated_conversions||{}).length>Object.keys(le.generated_conversions||{}).length)&&(se[ie]=be)}),a.value=Object.values(se),ue.meta&&(i.value=ue.meta.current_page,r.value=Math.ceil(ue.meta.total/ue.meta.per_page))}async function S(ue=1,se={}){const be=x(ue,se),ie=v.value.get(be);if(ie&&$(ie.timestamp)){const le=ie.data;return g(le),le}t.value=!0,o.value=null;try{const le=new URLSearchParams;le.append("page",ue.toString()),le.append("per_page",s.value.toString()),C.value&&le.append("linked","1");for(const et in se)if(Object.prototype.hasOwnProperty.call(se,et)){const We=se[et];We!=null&&We!==""&&le.append(et,String(We))}const Ve=await w()(f(`/media?${le}`));return v.value.set(be,{data:Ve,timestamp:Date.now()}),g(Ve),Ve}catch(le){throw o.value=le instanceof Error?le.message:"Failed to fetch media",a.value=[],new Error(o.value)}finally{t.value=!1}}async function O(ue,se){t.value=!0,o.value=null;const be=`${ue.name}-${Date.now()}`,ie={file:ue,progress:0,status:"uploading"};m.value.set(be,ie);try{const le=new FormData;le.append("file",ue),le.append("collection",se.collection),se.ownerUuid&&(le.append("owner_uuid",se.ownerUuid),le.append("owner_type",se.ownerType||"")),se.usageUuid&&(le.append("usage_uuid",se.usageUuid),le.append("usage_type",se.usageType||""),le.append("usage_purpose",se.usagePurpose||"")),se.customProperties&&le.append("custom_properties",JSON.stringify(se.customProperties));const Ve=await w()(f("/media"),{method:"POST",body:le});return ie.status="completed",ie.progress=100,ie.media=Ve==null?void 0:Ve.data,i.value===1&&(Ve!=null&&Ve.data)&&(a.value=[Ve.data,...a.value]),N(),(Ve==null?void 0:Ve.data)||null}catch(le){throw ie.status="error",ie.error=le instanceof Error?le.message:"Upload failed",o.value=ie.error,new Error(o.value)}finally{t.value=!1,setTimeout(()=>{m.value.delete(be)},5e3)}}async function k(ue){t.value=!0,o.value=null;const se=a.value.findIndex(ie=>ie.uuid===ue);let be;se!==-1&&(be=a.value.splice(se,1)[0]);try{return await w()(f(`/media/${ue}`),{method:"DELETE"}),h.value.delete(ue),N(),!0}catch(ie){throw be&&se!==-1&&a.value.splice(se,0,be),o.value=ie instanceof Error?ie.message:"Failed to delete media",new Error(o.value)}finally{t.value=!1}}async function T(ue,se){t.value=!0,o.value=null;try{const ie=await w()(f(`/media/${ue}`),{method:"PATCH",body:se,data:se});if(ie!=null&&ie.data){const le=a.value.findIndex(ke=>ke.uuid===ue);return le!==-1&&(a.value[le]={...a.value[le],...ie.data}),N(),ie.data}return null}catch(be){throw o.value=be instanceof Error?be.message:"Failed to update media",new Error(o.value)}finally{t.value=!1}}async function F(){t.value=!0,o.value=null;try{const se=await w()(f("/media/collections"));return n.value=(se==null?void 0:se.data)||[],n.value}catch(ue){throw o.value=ue instanceof Error?ue.message:"Failed to fetch collections",n.value=[],new Error(o.value)}finally{t.value=!1}}async function A(ue,se,be="images",ie){d.value=!0,u.value=null;try{const le=new URLSearchParams;le.append("collection",be),ie&&le.append("search",ie);const Ve=await w()(f(`/media/model/${ue}/${se}?${le}`));return Ve!=null&&Ve.data?(c.value=Ve.data,Ve.data):[]}catch(le){throw u.value=le instanceof Error?le.message:"Failed to fetch model media",c.value=[],new Error(u.value)}finally{d.value=!1}}async function R(ue,se,be,ie="images"){d.value=!0,u.value=null;const le=[...c.value];try{const Ve=await w()(f(`/media/model/${ue}/${se}/attach`),{method:"POST",body:{media_uuids:be,collection:ie}});return await A(ue,se,ie),(Ve==null?void 0:Ve.data)||[]}catch(ke){throw c.value=le,u.value=ke instanceof Error?ke.message:"Failed to attach media",new Error(u.value)}finally{d.value=!1}}async function j(ue,se,be,ie="images"){d.value=!0,u.value=null;const le=[...c.value];c.value=c.value.filter(ke=>ke.uuid!==be);try{return await w()(f(`/media/model/${ue}/${se}/detach`),{method:"POST",body:{media_uuid:be,collection:ie}}),!0}catch(ke){throw c.value=le,u.value=ke instanceof Error?ke.message:"Failed to detach media",new Error(u.value)}finally{d.value=!1}}async function K(ue,se,be,ie="images"){d.value=!0,u.value=null;const le=[...c.value],ke=new Map(c.value.map(Ve=>[Ve.uuid,Ve]));c.value=be.map(Ve=>ke.get(Ve)).filter(Ve=>Ve!==void 0);try{return await w()(f(`/media/model/${ue}/${se}/reorder`),{method:"POST",body:{media_uuids:be,collection:ie}}),!0}catch(Ve){throw c.value=le,u.value=Ve instanceof Error?Ve.message:"Failed to reorder media",new Error(u.value)}finally{d.value=!1}}async function I(ue,se,be={}){const ie=w(),le=Et.apiBaseUrl||"/api/v1",ke=new FormData,Ve=se.imageData,et=Ve.match(/^data:(image\/\w+);base64,/),We=et?et[1]:"image/png",fe=Ve.replace(/^data:image\/\w+;base64,/,""),P=atob(fe),J=new Uint8Array(P.length);for(let ve=0;ve<P.length;ve++)J[ve]=P.charCodeAt(ve);const ee=new Blob([J],{type:We});ke.append("image_file",ee,`edited.${We==="image/jpeg"?"jpg":"png"}`);const te=Zs(se.state);te&&ke.append("editor_state",te),se.metadata&&(ke.append("filters",JSON.stringify(se.metadata.filters)),se.metadata.cropRect&&ke.append("crop_data",JSON.stringify(se.metadata.cropRect))),ke.append("save_as_new","true"),be.asVariant&&ke.append("as_variant","true"),be.name!==void 0&&ke.append("name",be.name);const pe=await ie(`${le}/editor/${ue}/save`,{method:"POST",body:ke});if("media"in pe&&pe.media)return pe.media;if("status_url"in pe&&pe.status_url)return D(ie,pe.status_url,be.pollTimeout??6e4);throw new Error("Unexpected response from editor save endpoint")}async function D(ue,se,be){const ie=Date.now(),le=2e3;for(;Date.now()-ie<be;){await new Promise(Ve=>setTimeout(Ve,le));const ke=await ue(se);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 Z(ue,se,be){l.value=be!==void 0?{type:ue,uuid:se,collection:be}:{type:ue,uuid:se},y.value[`${ue}-${se}`]={timestamp:Date.now()}}function W(){l.value={type:null,uuid:null},c.value=[],u.value=null}async function oe(){if(!l.value.type||!l.value.uuid)return;const ue=await A(l.value.type,l.value.uuid,l.value.collection||"images");c.value=ue||[]}function we(){a.value.forEach(ue=>h.value.add(ue.uuid))}function Ce(){h.value.clear()}function ne(ue){h.value.has(ue)?h.value.delete(ue):h.value.add(ue)}function M(ue){return h.value.has(ue)}function z(){return Array.from(m.value.values()).some(ue=>ue.status==="uploading")}function me(ue){return m.value.get(ue)||p.value.get(ue)}function ae(){return[...Array.from(m.value.values()),...Array.from(p.value.values())]}async function Y(){const ue=Array.from(h.value);let se=0;for(const be of ue)try{await k(be),se++}catch{}return Ce(),se}function Te(ue,se){var be;return se&&((be=ue.conversion_urls)!=null&&be[se])?ue.conversion_urls[se]||"":ue.original_url||ue.url||""}return{items:a,collections:n,loading:t,error:o,currentPage:i,totalPages:r,itemsPerPage:s,isAdmin:C,modelContext:l,modelMedia:c,isLoadingModelMedia:d,modelMediaError:u,selectedItems:h,uploadProgress:m,uploadQueue:p,cachedResponses:y,fetchMedia:S,uploadFile:O,deleteMedia:k,updateMedia:T,clearCache:N,fetchCollections:F,fetchModelMedia:A,attachMedia:R,detachMedia:j,reorderMedia:K,saveEditedImage:I,setModelContext:Z,clearModelContext:W,refreshModelMedia:oe,selectAllItems:we,clearSelection:Ce,toggleSelection:ne,isSelected:M,deleteSelectedItems:Y,getHttpClient:w,getApiUrl:f,hasActiveUploads:z,getUploadProgress:me,getAllUploadProgress:ae,getMediaUrl:Te}}),Js=()=>((Et.apiScope!=="admin"||Et.isAdmin!==!0)&&In({...Et,apiScope:"admin",isAdmin:!0}),kt());function Fd(a,n){try{let t=rt.getFilter(a);if(t||(rt.registerCorePixiFilters(),t=rt.getFilter(a)),!t){try{const r=rt.getAllFilters()}catch{}return null}const o={...t.defaultParams,...n};return t.createFilter(o)}catch{return null}}const Rd=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 E;if(!r){o("error",new Error("Editor not initialized"));return}const u=r.exportImage("png",.92);if(!u){o("error",new Error("Failed to export image — the image could not be processed"));return}const m=r.getSerializableState(),p=r._renderer,h=((E=p.getExportDimensions)==null?void 0:E.call(p))??{width:0,height:0},v={width:Math.round(h.width),height:Math.round(h.height)};o("save",{imageData:u,dimensions:v,state:m})}function c(){o("cancel")}function d(){if(!i.value||r)return;window.PIXI=Je,rt.initializeFilterRegistry();const u={theme:t.theme};t.preset&&(u.preset=t.preset),t.preset?t.cropShape==="circle"&&(u.cropShape="circle",u.initialAspectRatio="1:1",u.initialMode="crop"):(u.cropShape=t.cropShape==="circle"?"circle":"free",u.initialAspectRatio=t.cropShape==="circle"?"1:1":"free",u.initialMode=t.cropShape==="circle"?"crop":"adjust"),r=new rt.VanillaImageEditor(i.value,u),r.setFilterRegistry({getAllFilters:rt.getAllFilters,getFilter:rt.getFilter,getFiltersByCategory:rt.getFiltersByCategory}),r.save=function(){l()},r.on("cancel",c),t.initialImage&&r.loadImage(t.initialImage,{state:t.initialState??null,sessionKey:t.sessionKey})}return e.onMounted(()=>{i.value&&(i.value.clientWidth>0?d():(s=new ResizeObserver(u=>{const m=u[0];m&&m.contentRect.width>0&&!r&&(d(),s==null||s.disconnect(),s=null)}),s.observe(i.value)))}),e.watch(()=>t.initialImage,u=>{r&&u&&r.loadImage(u,{state:t.initialState??null,sessionKey:t.sessionKey})}),e.watch(()=>t.sessionKey,()=>{r&&t.initialImage&&r.loadImage(t.initialImage,{state:t.initialState??null,sessionKey:t.sessionKey})}),e.onUnmounted(()=>{s==null||s.disconnect(),s=null,r&&(r.destroy(),r=null)}),(u,m)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"containerRef",ref:i,class:"vanilla-editor-wrapper","data-testid":"vanilla-image-editor"},null,512))}}),Me=(a,n)=>{const t=a.__vccOpts||a;for(const[o,i]of n)t[o]=i;return t},Ys=Me(Rd,[["__scopeId","data-v-d6416384"]]),$d={class:"editor-modal-panel"},Dd={class:"editor-fill"},Ud=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},onSave:{},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=async y=>{try{s.value=!0,t.onSave&&await t.onSave(y),o("save",y)}catch(E){c(E)}finally{s.value=!1}},m=()=>{o("cancel"),h()},p=()=>{s.value||h()},h=()=>{r.value=!1,o("update:modelValue",!1),l.value&&l.value instanceof HTMLElement&&(l.value.focus(),l.value=null)},v=y=>{if(y.key==="Escape"&&r.value&&!s.value){h();return}if(y.key==="Tab"&&r.value&&i.value){const E=i.value.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])');if(E.length===0)return;const _=E[0],C=E[E.length-1];y.shiftKey&&document.activeElement===_?(y.preventDefault(),C.focus()):!y.shiftKey&&document.activeElement===C&&(y.preventDefault(),_.focus())}};return e.onMounted(()=>{document.addEventListener("keydown",v)}),e.onBeforeUnmount(()=>{document.removeEventListener("keydown",v)}),(y,E)=>(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(p,["escape"])},[e.createElementVNode("div",{class:"editor-modal-backdrop",onClick:p}),e.createElementVNode("div",$d,[e.createElementVNode("div",Dd,[e.createVNode(Ys,{"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:m,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)]))}}),Ks=Me(Ud,[["__scopeId","data-v-9ca8dea8"]]),Od={class:"media-workspace"},Ad={class:"media-workspace-toolbar"},Ld={class:"media-workspace-label"},zd=["value"],Pd={class:"media-workspace-grid"},jd=["onClick"],Wd=e.defineComponent({__name:"MediaWorkspace",props:{apiScope:{},subScopes:{},initialScopeId:{}},emits:["scope-change","update:media","upload","preview"],setup(a,{emit:n}){var m;const t=a,o=n,i=kt(),r=e.ref(t.initialScopeId??((m=t.subScopes[0])==null?void 0:m.id)??""),s=e.computed(()=>t.subScopes),l=e.computed(()=>s.value.find(p=>p.id===r.value));let c=null;function d(){c&&(c(),c=null),t.apiScope&&(c=Gs({apiScope:t.apiScope,isAdmin:t.apiScope==="admin"}))}async function u(){var h;const p={};(h=l.value)!=null&&h.collection&&(p.collection=l.value.collection),await i.fetchMedia(1,p),o("update:media",[...i.items])}return e.watch(()=>t.initialScopeId,p=>{p&&p!==r.value&&(r.value=p)}),e.watch(()=>t.subScopes,p=>{if(p.length===0){r.value="";return}p.some(h=>h.id===r.value)||(r.value=p[0].id)},{deep:!0}),e.watch(()=>t.apiScope,()=>{d(),u()}),e.watch(r,p=>{p&&(o("scope-change",p),u())}),e.onMounted(()=>{d(),u()}),e.onUnmounted(()=>{c&&(c(),c=null)}),(p,h)=>(e.openBlock(),e.createElementBlock("div",Od,[e.createElementVNode("div",Ad,[e.createElementVNode("label",Ld,[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]=v=>r.value=v),"data-testid":"scope-select",class:"media-workspace-select"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,v=>(e.openBlock(),e.createElementBlock("option",{key:v.id,value:v.id},e.toDisplayString(v.label),9,zd))),128))],512),[[e.vModelSelect,r.value]])]),e.createElementVNode("button",{type:"button",class:"media-workspace-upload","data-testid":"upload-button",onClick:h[1]||(h[1]=v=>o("upload"))}," Upload ")]),e.createElementVNode("div",Pd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(i).items,v=>(e.openBlock(),e.createElementBlock("button",{key:v.uuid,type:"button",class:"media-workspace-item","data-testid":"media-item",onClick:y=>o("preview",v)},e.toDisplayString(v.file_name),9,jd))),128))])]))}}),Zd=Me(Wd,[["__scopeId","data-v-895f26fe"]]),Xd={class:"managed-media-gallery"},Hd={class:"gallery-grid"},Gd=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",Xd,[e.createElementVNode("div",Hd,[e.renderSlot(n.$slots,"default",{},void 0,!0)])]))}}),Jd=Me(Gd,[["__scopeId","data-v-a60fdcd7"]]),Yd="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>",ji="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>",Kd="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>",Wi="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>",qd="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>",Qd="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>",eo="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>",eu="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>",qs="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>",Qs="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>",Gr="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>",tu="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>",nu="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>",Jr="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>",Fn="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>",Yr="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>",ou="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>",an="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>",au="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>",Gn="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>",iu="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>",ru="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>",Kr="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>",el="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>",po="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>",su="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>",lu="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>",cu="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>",to="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>",qr="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>",ti="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>",du="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>",uu="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>",ni="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>",mu="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>",pu="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>",fu="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>",hu="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>",tl="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>",nl="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>",vu="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>",gu="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>",yu="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>",wu="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>",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 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>",bu="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>",ku="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>",al="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>",xu="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>",Eu="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>",Un="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>",Vu="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>",Su="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>",Qr="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>",Zi="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>",Cu="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>",oi="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>",on="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>",Jn="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>",es="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>",Nu="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>",il="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>",_u="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>",rl="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>",Tu="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>",Mu="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>",Bu="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>",Iu="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>",Fu="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>",Ru="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>",$u="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>",Do="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 ts=()=>{};function Du(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 Uu(a,n={}){let t,o,i=ts;const r=c=>{clearTimeout(c),i(),i=ts};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((m,p)=>{i=n.rejectOnCancel?p:m,s=c,u&&!o&&(o=setTimeout(()=>{t&&r(t),o=null,m(s())},u)),t=setTimeout(()=>{o&&r(o),o=null,m(c())},d)})}}function Ou(a,n=200,t={}){return Du(Uu(n,t),a)}const Yn=new Map;function Au(a){const n=e.getCurrentScope();function t(l){var c;const d=Yn.get(a)||new Set;d.add(l),Yn.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=Yn.get(a);c&&(c.delete(l),c.size||r())}function r(){Yn.delete(a)}function s(l,c){var d;(d=Yn.get(a))==null||d.forEach(u=>u(l,c))}return{on:t,once:o,off:i,emit:s,reset:r}}function Lu(){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 zu(a){const n=e.ref(new Set),t=e.ref(null),o=e.ref(-1),i=Au("media-selection"),r=Lu(),s=e.computed(()=>a.value.filter(x=>n.value.has(x.uuid))),l=e.computed(()=>n.value.size);e.watch(n,x=>{i.emit({type:"selection:changed",count:x.size,selectedIds:Array.from(x)})},{deep:!0});const c=e.computed(()=>a.value.length>0&&a.value.every(x=>n.value.has(x.uuid))),d=e.computed(()=>a.value.some(x=>n.value.has(x.uuid)));function u(x){return n.value.has(x)}function m(x){n.value.has(x)?(n.value.delete(x),t.value===x&&(t.value=null,o.value=-1)):(n.value.add(x),t.value=x,o.value=a.value.findIndex($=>$.uuid===x),n.value.size===1&&r.selection())}function p(x){n.value.add(x),t.value=x,o.value=a.value.findIndex($=>$.uuid===x)}function h(x){n.value.delete(x),t.value===x&&(t.value=null,o.value=-1)}function v(){a.value.forEach(x=>n.value.add(x.uuid))}function y(){n.value.clear(),t.value=null,o.value=-1}function E(){c.value?y():v()}function _(x,$){const N=a.value.findIndex(g=>g.uuid===x);if(N!==-1)if($!=null&&$.shiftKey&&o.value!==-1){const g=Math.min(o.value,N),S=Math.max(o.value,N);for(let O=g;O<=S;O++)n.value.add(a.value[O].uuid)}else m(x)}function C(){if(a.value.length===0)return;let x=o.value+1;x>=a.value.length&&(x=0),y(),p(a.value[x].uuid)}function w(){if(a.value.length===0)return;let x=o.value-1;x<0&&(x=a.value.length-1),y(),p(a.value[x].uuid)}function f(x){switch(x.key){case"ArrowDown":x.preventDefault(),C();break;case"ArrowUp":x.preventDefault(),w();break;case"a":(x.ctrlKey||x.metaKey)&&(x.preventDefault(),v());break;case"Escape":x.preventDefault(),y();break;case" ":t.value&&(x.preventDefault(),m(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:m,select:p,deselect:h,selectAll:v,clear:y,toggleAll:E,rangeSelect:_,selectNext:C,selectPrevious:w,handleKeydown:f,selectionBus:i}}const Pu={class:"flex items-center justify-between w-full px-4"},ju={class:"p-4"},Wu={key:0,class:"mb-4 p-4 bg-gray-50 dark:bg-gray-800 rounded-lg"},Zu={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},Xu=["value"],Hu={class:"flex gap-2 mt-4"},Gu={class:"flex justify-end mb-4"},Ju={key:1,class:"flex justify-center items-center h-64"},Yu={key:2,class:"flex flex-col items-center justify-center h-64 text-center"},Ku={class:"text-sm text-theme-secondary"},qu={key:0},Qu={class:"mb-4"},em={class:"mb-4"},tm={class:"flex gap-2"},nm={class:"flex items-center justify-between px-4 py-2"},om={class:"text-sm text-theme-secondary"},am={key:0},im={key:0},rm={key:1},sm={class:"flex gap-2"},lm=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)),m=e.ref(!1),p=e.ref({}),h=e.ref(["images","documents","videos"]),v=e.ref(1),y=e.ref(!0),E=e.ref(!1),_=Js(),C=zu(c);function w(M){var se;const z=M.conversion_urls||{},me=M.proxy_url||M.original_url||M.url||"",ae=z.thumb||z.preview||M.preview_url||M.thumbnail_url||me,Y=M.custom_properties||{},Te=Y.width,ue=Y.height;return{...M,uuid:M.uuid,name:M.name||M.file_name,file_name:M.file_name,filename:M.file_name,mime_type:M.mime_type,size:M.size,collection_name:M.collection_name||"images",disk:M.disk,original_url:me,url:me,thumbnail_url:ae,conversions:M.conversions||{},conversion_urls:z,generated_conversions:M.generated_conversions||{},custom_properties:Y,caption:M.caption||null,alt_text:M.alt_text||null,created_at:M.created_at,updated_at:M.updated_at,is_image:((se=M.mime_type)==null?void 0:se.startsWith("image/"))||!1,...typeof Te=="number"?{width:Te}:{},...typeof ue=="number"?{height:ue}:{},...M.formatted_size!==void 0?{formatted_size:M.formatted_size}:{}}}e.watch(()=>t.selectedItems,M=>{u.value=new Set(M),C.clear(),M.forEach(z=>C.select(z))});const f=e.computed(()=>{var z;let M=c.value;return(z=p.value.types)!=null&&z.length&&(M=M.filter(me=>{var Y,Te;const ae=(Y=me.mime_type)==null?void 0:Y.split("/")[0];return(Te=p.value.types)==null?void 0:Te.includes(ae)})),(p.value.sizeMin!==void 0||p.value.sizeMax!==void 0)&&(M=M.filter(me=>{const ae=me.size/1048576;return!(p.value.sizeMin!==void 0&&ae<p.value.sizeMin||p.value.sizeMax!==void 0&&ae>p.value.sizeMax)})),M}),x=e.computed(()=>{var z;let M=0;return p.value.search&&M++,p.value.collection&&M++,(p.value.dateFrom||p.value.dateTo)&&M++,(z=p.value.types)!=null&&z.length&&(M+=p.value.types.length),(p.value.sizeMin!==void 0||p.value.sizeMax!==void 0)&&M++,M}),$=e.computed(()=>{const M=C.selectedCount.value;return M===0?"Select Media":`Select ${t.selectionMode==="multiple"?`${M} ${M===1?"Item":"Items"}`:"Item"}`}),N=e.computed(()=>{const M=C.selectedCount.value;return!!(M===0||t.selectionMode==="single"&&M>1||t.maxSelection&&M>t.maxSelection)}),g=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 S(M=!0){M?(l.value=!0,c.value=[],v.value=1,y.value=!0):E.value=!0;try{const z={collection:p.value.collection||t.collection,per_page:24};switch((s.value||p.value.search)&&(z.search=s.value||p.value.search||""),p.value.dateFrom&&(z.from_date=p.value.dateFrom),p.value.dateTo&&(z.to_date=p.value.dateTo),i.value){case"recent":await _.fetchMedia(v.value,z),M?c.value=_.items.map(me=>w(me)):c.value=[...c.value,..._.items.map(me=>w(me))],y.value=_.currentPage<_.totalPages;break;case"model":if(t.modelType&&t.modelId){const me=await _.fetchModelMedia(t.modelType,t.modelId,z.collection,z.search);c.value=me?me.map(ae=>w(ae)):[],y.value=!1}break;case"library":await _.fetchMedia(v.value,z),M?c.value=_.items.map(me=>w(me)):c.value=[...c.value,..._.items.map(me=>w(me))],y.value=_.currentPage<_.totalPages;break}}catch{}finally{l.value=!1,E.value=!1}}async function O(M){if(!y.value||E.value){M!=null&&M.target&&M.target.complete();return}v.value++,await S(!1),M!=null&&M.target&&(M.target.complete(),y.value||(M.target.disabled=!0))}function k(M){return M==="recent"||M==="model"||M==="library"}function T(M){i.value=M,S()}function F(M){typeof M=="string"&&k(M)&&T(M)}async function A(M){t.selectionMode==="single"?(C.clear(),C.select(M.uuid)):(C.toggle(M.uuid),t.maxSelection&&C.selectedCount.value>t.maxSelection&&(C.deselect(M.uuid),await(await B.toastController.create({message:`Maximum ${t.maxSelection} items can be selected`,duration:2e3,color:"warning"})).present()))}function R(){o("confirm",C.selectedItems.value)}function j(){o("close")}function K(M){}const I=e.ref(null),D=e.ref(!1);function Z(M){I.value=M,D.value=!0}function W(M){const z=c.value.findIndex(ae=>ae.uuid===M.uuid);z!==-1&&(c.value[z]=M);const me={};M.alt_text!==void 0&&(me.alt_text=M.alt_text),M.caption!==void 0&&(me.caption=M.caption),M.custom_properties!==void 0&&(me.custom_properties=M.custom_properties),_.updateMedia(M.uuid,me)}function oe(){S()}function we(){p.value={},s.value="",S()}const Ce=Ou(()=>{S(!0)},300);e.watch(s,()=>{t.isOpen&&Ce()});async function ne(M){try{await(await B.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 _.deleteMedia(M),await S()}}]})).present()}catch{}}return e.watch(()=>t.isOpen,M=>{M&&S()}),e.onMounted(()=>{t.selectedItems.length>0&&t.selectedItems.forEach(M=>C.select(M))}),(M,z)=>{const me=e.resolveComponent("AdminMediaGrid"),ae=e.resolveComponent("AdminMediaListItem");return e.openBlock(),e.createBlock(e.unref(B.IonModal),{"is-open":M.isOpen,onDidDismiss:j,"backdrop-dismiss":!1,class:"media-browser-modal"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonToolbar),null,{end:e.withCtx(()=>[e.createVNode(e.unref(B.IonButtons),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButton),{onClick:j},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{name:"close-outline"})]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(B.IonTitle),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(g.value),1)]),_:1})]),_:1}),e.createVNode(e.unref(B.IonToolbar),null,{default:e.withCtx(()=>[e.createElementVNode("div",Pu,[e.createVNode(e.unref(B.IonSegment),{value:i.value,onIonChange:z[0]||(z[0]=Y=>F(Y.detail.value)),class:"max-w-xs"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonSegmentButton),{value:"recent"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[15]||(z[15]=[e.createTextVNode("Recent",-1)])]),_:1})]),_:1}),t.modelType&&t.modelId?(e.openBlock(),e.createBlock(e.unref(B.IonSegmentButton),{key:0,value:"model"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[16]||(z[16]=[e.createTextVNode("Model",-1)])]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(B.IonSegmentButton),{value:"library"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[17]||(z[17]=[e.createTextVNode("Library",-1)])]),_:1})]),_:1})]),_:1},8,["value"]),e.createVNode(e.unref(B.IonButton),{fill:"clear",size:"small",onClick:z[1]||(z[1]=Y=>m.value=!m.value),class:"relative"},{"icon-only":e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{name:"filter-outline"})]),default:e.withCtx(()=>[x.value>0?(e.openBlock(),e.createBlock(e.unref(B.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(x.value),1)]),_:1})):e.createCommentVNode("",!0)]),_:1})])]),_:1})]),_:1}),e.createVNode(e.unref(B.IonContent),null,{default:e.withCtx(()=>[e.createElementVNode("div",ju,[m.value?(e.openBlock(),e.createElementBlock("div",Wu,[e.createElementVNode("div",Zu,[e.createElementVNode("div",null,[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[18]||(z[18]=[e.createTextVNode("Collection",-1)])]),_:1}),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":z[2]||(z[2]=Y=>p.value.collection=Y),class:"w-full p-2 border rounded"},[z[19]||(z[19]=e.createElementVNode("option",{value:""},"All Collections",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,Y=>(e.openBlock(),e.createElementBlock("option",{key:Y,value:Y},e.toDisplayString(Y),9,Xu))),128))],512),[[e.vModelSelect,p.value.collection]])]),e.createElementVNode("div",null,[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[20]||(z[20]=[e.createTextVNode("From Date",-1)])]),_:1}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":z[3]||(z[3]=Y=>p.value.dateFrom=Y),type:"date",class:"w-full p-2 border rounded"},null,512),[[e.vModelText,p.value.dateFrom]])]),e.createElementVNode("div",null,[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[21]||(z[21]=[e.createTextVNode("To Date",-1)])]),_:1}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":z[4]||(z[4]=Y=>p.value.dateTo=Y),type:"date",class:"w-full p-2 border rounded"},null,512),[[e.vModelText,p.value.dateTo]])])]),e.createElementVNode("div",Hu,[e.createVNode(e.unref(B.IonButton),{size:"small",onClick:oe},{default:e.withCtx(()=>[...z[22]||(z[22]=[e.createTextVNode("Apply",-1)])]),_:1}),e.createVNode(e.unref(B.IonButton),{size:"small",fill:"clear",onClick:we},{default:e.withCtx(()=>[...z[23]||(z[23]=[e.createTextVNode("Clear",-1)])]),_:1})])])):e.createCommentVNode("",!0),e.createVNode(e.unref(B.IonSearchbar),{modelValue:s.value,"onUpdate:modelValue":z[5]||(z[5]=Y=>s.value=Y),placeholder:"Search media...",debounce:300,class:"mb-4"},null,8,["modelValue"]),e.createElementVNode("div",Gu,[e.createVNode(e.unref(B.IonButtons),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButton),{fill:r.value==="grid"?"solid":"clear",size:"small",onClick:z[6]||(z[6]=Y=>r.value="grid")},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{name:"grid-outline"})]),_:1},8,["fill"]),e.createVNode(e.unref(B.IonButton),{fill:r.value==="list"?"solid":"clear",size:"small",onClick:z[7]||(z[7]=Y=>r.value="list")},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{name:"list-outline"})]),_:1},8,["fill"])]),_:1})]),l.value?(e.openBlock(),e.createElementBlock("div",Ju,[e.createVNode(e.unref(B.IonSpinner),{name:"crescent"})])):f.value.length===0?(e.openBlock(),e.createElementBlock("div",Yu,[e.createVNode(e.unref(B.IonIcon),{name:"images-outline",class:"text-6xl text-theme-secondary mb-4"}),z[24]||(z[24]=e.createElementVNode("h3",{class:"text-lg font-medium text-theme mb-2"}," No Media Found ",-1)),e.createElementVNode("p",Ku,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":f.value,"selected-items":e.unref(C).selectedItems.value,"is-loading":!1,"selection-mode":!0,columns:{mobile:2,sm:3,md:4,lg:5,xl:6},onToggleSelect:A,onPreview:K,onEdit:Z,onDelete:ne},null,8,["media-items","selected-items"])):(e.openBlock(),e.createBlock(e.unref(B.IonList),{key:4,lines:"none",class:"rounded-lg overflow-hidden"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,(Y,Te)=>(e.openBlock(),e.createBlock(ae,{key:Y.uuid,media:Y,selected:e.unref(C).isSelected(Y.uuid),"selection-mode":!0,index:Te,onToggleSelect:A,onPreview:K,onEdit:Z,onDelete:ne},null,8,["media","selected","index"]))),128))]),_:1})),!l.value&&f.value.length>0&&i.value!=="model"?(e.openBlock(),e.createBlock(e.unref(B.IonInfiniteScroll),{key:5,threshold:"100px",onIonInfinite:z[8]||(z[8]=Y=>O(Y))},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonInfiniteScrollContent),{"loading-spinner":"crescent","loading-text":"Loading more media..."})]),_:1})):e.createCommentVNode("",!0)])]),_:1}),e.createVNode(e.unref(B.IonModal),{"is-open":D.value,onDidDismiss:z[14]||(z[14]=Y=>D.value=!1)},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonToolbar),null,{end:e.withCtx(()=>[e.createVNode(e.unref(B.IonButtons),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButton),{onClick:z[9]||(z[9]=Y=>D.value=!1)},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{name:"close-outline"})]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(B.IonTitle),null,{default:e.withCtx(()=>[...z[25]||(z[25]=[e.createTextVNode("Edit Media Info",-1)])]),_:1})]),_:1})]),_:1}),e.createVNode(e.unref(B.IonContent),{class:"p-4"},{default:e.withCtx(()=>[I.value?(e.openBlock(),e.createElementBlock("div",qu,[e.createElementVNode("div",Qu,[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[26]||(z[26]=[e.createTextVNode("Caption",-1)])]),_:1}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":z[10]||(z[10]=Y=>I.value.caption=Y),type:"text",class:"w-full p-2 border rounded mt-1",placeholder:"Enter caption..."},null,512),[[e.vModelText,I.value.caption]])]),e.createElementVNode("div",em,[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...z[27]||(z[27]=[e.createTextVNode("Alt Text",-1)])]),_:1}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":z[11]||(z[11]=Y=>I.value.alt_text=Y),type:"text",class:"w-full p-2 border rounded mt-1",placeholder:"Enter alt text..."},null,512),[[e.vModelText,I.value.alt_text]])]),e.createElementVNode("div",tm,[e.createVNode(e.unref(B.IonButton),{onClick:z[12]||(z[12]=Y=>W(I.value))},{default:e.withCtx(()=>[...z[28]||(z[28]=[e.createTextVNode("Save",-1)])]),_:1}),e.createVNode(e.unref(B.IonButton),{fill:"clear",onClick:z[13]||(z[13]=Y=>D.value=!1)},{default:e.withCtx(()=>[...z[29]||(z[29]=[e.createTextVNode("Cancel",-1)])]),_:1})])])):e.createCommentVNode("",!0)]),_:1})]),_:1},8,["is-open"]),e.createVNode(e.unref(B.IonFooter),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonToolbar),null,{default:e.withCtx(()=>[e.createElementVNode("div",nm,[e.createElementVNode("div",om,[e.unref(C).selectedCount.value>0?(e.openBlock(),e.createElementBlock("span",am,[e.createTextVNode(e.toDisplayString(e.unref(C).selectedCount.value)+" selected ",1),t.maxSelection?(e.openBlock(),e.createElementBlock("span",im," / "+e.toDisplayString(t.maxSelection)+" max ",1)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("span",rm," Select "+e.toDisplayString(t.selectionMode==="multiple"?"items":"an item"),1))]),e.createElementVNode("div",sm,[e.createVNode(e.unref(B.IonButton),{fill:"clear",onClick:j},{default:e.withCtx(()=>[...z[30]||(z[30]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),e.createVNode(e.unref(B.IonButton),{disabled:N.value,onClick:R},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString($.value),1)]),_:1},8,["disabled"])])])]),_:1})]),_:1})]),_:1},8,["is-open"])}}}),cm=Me(lm,[["__scopeId","data-v-9a8c0954"]]),dm={key:1,class:"flex flex-col items-center justify-center py-16"},um=["draggable","onDragstart","onDragover","onDrop"],mm={key:0,class:"absolute top-2 left-2 z-20"},pm=["checked","onChange"],fm={key:2,class:"absolute top-2 right-2 z-20 opacity-0 group-hover:opacity-100 transition-opacity cursor-move"},hm=["data-media-id"],vm={key:0,class:"w-full h-full flex items-center justify-center"},gm=["src","alt","onError","onLoad"],ym={key:2,class:"w-full h-full flex items-center justify-center bg-gray-100 dark:bg-gray-700"},wm={class:"text-center"},bm={class:"text-4xl text-gray-400 mb-2"},km={class:"text-sm font-medium text-gray-500"},xm={class:"absolute inset-0 bg-black/70 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center gap-2"},Em=["onClick"],Vm=["onClick"],Sm=["onClick"],Cm={class:"p-3"},Nm={class:"text-sm font-medium truncate mb-1"},_m={class:"text-xs text-gray-600 dark:text-gray-400"},Tm={key:0},Mm={key:0,class:"text-xs text-gray-500 dark:text-gray-500 mt-1 truncate"},Bm=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(g=>g.uuid===N.uuid),d=e.computed(()=>{const N=t.columns,g=["grid","gap-4"];switch(N.mobile){case 1:g.push("grid-cols-1");break;case 2:g.push("grid-cols-2");break;case 3:g.push("grid-cols-3");break;case 4:g.push("grid-cols-4");break;default:g.push("grid-cols-2");break}switch(N.sm){case 1:g.push("sm:grid-cols-1");break;case 2:g.push("sm:grid-cols-2");break;case 3:g.push("sm:grid-cols-3");break;case 4:g.push("sm:grid-cols-4");break;case 5:g.push("sm:grid-cols-5");break;default:g.push("sm:grid-cols-3");break}switch(N.md){case 2:g.push("md:grid-cols-2");break;case 3:g.push("md:grid-cols-3");break;case 4:g.push("md:grid-cols-4");break;case 5:g.push("md:grid-cols-5");break;case 6:g.push("md:grid-cols-6");break;default:g.push("md:grid-cols-4");break}switch(N.lg){case 3:g.push("lg:grid-cols-3");break;case 4:g.push("lg:grid-cols-4");break;case 5:g.push("lg:grid-cols-5");break;case 6:g.push("lg:grid-cols-6");break;case 7:g.push("lg:grid-cols-7");break;default:g.push("lg:grid-cols-5");break}switch(N.xl){case 4:g.push("xl:grid-cols-4");break;case 5:g.push("xl:grid-cols-5");break;case 6:g.push("xl:grid-cols-6");break;case 7:g.push("xl:grid-cols-7");break;case 8:g.push("xl:grid-cols-8");break;default:g.push("xl:grid-cols-6");break}return g.join(" ")});function u(N,g,S){t.reorderable&&(i.value=g,N.dataTransfer&&(N.dataTransfer.effectAllowed="move",N.dataTransfer.setData("text/html","")))}function m(N,g){t.reorderable&&(N.preventDefault(),r.value=g)}function p(){r.value=null}function h(N,g){if(!t.reorderable||!i.value)return;N.preventDefault();const S=[...t.mediaItems],O=S.findIndex(k=>{var T;return k.uuid===((T=i.value)==null?void 0:T.uuid)});if(O!==-1&&O!==g&&i.value){const[k]=S.splice(O,1);S.splice(g,0,k),o("reorder",S)}i.value=null,r.value=null}function v(N){return N<1024?N+" B":N<1024*1024?(N/1024).toFixed(1)+" KB":(N/(1024*1024)).toFixed(1)+" MB"}function y(N){var S;return N.thumbnail_url||((S=N.conversion_urls)==null?void 0:S.thumb)||N.original_url||N.url||""}function E(N){var O,k,T;const g=((O=N.mime_type)==null?void 0:O.startsWith("image/"))||!1,S=!!(N.thumbnail_url||(k=N.conversion_urls)!=null&&k.thumb||(T=N.conversion_urls)!=null&&T.preview||N.original_url||N.url);return g&&S}function _(N){var g;return((g=N.split(".").pop())==null?void 0:g.toUpperCase())||""}function C(N){var S;const g=((S=N.mime_type)==null?void 0:S.toLowerCase())||"";return g.startsWith("image/")?"image":g.startsWith("video/")?"videocam":g.startsWith("audio/")?"musical-notes":g.includes("pdf")?"document-text":g.includes("zip")||g.includes("rar")?"archive":g.includes("sheet")||g.includes("excel")?"grid":g.includes("document")||g.includes("word")?"document-text":"document"}e.onMounted(()=>{typeof window<"u"&&"IntersectionObserver"in window&&(l.value=new IntersectionObserver(N=>{N.forEach(g=>{var S;if(g.isIntersecting){const O=g.target.getAttribute("data-media-id");O&&(s.value.add(O),(S=l.value)==null||S.unobserve(g.target))}})},{rootMargin:"50px"}))}),e.onUnmounted(()=>{l.value&&l.value.disconnect()});function w(N){return!0}function f(){l.value&&e.nextTick(()=>{document.querySelectorAll("[data-media-id]").forEach(g=>{var O;const S=g.getAttribute("data-media-id");S&&!s.value.has(S)&&((O=l.value)==null||O.observe(g))})})}e.watch(()=>t.mediaItems,()=>{s.value.clear(),f()},{immediate:!0,deep:!0});function x(N,g){const S=N.target;delete S.dataset.fallbackIndex}function $(N,g){const S=N.target,O=S.closest("[data-media-id]"),k=[g.original_url,g.url,g.thumbnail_url,"preview_url"in g?g.preview_url:void 0].filter(T=>T&&T.trim()!==""&&T!==S.src);if(k.length>0&&S.dataset.fallbackIndex){const T=parseInt(S.dataset.fallbackIndex);if(T<k.length){S.dataset.fallbackIndex=(T+1).toString(),S.src=k[T]||"";return}}else if(k.length>0){S.dataset.fallbackIndex="1",S.src=k[0]||"";return}if(S.style.display="none",O&&!O.querySelector(".media-fallback-icon")){const F=document.createElement("div");F.className="media-fallback-icon w-full h-full flex items-center justify-center bg-gray-100 dark:bg-gray-800",F.innerHTML=`
|
|
2
2
|
<div class="text-center">
|
|
3
3
|
<div class="text-4xl text-gray-400 mb-2">${C(g)}</div>
|
|
4
4
|
<p class="text-sm font-medium text-gray-500">${_(g.file_name)}</p>
|
|
@@ -338,5 +338,5 @@ ${i.text}
|
|
|
338
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[Ms]=this[Ms]={accessors:{}}).accessors,i=this.prototype;function r(s){const l=Kn(s);o[l]||(_y(i,s),o[l]=!0)}return G.isArray(n)?n.forEach(r):r(n),this}};gt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);G.reduceDescriptors(gt.prototype,({value:a},n)=>{let t=n[0].toUpperCase()+n.slice(1);return{get:()=>a,set(o){this[t]=o}}});G.freezeMethods(gt);function mi(a,n){const t=this||_o,o=n||t,i=gt.from(o.headers);let r=o.data;return G.forEach(a,function(l){r=l.call(t,r,i.normalize(),n?n.status:void 0)}),i.normalize(),r}function nc(a){return!!(a&&a.__CANCEL__)}function jn(a,n,t){Be.call(this,a??"canceled",Be.ERR_CANCELED,n,t),this.name="CanceledError"}G.inherits(jn,Be,{__CANCEL__:!0});function oc(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 Ty(a){const n=/^([-+\w]{1,25})(:?\/\/|:)/.exec(a);return n&&n[1]||""}function My(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 m=r,p=0;for(;m!==i;)p+=t[m++],m=m%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(p*1e3/h):void 0}}function By(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(),m=u-t;m>=o?s(d,u):(i=d,r||(r=setTimeout(()=>{r=null,s(i)},o-m)))},()=>i&&s(i)]}const pa=(a,n,t=3)=>{let o=0;const i=My(50,250);return By(r=>{const s=r.loaded,l=r.lengthComputable?r.total:void 0,c=s-o,d=i(c),u=s<=l;o=s;const m={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(m)},t)},Bs=(a,n)=>{const t=a!=null;return[o=>n[0]({lengthComputable:t,total:a,loaded:o}),n[1]]},Is=a=>(...n)=>G.asap(()=>a(...n)),Iy=dt.hasStandardBrowserEnv?((a,n)=>t=>(t=new URL(t,dt.origin),a.protocol===t.protocol&&a.host===t.host&&(n||a.port===t.port)))(new URL(dt.origin),dt.navigator&&/(msie|trident)/i.test(dt.navigator.userAgent)):()=>!0,Fy=dt.hasStandardBrowserEnv?{write(a,n,t,o,i,r){const s=[a+"="+encodeURIComponent(n)];G.isNumber(t)&&s.push("expires="+new Date(t).toGMTString()),G.isString(o)&&s.push("path="+o),G.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 Ry(a){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(a)}function $y(a,n){return n?a.replace(/\/?\/$/,"")+"/"+n.replace(/^\/+/,""):a}function ac(a,n,t){let o=!Ry(n);return a&&(o||t==!1)?$y(a,n):n}const Fs=a=>a instanceof gt?{...a}:a;function wn(a,n){n=n||{};const t={};function o(d,u,m,p){return G.isPlainObject(d)&&G.isPlainObject(u)?G.merge.call({caseless:p},d,u):G.isPlainObject(u)?G.merge({},u):G.isArray(u)?u.slice():u}function i(d,u,m,p){if(G.isUndefined(u)){if(!G.isUndefined(d))return o(void 0,d,m,p)}else return o(d,u,m,p)}function r(d,u){if(!G.isUndefined(u))return o(void 0,u)}function s(d,u){if(G.isUndefined(u)){if(!G.isUndefined(d))return o(void 0,d)}else return o(void 0,u)}function l(d,u,m){if(m in n)return o(d,u);if(m 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,m)=>i(Fs(d),Fs(u),m,!0)};return G.forEach(Object.keys({...a,...n}),function(u){const m=c[u]||i,p=m(a[u],n[u],u);G.isUndefined(p)&&m!==l||(t[u]=p)}),t}const ic=a=>{const n=wn({},a);let{data:t,withXSRFToken:o,xsrfHeaderName:i,xsrfCookieName:r,headers:s,auth:l}=n;n.headers=s=gt.from(s),n.url=Ql(ac(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(G.isFormData(t)){if(dt.hasStandardBrowserEnv||dt.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if((c=s.getContentType())!==!1){const[d,...u]=c?c.split(";").map(m=>m.trim()).filter(Boolean):[];s.setContentType([d||"multipart/form-data",...u].join("; "))}}if(dt.hasStandardBrowserEnv&&(o&&G.isFunction(o)&&(o=o(n)),o||o!==!1&&Iy(n.url))){const d=i&&r&&Fy.read(r);d&&s.set(i,d)}return n},Dy=typeof XMLHttpRequest<"u",Uy=Dy&&function(a){return new Promise(function(t,o){const i=ic(a);let r=i.data;const s=gt.from(i.headers).normalize();let{responseType:l,onUploadProgress:c,onDownloadProgress:d}=i,u,m,p,h,v;function y(){h&&h(),v&&v(),i.cancelToken&&i.cancelToken.unsubscribe(u),i.signal&&i.signal.removeEventListener("abort",u)}let E=new XMLHttpRequest;E.open(i.method.toUpperCase(),i.url,!0),E.timeout=i.timeout;function _(){if(!E)return;const w=gt.from("getAllResponseHeaders"in E&&E.getAllResponseHeaders()),x={data:!l||l==="text"||l==="json"?E.responseText:E.response,status:E.status,statusText:E.statusText,headers:w,config:a,request:E};oc(function(N){t(N),y()},function(N){o(N),y()},x),E=null}"onloadend"in E?E.onloadend=_:E.onreadystatechange=function(){!E||E.readyState!==4||E.status===0&&!(E.responseURL&&E.responseURL.indexOf("file:")===0)||setTimeout(_)},E.onabort=function(){E&&(o(new Be("Request aborted",Be.ECONNABORTED,a,E)),E=null)},E.onerror=function(){o(new Be("Network Error",Be.ERR_NETWORK,a,E)),E=null},E.ontimeout=function(){let f=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const x=i.transitional||ec;i.timeoutErrorMessage&&(f=i.timeoutErrorMessage),o(new Be(f,x.clarifyTimeoutError?Be.ETIMEDOUT:Be.ECONNABORTED,a,E)),E=null},r===void 0&&s.setContentType(null),"setRequestHeader"in E&&G.forEach(s.toJSON(),function(f,x){E.setRequestHeader(x,f)}),G.isUndefined(i.withCredentials)||(E.withCredentials=!!i.withCredentials),l&&l!=="json"&&(E.responseType=i.responseType),d&&([p,v]=pa(d,!0),E.addEventListener("progress",p)),c&&E.upload&&([m,h]=pa(c),E.upload.addEventListener("progress",m),E.upload.addEventListener("loadend",h)),(i.cancelToken||i.signal)&&(u=w=>{E&&(o(!w||w.type?new jn(null,a,E):w),E.abort(),E=null)},i.cancelToken&&i.cancelToken.subscribe(u),i.signal&&(i.signal.aborted?u():i.signal.addEventListener("abort",u)));const C=Ty(i.url);if(C&&dt.protocols.indexOf(C)===-1){o(new Be("Unsupported protocol "+C+":",Be.ERR_BAD_REQUEST,a));return}E.send(r||null)})},Oy=(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 jn(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=()=>G.asap(l),c}},Ay=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},Ly=async function*(a,n){for await(const t of zy(a))yield*Ay(t,n)},zy=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()}},Rs=(a,n,t,o)=>{const i=Ly(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 m=u.byteLength;if(t){let p=r+=m;t(p)}c.enqueue(new Uint8Array(u))}catch(d){throw l(d),d}},cancel(c){return l(c),i.return()}},{highWaterMark:2})},Ua=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",rc=Ua&&typeof ReadableStream=="function",Py=Ua&&(typeof TextEncoder=="function"?(a=>n=>a.encode(n))(new TextEncoder):async a=>new Uint8Array(await new Response(a).arrayBuffer())),sc=(a,...n)=>{try{return!!a(...n)}catch{return!1}},jy=rc&&sc(()=>{let a=!1;const n=new Request(dt.origin,{body:new ReadableStream,method:"POST",get duplex(){return a=!0,"half"}}).headers.has("Content-Type");return a&&!n}),$s=64*1024,Ui=rc&&sc(()=>G.isReadableStream(new Response("").body)),fa={stream:Ui&&(a=>a.body)};Ua&&(a=>{["text","arrayBuffer","blob","formData","stream"].forEach(n=>{!fa[n]&&(fa[n]=G.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 Wy=async a=>{if(a==null)return 0;if(G.isBlob(a))return a.size;if(G.isSpecCompliantForm(a))return(await new Request(dt.origin,{method:"POST",body:a}).arrayBuffer()).byteLength;if(G.isArrayBufferView(a)||G.isArrayBuffer(a))return a.byteLength;if(G.isURLSearchParams(a)&&(a=a+""),G.isString(a))return(await Py(a)).byteLength},Zy=async(a,n)=>{const t=G.toFiniteNumber(a.getContentLength());return t??Wy(n)},Xy=Ua&&(async a=>{let{url:n,method:t,data:o,signal:i,cancelToken:r,timeout:s,onDownloadProgress:l,onUploadProgress:c,responseType:d,headers:u,withCredentials:m="same-origin",fetchOptions:p}=ic(a);d=d?(d+"").toLowerCase():"text";let h=Oy([i,r&&r.toAbortSignal()],s),v;const y=h&&h.unsubscribe&&(()=>{h.unsubscribe()});let E;try{if(c&&jy&&t!=="get"&&t!=="head"&&(E=await Zy(u,o))!==0){let x=new Request(n,{method:"POST",body:o,duplex:"half"}),$;if(G.isFormData(o)&&($=x.headers.get("content-type"))&&u.setContentType($),x.body){const[N,g]=Bs(E,pa(Is(c)));o=Rs(x.body,$s,N,g)}}G.isString(m)||(m=m?"include":"omit");const _="credentials"in Request.prototype;v=new Request(n,{...p,signal:h,method:t.toUpperCase(),headers:u.normalize().toJSON(),body:o,duplex:"half",credentials:_?m:void 0});let C=await fetch(v,p);const w=Ui&&(d==="stream"||d==="response");if(Ui&&(l||w&&y)){const x={};["status","statusText","headers"].forEach(S=>{x[S]=C[S]});const $=G.toFiniteNumber(C.headers.get("content-length")),[N,g]=l&&Bs($,pa(Is(l),!0))||[];C=new Response(Rs(C.body,$s,N,()=>{g&&g(),y&&y()}),x)}d=d||"text";let f=await fa[G.findKey(fa,d)||"text"](C,a);return!w&&y&&y(),await new Promise((x,$)=>{oc(x,$,{data:f,headers:gt.from(C.headers),status:C.status,statusText:C.statusText,config:a,request:v})})}catch(_){throw y&&y(),_&&_.name==="TypeError"&&/Load failed|fetch/i.test(_.message)?Object.assign(new Be("Network Error",Be.ERR_NETWORK,a,v),{cause:_.cause||_}):Be.from(_,_&&_.code,a,v)}}),Oi={http:sy,xhr:Uy,fetch:Xy};G.forEach(Oi,(a,n)=>{if(a){try{Object.defineProperty(a,"name",{value:n})}catch{}Object.defineProperty(a,"adapterName",{value:n})}});const Ds=a=>`- ${a}`,Hy=a=>G.isFunction(a)||a===null||a===!1,lc={getAdapter:a=>{a=G.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,!Hy(t)&&(o=Oi[(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
339
|
`+r.map(Ds).join(`
|
|
340
340
|
`):" "+Ds(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:Oi};function pi(a){if(a.cancelToken&&a.cancelToken.throwIfRequested(),a.signal&&a.signal.aborted)throw new jn(null,a)}function Us(a){return pi(a),a.headers=gt.from(a.headers),a.data=mi.call(a,a.transformRequest),["post","put","patch"].indexOf(a.method)!==-1&&a.headers.setContentType("application/x-www-form-urlencoded",!1),lc.getAdapter(a.adapter||_o.adapter)(a).then(function(o){return pi(a),o.data=mi.call(a,a.transformResponse,o),o.headers=gt.from(o.headers),o},function(o){return nc(o)||(pi(a),o&&o.response&&(o.response.data=mi.call(a,a.transformResponse,o.response),o.response.headers=gt.from(o.response.headers))),Promise.reject(o)})}const cc="1.11.0",Oa={};["object","boolean","number","function","string","symbol"].forEach((a,n)=>{Oa[a]=function(o){return typeof o===a||"a"+(n<1?"n ":" ")+a}});const Os={};Oa.transitional=function(n,t,o){function i(r,s){return"[Axios v"+cc+"] 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&&!Os[s]&&(Os[s]=!0),n?n(r,s,l):!0}};Oa.spelling=function(n){return(t,o)=>!0};function Gy(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 ta={assertOptions:Gy,validators:Oa},Ot=ta.validators;let gn=class{constructor(n){this.defaults=n||{},this.interceptors={request:new Ts,response:new Ts}}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=wn(this.defaults,t);const{transitional:o,paramsSerializer:i,headers:r}=t;o!==void 0&&ta.assertOptions(o,{silentJSONParsing:Ot.transitional(Ot.boolean),forcedJSONParsing:Ot.transitional(Ot.boolean),clarifyTimeoutError:Ot.transitional(Ot.boolean)},!1),i!=null&&(G.isFunction(i)?t.paramsSerializer={serialize:i}:ta.assertOptions(i,{encode:Ot.function,serialize:Ot.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),ta.assertOptions(t,{baseUrl:Ot.spelling("baseURL"),withXsrfToken:Ot.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=r&&G.merge(r.common,r[t.method]);r&&G.forEach(["delete","get","head","post","put","patch","common"],v=>{delete r[v]}),t.headers=gt.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,m=0,p;if(!c){const v=[Us.bind(this),void 0];for(v.unshift(...l),v.push(...d),p=v.length,u=Promise.resolve(t);m<p;)u=u.then(v[m++],v[m++]);return u}p=l.length;let h=t;for(m=0;m<p;){const v=l[m++],y=l[m++];try{h=v(h)}catch(E){y.call(this,E);break}}try{u=Us.call(this,h)}catch(v){return Promise.reject(v)}for(m=0,p=d.length;m<p;)u=u.then(d[m++],d[m++]);return u}getUri(n){n=wn(this.defaults,n);const t=ac(n.baseURL,n.url,n.allowAbsoluteUrls);return Ql(t,n.params,n.paramsSerializer)}};G.forEach(["delete","get","head","options"],function(n){gn.prototype[n]=function(t,o){return this.request(wn(o||{},{method:n,url:t,data:(o||{}).data}))}});G.forEach(["post","put","patch"],function(n){function t(o){return function(r,s,l){return this.request(wn(l||{},{method:n,headers:o?{"Content-Type":"multipart/form-data"}:{},url:r,data:s}))}}gn.prototype[n]=t(),gn.prototype[n+"Form"]=t(!0)});let Jy=class dc{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 jn(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 dc(function(i){n=i}),cancel:n}}};function Yy(a){return function(t){return a.apply(null,t)}}function Ky(a){return G.isObject(a)&&a.isAxiosError===!0}const Ai={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(Ai).forEach(([a,n])=>{Ai[n]=a});function uc(a){const n=new gn(a),t=zl(gn.prototype.request,n);return G.extend(t,gn.prototype,n,{allOwnKeys:!0}),G.extend(t,n,null,{allOwnKeys:!0}),t.create=function(i){return uc(wn(a,i))},t}const He=uc(_o);He.Axios=gn;He.CanceledError=jn;He.CancelToken=Jy;He.isCancel=nc;He.VERSION=cc;He.toFormData=Da;He.AxiosError=Be;He.Cancel=He.CanceledError;He.all=function(n){return Promise.all(n)};He.spread=Yy;He.isAxiosError=Ky;He.mergeConfig=wn;He.AxiosHeaders=gt;He.formToJSON=a=>tc(G.isHTMLForm(a)?new FormData(a):a);He.getAdapter=lc.getAdapter;He.HttpStatusCode=Ai;He.default=He;const{Axios:y3,AxiosError:w3,CanceledError:b3,isCancel:k3,CancelToken:x3,VERSION:E3,all:V3,Cancel:S3,isAxiosError:C3,spread:N3,toFormData:_3,AxiosHeaders:T3,HttpStatusCode:M3,formToJSON:B3,getAdapter:I3,mergeConfig:F3}=He;class mr{constructor(n="/api/v1"){this.eventSource=null,this.progressCallbacks=new Map,this.api=He.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 mr;const qy={key:0,class:"mobile-layout"},Qy={class:"mobile-toolbar"},ew={class:"mobile-toolbar-left"},tw=["aria-label"],nw={class:"mobile-toolbar-right"},ow=["disabled"],aw=["disabled"],iw={class:"preview-section"},rw={key:0,class:"mobile-export-overlay"},sw={class:"mobile-export-progress"},lw={class:"mobile-export-bar"},cw={class:"mobile-timeline-zoom"},dw={key:1,class:"desktop-layout"},uw={class:"desktop-main-row"},mw={class:"preview-panel"},pw={class:"fit-toggle"},fw={class:"editor-content"},hw={class:"editor-tabs"},vw={class:"tab-header"},gw=["onClick"],yw={class:"tab-content-area"},ww={class:"filter-controls"},bw={class:"text-controls"},kw={class:"transition-controls"},xw={class:"audio-controls"},Ew={class:"adjustments-controls"},Vw={key:1,class:"no-filter-selected"},Sw={class:"export-controls"},Cw={key:0,"data-testid":"video-export-status-completed"},Nw={key:1,"data-testid":"video-export-status-message",class:"export-status-message"},_w={class:"desktop-timeline-row"},Tw={class:"timeline-zoom"},Mw=["value"],Bw={class:"zoom-readout"},Iw={key:0,class:"dev-editor-controls","data-testid":"video-editor-dev-controls"},Fw={class:"dev-editor-row"},Rw={class:"dev-editor-field"},$w={class:"dev-editor-field"},Dw=["disabled"],Uw=["disabled"],Ow=["disabled"],Aw={class:"dev-editor-row"},Lw={class:"dev-editor-field dev-editor-field--wide"},zw=["value"],Pw=["disabled"],jw=["disabled"],Ww=["disabled"],Zw=["disabled"],Xw=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 b=o.media.uuid??o.media.id;return typeof b=="string"&&b.trim()!==""?b.trim():void 0}),s=e.computed(()=>{const b=typeof o.mediaUuid=="string"?o.mediaUuid.trim():"";return b!==""?b: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 b=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},V=o.featureFlags;return V?{filters:typeof V.filters=="boolean"?V.filters:b.filters,adjustments:typeof V.adjustments=="boolean"?V.adjustments:b.adjustments,text:typeof V.text=="boolean"?V.text:b.text,transitions:typeof V.transitions=="boolean"?V.transitions:b.transitions,audio:typeof V.audio=="boolean"?V.audio:b.audio,export:typeof V.export=="boolean"?V.export:b.export}:b}),m=e.computed(()=>l.value?c.value:d.value),p=e.computed(()=>m.value==="filters"||E.value),h=e.computed(()=>m.value!=="filters"&&!E.value),v=e.ref(null),y=e.ref(null),E=e.ref(!1),_=e.computed(()=>l.value?v.value:y.value);function C(b){return b==="contain"||b==="cover"||b==="none"}function w(b){if(!(b!=null&&b.metadata))return null;const V=b.metadata.fit_mode;return C(V)?V:null}const f=e.shallowRef(null),x=e.ref(null),$=e.ref(w(o.initialRecipe)??"contain"),N=e.ref(null),g=e.ref(null),S=e.ref(null),O=e.ref(!1),k=new Map,T=e.ref([]),F=e.ref([]),A=e.ref([]),R=e.ref([]),j=e.ref(1),K=()=>{l.value=window.innerWidth<768},I=[{id:"filters",label:"Filters",icon:an},{id:"adjustments",label:"Adjust",icon:pu},{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:po}],D=[{id:"filters",label:"Filters"},{id:"adjustments",label:"Adjustments"},{id:"text",label:"Text"},{id:"transitions",label:"Transitions"},{id:"audio",label:"Audio"},{id:"export",label:"Export"}],Z=e.computed(()=>I.filter(b=>u.value[b.id])),W=e.computed(()=>D.filter(b=>u.value[b.id])),oe=e.computed(()=>{var b,V;return((b=W.value[0])==null?void 0:b.id)??((V=Z.value[0])==null?void 0:V.id)??"filters"});e.watch(u,b=>{b[c.value]||(c.value=oe.value),b[d.value]||(d.value=oe.value)},{immediate:!0,deep:!0}),e.watch(oe,b=>{u.value[c.value]||(c.value=b),u.value[d.value]||(d.value=b)},{immediate:!0}),e.watch(u,b=>{b.export||(c.value==="export"&&(c.value=oe.value),d.value==="export"&&(d.value=oe.value))},{immediate:!0,deep:!0});const we=e.computed(()=>typeof window>"u"?!1:window.__MEDIABLES_EDITOR_DEV__===!0),{currentFrame:Ce,playheadPosition:ne,timelineClips:M,totalDuration:z,hasChanges:me,isPlaying:ae,selectedClip:Y,zoomLevel:Te,playbackSpeed:ue,handleTrim:se,handleSplit:be,handleClipSelect:ie,splitAtPlayhead:le,deleteSelectedClip:ke,duplicateSelectedClip:Ve,setZoomLevel:et,moveClip:We,setFilters:fe,setTextOverlays:P,setAudioTracks:J,saveDraft:ee,clearHasChanges:te,resetChanges:pe,generateRecipe:ve,zoomIn:Fe,zoomOut:Oe,fitToWindow:H,togglePlayback:re,setPlaying:xe,seekTo:Ne,frameForward:ze,frameBackward:wt,skipToStart:ut,skipToEnd:St,setPlaybackSpeed:Ge,updateSourceDuration:Zt}=cg(s.value,o.initialRecipe,o.media),{videoCompatibleFilters:Pa,activeFilters:qe,selectedFilter:xr,previewFilter:To,previewFilterEffect:Er,applyFilter:Vr,updateFilterParams:Vc,removeFilter:Sc,clearAllFilters:Sr,setActiveFilters:Cc}=wg();function Wn(b){var X,q;const V=((X=Y.value)==null?void 0:X.id)??((q=M.value[0])==null?void 0:q.id);V&&(O.value=!0,typeof b=="object"&&b.id?Vr(b.id):typeof b=="string"&&Vr(b),fe(qe.value),f.value?f.value.setClipFilters(V,qe.value):k.set(V,[...qe.value]),ie(V),O.value=!1,Rt())}function Nc(){var V,X;const b=((V=Y.value)==null?void 0:V.id)??((X=M.value[0])==null?void 0:X.id);b&&ie(b)}function Cr(b){const V=qe.value.find(X=>X.filterId===b);V&&Sc(V.id)}const Zn=e.computed(()=>Pa.value.map(V=>{var q;const X=[];if(V.controls&&V.controls.length>0)for(const ce of V.controls){const Q=ce.type;if(Q==="button"||Q==="text"||Q==="range")continue;const de={id:ce.property||ce.id,label:ce.label||ce.id,type:Q,default:ce.default??(Q==="toggle"?!1:Q==="color"?"#ffffff":0)};Q==="slider"&&(de.min=ce.min??0,de.max=ce.max??1,de.step=ce.step??.01),Q==="select"&&ce.options&&(de.options=ce.options),X.push(de)}else if(V.paramRanges){const ce=Object.entries(V.paramRanges);for(const[Q,de]of ce){const $e=Q.replace(/[-_]/g," ").replace(/\b\w/g,$t=>$t.toUpperCase()),mt=(q=V.defaultParams)==null?void 0:q[Q],Gt=(de.min+de.max)/2;X.push({id:Q,label:$e,min:de.min,max:de.max,step:de.step??.01,default:typeof mt=="number"?mt:Gt})}}return{id:V.id,name:V.name,category:V.category,params:X}})),En=e.ref("0.00"),Vn=e.ref("0.00"),qt=e.ref("");e.watch(Zn,b=>{if(b.length===0){qt.value="";return}b.some(X=>X.id===qt.value)||(qt.value=b[0].id)},{immediate:!0});const tt=e.ref(!1),Ze=e.ref(0),Xt=e.ref(!1),je=e.ref(null),Tt=e.ref(null);let Mo=null,Ct=!1,Ht=null;const ja=e.computed(()=>{const b=new Map;return qe.value.forEach(V=>b.set(V.filterId,V)),b}),_c=e.computed(()=>{var b,V;return Ce.value?Ce.value:((b=o.media)==null?void 0:b.thumbnail_url)||((V=o.media)==null?void 0:V.url)}),Ft=e.ref("");e.watch(()=>{var b,V;return{file:(b=o.media)==null?void 0:b.file,url:(V=o.media)==null?void 0:V.url}},(b,V,X)=>{var ce,Q;const q=Ft.value;X(()=>{q&&q.startsWith("blob:")&&URL.revokeObjectURL(q)}),(ce=o.media)!=null&&ce.file?Ft.value=URL.createObjectURL(o.media.file):(Q=o.media)!=null&&Q.url?Ft.value=o.media.url:Ft.value=""},{immediate:!0}),e.onUnmounted(()=>{Ft.value&&Ft.value.startsWith("blob:")&&URL.revokeObjectURL(Ft.value)});const Wa=e.computed(()=>Ft.value),Nr=e.computed(()=>{if(!o.media)return null;const{file:b,...V}=o.media;return{...V,url:Ft.value}}),_r=e.computed(()=>{var V;const b=(V=o.media)==null?void 0:V.url;return!!(b&&/^https?:/i.test(b))}),Tr=e.computed(()=>qe.value),Mr=e.computed(()=>ne.value),Tc=e.computed(()=>!!Y.value&&ne.value>0),Mc=e.computed(()=>!!Y.value&&M.value.length>1),Za=e.ref(0),Qt=e.computed(()=>{try{const b=z.value??z;return b&&typeof b=="number"&&b>0?b:Za.value}catch{return Za.value}}),Sn=e.ref(),Xa=e.ref(),Bo=e.ref(0),Io=e.ref(!1);let ft=null;e.watch(Qt,b=>{var X;if(Io.value||!b||b<=0)return;const V=Bo.value||((X=Sn.value)==null?void 0:X.clientWidth)||0;V>0&&(Io.value=!0,H(V))}),e.watch(Bo,b=>{if(Io.value||!b||b<=0)return;Qt.value>0&&(Io.value=!0,H(b))});function Cn(b){return Number.isFinite(b)?b.toFixed(2):"0.00"}function Br(b){const V=Number(b);return Number.isFinite(V)?V:null}function Bc(b){b&&(En.value=Cn(b.sourceIn),Vn.value=Cn(b.sourceOut))}e.watch(()=>{var b,V,X;return[(b=Y.value)==null?void 0:b.id,(V=Y.value)==null?void 0:V.sourceIn,(X=Y.value)==null?void 0:X.sourceOut]},()=>{Bc(Y.value)},{immediate:!0});function Ir(b){const V=Y.value;if(!V)return;const X=1/30,q=V.sourceMinIn??0,ce=V.sourceMaxOut??Qt.value,Q=V.sourceIn+(ne.value-V.timelineStart);if(b==="start"){const $e=Math.max(q,Math.min(Q,V.sourceOut-X));En.value=Cn($e);return}const de=Math.max(V.sourceIn+X,Math.min(Q,ce));Vn.value=Cn(de)}function Ic(){const b=Y.value;if(!b)return;const V=Br(En.value),X=Br(Vn.value);if(V===null||X===null)return;const q=1/30,ce=b.sourceMinIn??0,Q=b.sourceMaxOut??Qt.value,de=Math.max(ce,Math.min(V,Q-q)),$e=Math.max(de+q,Math.min(X,Q));se(b.id,"start",de),se(b.id,"end",$e),En.value=Cn(de),Vn.value=Cn($e),Y.value&&Ne(Y.value.timelineStart)}function Fc(){qt.value.trim()!==""&&Wn(qt.value)}function Rc(){var b;Sr(),fe(qe.value),(b=Y.value)!=null&&b.id&&(f.value?f.value.setClipFilters(Y.value.id,qe.value):k.set(Y.value.id,[...qe.value])),Rt()}function Fr(b,V,X){var ce,Q;const q=qe.value.find(de=>de.filterId===b);q?(q.params={...q.params,[V]:X},fe(qe.value),f.value&&((ce=Y.value)!=null&&ce.id)?f.value.setClipFilters(Y.value.id,qe.value):(Q=Y.value)!=null&&Q.id&&k.set(Y.value.id,[...qe.value]),Rt(),Nc()):To.value&&To.value.filterId===b&&(To.value.params={...To.value.params||{},[V]:X})}function Rr(b){Ne(b)}function $r(b){xe(b)}function Fo(b){!Number.isFinite(b)||b<=0||(Za.value=b,Zt(b))}function $c(){var V;const b=Bo.value||((V=Sn.value)==null?void 0:V.clientWidth)||800;H(b)}function Dc(b){const V=b.target,X=Number(V.value);et(X)}function Dr(b){const V=Math.min(600,Math.max(10,Te.value+b));et(V)}function Ur(b){var V;f.value=b,(V=f.value)!=null&&V.composition&&(N.value=new bg(f.value.composition),g.value=new ma(f.value.composition),S.value=new kg(f.value.composition));try{k.size&&(k.forEach((X,q)=>{f.value.setClipFilters(q,X)}),k.clear(),f.value.composition.computeFrame())}catch{}}function Uc(b){b!=null&&b.id&&Er(b.id)}function Oc(b){Vc(b),Rt()}async function Ac(b){if(!N.value)return;const V=await N.value.addTextOverlay(b);T.value.push({id:V,...b})}async function Lc(b,V){if(!N.value)return;await N.value.updateTextOverlay(b,V);const X=T.value.findIndex(q=>q.id===b);X!==-1&&(T.value[X]={...T.value[X],...V})}async function zc(b){N.value&&(await N.value.removeTextOverlay(b),T.value=T.value.filter(V=>V.id!==b))}async function Pc(b){if(!g.value||R.value.length<2)return;const[V,X]=R.value,q=await g.value.applyTransition(V,X,b);F.value.push({id:q,...b,name:b.type})}function jc(b){if(!g.value)return;const V=F.value[b];V&&(g.value.removeTransition(V.id),F.value.splice(b,1))}function Wc(b){}async function Zc(b){if(!S.value)return;const V=await S.value.addAudioTrack(b);A.value.push({id:V,...b})}async function Xc(b,V){if(!S.value)return;const X=A.value.findIndex(q=>q.id===b);X!==-1&&(A.value[X]={...A.value[X],...V})}async function Hc(b){S.value&&(await S.value.removeAudioTrack(b),A.value=A.value.filter(V=>V.id!==b))}async function Gc(b,V){if(!S.value)return;await S.value.updateVolume(b,V);const X=A.value.find(q=>q.id===b);X&&(X.volume=V)}async function Jc(b,V){if(!S.value)return;await S.value.muteTrack(b,V);const X=A.value.find(q=>q.id===b);X&&(X.muted=V)}function Yc(b){S.value&&(S.value.setMasterVolume(b),j.value=b)}function Kc(b){i("thumbnail-selected",b)}function en(){Mo!==null&&(clearInterval(Mo),Mo=null)}function qc(b,V){return V?{...b,output:{...b.output,format:V.format,quality:V.quality}}:b}function Xn(b){var V;return b.metadata||(b.metadata={created_at:new Date().toISOString(),editor_version:"2.0.0"}),b.metadata.fit_mode=$.value,(V=o.media)!=null&&V.url&&/^https?:/i.test(o.media.url)?b.metadata.source_url=o.media.url:delete b.metadata.source_url,b}function Xe(b,V,X){return Math.min(X,Math.max(V,b))}function Ha(b,V){if(typeof b=="number"&&Number.isFinite(b))return b;if(typeof b=="string"){const X=Number(b);if(Number.isFinite(X))return X}return V}function st(b,V,X){for(const q of V)if(q in b)return Ha(b[q],X);return X}function Qc(b){const V=typeof b.params=="object"&&b.params!==null?b.params:{};switch(b.filterId.trim().toLowerCase()){case"brightness":return[{type:"brightness",value:Xe(st(V,["value","brightness"],0),-1,1)}];case"contrast":return[{type:"contrast",value:Xe(st(V,["value","contrast"],1),.1,3)}];case"saturation":return[{type:"saturation",value:Xe(st(V,["value","saturation"],1),0,3)}];case"blur":case"gaussian-blur":case"kawase-blur":case"radial-blur":return[{type:"blur",value:Xe(st(V,["value","blur","radius"],0),0,25)}];case"sharpen":return[{type:"sharpen",value:Xe(st(V,["value","amount"],1),0,5)}];case"sepia":return[{type:"sepia",value:1}];case"grayscale":return[{type:"grayscale",value:1}];case"adjustment":{const q=Xe(st(V,["brightness"],1)-1,-1,1),ce=Xe(st(V,["contrast"],1),.1,3),Q=Xe(st(V,["saturation"],1),0,3);return[{type:"brightness",value:q},{type:"contrast",value:ce},{type:"saturation",value:Q}]}default:return[]}}function ed(b){const V=b.timeline[0],X=Array.isArray(V==null?void 0:V.filters)?V.filters:[],q=[];for(const Q of X)if(q.push(...Qc(Q)),q.length>=12)break;const ce={...b,filters:q.slice(0,12)};if(b.timeline.length===1&&V){const Q=Math.max(0,Ha(V.sourceIn,0)),de=Ha(V.sourceOut,Q);de>Q&&(ce.trim={start:Q,end:de})}return ce}function td(b){return{"360p":[640,360],"480p":[854,480],"720p":[1280,720],"1080p":[1920,1080],"1440p":[2560,1440],"2160p":[3840,2160]}[b??""]??[1920,1080]}function nd(b){if(!b||typeof b!="object")return null;const V=b.duration;if(typeof V=="number"&&Number.isFinite(V)&&V>0)return V;if(V&&typeof V=="object"&&"value"in V){const X=V.value;if(typeof X=="number"&&Number.isFinite(X)&&X>0)return X}return null}async function Or(b,V,X){var Gt,$t,Dt,Ut;const q=b.timeline[0],ce=q?Math.max(0,q.sourceIn):0,Q=q?q.sourceOut:void 0,[de,$e]=td((V==null?void 0:V.quality)??((Gt=b.output)==null?void 0:Gt.quality)),mt=(($t=b.output)==null?void 0:$t.fps)||30;xe(!1),E.value=!0,await e.nextTick();try{const nt=[200,500,1e3];let lt=!1;for(const ei of nt){await new Promise(xd=>setTimeout(xd,ei));const $o=_.value;if(!(!$o||typeof $o.captureFrameAt!="function")&&typeof $o.ensureReadyForCapture=="function"&&(lt=await $o.ensureReadyForCapture(),lt))break}const bt=_.value;if(!bt||typeof bt.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:Ro,isWebCodecsSupported:Hn}=await Promise.resolve().then(()=>require("./PixiFrameExporter-8_WF3thr.cjs"));if(!Hn())throw new Error("WebCodecs is not supported in this browser. Export requires Chrome 94+ or equivalent.");Ht=new AbortController;const Nn={width:de,height:$e,fps:mt,trimStart:ce,signal:Ht.signal};Q!==void 0&&(Nn.trimEnd=Q),X&&(Nn.onProgress=X);const Hr=Ft.value;Hr!==""&&(Nn.sourceUrl=Hr);const gd=typeof bt.duration=="number"&&bt.duration>0?bt.duration:((Dt=b.source)==null?void 0:Dt.duration)??Q??0,yd=await Ro({captureFrameAt:ei=>bt.captureFrameAt(ei),duration:{value:gd}},Nn),Qa=new File([yd],`edited-video-${Date.now()}.mp4`,{type:"video/mp4"}),wd=nd(bt),bd=((Ut=b.source)==null?void 0:Ut.duration)??0,kd=Math.max(0,(Q??wd??bd)-ce);return{file:Qa,recipe:b,meta:{duration:kd,width:de,height:$e,format:"mp4",sizeBytes:Qa.size,size_bytes:Qa.size}}}finally{E.value=!1,Ht=null}}async function od(b,V){var Ut;en(),Ct=!1,Ht=null,Tt.value=null,je.value=null,Xt.value=!1,Ze.value=0;const X=Xn(b??ve()),q=Zr(X),ce=Array.isArray(q.filters)&&q.filters.length>0,Q=Ya(q);if(!(me.value||ce||Q))return te(),i("video-exported",null),null;const $e=q.timeline[0],mt=$e?Math.max(0,$e.sourceIn):0,$t=(($e==null?void 0:$e.sourceOut)??((Ut=q.source)==null?void 0:Ut.duration)??Qt.value)-mt,Dt=o.serverRenderEndpoint!=null&&o.clientExportThreshold>0&&$t>o.clientExportThreshold;if(Dt){tt.value=!0;try{return await ad(q),null}catch(nt){const lt=nt instanceof Error?nt.message:"Server render failed";throw je.value=lt,i("server-render-failed",lt),nt}finally{tt.value=!1}}if(o.maxDuration>0&&$t>o.maxDuration&&!Dt){const nt=`This video is too long for in-browser export (${Math.round($t)}s). Server rendering is not available. Try a shorter clip.`;return je.value=nt,i("video-exported",null),null}tt.value=!0;try{const nt=await Or(q,V,lt=>{Ct||(Ze.value=lt)});return Ct?(je.value="Export canceled.",Ze.value=0,i("video-exported",null),null):(te(),i("recipe-generated",q),i("video-exported",nt),Ze.value=100,Xt.value=!0,nt)}catch(nt){if(Ct)return je.value="Export canceled.",Ze.value=0,i("video-exported",null),null;const lt=nt instanceof Error?nt.message:"Local WebGL export failed.";throw je.value=lt,new Error(`Video export failed: ${lt}`)}finally{tt.value=!1}}async function ad(b){const V=new mr(o.serverRenderEndpoint??"/api/v1");je.value="Starting server render...",Ze.value=0;const X=await V.createRenderJob({source_media_uuid:s.value,recipe:b});Tt.value=X.id,i("server-render-started",X.id),i("export-started",X.id),je.value="Rendering on server...";const q=await V.pollRenderJob(X.id,(Q,de)=>{Ze.value=Q,de==="processing"&&(je.value=`Server rendering: ${Q}%`)},3e3,(o.maxDuration>0?o.maxDuration*3:1800)*1e3);Ze.value=100,Xt.value=!0,je.value="Server render complete!",te(),i("recipe-generated",b);const ce={id:q.id};typeof q.output_media_id=="string"&&q.output_media_id!==""&&(ce.output_media_id=q.output_media_id),i("server-render-completed",ce)}async function Ar(){if(!tt.value)return;Ct=!0,E.value=!1,Ht&&(Ht.abort(),Ht=null),en();const b=Tt.value;if(b)try{const V=await fetch(`/api/v1/video/jobs/${b}`,{method:"DELETE"});if(!V.ok)throw new Error(`Cancel failed: ${V.status} ${V.statusText}`)}catch(V){const X=V instanceof Error?V.message:"Failed to cancel export";je.value=X,tt.value=!1,Tt.value=null;return}tt.value=!1,Ze.value=0,Xt.value=!1,Tt.value=null,je.value="Export canceled."}async function Lr(b){en(),Ct=!1,Ht=null,Tt.value=null,je.value=null,Xt.value=!1,tt.value=!0,Ze.value=0;try{const V=Xn(qc(ve(),b));i("recipe-generated",V);const X=s.value.startsWith("temp-"),q=V.timeline[0],ce=Array.isArray(q==null?void 0:q.filters)?q.filters:[],Q=!0,de=typeof window<"u"&&window.MEDIABLES_ALLOW_SERVER_EXPORT_FALLBACK===1||typeof localStorage<"u"&&localStorage.getItem("mediables.export.allowServerFallback")==="1";if(Q)try{const bt=await Or(V,b,Nn=>{Ct||(Ze.value=Nn)});if(Ct){je.value="Export canceled.",tt.value=!1,Ze.value=0;return}i("video-exported",bt);const Ro=URL.createObjectURL(bt.file),Hn=document.createElement("a");Hn.href=Ro,Hn.download=`edited-video-${Date.now()}.mp4`,Hn.click(),setTimeout(()=>URL.revokeObjectURL(Ro),100),tt.value=!1,Ze.value=100,Xt.value=!0;return}catch(bt){if(Ct){je.value="Export canceled.",tt.value=!1,Ze.value=0;return}if(X||!de)throw bt;Ze.value=0,je.value="Local filter export failed, falling back to server render."}const $e={"360p":"low","480p":"low","720p":"medium","1080p":"high","1440p":"ultra","2160p":"ultra"},mt=(b==null?void 0:b.quality)??V.output.quality,Gt=$e[mt]??"high",$t={...ed(V),export:{format:(b==null?void 0:b.format)??V.output.format,quality:Gt,resolution:mt,framerate:V.output.fps}},Dt=await fetch("/api/v1/video/jobs",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({source_media_id:s.value,recipe:$t})});if(!Dt.ok)throw new Error(`Export failed: ${Dt.status} ${Dt.statusText}`);const Ut=await Dt.json(),nt=(Ut==null?void 0:Ut.data)??Ut,lt=typeof(nt==null?void 0:nt.id)=="string"?nt.id:null;if(!lt)throw new Error("Export failed: missing job id");Tt.value=lt,i("export-started",lt),hd(lt)}catch(V){if(E.value=!1,Ht=null,Ct){je.value="Export canceled.",tt.value=!1,Ze.value=0,Tt.value=null;return}try{const X=Xn(ve()),q=new Blob([JSON.stringify(X,null,2)],{type:"application/json"}),ce=URL.createObjectURL(q),Q=document.createElement("a");Q.href=ce,Q.download=`video-recipe-${Date.now()}.json`,Q.click(),setTimeout(()=>URL.revokeObjectURL(ce),100)}finally{tt.value=!1,Ze.value=0,Tt.value=null,je.value=V instanceof Error?V.message:"Export failed"}}}const Ga=async b=>{await new Promise(V=>{window.setTimeout(V,b)})},Ja=b=>{if(!b||b.width<=0||b.height<=0)return null;try{return b.toDataURL("image/jpeg",.85)}catch{return null}},id=b=>{if(!b||typeof b!="object")return null;const X=b.pixiCanvas;if(X&&typeof X=="object"&&"value"in X){const q=X.value;return q instanceof HTMLCanvasElement?q:null}return X instanceof HTMLCanvasElement?X:null},rd=b=>{if(!b||typeof b!="object")return null;const V=b.duration;if(typeof V=="number"&&Number.isFinite(V))return V;if(V&&typeof V=="object"&&"value"in V){const X=V.value;if(typeof X=="number"&&Number.isFinite(X))return X}return null},sd=b=>{if(!b||typeof b!="object")return null;const X=b.videoElement;if(X&&typeof X=="object"&&"value"in X){const q=X.value;return q instanceof HTMLVideoElement?q:null}return X instanceof HTMLVideoElement?X:null},zr=b=>typeof b.params=="object"&&b.params!==null?b.params:{},ld=b=>{const V=[];for(const X of b){const q=zr(X),ce=X.filterId.trim().toLowerCase();if(ce==="brightness"){const de=(Xe(st(q,["value","brightness"],0),-1,1)+1)*100;V.push(`brightness(${de.toFixed(2)}%)`);continue}if(ce==="contrast"){const Q=Xe(st(q,["value","contrast"],1),.1,4);V.push(`contrast(${(Q*100).toFixed(2)}%)`);continue}if(ce==="saturation"||ce==="saturate"){const Q=Xe(st(q,["value","saturation"],1),0,4);V.push(`saturate(${(Q*100).toFixed(2)}%)`);continue}if(ce==="grayscale"){V.push("grayscale(100%)");continue}if(ce==="sepia"){V.push("sepia(100%)");continue}if(ce==="blur"||ce==="gaussian-blur"||ce==="kawase-blur"){const Q=Xe(st(q,["value","blur","radius"],0),0,30);Q>.01&&V.push(`blur(${Q.toFixed(2)}px)`);continue}if(ce==="adjustment"){const Q=st(q,["brightness"],1),de=st(q,["contrast"],1),$e=st(q,["saturation"],1);Math.abs(Q-1)>.01&&V.push(`brightness(${(Xe(Q,0,5)*100).toFixed(2)}%)`),Math.abs(de-1)>.01&&V.push(`contrast(${(Xe(de,.1,5)*100).toFixed(2)}%)`),Math.abs($e-1)>.01&&V.push(`saturate(${(Xe($e,0,5)*100).toFixed(2)}%)`);continue}if(ce==="cinematic"){V.push("contrast(120%) brightness(95%) saturate(85%)");continue}if(ce==="dramatic"){V.push("contrast(140%) brightness(90%) saturate(110%) sepia(10%)");continue}if(ce==="dreamy"){V.push("blur(0.5px) brightness(105%) saturate(90%) contrast(95%)");continue}}return V.join(" ")},cd=b=>{const V=b.find(ce=>ce.filterId.trim().toLowerCase()==="noise");if(!V)return 0;const X=zr(V),q=st(X,["noise","value","amount","intensity"],.2);return q<=1?Xe(q,0,1):Xe(q/100,0,1)},dd=(b,V,X,q)=>{if(q<=0)return;const ce=b.getImageData(0,0,V,X),Q=255*q;for(let de=0;de<ce.data.length;de+=4){const $e=(Math.random()*2-1)*Q;ce.data[de]=Xe(ce.data[de]+$e,0,255),ce.data[de+1]=Xe(ce.data[de+1]+$e,0,255),ce.data[de+2]=Xe(ce.data[de+2]+$e,0,255)}b.putImageData(ce,0,0)},Pr=async b=>{b.readyState>=2&&b.videoWidth>0&&b.videoHeight>0||await new Promise(V=>{let X=!1,q=0;const ce=()=>{X||(X=!0,b.removeEventListener("loadedmetadata",Q),b.removeEventListener("loadeddata",Q),b.removeEventListener("canplay",Q),window.clearTimeout(q),V())},Q=()=>{ce()};b.addEventListener("loadedmetadata",Q),b.addEventListener("loadeddata",Q),b.addEventListener("canplay",Q),q=window.setTimeout(()=>ce(),800),b.play().catch(()=>{})})},ud=async(b,V)=>{await new Promise(X=>{let q=!1,ce=0;const Q=()=>{q||(q=!0,b.removeEventListener("seeked",de),window.clearTimeout(ce),X())},de=()=>{Q()};if(Math.abs(b.currentTime-V)<.016){requestAnimationFrame(()=>Q());return}b.addEventListener("seeked",de),ce=window.setTimeout(()=>Q(),700),b.currentTime=V})},jr=async(b,V)=>{await Pr(b);const X=Math.floor(b.videoWidth),q=Math.floor(b.videoHeight);if(X<=0||q<=0)return null;const ce=Number.isFinite(b.duration)&&b.duration>0?b.duration:0,Q=ce>0?Xe(V,0,ce):0;await ud(b,Q);const de=document.createElement("canvas");de.width=X,de.height=q;const $e=de.getContext("2d");if(!$e)return null;const mt=ld(qe.value);mt!==""&&($e.filter=mt);try{$e.drawImage(b,0,0,X,q)}catch{return null}const Gt=cd(qe.value);return dd($e,X,q,Gt),Ja(de)},md=async(b,V)=>{const X=document.createElement("video");X.src=b,X.muted=!0,X.playsInline=!0,X.preload="auto",b.startsWith("blob:")||(X.crossOrigin="anonymous");try{return await Pr(X),await jr(X,V)}catch{return null}finally{X.pause(),X.removeAttribute("src"),X.load()}},pd=async b=>{const V=_.value,X=Ja(id(V));if(X)return X;if(V!=null&&V.captureFrameAt)for(let Q=0;Q<4;Q+=1){const de=rd(V);if(de!==null&&de<=0&&Q<2){await Ga(80);continue}const $e=await Promise.race([V.captureFrameAt(b),Ga(450).then(()=>null)]),mt=Ja($e);if(mt)return mt;await Ga(80)}const q=sd(V);if(q){const Q=await jr(q,b);if(Q)return Q}const ce=Wa.value.trim();if(ce!==""){const Q=await md(ce,b);if(Q)return Q}return null},Wr=b=>b.map(V=>({...V,params:V.params&&typeof V.params=="object"?{...V.params}:V.params}));function Zr(b){const V=Wr(qe.value);if(!Ya(b)&&V.length>0&&Array.isArray(b.timeline)&&b.timeline.length>0){const q=b.timeline[0];q&&(b.timeline=[{...q,filters:V},...b.timeline.slice(1)])}return b}const Ya=b=>Array.isArray(b.timeline)?b.timeline.some(V=>Array.isArray(V.filters)&&V.filters.length>0):!1,fd=b=>{if(!b||typeof b!="object")return null;const V=b.posterFrame;if(typeof V!="string")return null;const X=V.trim();return X!==""?X:null};async function Ka(){const b=Xn(Zr(ee())),V=Wr(qe.value),X=Ya(b)||V.length>0,q=fd(o.initialRecipe);if(X){const ce=ne.value>0?ne.value:.1;try{const Q=await pd(ce);Q?b.posterFrame=Q:q&&(b.posterFrame=q)}catch{q&&(b.posterFrame=q)}}else delete b.posterFrame;return te(),i("draft-saved",b),b}function Xr(){pe()&&(Sr(),Rt())}async function hd(b){en(),Mo=window.setInterval(async()=>{var V,X;try{if(Ct){en();return}const q=await fetch(`/api/v1/video/jobs/${b}`);if(!q.ok)throw new Error(`Status poll failed: ${q.status} ${q.statusText}`);const ce=await q.json(),Q=(ce==null?void 0:ce.data)??ce,de=Number((Q==null?void 0:Q.progress)??0);if(Ze.value=Number.isFinite(de)?de:0,Q.status==="completed"||Q.status==="failed"||Q.status==="cancelled")if(en(),tt.value=!1,Tt.value=null,Q.status==="completed"){const $e=((V=Q==null?void 0:Q.output_media)==null?void 0:V.url)??(Q==null?void 0:Q.output_url);Ze.value=100,Xt.value=!0,je.value=null}else{const $e=!!((X=Q==null?void 0:Q.meta)!=null&&X.is_cancelled)||Q.status==="cancelled"||typeof(Q==null?void 0:Q.error_message)=="string"&&/cancel/i.test(Q.error_message);je.value=$e?"Export canceled.":typeof(Q==null?void 0:Q.error_message)=="string"&&Q.error_message.trim()!==""?Q.error_message:"Export failed"}}catch(q){en(),tt.value=!1,Tt.value=null,je.value=q instanceof Error?q.message:"Failed to check export progress"}},2e3)}function qa(){const b=Xn(ve());try{const V=b.timeline??[]}catch{}x.value=b}let sn=null;function Rt(){sn&&clearTimeout(sn),sn=setTimeout(()=>{qa(),sn=null},200)}e.watch(()=>M.value,Rt,{deep:!0}),e.watch(()=>Y.value,b=>{if(O.value||!b)return;const V=(b==null?void 0:b.filters)??[];Cc(V)},{immediate:!0}),e.watch(()=>qe.value,b=>{fe(b),Rt()},{deep:!0}),e.watch(()=>T.value,b=>{P(b),Rt()},{deep:!0}),e.watch(()=>A.value,b=>{const V=b.map(X=>({...X,source:typeof X.source=="string"?X.source:void 0}));J(V),Rt()},{deep:!0}),e.watch(()=>ne.value,Rt),n({saveDraft:Ka,exportForUpload:od}),qa(),e.onUnmounted(()=>{en(),Ct=!0,sn&&(clearTimeout(sn),sn=null),f.value&&(f.value.destroy(),f.value=null),N.value=null,g.value=null,S.value=null});function vd(){ft||!Xa.value||(ft=new ag({filters:Zn.value,callbacks:{onApplyFilter:b=>{Wn(b.id)},onRemoveFilter:b=>{Cr(b)},onUpdateParam:(b,V,X)=>{Fr(b,V,X)},onPreviewFilter:b=>{Er(b.id)}}}),ft.mount(Xa.value),ft.setActiveFilters(ja.value))}e.watch(ja,b=>{ft==null||ft.setActiveFilters(b)},{deep:!0}),e.watch(Zn,b=>{ft==null||ft.setFilters(b)});let tn=null;return e.onMounted(()=>{window.addEventListener("resize",K);const b=()=>{!Sn.value||tn||(tn=new ResizeObserver(V=>{V[0]&&(Bo.value=Math.round(V[0].contentRect.width))}),tn.observe(Sn.value))};b(),tn||e.nextTick(b),o.media&&qa(),l.value&&e.nextTick(()=>{vd()}),e.nextTick(()=>{const V=document.querySelector(".video-editor");V&&V.getBoundingClientRect();const X=document.querySelector(".mobile-layout");X&&X.getBoundingClientRect()})}),e.onUnmounted(()=>{window.removeEventListener("resize",K),tn==null||tn.disconnect(),tn=null,ft==null||ft.destroy(),ft=null}),(b,V)=>{var X,q,ce,Q;return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-editor",{mobile:l.value}])},[l.value?(e.openBlock(),e.createElementBlock("div",qy,[e.createElementVNode("div",Qy,[e.createElementVNode("div",ew,[e.createElementVNode("button",{class:e.normalizeClass(["mobile-toolbar-btn",{active:e.unref(ae)}]),onClick:V[0]||(V[0]=(...de)=>e.unref(re)&&e.unref(re)(...de)),"aria-label":e.unref(ae)?"Pause":"Play","data-testid":"btn-mobile-play"},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(ae)?e.unref(nl):e.unref(al)},null,8,["icon"])],10,tw),e.createElementVNode("button",{class:"mobile-toolbar-btn",onClick:Xr,"aria-label":"Reset all changes","data-testid":"btn-mobile-reset"},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Un)},null,8,["icon"])])]),e.createElementVNode("div",nw,[e.createElementVNode("button",{class:"mobile-toolbar-btn mobile-toolbar-save",onClick:Ka,"aria-label":"Save","data-testid":"btn-mobile-save",disabled:!e.unref(me)},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Zi)},null,8,["icon"]),V[14]||(V[14]=e.createElementVNode("span",null,"Save",-1))],8,ow),e.createElementVNode("button",{class:"mobile-toolbar-btn",onClick:V[1]||(V[1]=de=>Lr()),"aria-label":"Export","data-testid":"btn-mobile-export",disabled:tt.value||!e.unref(me)},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(po)},null,8,["icon"])],8,aw),e.createElementVNode("button",{class:"mobile-toolbar-btn",onClick:V[2]||(V[2]=de=>i("close")),"aria-label":"Close","data-testid":"btn-mobile-close"},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Fn)},null,8,["icon"])])])]),e.createElementVNode("div",iw,[e.withDirectives(e.createVNode(ns,{ref_key:"pixiPreviewMobileRef",ref:v,"aria-hidden":!p.value,class:"preview-host-child",source:Wa.value,filters:Tr.value,playhead:Mr.value,"is-playing":e.unref(ae),"fit-mode":$.value,active:p.value,onPlayPause:e.unref(re),onDurationChange:Fo},null,8,["aria-hidden","source","filters","playhead","is-playing","fit-mode","active","onPlayPause"]),[[e.vShow,p.value]]),e.withDirectives(e.createVNode(ks,{"aria-hidden":!h.value,class:"preview-host-child","media-uuid":s.value,recipe:x.value,media:Nr.value,"enable-engine":h.value&&_r.value,"fit-mode":$.value,onTimeUpdate:Rr,onPlayStateChange:$r,onDurationChange:Fo,onEngineReady:Ur},null,8,["aria-hidden","media-uuid","recipe","media","enable-engine","fit-mode"]),[[e.vShow,h.value]]),tt.value?(e.openBlock(),e.createElementBlock("div",rw,[e.createElementVNode("div",sw,[e.createElementVNode("span",null,"Exporting "+e.toDisplayString(Ze.value)+"%",1),e.createElementVNode("div",lw,[e.createElementVNode("div",{class:"mobile-export-bar-fill",style:e.normalizeStyle({width:Ze.value+"%"})},null,4)]),e.createElementVNode("button",{class:"mobile-export-cancel",onClick:Ar},"Cancel")])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",{ref_key:"timelineContainerRef",ref:Sn,class:"timeline-section"},[e.createElementVNode("div",cw,[e.createElementVNode("button",{class:"mobile-zoom-btn",onClick:V[3]||(V[3]=de=>Dr(-20)),"aria-label":"Zoom out timeline","data-testid":"btn-timeline-zoom-out"},[...V[15]||(V[15]=[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)])]),e.createElementVNode("button",{class:"mobile-zoom-btn",onClick:V[4]||(V[4]=de=>Dr(20)),"aria-label":"Zoom in timeline","data-testid":"btn-timeline-zoom-in"},[...V[16]||(V[16]=[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)])])]),e.createVNode(xs,{playhead:e.unref(ne),clips:e.unref(M),"selected-clip-id":((X=e.unref(Y))==null?void 0:X.id)??((q=e.unref(M)[0])==null?void 0:q.id)??null,duration:Qt.value,"zoom-level":e.unref(Te),sensitivity:.25,"is-mobile":!0,"onUpdate:playhead":e.unref(Ne),onTrim:e.unref(se),onSplit:e.unref(be),onClipSelect:e.unref(ie),onClipMove:e.unref(We)},null,8,["playhead","clips","selected-clip-id","duration","zoom-level","onUpdate:playhead","onTrim","onSplit","onClipSelect","onClipMove"])],512),e.createElementVNode("div",{ref_key:"mobileControlsRef",ref:Xa,class:"controls-section mobile-controls"},null,512)])):(e.openBlock(),e.createElementBlock("div",dw,[e.createElementVNode("div",uw,[e.createElementVNode("div",mw,[e.createElementVNode("div",pw,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":V[5]||(V[5]=de=>$.value=de),"aria-label":"Fit mode","data-testid":"select-video-fit-mode"},[...V[17]||(V[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,$.value]])])]),e.withDirectives(e.createVNode(ns,{ref_key:"pixiPreviewDesktopRef",ref:y,"aria-hidden":!p.value,class:"preview-host-child",source:Wa.value,filters:Tr.value,playhead:Mr.value,"is-playing":e.unref(ae),"fit-mode":$.value,active:p.value,onPlayPause:e.unref(re),onDurationChange:Fo},null,8,["aria-hidden","source","filters","playhead","is-playing","fit-mode","active","onPlayPause"]),[[e.vShow,p.value]]),e.withDirectives(e.createVNode(ks,{"aria-hidden":!h.value,class:"preview-host-child","media-uuid":s.value,recipe:x.value,media:Nr.value,"enable-engine":h.value&&_r.value,"fit-mode":$.value,onTimeUpdate:Rr,onPlayStateChange:$r,onDurationChange:Fo,onEngineReady:Ur},null,8,["aria-hidden","media-uuid","recipe","media","enable-engine","fit-mode"]),[[e.vShow,h.value]]),b.showThumbnailPicker?(e.openBlock(),e.createBlock(Iv,{key:0,"media-uuid":s.value,duration:Qt.value,onSelect:Kc},null,8,["media-uuid","duration"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",fw,[e.createElementVNode("div",hw,[e.createElementVNode("div",vw,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(W.value,de=>(e.openBlock(),e.createElementBlock("button",{key:de.id,class:e.normalizeClass(["tab-btn",{active:d.value===de.id}]),onClick:$e=>d.value=de.id},e.toDisplayString(de.label),11,gw))),128))]),e.createElementVNode("div",yw,[e.withDirectives(e.createElementVNode("div",ww,[e.createVNode(j0,{filters:Zn.value,"active-filters":ja.value,"thumbnail-url":_c.value,onApplyFilter:Wn,onRemoveFilter:Cr,onUpdateParam:Fr,onPreviewFilter:Uc},null,8,["filters","active-filters","thumbnail-url"])],512),[[e.vShow,d.value==="filters"]]),e.withDirectives(e.createElementVNode("div",bw,[e.createVNode(Qv,{overlays:T.value,onAddOverlay:Ac,onUpdateOverlay:Lc,onRemoveOverlay:zc},null,8,["overlays"])],512),[[e.vShow,d.value==="text"]]),e.withDirectives(e.createElementVNode("div",kw,[e.createVNode(k1,{"selected-clips":R.value,"applied-transitions":F.value,onApplyTransition:Pc,onRemoveTransition:jc,onPreviewTransition:Wc},null,8,["selected-clips","applied-transitions"])],512),[[e.vShow,d.value==="transitions"]]),e.withDirectives(e.createElementVNode("div",xw,[e.createVNode(ng,{"audio-layers":A.value,"master-volume":j.value,onAddTrack:Zc,onUpdateTrack:Xc,onRemoveTrack:Hc,onUpdateVolume:Gc,onToggleMute:Jc,onUpdateMasterVolume:Yc},null,8,["audio-layers","master-volume"])],512),[[e.vShow,d.value==="audio"]]),e.withDirectives(e.createElementVNode("div",Ew,[e.unref(xr)?(e.openBlock(),e.createBlock(nv,{key:0,filter:e.unref(xr),"current-frame":e.unref(Ce),onUpdateParams:Oc},null,8,["filter","current-frame"])):(e.openBlock(),e.createElementBlock("div",Vw,[...V[18]||(V[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",Sw,[e.createVNode(gv,{"can-export":e.unref(me),"is-exporting":tt.value,"export-progress":Ze.value,onExport:Lr,onCancelExport:Ar,onSaveDraft:Ka,onReset:Xr},null,8,["can-export","is-exporting","export-progress"]),Xt.value?(e.openBlock(),e.createElementBlock("div",Cw," Export complete ")):e.createCommentVNode("",!0),je.value&&!Xt.value?(e.openBlock(),e.createElementBlock("div",Nw,e.toDisplayString(je.value),1)):e.createCommentVNode("",!0)],512),[[e.vShow,d.value==="export"]])])])])]),e.createElementVNode("div",_w,[e.createElementVNode("div",{ref_key:"timelineContainerRef",ref:Sn,class:"timeline-container"},[e.createElementVNode("div",Tw,[e.createElementVNode("label",null,[V[19]||(V[19]=e.createTextVNode(" Zoom ",-1)),e.createElementVNode("input",{type:"range",min:"10",max:"600",value:e.unref(Te),onInput:V[6]||(V[6]=de=>Dc(de))},null,40,Mw)]),e.createElementVNode("span",Bw,e.toDisplayString(Math.round(e.unref(Te)))+" px/s",1)]),e.createVNode(xs,{playhead:e.unref(ne),clips:e.unref(M),"selected-clip-id":((ce=e.unref(Y))==null?void 0:ce.id)??((Q=e.unref(M)[0])==null?void 0:Q.id)??null,duration:Qt.value,"zoom-level":e.unref(Te),sensitivity:.25,"onUpdate:playhead":e.unref(Ne),onTrim:e.unref(se),onSplit:e.unref(be),onClipSelect:e.unref(ie),onClipMove:e.unref(We)},null,8,["playhead","clips","selected-clip-id","duration","zoom-level","onUpdate:playhead","onTrim","onSplit","onClipSelect","onClipMove"]),e.createVNode(a0,{"selected-clip":e.unref(Y),"can-split":Tc.value,"can-delete":Mc.value,"is-playing":e.unref(ae),"zoom-level":e.unref(Te),"playback-speed":e.unref(ue),onSplit:e.unref(le),onDelete:e.unref(ke),onDuplicate:e.unref(Ve),onZoomIn:e.unref(Fe),onZoomOut:e.unref(Oe),onZoomChange:e.unref(et),onFitToWindow:$c,onPlayPause:e.unref(re),onFrameForward:e.unref(ze),onFrameBackward:e.unref(wt),onSkipToStart:e.unref(ut),onSkipToEnd:e.unref(St),onSpeedChange:e.unref(Ge)},null,8,["selected-clip","can-split","can-delete","is-playing","zoom-level","playback-speed","onSplit","onDelete","onDuplicate","onZoomIn","onZoomOut","onZoomChange","onPlayPause","onFrameForward","onFrameBackward","onSkipToStart","onSkipToEnd","onSpeedChange"]),we.value?(e.openBlock(),e.createElementBlock("div",Iw,[e.createElementVNode("div",Fw,[e.createElementVNode("label",Rw,[V[20]||(V[20]=e.createElementVNode("span",null,"Trim start (s)",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":V[7]||(V[7]=de=>En.value=de),type:"number",step:"0.01",min:"0",inputmode:"decimal","data-testid":"video-dev-trim-start"},null,512),[[e.vModelText,En.value]])]),e.createElementVNode("label",$w,[V[21]||(V[21]=e.createElementVNode("span",null,"Trim end (s)",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":V[8]||(V[8]=de=>Vn.value=de),type:"number",step:"0.01",min:"0",inputmode:"decimal","data-testid":"video-dev-trim-end"},null,512),[[e.vModelText,Vn.value]])]),e.createElementVNode("button",{class:"dev-editor-button",type:"button","data-testid":"video-dev-trim-start-playhead",disabled:!e.unref(Y),onClick:V[9]||(V[9]=de=>Ir("start"))}," Start = Playhead ",8,Dw),e.createElementVNode("button",{class:"dev-editor-button",type:"button","data-testid":"video-dev-trim-end-playhead",disabled:!e.unref(Y),onClick:V[10]||(V[10]=de=>Ir("end"))}," End = Playhead ",8,Uw),e.createElementVNode("button",{class:"dev-editor-button dev-editor-button--primary",type:"button","data-testid":"video-dev-apply-trim",disabled:!e.unref(Y),onClick:Ic}," Apply Trim ",8,Ow)]),e.createElementVNode("div",Aw,[e.createElementVNode("label",Lw,[V[22]||(V[22]=e.createElementVNode("span",null,"Quick filter",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":V[11]||(V[11]=de=>qt.value=de),"data-testid":"video-dev-filter-select"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Zn.value,de=>(e.openBlock(),e.createElementBlock("option",{key:de.id,value:de.id},e.toDisplayString(de.name),9,zw))),128))],512),[[e.vModelSelect,qt.value]])]),e.createElementVNode("button",{class:"dev-editor-button dev-editor-button--primary",type:"button","data-testid":"video-dev-apply-filter",disabled:!e.unref(Y)||qt.value==="",onClick:Fc}," Apply Filter ",8,Pw),e.createElementVNode("button",{class:"dev-editor-button",type:"button","data-testid":"video-dev-clear-filters",disabled:e.unref(qe).length===0,onClick:Rc}," Clear Filters ",8,jw),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(Y),onClick:V[12]||(V[12]=de=>Wn("noise"))}," QA: Noise ",8,Ww),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(Y),onClick:V[13]||(V[13]=de=>Wn("grayscale"))}," QA: Grayscale ",8,Zw)])])):e.createCommentVNode("",!0)],512)])]))],2)}}}),Li=Me(Xw,[["__scopeId","data-v-5d8a0dc1"]]),Hw={key:0,class:"ve-fullscreen"},Gw=["aria-label"],Jw={class:"ve-header"},Yw={class:"ve-title"},Kw={class:"ve-body"},qw={class:"ve-footer"},Qw=e.defineComponent({__name:"VideoEditorDialog",props:{open:{type:Boolean},mediaUuid:{},initialRecipe:{},media:{},showThumbnailPicker:{type:Boolean,default:!1},title:{default:"Edit Video"}},emits:["update:open","close","recipe-generated","export-started","draft-saved","thumbnail-selected"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(typeof window<"u"?window.innerWidth<768:!1);function r(){i.value=window.innerWidth<768}e.onMounted(()=>window.addEventListener("resize",r)),e.onUnmounted(()=>window.removeEventListener("resize",r));const s=e.computed(()=>t.open??!0),l=e.computed(()=>{var d;return t.mediaUuid||((d=t.media)==null?void 0:d.id)||`temp-${Date.now()}`});function c(){o("close"),o("update:open",!1)}return(d,u)=>s.value&&i.value?(e.openBlock(),e.createElementBlock("div",Hw,[e.createVNode(Li,e.mergeProps({"media-uuid":l.value},{...d.initialRecipe?{initialRecipe:d.initialRecipe}:{},...d.media?{media:d.media}:{}},{"show-thumbnail-picker":d.showThumbnailPicker??!1,onRecipeGenerated:u[0]||(u[0]=m=>d.$emit("recipe-generated",m)),onExportStarted:u[1]||(u[1]=m=>d.$emit("export-started",m)),onDraftSaved:u[2]||(u[2]=m=>d.$emit("draft-saved",m)),onThumbnailSelected:u[3]||(u[3]=m=>d.$emit("thumbnail-selected",m))}),null,16,["media-uuid","show-thumbnail-picker"])])):s.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:"ve-overlay",onClick:e.withModifiers(c,["self"])},[e.createElementVNode("div",{class:"ve-dialog",role:"dialog","aria-label":d.title,"aria-modal":"true"},[e.createElementVNode("header",Jw,[e.createElementVNode("h2",Yw,e.toDisplayString(d.title),1),e.createElementVNode("button",{class:"ve-close",onClick:c,"aria-label":"Close"}," ✕ ")]),e.createElementVNode("section",Kw,[e.createVNode(Li,e.mergeProps({"media-uuid":l.value},{...d.initialRecipe?{initialRecipe:d.initialRecipe}:{},...d.media?{media:d.media}:{}},{"show-thumbnail-picker":d.showThumbnailPicker??!1,onRecipeGenerated:u[4]||(u[4]=m=>d.$emit("recipe-generated",m)),onExportStarted:u[5]||(u[5]=m=>d.$emit("export-started",m)),onDraftSaved:u[6]||(u[6]=m=>d.$emit("draft-saved",m)),onThumbnailSelected:u[7]||(u[7]=m=>d.$emit("thumbnail-selected",m))}),null,16,["media-uuid","show-thumbnail-picker"])]),e.createElementVNode("footer",qw,[e.renderSlot(d.$slots,"footer",{},()=>[e.createElementVNode("button",{class:"ve-btn",onClick:c},"Cancel")],!0)])],8,Gw)])):e.createCommentVNode("",!0)}}),eb=Me(Qw,[["__scopeId","data-v-b948d9bc"]]),tb={class:"video-editor-modal"},nb={class:"video-preview-container"},ob=["src"],ab={class:"video-overlay-controls"},ib=["aria-label"],rb={class:"time-display"},sb={class:"timeline-container"},lb={class:"clip-name"},cb={class:"timeline-time-labels"},db={class:"tool-tabs"},ub=["onClick"],mb={class:"tool-panel"},pb={key:0,class:"trim-panel"},fb={class:"trim-controls"},hb={key:1,class:"filters-panel"},vb={class:"filter-grid"},gb=["onClick"],yb={key:2,class:"text-panel"},wb={key:3,class:"transitions-panel"},bb={class:"transition-grid"},kb=["onClick"],xb={class:"action-buttons"},Eb=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),m=e.ref(0),p=e.ref(null),h=e.ref("trim"),v=e.ref(null),y=e.ref(""),E=[{id:"trim",label:"Trim",icon:el},{id:"filters",label:"Filters",icon:ou},{id:"text",label:"Text",icon:il},{id:"transitions",label:"Transitions",icon:uu}],_=[{id:"none",name:"None"},{id:"grayscale",name:"Grayscale"},{id:"sepia",name:"Sepia"},{id:"blur",name:"Blur"},{id:"brightness",name:"Brightness"},{id:"contrast",name:"Contrast"}],C=[{id:"fade",name:"Fade"},{id:"slide",name:"Slide"},{id:"zoom",name:"Zoom"},{id:"wipe",name:"Wipe"}],w=e.ref();e.onMounted(()=>{var I,D;(I=t.media)!=null&&I.url?r.value=t.media.url:(D=t.media)!=null&&D.file&&(r.value=URL.createObjectURL(t.media.file))}),e.onUnmounted(()=>{var I;(I=t.media)!=null&&I.file&&r.value&&URL.revokeObjectURL(r.value)});function f(){i.value&&(c.value=i.value.duration,m.value=c.value)}function x(){i.value&&(l.value=i.value.currentTime)}function $(){s.value=!1}function N(){i.value&&(s.value?(i.value.pause(),s.value=!1):(i.value.play(),s.value=!0))}function g(I){if(!I||isNaN(I))return"00:00";const D=Math.floor(I/60),Z=Math.floor(I%60);return`${D.toString().padStart(2,"0")}:${Z.toString().padStart(2,"0")}`}function S(I){if(!i.value||!w.value)return;const D=w.value.getBoundingClientRect(),oe=(I.clientX-D.left)/D.width*c.value;i.value.currentTime=Math.max(0,Math.min(oe,c.value))}function O(){u.value=l.value}function k(){m.value=l.value}function T(){u.value=0,m.value=c.value}function F(I){p.value=I;const D=W=>{if(!p.value||!w.value)return;const oe=w.value.getBoundingClientRect(),ne=(W.clientX-oe.left)/oe.width*c.value;p.value==="start"?u.value=Math.max(0,Math.min(ne,m.value-1)):m.value=Math.max(u.value+1,Math.min(ne,c.value))},Z=()=>{p.value=null,document.removeEventListener("mousemove",D),document.removeEventListener("mouseup",Z)};document.addEventListener("mousemove",D),document.addEventListener("mouseup",Z)}function A(I){if(v.value=I,!i.value)return;const D={none:"none",grayscale:"grayscale(100%)",sepia:"sepia(100%)",blur:"blur(5px)",brightness:"brightness(150%)",contrast:"contrast(150%)"};i.value.style.filter=D[I]||"none"}function R(){}function j(I){}function K(){const I={timeline:[{id:d.value,url:r.value,startTime:0,endTime:c.value,sourceIn:u.value,sourceOut:m.value,track:0}],filters:v.value?[{type:v.value}]:[],textOverlays:y.value?[{content:y.value}]:[],duration:m.value-u.value};o("save",I)}return(I,D)=>(e.openBlock(),e.createElementBlock("div",tb,[e.createElementVNode("div",nb,[e.createElementVNode("video",{ref_key:"videoElement",ref:i,class:"video-preview",src:r.value,onLoadedmetadata:f,onTimeupdate:x,onEnded:$,controls:""},null,40,ob),e.createElementVNode("div",ab,[e.createElementVNode("button",{class:"play-pause-btn",onClick:N,"aria-label":s.value?"Pause":"Play"},[e.createVNode(e.unref(B.IonIcon),{icon:s.value?e.unref(hu):e.unref(wu)},null,8,["icon"])],8,ib),e.createElementVNode("div",rb,e.toDisplayString(g(l.value))+" / "+e.toDisplayString(g(c.value)),1)])]),e.createElementVNode("div",sb,[e.createElementVNode("div",{class:"timeline-track",onClick:S,ref_key:"timelineTrack",ref:w},[e.createElementVNode("div",{class:"timeline-clip",style:e.normalizeStyle({left:`${u.value/c.value*100}%`,right:`${100-m.value/c.value*100}%`})},[e.createElementVNode("span",lb,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:D[0]||(D[0]=Z=>F("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:`${m.value/c.value*100}%`}),onMousedown:D[1]||(D[1]=Z=>F("end"))},null,36)):e.createCommentVNode("",!0)],512),e.createElementVNode("div",cb,[e.createElementVNode("span",null,e.toDisplayString(g(0)),1),e.createElementVNode("span",null,e.toDisplayString(g(c.value)),1)])]),e.createElementVNode("div",db,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(E,Z=>e.createElementVNode("button",{key:Z.id,class:e.normalizeClass(["tool-tab",{active:h.value===Z.id}]),onClick:W=>h.value=Z.id},[e.createVNode(e.unref(B.IonIcon),{icon:Z.icon},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(Z.label),1)],10,ub)),64))]),e.createElementVNode("div",mb,[h.value==="trim"?(e.openBlock(),e.createElementBlock("div",pb,[D[7]||(D[7]=e.createElementVNode("h3",null,"Trim Video",-1)),D[8]||(D[8]=e.createElementVNode("p",null,"Click and drag on the timeline to set trim points",-1)),e.createElementVNode("div",fb,[e.createElementVNode("button",{class:"btn-trim",onClick:O},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Kr)},null,8,["icon"]),D[4]||(D[4]=e.createTextVNode(" Set Start ",-1))]),e.createElementVNode("button",{class:"btn-trim",onClick:k},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Kr)},null,8,["icon"]),D[5]||(D[5]=e.createTextVNode(" Set End ",-1))]),e.createElementVNode("button",{class:"btn-trim",onClick:T},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Fn)},null,8,["icon"]),D[6]||(D[6]=e.createTextVNode(" Clear ",-1))])])])):h.value==="filters"?(e.openBlock(),e.createElementBlock("div",hb,[D[9]||(D[9]=e.createElementVNode("h3",null,"Filters",-1)),e.createElementVNode("div",vb,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(_,Z=>e.createElementVNode("button",{key:Z.id,class:e.normalizeClass(["filter-option",{active:v.value===Z.id}]),onClick:W=>A(Z.id)},e.toDisplayString(Z.name),11,gb)),64))])])):h.value==="text"?(e.openBlock(),e.createElementBlock("div",yb,[D[10]||(D[10]=e.createElementVNode("h3",null,"Text Overlay",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":D[2]||(D[2]=Z=>y.value=Z),type:"text",placeholder:"Enter text...",class:"text-input"},null,512),[[e.vModelText,y.value]]),e.createElementVNode("button",{class:"btn-add-text",onClick:R},"Add Text")])):h.value==="transitions"?(e.openBlock(),e.createElementBlock("div",wb,[D[11]||(D[11]=e.createElementVNode("h3",null,"Transitions",-1)),e.createElementVNode("div",bb,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(C,Z=>e.createElementVNode("button",{key:Z.id,class:"transition-option",onClick:W=>(Z.id,void 0)},e.toDisplayString(Z.name),9,kb)),64))])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",xb,[e.createElementVNode("button",{class:"btn-cancel",onClick:D[3]||(D[3]=Z=>I.$emit("cancel"))},"CANCEL"),e.createElementVNode("button",{class:"btn-save",onClick:K},"SAVE")])]))}}),Vb=Me(Eb,[["__scopeId","data-v-b933f33b"]]),Sb={class:"time-label"},Cb=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),m=c%(l*5)===0;s.push({time:c,position:d,label:u,major:m})}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",Sb,e.toDisplayString(c.label),1),e.createElementVNode("div",{class:e.normalizeClass(["time-tick",{major:c.major}])},null,2)],4))),128))],4))}}),Nb=Me(Cb,[["__scopeId","data-v-0ef9c910"]]),_b=["data-track-index"],Tb={class:"track-header"},Mb={class:"track-label"},Bb={class:"track-controls"},Ib=["data-testid","aria-label"],Fb=["data-testid","onMousedown","onClick"],Rb={class:"clip-content"},$b={class:"clip-name"},Db={key:0,class:"clip-thumbnail"},Ub=["src","alt"],Ob=["onMousedown","aria-label"],Ab=["onMousedown","aria-label"],Lb=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(E){const _=E.timelineEnd-E.timelineStart,C=E.timelineStart/t.duration*100,w=_/t.duration*100;return{left:`${C}%`,width:`${w}%`,backgroundColor:u(E)}}function u(E){const _=["#4A90E2","#7ED321","#F5A623","#BD10E0","#9013FE","#50E3C2","#B8E986","#F8E71C"],C=parseInt(E.id.replace(/\D/g,""))%_.length;return _[C]}function m(E){return E.label?E.label:E.url?(E.url.split("/").pop()||"Clip").split(".")[0]:`Clip ${E.id.slice(-4)}`}function p(E){i.value=E.id,o("clip-select",E.id)}function h(){r.value=!r.value}function v(E,_){if(l.value)return;s.value=!0;const C=_.clientX,w=E.timelineStart,f=$=>{if(!s.value)return;const N=$.clientX-C,g=parseFloat(c.value.width),S=N/(t.zoom*100)*(t.duration/g),O=Math.max(0,w+S);o("clip-move",E.id,O)},x=()=>{s.value=!1,document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",x)};document.addEventListener("mousemove",f),document.addEventListener("mouseup",x)}function y(E,_,C){l.value=_;const w=C.clientX,f=E.sourceIn,x=E.sourceOut,$=g=>{if(!l.value)return;const S=g.clientX-w,O=parseFloat(c.value.width),k=S/(t.zoom*100)*(t.duration/O);if(l.value==="start"){const T=Math.max(0,f+k);o("clip-trim",E.id,T,x)}else{const T=Math.max(f+1,x+k);o("clip-trim",E.id,f,T)}},N=()=>{l.value=null,document.removeEventListener("mousemove",$),document.removeEventListener("mouseup",N)};document.addEventListener("mousemove",$),document.addEventListener("mouseup",N)}return(E,_)=>(e.openBlock(),e.createElementBlock("div",{class:"video-track","data-track-index":E.trackIndex},[e.createElementVNode("div",Tb,[e.createElementVNode("span",Mb,"Track "+e.toDisplayString(E.trackIndex+1),1),e.createElementVNode("div",Bb,[E.clips.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,class:"track-btn","data-testid":`btn-mute-track-${E.trackIndex}`,"aria-label":`${r.value?"Unmute":"Mute"} track ${E.trackIndex+1}`,onClick:h},[e.createVNode(e.unref(B.IonIcon),{icon:r.value?e.unref(Ru):e.unref(Iu)},null,8,["icon"])],8,Ib)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:"track-timeline",style:e.normalizeStyle(c.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.clips,C=>(e.openBlock(),e.createElementBlock("div",{key:C.id,class:e.normalizeClass(["timeline-clip",{selected:C.id===i.value}]),style:e.normalizeStyle(d(C)),"data-testid":`clip-${C.id}`,onMousedown:w=>v(C,w),onClick:w=>p(C)},[e.createElementVNode("div",Rb,[e.createElementVNode("span",$b,e.toDisplayString(m(C)),1),C.thumbnail?(e.openBlock(),e.createElementBlock("div",Db,[e.createElementVNode("img",{src:C.thumbnail,alt:m(C)},null,8,Ub)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",{class:"trim-handle trim-start",onMousedown:e.withModifiers(w=>y(C,"start",w),["stop"]),"aria-label":`Trim start of ${m(C)}`},null,40,Ob),e.createElementVNode("div",{class:"trim-handle trim-end",onMousedown:e.withModifiers(w=>y(C,"end",w),["stop"]),"aria-label":`Trim end of ${m(C)}`},null,40,Ab)],46,Fb))),128))],4)],8,_b))}}),zb=Me(Lb,[["__scopeId","data-v-48e480d2"]]),Pb={class:"video-timeline"},jb={class:"timeline-tracks"},Wb=["aria-label","aria-valuenow","aria-valuemax"],Zb={class:"timeline-controls"},Xb={class:"zoom-level"},Hb=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 w=Math.max(0,...t.clips.map(f=>f.track||0));return Array(w+1).fill(null)}),d=e.computed(()=>`${t.currentTime/t.duration*100}%`);function u(w){return t.clips.filter(f=>(f.track||0)===w)}function m(w){const f=Math.floor(w/60),x=Math.floor(w%60);return`${f}:${x.toString().padStart(2,"0")}`}function p(w,f){o("clip-move",w,f)}function h(w,f,x){o("clip-trim",w,f,x)}function v(w){r.value=w}function y(){i.value=Math.min(i.value*1.2,5)}function E(){i.value=Math.max(i.value/1.2,.5)}function _(){s.value=!0;const w=x=>{if(!s.value||!l.value)return;const $=l.value.getBoundingClientRect(),S=Math.max(0,Math.min(x.clientX-$.left,$.width))/$.width*t.duration;o("seek",S)},f=()=>{s.value=!1,document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",f)};document.addEventListener("mousemove",w),document.addEventListener("mouseup",f)}function C(w){let f=t.currentTime;switch(w.key){case"ArrowLeft":f=Math.max(0,t.currentTime-1);break;case"ArrowRight":f=Math.min(t.duration,t.currentTime+1);break;case"Home":f=0;break;case"End":f=t.duration;break;default:return}w.preventDefault(),o("seek",f)}return e.onMounted(()=>{l.value=document.querySelector(".video-timeline")}),e.onUnmounted(()=>{}),(w,f)=>(e.openBlock(),e.createElementBlock("div",Pb,[e.createVNode(Nb,{duration:w.duration,zoom:i.value},null,8,["duration","zoom"]),e.createElementVNode("div",jb,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(x,$)=>(e.openBlock(),e.createBlock(zb,{key:`track-${$}`,"data-testid":`track-${$}`,clips:u($),"track-index":$,zoom:i.value,duration:w.duration,onClipMove:p,onClipTrim:h,onClipSelect:v},null,8,["data-testid","clips","track-index","zoom","duration"]))),128))]),e.createElementVNode("div",{class:"timeline-playhead",style:e.normalizeStyle({left:d.value}),onMousedown:_,"data-testid":"playhead","aria-label":`Playhead at ${m(w.currentTime)}`,role:"slider","aria-valuenow":w.currentTime,"aria-valuemax":w.duration,tabindex:"0",onKeydown:C},null,44,Wb),e.createElementVNode("div",Zb,[e.createElementVNode("button",{"data-testid":"btn-zoom-in","aria-label":"Zoom in",onClick:y},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(ji)},null,8,["icon"])]),e.createElementVNode("span",Xb,e.toDisplayString(Math.round(i.value*100))+"%",1),e.createElementVNode("button",{"data-testid":"btn-zoom-out","aria-label":"Zoom out",onClick:E},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Su)},null,8,["icon"])])])]))}}),Gb=Me(Hb,[["__scopeId","data-v-001df415"]]),Jb={class:"video-filters-panel"},Yb={class:"filter-controls"},Kb=["for"],qb={class:"filter-slider-group"},Qb=["id","onUpdate:modelValue","min","max","step","data-testid","aria-label","aria-valuenow","aria-valuemin","aria-valuemax","onInput"],e2={class:"filter-value"},t2={class:"filter-actions"},n2={key:0,class:"filter-presets"},o2={class:"preset-list"},a2=["data-testid","aria-label","onClick"],i2=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((p,h)=>(p[h.type]=h.default,p),{})),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(p,h){switch(p){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(p){return["brightness","contrast","saturation","hue","blur","sharpen","sepia","grayscale"].includes(p)}function c(p){if(!l(p))return;const h={id:`filter-${p}`,filterId:p,params:{value:i[p]},intensity:1};t("filter-change",h)}function d(){o.forEach(p=>{i[p.type]=p.default,c(p.type)})}function u(){const p=prompt("Enter preset name:");if(!p)return;const h={id:`custom-${Date.now()}`,name:p,values:{...i}};r.value.push(h)}function m(p){Object.entries(p.values).forEach(([h,v])=>{i[h]=v,c(h)})}return(p,h)=>(e.openBlock(),e.createElementBlock("div",Jb,[h[3]||(h[3]=e.createElementVNode("h3",null,"Video Filters",-1)),e.createElementVNode("div",Yb,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(o,v=>e.createElementVNode("div",{key:v.type,class:"filter-control"},[e.createElementVNode("label",{for:`filter-${v.type}`},e.toDisplayString(v.label),9,Kb),e.createElementVNode("div",qb,[e.withDirectives(e.createElementVNode("input",{id:`filter-${v.type}`,"onUpdate:modelValue":y=>i[v.type]=y,type:"range",min:v.min,max:v.max,step:v.step,class:"filter-slider","data-testid":`filter-${v.type}`,"aria-label":`${v.label} filter`,"aria-valuenow":i[v.type],"aria-valuemin":v.min,"aria-valuemax":v.max,onInput:y=>c(v.type)},null,40,Qb),[[e.vModelText,i[v.type],void 0,{number:!0}]]),e.createElementVNode("span",e2,e.toDisplayString(s(v.type,i[v.type])),1)])])),64))]),e.createElementVNode("div",t2,[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(B.IonIcon),{icon:e.unref(Un)},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(B.IonIcon),{icon:e.unref(Zi)},null,8,["icon"]),h[1]||(h[1]=e.createTextVNode(" Save as Preset ",-1))])]),r.value.length>0?(e.openBlock(),e.createElementBlock("div",n2,[h[2]||(h[2]=e.createElementVNode("h4",null,"Presets",-1)),e.createElementVNode("div",o2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,v=>(e.openBlock(),e.createElementBlock("button",{key:v.id,class:"preset-btn","data-testid":`preset-${v.id}`,"aria-label":`Apply ${v.name} preset`,onClick:y=>m(v)},e.toDisplayString(v.name),9,a2))),128))])])):e.createCommentVNode("",!0)]))}}),r2=Me(i2,[["__scopeId","data-v-5ad2ac63"]]),s2={class:"video-text-panel"},l2={class:"text-input-group"},c2={class:"text-options"},d2={class:"option-row"},u2={class:"option-row"},m2={class:"option-row"},p2={class:"option-row"},f2={class:"checkbox-label"},h2={class:"option-row"},v2={class:"text-overlay-list"},g2={key:0,class:"empty-state"},y2=["data-testid"],w2={class:"overlay-preview"},b2={class:"overlay-controls"},k2=["data-testid","aria-label","onClick"],x2=["data-testid","aria-label","onClick"],E2=["data-testid","aria-label","onClick"],V2=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(m=>m.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",s2,[u[17]||(u[17]=e.createElementVNode("h3",null,"Text Overlays",-1)),e.createElementVNode("div",l2,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[0]||(u[0]=m=>i.text=m),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(B.IonIcon),{icon:e.unref(ji)},null,8,["icon"]),u[7]||(u[7]=e.createTextVNode(" Add ",-1))])]),e.createElementVNode("div",c2,[e.createElementVNode("div",d2,[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]=m=>i.fontFamily=m),"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",u2,[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]=m=>i.fontSize=m),type:"number",min:"10",max:"200","data-testid":"input-font-size"},null,512),[[e.vModelText,i.fontSize,void 0,{number:!0}]])]),e.createElementVNode("div",m2,[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]=m=>i.color=m),type:"color","data-testid":"input-text-color"},null,512),[[e.vModelText,i.color]])]),e.createElementVNode("div",p2,[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]=m=>i.backgroundColor=m),type:"color","data-testid":"input-bg-color"},null,512),[[e.vModelText,i.backgroundColor]]),e.createElementVNode("label",f2,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[5]||(u[5]=m=>i.hasBackground=m),type:"checkbox","data-testid":"checkbox-bg"},null,512),[[e.vModelCheckbox,i.hasBackground]]),u[12]||(u[12]=e.createTextVNode(" Enable ",-1))])]),e.createElementVNode("div",h2,[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]=m=>i.animation=m),"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",v2,[u[16]||(u[16]=e.createElementVNode("h4",null,"Active Overlays",-1)),o.value.length===0?(e.openBlock(),e.createElementBlock("div",g2," No text overlays added yet ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(m,p)=>(e.openBlock(),e.createElementBlock("div",{key:m.id,class:"text-overlay-item","data-testid":`overlay-${p}`},[e.createElementVNode("div",w2,[e.createElementVNode("span",{style:e.normalizeStyle({fontFamily:m.fontFamily,fontSize:`${Math.min(m.fontSize/4,16)}px`,color:m.color})},e.toDisplayString(m.text),5)]),e.createElementVNode("div",b2,[e.createElementVNode("button",{class:"edit-btn","data-testid":`btn-edit-${p}`,"aria-label":`Edit overlay: ${m.text}`,onClick:h=>l(m)},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(ru)},null,8,["icon"])],8,k2),e.createElementVNode("button",{class:"duplicate-btn","data-testid":`btn-duplicate-${p}`,"aria-label":`Duplicate overlay: ${m.text}`,onClick:h=>c(m)},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(iu)},null,8,["icon"])],8,x2),e.createElementVNode("button",{class:"remove-btn","data-testid":`btn-remove-${p}`,"aria-label":`Remove overlay: ${m.text}`,onClick:h=>s(m.id)},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(_u)},null,8,["icon"])],8,E2)])],8,y2))),128))])]))}}),S2=Me(V2,[["__scopeId","data-v-4d240e1e"]]),C2={class:"video-tools-panel"},N2={class:"tool-tabs"},_2=["data-testid","aria-label","aria-selected","onClick"],T2={class:"tool-content"},M2={key:0,class:"trim-panel",role:"tabpanel","aria-label":"Trim controls"},B2={class:"trim-actions"},I2={key:3,class:"transitions-panel",role:"tabpanel","aria-label":"Transition controls"},F2={class:"transition-types"},R2=["data-testid","aria-label","onClick"],$2={class:"transition-preview"},D2=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:el},{id:"filters",name:"Filters",icon:an},{id:"text",name:"Text",icon:il},{id:"transitions",name:"Transitions",icon:es}],t=[{id:"fade",name:"Fade",icon:oi},{id:"slide-left",name:"Slide Left",icon:qd},{id:"slide-right",name:"Slide Right",icon:Qd},{id:"dissolve",name:"Dissolve",icon:oi},{id:"wipe",name:"Wipe",icon:es},{id:"zoom",name:"Zoom",icon:oi}];return(o,i)=>(e.openBlock(),e.createElementBlock("div",C2,[e.createElementVNode("div",N2,[(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(B.IonIcon),{icon:r.icon},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(r.name),1)],10,_2)),64))]),e.createElementVNode("div",T2,[o.activeTool==="trim"?(e.openBlock(),e.createElementBlock("div",M2,[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",B2,[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(B.IonIcon),{icon:e.unref(qr)},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(B.IonIcon),{icon:e.unref(qr)},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(B.IonIcon),{icon:e.unref(Fn)},null,8,["icon"]),i[7]||(i[7]=e.createTextVNode(" Clear ",-1))])])])):e.createCommentVNode("",!0),o.activeTool==="filters"?(e.openBlock(),e.createBlock(r2,{key:1,onFilterChange:i[3]||(i[3]=r=>o.$emit("filter-change",r))})):e.createCommentVNode("",!0),o.activeTool==="text"?(e.openBlock(),e.createBlock(S2,{key:2,onTextAdd:i[4]||(i[4]=r=>o.$emit("text-add",r))})):e.createCommentVNode("",!0),o.activeTool==="transitions"?(e.openBlock(),e.createElementBlock("div",I2,[i[10]||(i[10]=e.createElementVNode("h3",null,"Transitions",-1)),e.createElementVNode("div",F2,[(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",$2,[e.createVNode(e.unref(B.IonIcon),{icon:r.icon},null,8,["icon"])]),e.createElementVNode("span",null,e.toDisplayString(r.name),1)],8,R2)),64))])])):e.createCommentVNode("",!0)])]))}}),U2=Me(D2,[["__scopeId","data-v-fc135306"]]),O2={class:"video-export-panel"},A2={class:"export-presets"},L2=["value"],z2={key:0,class:"preset-details"},P2={class:"detail-row"},j2={class:"detail-row"},W2={class:"detail-row"},Z2={class:"advanced-options"},X2={class:"options-content"},H2={class:"option-group"},G2={class:"option-group"},J2={class:"option-group"},Y2=["disabled"],K2={key:1,class:"export-progress"},q2={class:"progress-message"},Q2={class:"progress-bar"},ek=["aria-valuenow"],tk={class:"progress-percentage"},nk=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",O2,[u[14]||(u[14]=e.createElementVNode("h3",null,"Export Video",-1)),e.createElementVNode("div",A2,[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]=m=>i.value=m),"data-testid":"preset-select","aria-label":"Select export preset"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.presets,m=>(e.openBlock(),e.createElementBlock("option",{key:m.id,value:m.id},e.toDisplayString(m.name),9,L2))),128))],512),[[e.vModelSelect,i.value]])]),s.value?(e.openBlock(),e.createElementBlock("div",z2,[e.createElementVNode("div",P2,[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",j2,[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",W2,[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",Z2,[u[12]||(u[12]=e.createElementVNode("summary",null,"Advanced Options",-1)),e.createElementVNode("div",X2,[e.createElementVNode("div",H2,[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]=m=>r.quality=m),"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",G2,[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]=m=>r.bitrate=m),type:"number",min:"1",max:"50","data-testid":"bitrate-input"},null,512),[[e.vModelText,r.bitrate,void 0,{number:!0}]])]),e.createElementVNode("div",J2,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[3]||(u[3]=m=>r.includeAudio=m),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(B.IonSpinner),{key:0,name:"crescent"})):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(po)},null,8,["icon"]),u[13]||(u[13]=e.createTextVNode(" Export Video ",-1))],64))],8,Y2),d.isExporting?(e.openBlock(),e.createElementBlock("div",K2,[e.createElementVNode("div",q2,e.toDisplayString(l.value),1),e.createElementVNode("div",Q2,[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,ek)]),e.createElementVNode("div",tk,e.toDisplayString(d.exportProgress)+"% ",1)])):e.createCommentVNode("",!0)]))}}),ok=Me(nk,[["__scopeId","data-v-5caf8fe6"]]),ak=["data-testid"],ik={class:"progress-header"},rk={class:"file-info"},sk={class:"file-details"},lk={class:"file-name"},ck={class:"file-meta"},dk={class:"file-size"},uk={key:0,class:"separator"},mk={key:1,class:"upload-speed"},pk={key:2,class:"separator"},fk={key:3,class:"time-remaining"},hk={class:"progress-actions"},vk={key:0,class:"status-icon completed","data-testid":"video-upload-status-completed"},gk={key:1,class:"status-icon error","data-testid":"video-upload-status-error"},yk={key:2,class:"status-icon processing","data-testid":"video-upload-status-processing",role:"status","aria-label":"Processing video"},wk=["aria-valuenow","aria-label"],bk={class:"progress-bar"},kk={class:"progress-percent"},xk={key:1,class:"error-message","data-testid":"video-upload-error"},Ek={key:2,class:"thumbnail-preview","data-testid":"video-upload-thumbnail"},Vk=["src","alt"],Sk={key:0,class:"video-duration"},Ck=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(()=>rl),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 p=n.upload.timeRemaining;if(p<60)return`${Math.round(p)}s`;const h=Math.floor(p/60);return h<60?`${h}m ${Math.round(p%60)}s`:`${Math.floor(h/60)}h ${h%60}m`}),l=e.computed(()=>{var p;return n.upload.status==="completed"&&((p=n.upload.media)!=null&&p.thumbnail_url)?n.upload.media.thumbnail_url:null}),c=e.computed(()=>{var p;return(p=n.upload.media)==null?void 0:p.duration});function d(p){if(p===0)return"0 B";const h=["B","KB","MB","GB","TB"],v=1024,y=Math.floor(Math.log(p)/Math.log(v));return`${(p/Math.pow(v,y)).toFixed(1)} ${h[y]}`}function u(p){if(p===0)return"0 B/s";const h=["B/s","KB/s","MB/s","GB/s"],v=1024,y=Math.floor(Math.log(p)/Math.log(v));return`${(p/Math.pow(v,y)).toFixed(1)} ${h[y]}`}function m(p){const h=Math.floor(p/3600),v=Math.floor(p%3600/60),y=Math.floor(p%60);return h>0?`${h}:${v.toString().padStart(2,"0")}:${y.toString().padStart(2,"0")}`:`${v}:${y.toString().padStart(2,"0")}`}return(p,h)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["upload-progress-item",t.value]),"data-testid":`video-upload-progress-${p.upload.id}`},[e.createElementVNode("div",ik,[e.createElementVNode("div",rk,[e.createVNode(e.unref(B.IonIcon),{icon:o.value,class:"file-icon","aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("div",sk,[e.createElementVNode("h4",lk,e.toDisplayString(p.upload.filename),1),e.createElementVNode("p",ck,[e.createElementVNode("span",dk,e.toDisplayString(d(p.upload.bytesTotal||0)),1),p.upload.status==="uploading"?(e.openBlock(),e.createElementBlock("span",uk,"•")):e.createCommentVNode("",!0),p.upload.status==="uploading"?(e.openBlock(),e.createElementBlock("span",mk,e.toDisplayString(u(p.upload.uploadSpeed||0)),1)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("span",pk,"•")):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("span",fk,e.toDisplayString(s.value)+" remaining ",1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",hk,[p.upload.status==="completed"?(e.openBlock(),e.createElementBlock("div",vk,[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(qs)},null,8,["icon"])])):p.upload.status==="error"?(e.openBlock(),e.createElementBlock("div",gk,[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Kd),"aria-hidden":"true"},null,8,["icon"])])):p.upload.status==="processing"?(e.openBlock(),e.createElementBlock("div",yk,[e.createVNode(e.unref(B.IonSpinner),{name:"crescent"})])):e.createCommentVNode("",!0),p.upload.status==="uploading"?(e.openBlock(),e.createBlock(e.unref(B.IonButton),{key:3,fill:"clear",size:"small",onClick:h[0]||(h[0]=v=>p.$emit("cancel")),"data-testid":"btn-cancel-video-upload","aria-label":"Cancel upload"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Fn),slot:"icon-only"},null,8,["icon"])]),_:1})):p.upload.status==="error"?(e.openBlock(),e.createBlock(e.unref(B.IonButton),{key:4,fill:"clear",size:"small",onClick:h[1]||(h[1]=v=>p.$emit("retry")),"data-testid":"btn-retry-video-upload","aria-label":"Retry upload"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Un),slot:"icon-only"},null,8,["icon"])]),_:1})):p.upload.status==="completed"?(e.openBlock(),e.createBlock(e.unref(B.IonButton),{key:5,fill:"clear",size:"small",onClick:h[2]||(h[2]=v=>p.$emit("remove")),"data-testid":"btn-remove-video-upload","aria-label":"Remove from list"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Fn),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":p.upload.status==="processing"?"Processing progress":"Upload progress"},[e.createElementVNode("div",bk,[e.createElementVNode("div",{class:e.normalizeClass(["progress-fill",{indeterminate:p.upload.status==="processing"}]),style:e.normalizeStyle({width:r.value+"%"})},null,6)]),e.createElementVNode("span",kk,e.toDisplayString(Math.round(r.value))+"%",1)],8,wk)):e.createCommentVNode("",!0),p.upload.error?(e.openBlock(),e.createElementBlock("div",xk,[e.createVNode(e.unref(B.IonIcon),{icon:e.unref($u)},null,8,["icon"]),e.createElementVNode("span",null,e.toDisplayString(p.upload.error),1)])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",Ek,[e.createElementVNode("img",{src:l.value,alt:p.upload.filename},null,8,Vk),c.value?(e.openBlock(),e.createElementBlock("div",Sk,e.toDisplayString(m(c.value)),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],10,ak))}}),Nk=Me(Ck,[["__scopeId","data-v-9eacbf91"]]),fi=4,_k=500,Tk=new Set([408,425,429,500,502,503,504,520,521,522,523,524,525]);function Aa(a){return typeof a=="object"&&a!==null}function As(a){return Aa(a)?typeof a.upload_url=="string"&&typeof a.upload_id=="string"&&typeof a.media_uuid=="string"&&typeof a.expires_at=="string":!1}function Mk(a){if(As(a))return a;if(Aa(a)&&As(a.data))return a.data;throw new Error("Invalid upload response from backend")}function Ls(a){return Aa(a)?typeof a.uuid=="string"&&typeof a.processing_status=="string":!1}function Bk(a){if(Ls(a))return a;if(Aa(a)&&Ls(a.data))return a.data;throw new Error("Invalid media response from backend")}function zo(a){return a?{...a}:{}}function zs(a,n="PUT"){return typeof a.method=="string"&&a.method.trim()!==""?a.method.trim().toUpperCase():n}function Ik(a){return a.resumable===!0?!0:/tusupload/i.test(a.upload_url)}function Fk(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 Rk(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} ${Fk(i)}`).join(",")}function Po(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 $k(a,n){return a instanceof Error?a:new Error(n)}function Dk(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 Ps(a){const n=Math.max(0,a-1),t=_k*Math.pow(2,n);return Math.min(5e3,t)}function js(a){return new Promise(n=>{window.setTimeout(n,a)})}async function Ws(a,n){for(let t=1;t<=fi;t+=1)try{const o=await n();if(o.ok||!Tk.has(o.status)||t>=fi)return o;await js(Ps(t))}catch(o){if(!Dk(o)||t>=fi)throw o;await js(Ps(t))}throw new Error(`${a} failed after retry attempts`)}function Uk(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 k=Array.from(n.value.values());return k.length===0?0:k.reduce((F,A)=>F+A.progress,0)/k.length});function d(k){o.value=k}function u(){}async function m(k){var F;const T=k.filter(A=>p(A));if(T.length!==0&&((F=a.onFilesSelected)==null||F.call(a,T),a.autoUpload!==!1))for(const A of T)await h(A)}function p(k){return!(a.maxFileSize&&k.size>a.maxFileSize||a.allowedFormats&&a.allowedFormats.length>0&&!a.allowedFormats.includes(k.type))}async function h(k){var A,R,j;const T=O(k);if(n.value.has(T)){const K=n.value.get(T);if((K==null?void 0:K.status)==="uploading")return}const F={id:T,file:k,filename:k.name,progress:0,status:"pending",startedAt:new Date,bytesTotal:k.size,bytesUploaded:0};n.value.set(F.id,F),t.value.add(F.id);try{F.status="uploading",(A=a.onUploadStart)==null||A.call(a,F);const K=await v(k);a.resumable===!0||K.resumable===!0?await E(F,K):await y(F,K),F.status="processing",F.progress=100;const D=await x(K.media_uuid);F.status="completed",F.media=D,(R=a.onUploadComplete)==null||R.call(a,D)}catch(K){if(F.status!=="cancelled"){const I=$k(K,"Upload failed");F.status="error",F.error=I.message,(j=a.onUploadError)==null||j.call(a,I,F)}}finally{t.value.delete(F.id),i.delete(F.id),r.delete(F.id)}}async function v(k){if(!o.value)throw new Error("API client not configured");const T={collection:a.collection||"videos",filename:k.name,size:k.size,mime_type:k.type,...a.ownerUuid!==void 0?{ownerUuid:a.ownerUuid}:{},...a.ownerType!==void 0?{ownerType:a.ownerType}:{}},F=await o.value.post("/api/v1/video/upload",T);return Mk(F)}async function y(k,T){const F=new XMLHttpRequest,A=zs(T),R=zo(T.headers);return new Promise((j,K)=>{F.upload.addEventListener("progress",I=>{var D;I.lengthComputable&&(Po(k,I.loaded),(D=a.onUploadProgress)==null||D.call(a,k))}),F.addEventListener("load",()=>{i.delete(k.id),F.status>=200&&F.status<300?j():K(new Error(`Upload failed with status ${F.status}`))}),F.addEventListener("error",()=>{i.delete(k.id),K(new Error("Upload failed"))}),F.addEventListener("abort",()=>{i.delete(k.id),K(new Error("Upload cancelled"))}),F.open(A,T.upload_url),Object.entries(R).forEach(([I,D])=>{F.setRequestHeader(I,D)}),!Object.keys(R).some(I=>I.toLowerCase()==="content-type")&&k.file.type&&F.setRequestHeader("Content-Type",k.file.type),i.set(k.id,F),F.send(k.file)})}async function E(k,T){var K;if(Ik(T)){await _(k,T);return}const F=a.chunkSize||5*1024*1024,A=C(k.file,F),R=new AbortController;r.set(k.id,R);const j=await f(T.upload_id);j&&(A.forEach(I=>{I.end<=j.bytesUploaded&&(I.uploaded=!0)}),Po(k,j.bytesUploaded));for(const I of A)I.uploaded||(await w(k,T,I,R),Po(k,I.end),(K=a.onUploadProgress)==null||K.call(a,k))}async function _(k,T){var Z;const F=new AbortController;r.set(k.id,F);const A={...zo(T.headers),"Tus-Resumable":"1.0.0","Upload-Length":String(k.file.size),"Upload-Metadata":Rk(k,T)},R=await Ws("Resumable upload initialization",()=>fetch(T.upload_url,{method:"POST",headers:A,signal:F.signal}));if(!R.ok)throw new Error(`Failed to initialize resumable upload: ${R.status}`);const j=R.headers.get("Location");if(!j)throw new Error("Resumable upload endpoint did not return upload location");const K=new URL(j,T.upload_url).toString(),I=a.chunkSize||5*1024*1024;let D=0;for(;D<k.file.size;){const W=Math.min(D+I,k.file.size),oe=k.file.slice(D,W),we={...zo(T.headers),"Tus-Resumable":"1.0.0","Upload-Offset":String(D),"Content-Type":"application/offset+octet-stream"},Ce=await Ws("Resumable chunk upload",()=>fetch(K,{method:"PATCH",headers:we,body:oe,signal:F.signal}));if(Ce.status===409){const M=Number(Ce.headers.get("Upload-Offset")??"-1");if(Number.isFinite(M)&&M>=0){D=M;continue}}if(!Ce.ok)throw new Error(`Resumable chunk upload failed: ${Ce.status}`);const ne=Number(Ce.headers.get("Upload-Offset")??String(W));D=Number.isFinite(ne)&&ne>D?ne:W,Po(k,D),(Z=a.onUploadProgress)==null||Z.call(a,k)}}function C(k,T){const F=[];let A=0,R=0;for(;A<k.size;){const j=Math.min(A+T,k.size);F.push({start:A,end:j,blob:k.slice(A,j),index:R,uploaded:!1}),A=j,R++}return F}async function w(k,T,F,A){const R={...zo(T.headers),"Content-Range":`bytes ${F.start}-${F.end-1}/${k.file.size}`,"Content-Type":k.file.type||"application/octet-stream"},j=await fetch(T.upload_url,{method:zs(T),headers:R,body:F.blob,signal:A.signal});if(!j.ok)throw new Error(`Chunk upload failed: ${j.status}`);F.uploaded=!0}async function f(k){return null}async function x(k){if(!o.value)throw new Error("API client not configured");const T=60;let F=0;for(;F<T;){const A=await o.value.get(`/api/v1/video/${k}`),R=Bk(A),j=String(R.processing_status);if(j==="ready")return R;if(j==="failed"||j==="error")throw new Error("Video processing failed");await new Promise(K=>{window.setTimeout(K,5e3)}),F++}throw new Error("Video processing timeout")}function $(k){const T=n.value.get(k);if(!T)return;const F=i.get(k);F&&(F.abort(),i.delete(k));const A=r.get(k);A&&(A.abort(),r.delete(k)),T.status="cancelled",T.error="Upload cancelled",t.value.delete(k)}async function N(k){const T=n.value.get(k);T&&(T.status="pending",T.error="",T.progress=0,T.bytesUploaded=0,await h(T.file))}function g(k){n.value.delete(k),t.value.delete(k),i.delete(k),r.delete(k)}function S(){Array.from(n.value.entries()).forEach(([k,T])=>{T.status==="completed"&&n.value.delete(k)})}function O(k){return`${k.name}-${k.size}-${Date.now()}`}return{uploads:l,isUploading:s,totalProgress:c,openFilePicker:u,handleFileSelect:m,validateFile:p,startUpload:h,cancelUpload:$,retryUpload:N,removeUpload:g,clearCompleted:S,setApiClient:d}}const Ok=["accept","multiple"],Ak={key:0,class:"upload-trigger","data-testid":"video-uploader-trigger"},Lk=["onKeydown"],zk={key:1,class:"upload-list","data-testid":"video-upload-list"},Pk={class:"drag-content"},jk=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:m,setApiClient:p}=Uk({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:f=>o("upload-start",f),onUploadProgress:f=>o("upload-progress",f),onUploadComplete:f=>o("upload-complete",f),onUploadError:(f,x)=>o("upload-error",f,x),onFilesSelected:f=>o("files-selected",f)});t.apiClient&&p(t.apiClient);const h=e.computed(()=>t.allowedFormats.join(",")),v=e.computed(()=>t.multiple||s.value.length===0);function y(){i.value&&i.value.click()}function E(f){const x=f.target,$=Array.from(x.files||[]);$.length>0&&(c($),x.value="")}function _(f){var N;f.preventDefault(),r.value=!1;const $=Array.from(((N=f.dataTransfer)==null?void 0:N.files)||[]).filter(g=>g.type.startsWith("video/"));$.length>0&&c($)}function C(f){var x;f.preventDefault(),(x=f.dataTransfer)!=null&&x.types.includes("Files")&&(r.value=!0)}function w(f){f.target.closest(".video-uploader")||(r.value=!1)}return e.onMounted(()=>{document.addEventListener("dragover",C),document.addEventListener("dragleave",w),document.addEventListener("drop",f=>f.preventDefault())}),e.onUnmounted(()=>{document.removeEventListener("dragover",C),document.removeEventListener("dragleave",w),document.removeEventListener("drop",f=>f.preventDefault())}),(f,x)=>(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:f.multiple,onChange:E,"data-testid":"video-uploader-input","aria-label":"Select video files to upload",hidden:""},null,40,Ok),!e.unref(l)||v.value?(e.openBlock(),e.createElementBlock("div",Ak,[e.renderSlot(f.$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(B.IonIcon),{icon:e.unref(rl),class:"upload-icon","aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("h3",null,e.toDisplayString(f.label),1),e.createElementVNode("p",null,e.toDisplayString(f.description),1),e.createVNode(e.unref(B.IonButton),{size:"small","data-testid":"btn-select-video","aria-label":"Select video file"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(ji),slot:"start","aria-hidden":"true"},null,8,["icon"]),x[2]||(x[2]=e.createTextVNode(" Select Video ",-1))]),_:1})],40,Lk)],!0)])):e.createCommentVNode("",!0),e.unref(s).length>0?(e.openBlock(),e.createElementBlock("div",zk,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s),$=>(e.openBlock(),e.createBlock(Nk,{key:$.id,upload:$,onCancel:N=>e.unref(d)($.id),onRetry:N=>e.unref(u)($.id),onRemove:N=>e.unref(m)($.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:_,onDragover:x[0]||(x[0]=e.withModifiers(()=>{},["prevent"])),onDragleave:x[1]||(x[1]=$=>r.value=!1)},[e.createElementVNode("div",Pk,[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(po),"aria-hidden":"true"},null,8,["icon"]),x[3]||(x[3]=e.createElementVNode("p",null,"Drop video files here",-1))])],32)):e.createCommentVNode("",!0)],2))}}),Wk=Me(jk,[["__scopeId","data-v-ea7587f7"]]),Zk=["aria-valuenow","aria-valuemax","aria-label"],Xk={class:"progress-bar"},Hk={class:"time-display","data-testid":"video-time-display"},Gk={class:"current-time"},Jk={class:"duration"},Yk={class:"control-buttons"},Kk={class:"controls-left"},qk=["aria-label"],Qk={class:"controls-center"},ex={key:0,class:"volume-controls"},tx=["aria-label"],nx=["value"],ox={class:"controls-right"},ax={key:0,class:"quality-selector"},ix=["aria-expanded"],rx={class:"quality-label"},sx={key:0,class:"quality-menu","data-testid":"video-quality-menu",role:"menu"},lx=["data-testid","aria-label","onClick"],cx=["aria-label"],dx=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=B.isPlatform("mobile"),c="pictureInPictureEnabled"in document,d=e.computed(()=>({width:`${t.currentTime/t.duration*100}%`})),u=e.computed(()=>({left:`${t.currentTime/t.duration*100}%`})),m=e.computed(()=>{if(!t.buffered||t.buffered.length===0)return{width:"0%"};for(let f=0;f<t.buffered.length;f++){const x=t.buffered.start(f),$=t.buffered.end(f);if(t.currentTime>=x&&t.currentTime<=$)return{width:`${$/t.duration*100}%`}}return t.buffered.length>0?{width:`${t.buffered.end(0)/t.duration*100}%`}:{width:"0%"}}),p=e.computed(()=>t.muted||t.volume===0?Fu:t.volume<33?Mu:t.volume<66?Bu:Tu);let h=null;function v(){i.value=!0,y()}function y(){h&&clearTimeout(h),t.playing&&!l&&(h=setTimeout(()=>{i.value=!1},3e3))}function E(f){if(!s.value||t.isLive)return;const x=s.value.getBoundingClientRect(),N=(f.clientX-x.left)/x.width*t.duration;o("seek",Math.max(0,Math.min(N,t.duration)))}function _(f){const x=f.target;o("setVolume",parseInt(x.value))}function C(f){o("selectQuality",f),r.value=!1}function w(f){if(!isFinite(f))return"0:00";const x=Math.floor(f/3600),$=Math.floor(f%3600/60),N=Math.floor(f%60);return x>0?`${x}:${$.toString().padStart(2,"0")}:${N.toString().padStart(2,"0")}`:`${$}:${N.toString().padStart(2,"0")}`}return e.onMounted(()=>{document.addEventListener("mousemove",v),y()}),e.onUnmounted(()=>{document.removeEventListener("mousemove",v),h&&clearTimeout(h)}),(f,x)=>(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(f.currentTime),"aria-valuemin":"0","aria-valuemax":Math.round(f.duration),"aria-label":f.isLive?"Live stream":"Video progress",tabindex:"0",onClick:E},[e.createElementVNode("div",Xk,[e.createElementVNode("div",{class:"progress-buffered",style:e.normalizeStyle(m.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",Hk,[e.createElementVNode("span",Gk,e.toDisplayString(w(f.currentTime)),1),x[7]||(x[7]=e.createElementVNode("span",{class:"separator"},"/",-1)),e.createElementVNode("span",Jk,e.toDisplayString(f.isLive?"LIVE":w(f.duration)),1)])],8,Zk),e.createElementVNode("div",Yk,[e.createElementVNode("div",Kk,[e.createElementVNode("button",{class:"control-btn play-pause","data-testid":"btn-video-play-pause",onClick:x[0]||(x[0]=$=>f.$emit("play-pause")),"aria-label":f.playing?"Pause":"Play"},[e.createVNode(e.unref(B.IonIcon),{icon:f.playing?e.unref(fu):e.unref(vu),"aria-hidden":"true"},null,8,["icon"])],8,qk),f.isLive?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,class:"control-btn skip-backward","data-testid":"btn-video-skip-backward",onClick:x[1]||(x[1]=$=>f.$emit("skip-backward")),"aria-label":"Skip backward 10 seconds"},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(gu),"aria-hidden":"true"},null,8,["icon"]),x[8]||(x[8]=e.createElementVNode("span",{class:"skip-label"},"10",-1))])),f.isLive?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:1,class:"control-btn skip-forward","data-testid":"btn-video-skip-forward",onClick:x[2]||(x[2]=$=>f.$emit("skip-forward")),"aria-label":"Skip forward 10 seconds"},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(bu),"aria-hidden":"true"},null,8,["icon"]),x[9]||(x[9]=e.createElementVNode("span",{class:"skip-label"},"10",-1))]))]),e.createElementVNode("div",Qk,[e.unref(l)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",ex,[e.createElementVNode("button",{class:"control-btn mute-btn","data-testid":"btn-video-mute",onClick:x[3]||(x[3]=$=>f.$emit("toggleMute")),"aria-label":f.muted?"Unmute":"Mute"},[e.createVNode(e.unref(B.IonIcon),{icon:p.value,"aria-hidden":"true"},null,8,["icon"])],8,tx),e.createElementVNode("input",{type:"range",class:"volume-slider","data-testid":"slider-video-volume",min:"0",max:"100",value:f.muted?0:f.volume,onInput:_,"aria-label":"Volume"},null,40,nx)]))]),e.createElementVNode("div",ox,[f.qualityLevels.length>1?(e.openBlock(),e.createElementBlock("div",ax,[e.createElementVNode("button",{class:"control-btn quality-btn","data-testid":"btn-video-quality",onClick:x[4]||(x[4]=$=>r.value=!r.value),"aria-label":"Quality settings","aria-expanded":r.value},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Cu),"aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("span",rx,e.toDisplayString(f.currentQuality),1)],8,ix),r.value?(e.openBlock(),e.createElementBlock("div",sx,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.qualityLevels,$=>(e.openBlock(),e.createElementBlock("button",{key:$.label,class:e.normalizeClass(["quality-option",{active:$.label===f.currentQuality}]),"data-testid":`btn-video-quality-${$.label}`,"aria-label":`Set quality to ${$.label}`,role:"menuitem",onClick:N=>C($)},e.toDisplayString($.label),11,lx))),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:x[5]||(x[5]=$=>f.$emit("togglePiP")),"aria-label":"Picture in Picture"},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Nu),"aria-hidden":"true"},null,8,["icon"])])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"control-btn fullscreen-btn","data-testid":"btn-video-fullscreen",onClick:x[6]||(x[6]=$=>f.$emit("toggleFullscreen")),"aria-label":f.fullscreen?"Exit fullscreen":"Enter fullscreen"},[e.createVNode(e.unref(B.IonIcon),{icon:f.fullscreen?e.unref(au):e.unref(su),"aria-hidden":"true"},null,8,["icon"])],8,cx)])])],2))}}),ux=Me(dx,[["__scopeId","data-v-2ae77c13"]]);function mx(a={}){var oe,we,Ce;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),m=e.ref(!1),p=e.ref(null),h=e.ref("idle"),v=e.ref(a.playbackUrl||((oe=a.media)==null?void 0:oe.playback_url)||((we=a.media)==null?void 0:we.url)||""),y=e.ref(null),E=e.ref(a.isLive||!1),_=e.ref(null),C=e.ref(null);function w(ne){C.value=ne}if((Ce=a.media)!=null&&Ce.token_expires_at){const ne=new Date(a.media.token_expires_at);y.value=Number.isNaN(ne.getTime())?null:ne}async function f(){var M;const ne=E.value?t.value:n.value;if(ne)try{await ne.play(),o.value=!0,h.value=E.value?"live":"playing",(M=a.onPlay)==null||M.call(a)}catch{p.value="Failed to play video",h.value="error"}}function x(){var M;const ne=E.value?t.value:n.value;ne&&(ne.pause(),o.value=!1,h.value="paused",(M=a.onPause)==null||M.call(a))}function $(){o.value?x():f()}function N(ne){const M=E.value?t.value:n.value;if(!M||E.value)return;const z=Number.isFinite(M.duration)?M.duration:ne;M.currentTime=Math.max(0,Math.min(ne,z)),i.value=M.currentTime}function g(ne=10){const M=n.value;!M||E.value||N(M.currentTime+ne)}function S(ne=10){const M=n.value;!M||E.value||N(M.currentTime-ne)}function O(){const ne=E.value?t.value:n.value;ne&&(ne.muted=!ne.muted,l.value=ne.muted)}function k(ne){const M=E.value?t.value:n.value;if(!M)return;const z=Math.max(0,Math.min(100,ne));M.volume=z/100,s.value=z,z>0&&M.muted&&(M.muted=!1,l.value=!1)}function T(ne){const M=n.value;!M||E.value||(M.playbackRate=ne,u.value=ne)}async function F(){const ne=document.querySelector(".video-player-container");if(ne)try{document.fullscreenElement?(await document.exitFullscreen(),c.value=!1):(await ne.requestFullscreen(),c.value=!0)}catch{}}async function A(){const ne=E.value?t.value:n.value;if(ne)try{document.pictureInPictureElement?await document.exitPictureInPicture():document.pictureInPictureEnabled&&await ne.requestPictureInPicture()}catch{}}async function R(){var M;p.value=null,h.value="loading",(M=a.media)!=null&&M.provider&&a.media.provider!=="local"&&await j();const ne=E.value?t.value:n.value;ne&&(ne.load(),await f())}async function j(){if(!(!C.value||!a.media))try{m.value=!0;const ne=await C.value.get(`/api/v1/video/${a.media.uuid}/playback`);v.value=ne.playback_url,y.value=new Date(ne.token_expires_at);const M=E.value?t.value:n.value;if(M&&M.src!==v.value){const z=!M.paused,me=M.currentTime;M.src=v.value,E.value||(M.currentTime=me),z&&await f()}}catch{p.value="Failed to refresh playback token",h.value="error"}finally{m.value=!1}}async function K(ne){if(t.value){if(t.value.canPlayType("application/vnd.apple.mpegurl")){t.value.src=ne;return}try{t.value.src=ne}catch{p.value="Live streaming not supported in this browser",h.value="error"}}}function I(){_.value&&(_.value.destroy(),_.value=null)}function D(){var M;const ne=E.value?t.value:n.value;ne&&(i.value=ne.currentTime,r.value=ne.duration,(M=a.onTimeUpdate)==null||M.call(a,ne.currentTime))}const Z=e.computed(()=>{if(!d.value||d.value.length===0||!r.value)return 0;for(let ne=0;ne<d.value.length;ne++){const M=d.value.start(ne),z=d.value.end(ne);if(i.value>=M&&i.value<=z)return z/r.value*100}return 0});function W(){if(!y.value)return!1;const ne=new Date;return y.value.getTime()-ne.getTime()<5*60*1e3}return e.watch([n,t],([ne,M])=>{const z=E.value?M:ne;z&&(z.addEventListener("timeupdate",D),z.addEventListener("loadedmetadata",()=>{r.value=z.duration,h.value="ready"}),z.addEventListener("progress",()=>{d.value=z.buffered}),z.addEventListener("ended",()=>{var me;o.value=!1,h.value="ended",(me=a.onEnded)==null||me.call(a)}),z.addEventListener("error",me=>{var ae;h.value="error",(ae=a.onError)==null||ae.call(a,"Video playback error")}),z.volume=s.value/100,z.muted=l.value)}),e.onUnmounted(()=>{I();const ne=E.value?t.value:n.value;ne&&ne.removeEventListener("timeupdate",D)}),{videoEl:n,liveVideoEl:t,playing:o,currentTime:i,duration:r,volume:s,muted:l,isFullscreen:c,bufferedRanges:d,bufferedPercent:Z,playbackRate:u,isLoading:m,error:p,status:h,currentPlaybackUrl:v,tokenExpiresAt:y,play:f,pause:x,togglePlayPause:$,seek:N,skipForward:g,skipBackward:S,toggleMute:O,setVolume:k,setPlaybackRate:T,toggleFullscreen:F,togglePiP:A,retry:R,refreshToken:j,setupLiveStream:K,setApiClient:w,shouldRefreshToken:W}}const px=["src","poster","controls","autoplay","muted","loop","preload"],fx={key:1,ref:"livePlayerEl",class:"live-player"},hx=["controls","muted"],vx={key:0,class:"live-indicator","data-testid":"video-live-indicator","aria-label":"Live stream"},gx={key:2,class:"video-loading","data-testid":"video-loading",role:"status","aria-label":"Loading video"},yx={key:3,class:"video-error","data-testid":"video-error",role:"alert"},wx={key:5,class:"gesture-zones","data-testid":"video-gesture-zones"},bx=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:m,bufferedRanges:p,isLoading:h,error:v,status:y,currentPlaybackUrl:E,tokenExpiresAt:_,play:C,pause:w,seek:f,toggleMute:x,setVolume:$,toggleFullscreen:N,togglePlayPause:g,skipForward:S,skipBackward:O,retry:k,refreshToken:T,setApiClient:F,shouldRefreshToken:A,setupLiveStream:R}=mx({...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 T()}const K=e.computed(()=>{const ae=["video-player-container"];return t.className&&ae.push(t.className),m.value&&ae.push("fullscreen"),t.isLive&&ae.push("is-live"),s.value&&ae.push("is-playing"),h.value&&ae.push("is-loading"),ae}),I=e.computed(()=>{var ae,Y;if(t.poster)return t.poster;if((ae=t.media)!=null&&ae.poster_url)return t.media.poster_url;if((Y=t.media)!=null&&Y.thumbnail_url)return t.media.thumbnail_url});function D(ae){const Y=ae.target;o("loadedmetadata",{duration:Y.duration,width:Y.videoWidth,height:Y.videoHeight})}function Z(ae){const Y=ae.target;l.value=Y.currentTime,o("timeupdate",Y.currentTime)}function W(){s.value=!0,o("play")}function oe(){s.value=!1,o("pause")}function we(){s.value=!1,o("ended")}function Ce(ae){const Y=ae.target;let Te="Failed to load video";if(Y.error)switch(Y.error.code){case Y.error.MEDIA_ERR_ABORTED:Te="Video playback aborted";break;case Y.error.MEDIA_ERR_NETWORK:Te="Network error while loading video";break;case Y.error.MEDIA_ERR_DECODE:Te="Video decoding error";break;case Y.error.MEDIA_ERR_SRC_NOT_SUPPORTED:Te="Video format not supported";break}v.value=Te,o("error",Te)}function ne(ae){const Y=ae.target;p.value=Y.buffered,o("progress",Y.buffered)}function M(){h.value=!0}function z(){h.value=!1}e.watch(()=>t.apiClient,ae=>{ae&&F(ae)},{immediate:!0}),e.watch(()=>t.playbackUrl,ae=>{typeof ae=="string"&&ae.length>0&&(E.value=ae)},{immediate:!0}),e.watch(()=>{var ae;return(ae=t.media)==null?void 0:ae.token_expires_at},ae=>{if(!ae){_.value=null;return}const Y=new Date(ae);_.value=Number.isNaN(Y.getTime())?null:Y},{immediate:!0}),e.watch(()=>{var ae;return(ae=t.media)==null?void 0:ae.playback_url},async(ae,Y)=>{if(t.playbackUrl||!ae||ae===Y)return;const Te=i.value;if(!Te||t.isLive){E.value=ae;return}const ue=!Te.paused,se=Te.currentTime;E.value=ae,await e.nextTick();try{Te.currentTime=se}catch{}ue&&await C()},{immediate:!0});let me=null;return e.watch(()=>t.isLive,async ae=>{var Te;if(!ae)return;const Y=t.playbackUrl||((Te=t.media)==null?void 0:Te.playback_url)||"";Y&&await R(Y)},{immediate:!0}),e.onMounted(()=>{var ae;(ae=t.media)!=null&&ae.provider&&t.media.provider!=="local"&&(me=setInterval(()=>{A()&&j()},3e4)),B.isPlatform("mobile")&&t.showCustomControls}),e.onUnmounted(()=>{me&&clearInterval(me)}),(ae,Y)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-player-container",K.value]),"data-testid":"video-player"},[ae.isLive?(e.openBlock(),e.createElementBlock("div",fx,[e.createElementVNode("video",{ref_key:"liveVideoEl",ref:r,controls:ae.controls&&!ae.showCustomControls,autoplay:!0,muted:e.unref(u),onPlay:W,onPause:oe,onError:Ce,playsinline:"",class:"video-element","data-testid":"video-element"},null,40,hx),e.unref(y)==="live"?(e.openBlock(),e.createElementBlock("div",vx,[...Y[3]||(Y[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(E),poster:I.value,controls:ae.controls&&!ae.showCustomControls,autoplay:ae.autoplay,muted:e.unref(u),loop:ae.loop,preload:ae.preload,onLoadedmetadata:D,onTimeupdate:Z,onPlay:W,onPause:oe,onEnded:we,onError:Ce,onProgress:ne,onWaiting:M,onCanplay:z,playsinline:"",class:"video-element","data-testid":"video-element"},null,40,px)),e.unref(h)?(e.openBlock(),e.createElementBlock("div",gx,[e.createVNode(e.unref(B.IonSpinner),{name:"crescent"})])):e.createCommentVNode("",!0),e.unref(v)?(e.openBlock(),e.createElementBlock("div",yx,[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Wi),"aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("p",null,e.toDisplayString(e.unref(v)),1),e.createVNode(e.unref(B.IonButton),{size:"small",onClick:e.unref(k),"data-testid":"btn-video-retry","aria-label":"Retry loading video"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Un),slot:"start","aria-hidden":"true"},null,8,["icon"]),Y[4]||(Y[4]=e.createTextVNode(" Retry ",-1))]),_:1},8,["onClick"])])):e.createCommentVNode("",!0),ae.showCustomControls&&!e.unref(v)?(e.openBlock(),e.createBlock(ux,{key:4,playing:e.unref(s),currentTime:e.unref(l),duration:e.unref(c),buffered:e.unref(p),volume:e.unref(d),muted:e.unref(u),fullscreen:e.unref(m),isLive:ae.isLive,onPlay:e.unref(C),onPause:e.unref(w),onSeek:e.unref(f),onToggleMute:e.unref(x),onSetVolume:e.unref($),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),ae.enableGestures&&!e.unref(v)?(e.openBlock(),e.createElementBlock("div",wx,[e.createElementVNode("div",{class:"gesture-left","data-testid":"video-gesture-skip-back","aria-label":"Double tap to skip backward",onDblclick:Y[0]||(Y[0]=(...Te)=>e.unref(O)&&e.unref(O)(...Te))},null,32),e.createElementVNode("div",{class:"gesture-center","data-testid":"video-gesture-play-pause","aria-label":"Tap to play or pause",onClick:Y[1]||(Y[1]=(...Te)=>e.unref(g)&&e.unref(g)(...Te))}),e.createElementVNode("div",{class:"gesture-right","data-testid":"video-gesture-skip-forward","aria-label":"Double tap to skip forward",onDblclick:Y[2]||(Y[2]=(...Te)=>e.unref(S)&&e.unref(S)(...Te))},null,32)])):e.createCommentVNode("",!0)],2))}}),mc=Me(bx,[["__scopeId","data-v-b8db4951"]]),kx=va.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(R=>R.status==="live")),c=e.computed(()=>r.value.filter(R=>R.processing_status==="processing"));function d(R){a.value.set(R.uuid,R)}function u(R,j){const K=a.value.get(R);K&&a.value.set(R,{...K,...j})}function m(R){a.value.delete(R)}function p(R){return a.value.get(R)}function h(R){n.value.set(R.id,R)}function v(R,j){const K=n.value.get(R);K&&n.value.set(R,{...K,...j})}function y(R,j){const K=n.value.get(R);K&&n.value.set(R,{...K,status:j.status,viewer_count:j.viewer_count,peak_viewers:j.peak_viewers})}function E(R){n.value.delete(R)}function _(R){return n.value.get(R)}function C(R){return s.value.find(j=>j.media_uuid===R)}function w(R){t.value.set(R.id,R)}function f(R,j){const K=t.value.get(R);K&&t.value.set(R,{...K,...j})}function x(R){t.value.delete(R)}function $(R){return t.value.get(R)}function N(R){return Array.from(t.value.values()).filter(j=>j.media_uuid===R)}function g(R){o.value=R}function S(R){o.value&&(o.value={...o.value,...R})}function O(){o.value=null}function k(R){i.value=R}function T(){a.value.clear(),n.value.clear(),t.value.clear(),o.value=null,i.value=!1}function F(R){a.value.clear(),R.forEach(j=>{a.value.set(j.uuid,j)})}function A(R){n.value.clear(),R.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:m,getVideo:p,setLiveStream:h,updateLiveStream:v,updateLiveStreamStats:y,removeLiveStream:E,getLiveStream:_,getLiveStreamByMedia:C,addExportJob:w,updateExportJob:f,removeExportJob:x,getExportJob:$,getExportJobsByMedia:N,setEditorState:g,updateEditorState:S,clearEditorState:O,setProcessing:k,clearAll:T,loadVideos:F,loadLiveStreams:A}});let mn=null;function xx(a){mn=a}const jo={post:async(a,n)=>{if(!mn)throw new Error("HTTP client not configured");return await mn(`/api/v1/video${a}`,{method:"POST",body:JSON.stringify(n),headers:{"Content-Type":"application/json"}})},get:async a=>{if(!mn)throw new Error("HTTP client not configured");return await mn(`/api/v1/video${a}`)},delete:async a=>{if(!mn)throw new Error("HTTP client not configured");return await mn(`/api/v1/video${a}`,{method:"DELETE"})}};function Wo(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 hi(a,n){return a instanceof Error&&a.message?a.message:n}function Ex(a){const n=kx(),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),m=e.ref(0);let p;const h=e.computed(()=>d.value?Math.floor((new Date().getTime()-d.value.getTime())/1e3):0),v=e.computed(()=>{var O;if(!((O=t.value)!=null&&O.playback_url))return null;const S=new URL(t.value.playback_url);return S.searchParams.set("live","true"),o.value&&S.searchParams.set("latency","low"),S.toString()}),y=e.computed(()=>{var S;return((S=t.value)==null?void 0:S.status)==="live"}),E=e.computed(()=>{var S;return((S=t.value)==null?void 0:S.status)==="idle"}),_=e.computed(()=>{var S;return((S=t.value)==null?void 0:S.status)==="ended"});async function C(S={}){s.value=!0,c.value=null;try{const O=await jo.post("/live",{title:r.value||S.title||"Live Stream",low_latency:S.low_latency??o.value,auto_record:S.auto_record??i.value,...S}),k=Wo(O);return t.value=k,n.setLiveStream(k),$(),k}catch(O){throw c.value=hi(O,"Failed to create stream"),O instanceof Error?O:new Error(c.value)}finally{s.value=!1}}async function w(){if(!t.value)throw new Error("No active stream");l.value=!0,c.value=null;try{const S=await jo.post(`/live/${t.value.id}/end`),O=Wo(S,t.value);return t.value=O,n.setLiveStream(O),N(),O}catch(S){throw c.value=hi(S,"Failed to end stream"),S instanceof Error?S:new Error(c.value)}finally{l.value=!1}}async function f(){if(t.value)try{const S=await jo.get(`/live/${t.value.id}`),O=Wo(S,t.value);u.value=O.viewer_count,m.value=O.peak_viewers,t.value=O;const k={status:O.status,viewer_count:O.viewer_count,peak_viewers:O.peak_viewers};O.started_at&&(k.started_at=O.started_at),O.ended_at&&(k.ended_at=O.ended_at),n.updateLiveStreamStats(O.id,k),O.status==="live"&&!d.value&&O.started_at&&(d.value=new Date(O.started_at)),O.status==="ended"&&N()}catch{}}async function x(S){try{const O=await jo.get(`/live/${S}`),k=Wo(O,t.value);return{rtmp_url:k.rtmp_url,stream_key:k.stream_key,playback_url:k.playback_url||""}}catch(O){throw c.value=hi(O,"Failed to get stream credentials"),O instanceof Error?O:new Error(c.value)}}function $(S=5e3){N(),p=window.setInterval(()=>{f()},S)}function N(){p!==void 0&&(clearInterval(p),p=void 0)}async function g(){if(!a)return;const S=n.getLiveStreamByMedia(a);S&&(t.value=S,u.value=S.viewer_count,m.value=S.peak_viewers,S.status==="live"&&($(),S.started_at&&(d.value=new Date(S.started_at))))}return a&&g(),e.onUnmounted(()=>{N()}),{stream:t,lowLatency:o,autoRecord:i,streamTitle:r,isCreating:s,isEnding:l,error:c,streamDuration:h,viewerCount:u,peakViewers:m,playbackUrl:v,isLive:y,isIdle:E,hasEnded:_,createStream:C,endStream:w,refreshStreamStatus:f,getStreamCredentials:x,startStatusPolling:$,stopStatusPolling:N}}const Vx={class:"stream-status"},Sx={class:"flex items-center justify-between"},Cx={class:"flex items-center gap-3"},Nx={key:0,class:"flex items-center"},_x={key:2,class:"text-sm text-gray-600"},Tx={key:0,class:"flex items-center gap-2"},Mx={class:"text-sm font-medium text-gray-700"},Bx={key:0,class:"text-xs text-gray-500"},Ix=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",Vx,[e.createElementVNode("div",Sx,[e.createElementVNode("div",Cx,[r.status==="live"?(e.openBlock(),e.createElementBlock("div",Nx,[...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",_x,e.toDisplayString(i.value),1)):e.createCommentVNode("",!0)]),r.viewers!==void 0?(e.openBlock(),e.createElementBlock("div",Tx,[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",Mx,e.toDisplayString(r.viewers)+" "+e.toDisplayString(r.viewers===1?"viewer":"viewers"),1),r.peakViewers>r.viewers?(e.openBlock(),e.createElementBlock("span",Bx," (Peak: "+e.toDisplayString(r.peakViewers)+") ",1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])]))}}),Fx=Me(Ix,[["__scopeId","data-v-1d09c19f"]]),Rx={class:"stream-credentials"},$x={class:"space-y-3"},Dx={class:"credential-field"},Ux={class:"flex gap-2"},Ox=["value"],Ax={class:"credential-field"},Lx={class:"flex gap-2"},zx=["value","type"],Px=["aria-label"],jx={key:0,class:"w-4 h-4 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Wx={key:1,class:"w-4 h-4 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Zx={key:0,class:"mt-2 text-sm text-green-600"},Xx=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",Rx,[u[8]||(u[8]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 mb-3"},"Stream Settings",-1)),e.createElementVNode("div",$x,[e.createElementVNode("div",Dx,[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",Ux,[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,Ox),e.createElementVNode("button",{onClick:u[0]||(u[0]=m=>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",Ax,[u[7]||(u[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 mb-1"},"Stream Key",-1)),e.createElementVNode("div",Lx,[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,zx),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",Wx,[...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",jx,[...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,Px),e.createElementVNode("button",{onClick:u[1]||(u[1]=m=>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",Zx,e.toDisplayString(r.value)+" copied to clipboard! ",1)):e.createCommentVNode("",!0)]),_:1})]))}}),Hx=Me(Xx,[["__scopeId","data-v-306d92f6"]]),Gx={class:"live-stream-manager","data-testid":"live-stream-manager"},Jx={key:0,class:"stream-setup"},Yx={class:"space-y-4"},Kx={class:"flex items-center justify-between p-4 bg-gray-50 rounded-lg"},qx={class:"flex items-center justify-between p-4 bg-gray-50 rounded-lg"},Qx=["disabled"],eE={key:0},tE={key:1,class:"flex items-center justify-center"},nE={key:1,class:"stream-active space-y-6"},oE={key:1,class:"video-preview"},aE={key:2,class:"analytics-panel"},iE={class:"grid grid-cols-2 gap-4"},rE={class:"bg-gray-50 p-3 rounded"},sE={class:"text-2xl font-bold text-gray-900"},lE={class:"bg-gray-50 p-3 rounded"},cE={class:"text-2xl font-bold text-gray-900"},dE={class:"stream-controls flex gap-3"},uE=["disabled"],mE={key:0},pE={key:1},fE={key:2,class:"mt-4 p-4 bg-red-50 border border-red-200 rounded-lg"},hE={class:"text-red-600 text-sm"},vE=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&&xx(t.httpClient);const{stream:i,lowLatency:r,autoRecord:s,streamTitle:l,isCreating:c,isEnding:d,error:u,createStream:m,endStream:p,streamDuration:h,playbackUrl:v,refreshStreamStatus:y}=Ex(t.mediaUuid),E=e.ref(!1);async function _(){var $;try{const N=await m({title:l.value,low_latency:r.value,auto_record:s.value});o("stream-created",N),($=t.onStreamCreated)==null||$.call(t,N)}catch(N){o("error",N)}}async function C(){var $;try{const N=await p();o("stream-ended",N),($=t.onStreamEnded)==null||$.call(t,N)}catch(N){o("error",N)}}function w(){i.value=null,l.value="",E.value=!1,u.value=null}async function f($,N){try{await navigator.clipboard.writeText($)}catch{}}let x;return e.onMounted(()=>{var $;(($=i.value)==null?void 0:$.status)==="live"&&(x=window.setInterval(()=>{y()},5e3))}),e.onUnmounted(()=>{x&&clearInterval(x)}),($,N)=>(e.openBlock(),e.createElementBlock("div",Gx,[e.unref(i)?(e.openBlock(),e.createElementBlock("div",nE,[e.createVNode(Fx,{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(Hx,{key:0,"rtmp-url":e.unref(i).rtmp_url,"stream-key":e.unref(i).stream_key,onCopy:f},null,8,["rtmp-url","stream-key"])):e.createCommentVNode("",!0),e.unref(v)?(e.openBlock(),e.createElementBlock("div",oE,[N[9]||(N[9]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 mb-2"},"Live Preview",-1)),e.createVNode(mc,{"playback-url":e.unref(v),"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",aE,[N[12]||(N[12]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 mb-3"},"Live Analytics",-1)),e.createElementVNode("div",iE,[e.createElementVNode("div",rE,[e.createElementVNode("div",sE,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",lE,[e.createElementVNode("div",cE,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",dE,[e.unref(i).status==="idle"?(e.openBlock(),e.createElementBlock("button",{key:0,onClick:N[3]||(N[3]=g=>E.value=!E.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(E.value?"Hide":"Show")+" Credentials ",1)):e.createCommentVNode("",!0),e.unref(i).status==="live"?(e.openBlock(),e.createElementBlock("button",{key:1,onClick:C,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",pE,"Ending...")):(e.openBlock(),e.createElementBlock("span",mE,"End Stream"))],8,uE)):e.createCommentVNode("",!0),e.unref(i).status==="ended"?(e.openBlock(),e.createElementBlock("button",{key:2,onClick:w,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",Jx,[N[8]||(N[8]=e.createElementVNode("h3",{class:"text-lg font-semibold mb-4"},"Start Live Stream",-1)),e.createElementVNode("div",Yx,[e.createElementVNode("div",Kx,[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]=g=>e.isRef(r)?r.value=g: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",qx,[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]=g=>e.isRef(s)?s.value=g: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]=g=>e.isRef(l)?l.value=g: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:_,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",tE,[...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",eE,"Create Stream"))],8,Qx)])])),e.unref(u)?(e.openBlock(),e.createElementBlock("div",fE,[e.createElementVNode("p",hE,e.toDisplayString(e.unref(u)),1)])):e.createCommentVNode("",!0)]))}}),gE=Me(vE,[["__scopeId","data-v-26291f6f"]]),yE={class:"album-tree-node"},wE=["data-album-id","draggable","aria-selected","aria-expanded"],bE={key:1,class:"album-node__chevron-placeholder"},kE={key:2,"data-testid":"media-count",class:"album-node__count"},xE={key:0,class:"album-tree-node__children",role:"group"},EE=16,VE=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*EE}px`),d=e.computed(()=>{var w;return((w=t.dragState)==null?void 0:w.draggedAlbumId)===t.album.id}),u=e.computed(()=>{var w;return((w=t.dragState)==null?void 0:w.dropTargetId)===t.album.id}),m=e.computed(()=>{var w;return(w=t.dragState)!=null&&w.draggedAlbumId?t.dragState.draggedAlbumId===t.album.id:!1}),p=e.computed(()=>{const w=["album-node"];return r.value&&w.push("album-node--selected"),s.value&&w.push("album-node--focused"),t.compact&&w.push("album-node--compact"),d.value&&w.push("album-node--dragging"),u.value&&w.push("album-node--drop-target"),m.value&&w.push("album-node--invalid-drop"),w});function h(){o("select",t.album)}function v(w){w.stopPropagation(),o("toggle-expand",t.album.id)}function y(w){t.draggable&&(w.dataTransfer&&(w.dataTransfer.setData("text/plain",t.album.id),w.dataTransfer.effectAllowed="move"),o("drag-start",t.album.id))}function E(w){t.draggable&&(w.preventDefault(),w.dataTransfer&&(w.dataTransfer.dropEffect="move"),o("drag-over",t.album.id))}function _(){o("drag-leave",t.album.id)}function C(w){t.draggable&&(w.preventDefault(),o("drop",t.album.id))}return(w,f)=>{var $;const x=e.resolveComponent("AlbumTreeNode",!0);return e.openBlock(),e.createElementBlock("div",yE,[e.createElementVNode("div",{"data-testid":"album-node","data-album-id":w.album.id,class:e.normalizeClass(p.value),style:e.normalizeStyle({paddingLeft:c.value}),draggable:w.draggable,role:"treeitem","aria-selected":r.value,"aria-expanded":l.value?i.value:void 0,onDragstart:y,onDragover:E,onDragleave:_,onDrop:C},[l.value?(e.openBlock(),e.createElementBlock("button",{key:0,"data-testid":"expand-chevron",class:"album-node__chevron",type:"button","aria-label":"Toggle expand",onClick:v},[e.createVNode(e.unref(B.IonIcon),{icon:i.value?e.unref(tu):e.unref(nu)},null,8,["icon"])])):(e.openBlock(),e.createElementBlock("span",bE)),e.createVNode(e.unref(B.IonIcon),{icon:e.unref(du),class:"album-node__icon"},null,8,["icon"]),e.createElementVNode("span",{"data-testid":"album-name",class:"album-node__name",onClick:h},e.toDisplayString(w.album.name),1),w.showMediaCount?(e.openBlock(),e.createElementBlock("span",kE,e.toDisplayString(w.album.media_count),1)):e.createCommentVNode("",!0)],46,wE),i.value&&(($=w.album.children)!=null&&$.length)?(e.openBlock(),e.createElementBlock("div",xE,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(w.album.children,N=>(e.openBlock(),e.createBlock(x,{key:N.id,album:N,depth:w.depth+1,"selected-id":w.selectedId,"expanded-ids":w.expandedIds,"focused-id":w.focusedId,draggable:w.draggable,"show-media-count":w.showMediaCount,compact:w.compact,onSelect:f[0]||(f[0]=g=>o("select",g)),onToggleExpand:f[1]||(f[1]=g=>o("toggle-expand",g))},null,8,["album","depth","selected-id","expanded-ids","focused-id","draggable","show-media-count","compact"]))),128))])):e.createCommentVNode("",!0)])}}}),SE=Me(VE,[["__scopeId","data-v-76be65a6"]]),La=va.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 f=new Map;return a.value.forEach(x=>f.set(x.id,x)),f}),s=e.computed(()=>a.value.filter(f=>f.parent_id===null));async function l(f){t.value=!0,o.value=null;try{const x=(f==null?void 0:f.parent_id)??null,$=x?`/api/v1/albums?parent_id=${x}`:"/api/v1/albums?parent_id=null",N=await fetch($);if(!N.ok)throw new Error("Failed to fetch albums");((await N.json()).data||[]).forEach(O=>{const k=a.value.findIndex(T=>T.id===O.id);k>=0?a.value[k]=O:a.value.push(O)}),x!==null&&i.value.add(x)}catch(x){o.value=x instanceof Error?x.message:"Unknown error"}finally{t.value=!1}}async function c(f){t.value=!0,o.value=null;try{const x=await fetch(`/api/v1/albums/${f}`);if(!x.ok)throw new Error("Failed to fetch album");const N=(await x.json()).data,g=a.value.findIndex(S=>S.id===N.id);return g>=0?a.value[g]=N:a.value.push(N),N}catch(x){throw o.value=x instanceof Error?x.message:"Unknown error",x}finally{t.value=!1}}async function d(f){t.value=!0,o.value=null;try{const x=await fetch(`/api/v1/albums/${f}/media`);if(!x.ok)throw new Error("Failed to fetch album media");const N=(await x.json()).data||[];return n.value.set(f,N),N}catch(x){throw o.value=x instanceof Error?x.message:"Unknown error",x}finally{t.value=!1}}async function u(f,x){t.value=!0,o.value=null;try{if(!(await fetch(`/api/v1/albums/${f}/media/reorder`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({media_ids:x})})).ok)throw new Error("Failed to reorder album media");const N=n.value.get(f)||[],g=x.map(S=>N.find(O=>O.uuid===S)).filter(S=>S!==void 0);n.value.set(f,g)}catch($){throw o.value=$ instanceof Error?$.message:"Unknown error",$}finally{t.value=!1}}async function m(f){t.value=!0,o.value=null;try{const x=await fetch("/api/v1/albums",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(f)});if(!x.ok)throw new Error("Failed to create album");const N=(await x.json()).data;return a.value.push(N),N}catch(x){throw o.value=x instanceof Error?x.message:"Unknown error",x}finally{t.value=!1}}async function p(f,x){t.value=!0,o.value=null;try{const $=await fetch(`/api/v1/albums/${f}`,{method:"PATCH",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(x)});if(!$.ok)throw new Error("Failed to update album");const g=(await $.json()).data,S=a.value.findIndex(O=>O.id===g.id);return S>=0&&(a.value[S]=g),g}catch($){throw o.value=$ instanceof Error?$.message:"Unknown error",$}finally{t.value=!1}}async function h(f){t.value=!0,o.value=null;try{if(!(await fetch(`/api/v1/albums/${f}`,{method:"DELETE",headers:{"Content-Type":"application/json"},credentials:"include"})).ok)throw new Error("Failed to delete album");const $=a.value.findIndex(N=>N.id===f);$>=0&&a.value.splice($,1),n.value.delete(f)}catch(x){throw o.value=x instanceof Error?x.message:"Unknown error",x}finally{t.value=!1}}function v(f){return a.value.filter(x=>x.parent_id===f)}function y(f){return i.value.has(f)}function E(f){return n.value.get(f)||[]}async function _(f,x){const $=a.value.findIndex(g=>g.id===f);if($<0)return;const N=a.value[$];a.value[$]={...N,parent_id:x};try{if(!(await fetch(`/api/v1/albums/${f}/move`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({parent_id:x})})).ok)throw new Error("Failed to move album")}catch(g){throw a.value[$]=N,o.value=g instanceof Error?g.message:"Unknown error",g instanceof Error?g:new Error("Failed to move album")}}function C(f){a.value=f}function w(){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:m,updateAlbum:p,deleteAlbum:h,getChildrenOf:v,childrenLoaded:y,getAlbumMedia:E,moveAlbum:_,setAlbums:C,reset:w}});function pc(){const a=La(),{albums:n,albumsById:t,rootAlbums:o,loading:i,error:r}=va.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,m){await a.moveAlbum(u,m)}return{albums:n,albumsById:t,rootAlbums:o,loading:i,error:r,fetchAlbums:s,getChildrenOf:l,childrenLoaded:c,moveAlbum:d}}function fc(a){const{childrenByParentId:n,onMove:t}=a,o=e.ref({isDragging:!1,draggedAlbumId:null,dropTargetId:null,dropPosition:null});function i(m,p){if(m===p)return!0;const h=new Set,v=[m];for(;v.length>0;){const y=v.shift();if(!y||h.has(y))continue;h.add(y);const E=n.get(y)||[];for(const _ of E){if(_===p)return!0;v.push(_)}}return!1}function r(m,p){return m===p?!1:p===null?!0:!i(m,p)}function s(m){o.value={isDragging:!0,draggedAlbumId:m,dropTargetId:null,dropPosition:null}}function l(){o.value={isDragging:!1,draggedAlbumId:null,dropTargetId:null,dropPosition:null}}function c(m){o.value.dropTargetId=m}function d(){o.value.dropTargetId=null,o.value.dropPosition=null}async function u(){const{draggedAlbumId:m,dropTargetId:p}=o.value;if(!m){l();return}if(!r(m,p)){l();return}try{await t(m,p)}finally{l()}}return{dragState:o,isDescendant:i,canDropOn:r,startDrag:s,endDrag:l,setDropTarget:c,clearDropTarget:d,executeDrop:u}}const CE={key:0,"data-testid":"loading-spinner",class:"album-tree__loading"},NE={key:1,"data-testid":"error-state",class:"album-tree__error"},_E={key:2,"data-testid":"empty-state",class:"album-tree__empty"},TE={key:3,class:"album-tree__content",role:"group"},ME=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:m,fetchAlbums:p,getChildrenOf:h,childrenLoaded:v,moveAlbum:y}=pc(),E=e.shallowRef(new Set(o.expandedIds)),_=e.ref(o.modelValue??null),C=e.ref(null),w=new Map,f=new Map;function x(M){w.clear(),f.clear();for(const z of M){w.set(z.id,z);const me=z.parent_id??null,ae=f.get(me)??[];ae.push(z.id),f.set(me,ae)}}e.watch(c,M=>{x(M)},{immediate:!0});const{dragState:$,canDropOn:N,startDrag:g,endDrag:S,setDropTarget:O,clearDropTarget:k,executeDrop:T}=fc({childrenByParentId:f,onMove:async(M,z)=>{await y(M,z),i("album-moved",{albumId:M,newParentId:z})}});e.watch(()=>o.modelValue,M=>{_.value=M??null}),e.watch(()=>o.expandedIds,M=>{E.value=new Set(M)}),e.onMounted(async()=>{await p({parent_id:null})});const F=e.computed(()=>d.value.map(M=>A(M)));function A(M){if(!E.value.has(M.id))return M;const z=h(M.id);return{...M,children:z.map(me=>A(me))}}const R=e.computed(()=>{const M=[];function z(me){var ae;for(const Y of me)M.push(Y),E.value.has(Y.id)&&((ae=Y.children)!=null&&ae.length)&&z(Y.children)}return z(F.value),M});function j(M){var ae;if(!R.value.length)return;const z=C.value?R.value.findIndex(Y=>Y.id===C.value):-1,me=z>=0?R.value[z]:null;switch(M.key){case"ArrowDown":M.preventDefault(),z<R.value.length-1?C.value=R.value[z+1].id:z===-1&&R.value.length>0&&(C.value=R.value[0].id);break;case"ArrowUp":M.preventDefault(),z>0&&(C.value=R.value[z-1].id);break;case"ArrowRight":M.preventDefault(),me&&(me.children_count>0&&!E.value.has(me.id)?K(me.id):E.value.has(me.id)&&((ae=me.children)!=null&&ae.length)&&(C.value=me.children[0].id));break;case"ArrowLeft":M.preventDefault(),me&&(E.value.has(me.id)&&me.children_count>0?K(me.id):me.parent_id&&(C.value=me.parent_id));break;case"Enter":case" ":M.preventDefault(),me&&I(me);break;case"Home":M.preventDefault(),R.value.length>0&&(C.value=R.value[0].id);break;case"End":M.preventDefault(),R.value.length>0&&(C.value=R.value[R.value.length-1].id);break}}async function K(M){E.value.has(M)?(E.value.delete(M),i("album-collapsed",M)):(v(M)||await p({parent_id:M}),E.value.add(M),i("album-expanded",M))}function I(M){_.value=M.id,i("update:modelValue",M.id),i("album-selected",M)}function D(M){o.draggable&&g(M)}function Z(M){var me;if(!o.draggable)return;const z=(me=$.value)==null?void 0:me.draggedAlbumId;z&&(O(M),N(z,M))}function W(){o.draggable&&k()}async function oe(M){o.draggable&&(O(M),await T())}function we(M){o.draggable&&(M.preventDefault(),O(null))}async function Ce(M){o.draggable&&(M.preventDefault(),O(null),await T())}function ne(){S()}return n({focusedId:C}),(M,z)=>(e.openBlock(),e.createElementBlock("div",{class:"album-tree","data-testid":"album-tree",tabindex:"0",role:"tree","aria-label":"Album tree",onKeydown:j,onDragover:we,onDrop:Ce,onDragend:ne},[e.unref(u)?(e.openBlock(),e.createElementBlock("div",CE,[e.createVNode(e.unref(B.IonSpinner),{name:"crescent"})])):e.unref(m)?(e.openBlock(),e.createElementBlock("div",NE,[e.createElementVNode("p",null,e.toDisplayString(e.unref(m)),1)])):e.unref(d).length?(e.openBlock(),e.createElementBlock("div",TE,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(F.value,me=>(e.openBlock(),e.createBlock(SE,{key:me.id,album:me,depth:0,"selected-id":_.value,"expanded-ids":E.value,"focused-id":C.value,draggable:r.value,"drag-state":r.value?e.unref($):null,"show-media-count":s.value,compact:l.value,onSelect:I,onToggleExpand:K,onDragStart:D,onDragOver:Z,onDragLeave:W,onDrop:oe},null,8,["album","selected-id","expanded-ids","focused-id","draggable","drag-state","show-media-count","compact"]))),128))])):(e.openBlock(),e.createElementBlock("div",_E,[z[0]||(z[0]=e.createElementVNode("p",null,"No albums yet",-1)),e.renderSlot(M.$slots,"empty-action",{},void 0,!0)]))],32))}}),hc=Me(ME,[["__scopeId","data-v-ae3dea7a"]]),BE=300,IE=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 v=Date.now();if(l.value===h.id&&v-s.value<BE){o("confirm",h);return}s.value=v,l.value=h.id,i.value=h.id,r.value=h}function u(){r.value&&o("confirm",r.value)}function m(){o("close")}function p(){o("close")}return(h,v)=>(e.openBlock(),e.createBlock(e.unref(B.IonModal),{"is-open":h.isOpen,class:"album-browser-modal",onDidDismiss:p},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonTitle),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(h.title),1)]),_:1}),e.createVNode(e.unref(B.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButton),{"data-testid":"cancel-button",onClick:m},{default:e.withCtx(()=>[...v[1]||(v[1]=[e.createTextVNode(" Cancel ",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),e.createVNode(e.unref(B.IonContent),{class:"album-browser-content"},{default:e.withCtx(()=>[e.createVNode(hc,{modelValue:i.value,"onUpdate:modelValue":v[0]||(v[0]=y=>i.value=y),draggable:!1,"show-media-count":!0,compact:!1,onAlbumSelected:d},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(B.IonFooter),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButton),{fill:"clear",onClick:m},{default:e.withCtx(()=>[...v[2]||(v[2]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),e.createVNode(e.unref(B.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"]))}}),vc=Me(IE,[["__scopeId","data-v-21676ec1"]]),FE={class:"ion-padding-start text-sm"},RE={class:"ion-padding-start text-sm"},$E={key:1},DE={key:1,class:"album-manager-inline rounded-lg border border-gray-200 bg-white p-4"},UE={class:"flex items-center justify-between gap-3 pb-3"},OE={class:"text-base font-semibold text-gray-900"},AE={class:"ion-padding-start text-sm"},LE={class:"ion-padding-start text-sm"},zE={class:"flex justify-between pt-2"},PE={key:1},qn=255,Qn=1e3,jE=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=La(),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),m=e.ref(!1),p=e.ref(null),h=e.ref(!1),v=e.ref(!1),y=e.computed(()=>d.value.name?c.value.name.trim()?c.value.name.length>qn?`Name must be ${qn} characters or less`:null:"Name is required":null),E=e.computed(()=>d.value.description&&c.value.description.length>Qn?`Description must be ${Qn} characters or less`:null),_=e.computed(()=>{const j=c.value.name.trim().length>0,K=c.value.name.length<=qn,I=c.value.description.length<=Qn;return j&&K&&I&&!h.value}),C=e.computed(()=>{var j;return((j=u.value)==null?void 0:j.name)??"None (Root)"}),w=e.computed(()=>p.value?p.value.children_count===0&&p.value.media_count===0:!1),f=e.computed(()=>p.value?p.value.children_count>0?"Cannot delete album with child albums. Move or delete children first.":p.value.media_count>0?"Cannot delete album with media. Remove media first.":`Are you sure you want to delete "${p.value.name}"? This action cannot be undone.`:"");e.onMounted(async()=>{t.albumId&&await x()});async function x(){if(t.albumId)try{const j=await i.fetchAlbum(t.albumId);p.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 $(){d.value.name=!0}function N(){d.value.description=!0}function g(){m.value=!0}function S(j){u.value={id:j.id,name:j.name},c.value.parent_id=j.id,m.value=!1}function O(){m.value=!1}function k(){o("close")}function T(){o("close")}async function F(){if(d.value.name=!0,d.value.description=!0,!(!_.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 K=await i.updateAlbum(t.albumId,j);o("updated",K)}else{const K=await i.createAlbum(j);o("created",K)}o("close")}catch(j){o("error",j)}finally{h.value=!1}}}function A(){w.value&&(v.value=!0)}async function R(j){var I;if((((I=j.detail)==null?void 0:I.role)??"")!=="confirm"){v.value=!1;return}if(t.albumId){h.value=!0;try{await i.deleteAlbum(t.albumId),o("deleted",t.albumId),o("close")}catch(D){o("error",D)}finally{h.value=!1,v.value=!1}}}return(j,K)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[j.mode==="modal"?(e.openBlock(),e.createBlock(e.unref(B.IonModal),{key:0,"is-open":j.isOpen,class:"album-manager-modal",onDidDismiss:T},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonTitle),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value),1)]),_:1}),e.createVNode(e.unref(B.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButton),{"data-testid":"cancel-btn",fill:"clear",onClick:k},{default:e.withCtx(()=>[...K[4]||(K[4]=[e.createTextVNode(" Cancel ",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),e.createVNode(e.unref(B.IonContent),{class:"album-manager-content"},{default:e.withCtx(()=>[e.createElementVNode("form",{"data-testid":"album-form",class:"p-4 space-y-3",onSubmit:e.withModifiers(F,["prevent"])},[e.createVNode(e.unref(B.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...K[5]||(K[5]=[e.createTextVNode("Name *",-1)])]),_:1}),e.createVNode(e.unref(B.IonInput),{modelValue:c.value.name,"onUpdate:modelValue":K[0]||(K[0]=I=>c.value.name=I),"data-testid":"name-input",maxlength:qn,onIonBlur:$},null,8,["modelValue"])]),_:1}),y.value?(e.openBlock(),e.createBlock(e.unref(B.IonText),{key:0,color:"danger","data-testid":"name-error"},{default:e.withCtx(()=>[e.createElementVNode("p",FE,e.toDisplayString(y.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(B.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...K[6]||(K[6]=[e.createTextVNode("Description",-1)])]),_:1}),e.createVNode(e.unref(B.IonTextarea),{modelValue:c.value.description,"onUpdate:modelValue":K[1]||(K[1]=I=>c.value.description=I),"data-testid":"description-input",maxlength:Qn,onIonBlur:N},null,8,["modelValue"])]),_:1}),E.value?(e.openBlock(),e.createBlock(e.unref(B.IonText),{key:1,color:"danger","data-testid":"description-error"},{default:e.withCtx(()=>[e.createElementVNode("p",RE,e.toDisplayString(E.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(B.IonItem),{button:"","data-testid":"parent-selector",onClick:g},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...K[7]||(K[7]=[e.createTextVNode("Parent Album",-1)])]),_:1}),e.createVNode(e.unref(B.IonNote),{slot:"end","data-testid":"parent-name"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(C.value),1)]),_:1})]),_:1})],32)]),_:1}),e.createVNode(e.unref(B.IonFooter),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButtons),{slot:"start"},{default:e.withCtx(()=>[r.value?(e.openBlock(),e.createBlock(e.unref(B.IonButton),{key:0,"data-testid":"delete-btn",color:"danger",disabled:!w.value,title:w.value?void 0:f.value,onClick:A},{default:e.withCtx(()=>[...K[8]||(K[8]=[e.createTextVNode(" Delete ",-1)])]),_:1},8,["disabled","title"])):e.createCommentVNode("",!0)]),_:1}),e.createVNode(e.unref(B.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButton),{"data-testid":"submit-btn",type:"submit",color:"primary",disabled:!_.value,onClick:F},{default:e.withCtx(()=>[h.value?(e.openBlock(),e.createBlock(e.unref(B.IonSpinner),{key:0,"data-testid":"loading-spinner",name:"crescent"})):(e.openBlock(),e.createElementBlock("span",$E,e.toDisplayString(l.value),1))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1})]),_:1},8,["is-open"])):(e.openBlock(),e.createElementBlock("div",DE,[e.createElementVNode("div",UE,[e.createElementVNode("h2",OE,e.toDisplayString(s.value),1),e.createVNode(e.unref(B.IonButton),{"data-testid":"cancel-btn",fill:"clear",onClick:k},{default:e.withCtx(()=>[...K[9]||(K[9]=[e.createTextVNode(" Cancel ",-1)])]),_:1})]),e.createElementVNode("form",{"data-testid":"album-form",class:"space-y-3",onSubmit:e.withModifiers(F,["prevent"])},[e.createVNode(e.unref(B.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...K[10]||(K[10]=[e.createTextVNode("Name *",-1)])]),_:1}),e.createVNode(e.unref(B.IonInput),{modelValue:c.value.name,"onUpdate:modelValue":K[2]||(K[2]=I=>c.value.name=I),"data-testid":"name-input",maxlength:qn,onIonBlur:$},null,8,["modelValue"])]),_:1}),y.value?(e.openBlock(),e.createBlock(e.unref(B.IonText),{key:0,color:"danger","data-testid":"name-error"},{default:e.withCtx(()=>[e.createElementVNode("p",AE,e.toDisplayString(y.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(B.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...K[11]||(K[11]=[e.createTextVNode("Description",-1)])]),_:1}),e.createVNode(e.unref(B.IonTextarea),{modelValue:c.value.description,"onUpdate:modelValue":K[3]||(K[3]=I=>c.value.description=I),"data-testid":"description-input",maxlength:Qn,onIonBlur:N},null,8,["modelValue"])]),_:1}),E.value?(e.openBlock(),e.createBlock(e.unref(B.IonText),{key:1,color:"danger","data-testid":"description-error"},{default:e.withCtx(()=>[e.createElementVNode("p",LE,e.toDisplayString(E.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(B.IonItem),{button:"","data-testid":"parent-selector",onClick:g},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...K[12]||(K[12]=[e.createTextVNode("Parent Album",-1)])]),_:1}),e.createVNode(e.unref(B.IonNote),{slot:"end","data-testid":"parent-name"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(C.value),1)]),_:1})]),_:1}),e.createElementVNode("div",zE,[e.createElementVNode("div",null,[r.value?(e.openBlock(),e.createBlock(e.unref(B.IonButton),{key:0,"data-testid":"delete-btn",color:"danger",fill:"outline",disabled:!w.value,title:w.value?void 0:f.value,onClick:A},{default:e.withCtx(()=>[...K[13]||(K[13]=[e.createTextVNode(" Delete ",-1)])]),_:1},8,["disabled","title"])):e.createCommentVNode("",!0)]),e.createVNode(e.unref(B.IonButton),{"data-testid":"submit-btn",type:"submit",color:"primary",disabled:!_.value,onClick:F},{default:e.withCtx(()=>[h.value?(e.openBlock(),e.createBlock(e.unref(B.IonSpinner),{key:0,"data-testid":"loading-spinner",name:"crescent"})):(e.openBlock(),e.createElementBlock("span",PE,e.toDisplayString(l.value),1))]),_:1},8,["disabled"])])],32)])),e.createVNode(vc,{"is-open":m.value,"selected-album-id":c.value.parent_id,title:"Select Parent Album",onClose:O,onConfirm:S},null,8,["is-open","selected-album-id"]),e.createVNode(e.unref(B.IonAlert),{"is-open":v.value,header:"Delete Album?",message:f.value,buttons:[{text:"Cancel",role:"cancel"},{text:"Delete",role:"confirm",cssClass:"alert-button-danger"}],onDidDismiss:R},null,8,["is-open","message"])],64))}}),WE=Me(jE,[["__scopeId","data-v-22083f3a"]]),ZE={class:"album-media-grid"},XE={class:"aspect-square"},HE={key:1,"data-testid":"empty-state",class:"flex flex-col items-center justify-center py-12 gap-4"},GE={class:"text-gray-500"},JE=["data-media-id","draggable","onDragstart","onDragover","onDrop","onMouseenter"],YE={key:0,"data-testid":"drop-indicator",class:"absolute inset-0 border-2 border-primary rounded-lg pointer-events-none z-30"},KE={key:1,class:"absolute top-2 right-2 z-20 opacity-0 group-hover:opacity-100 transition-opacity cursor-grab"},qE={class:"aspect-square relative"},QE=["src","alt"],e4={key:0,class:"absolute inset-0 bg-black/50 flex items-center justify-center gap-2 transition-opacity"},t4=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=La(),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),m=e.computed(()=>!u.value&&r.value.length===0),p=e.computed(()=>{const T=t.columns;return["grid","gap-4",`grid-cols-${T.mobile??2}`,`sm:grid-cols-${T.sm??3}`,`md:grid-cols-${T.md??4}`,`lg:grid-cols-${T.lg??5}`,`xl:grid-cols-${T.xl??6}`]}),h=e.computed(()=>(t.columns.md??4)*2);e.onMounted(async()=>{await v()}),e.watch(()=>t.albumId,async()=>{await v()});async function v(){s.value=!0;try{const T=await i.fetchAlbumMedia(t.albumId);r.value=T}catch{r.value=[]}finally{s.value=!1}}function y(T){return t.selectedItems.includes(T)}function E(T){o("toggle-select",T);const F=y(T.uuid)?t.selectedItems.filter(A=>A!==T.uuid):[...t.selectedItems,T.uuid];o("selection-change",F)}function _(T){if(T.conversions&&typeof T.conversions=="object"){const F=T.conversions.thumb;if(typeof F=="string")return F}return T.original_url}function C(T){l.value=T}function w(){l.value=null}function f(T){o("preview",T)}function x(T){o("edit",T)}function $(T){o("detach",T.uuid)}function N(){o("add")}function g(T,F){t.reorderable&&(c.value=F,T.dataTransfer&&(T.dataTransfer.effectAllowed="move",T.dataTransfer.setData("text/plain",String(F))))}function S(T,F){!t.reorderable||c.value===null||(T.preventDefault(),d.value=F)}function O(T,F){if(!t.reorderable||c.value===null)return;T.preventDefault();const A=c.value;if(A!==F){const R=[...r.value],[j]=R.splice(A,1);R.splice(F,0,j),r.value=R;const K=R.map(I=>I.uuid);o("reorder",K),i.reorderAlbumMedia(t.albumId,K).catch(()=>{v()})}c.value=null,d.value=null}function k(){c.value=null,d.value=null}return(T,F)=>(e.openBlock(),e.createElementBlock("div",ZE,[u.value?(e.openBlock(),e.createElementBlock("div",{key:0,"data-testid":"loading-grid",class:e.normalizeClass(p.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,A=>(e.openBlock(),e.createBlock(e.unref(B.IonCard),{key:A,class:"m-0"},{default:e.withCtx(()=>[e.createElementVNode("div",XE,[e.createVNode(e.unref(B.IonSkeletonText),{animated:"",class:"w-full h-full skeleton"})])]),_:1}))),128))],2)):m.value?(e.openBlock(),e.createElementBlock("div",HE,[e.createVNode(e.unref(B.IonIcon),{name:"images-outline",class:"text-6xl text-gray-400"}),e.createElementVNode("p",GE,e.toDisplayString(T.emptyText),1),e.createVNode(e.unref(B.IonButton),{"data-testid":"add-media-btn",onClick:N},{default:e.withCtx(()=>[...F[0]||(F[0]=[e.createTextVNode(" Add Media ",-1)])]),_:1})])):(e.openBlock(),e.createElementBlock("div",{key:2,"data-testid":"media-grid",class:e.normalizeClass(p.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,(A,R)=>(e.openBlock(),e.createElementBlock("div",{key:A.uuid,"data-media-id":A.uuid,class:e.normalizeClass(["media-item relative group",{"opacity-50":c.value===R,"ring-2 ring-primary":d.value===R&&c.value!==R}]),draggable:T.reorderable,onDragstart:j=>g(j,R),onDragover:j=>S(j,R),onDrop:j=>O(j,R),onDragend:k,onMouseenter:j=>C(A.uuid),onMouseleave:w},[d.value===R&&c.value!==R&&T.reorderable?(e.openBlock(),e.createElementBlock("div",YE)):e.createCommentVNode("",!0),T.reorderable?(e.openBlock(),e.createElementBlock("div",KE,[e.createVNode(e.unref(B.IonIcon),{name:"reorder-three-outline",class:"text-white drop-shadow-md"})])):e.createCommentVNode("",!0),T.selectionMode?(e.openBlock(),e.createBlock(e.unref(B.IonCheckbox),{key:2,"data-testid":"media-checkbox",checked:y(A.uuid),class:"absolute top-2 left-2 z-20",onIonChange:j=>E(A)},null,8,["checked","onIonChange"])):e.createCommentVNode("",!0),e.createVNode(e.unref(B.IonCard),{class:"m-0 overflow-hidden"},{default:e.withCtx(()=>[e.createElementVNode("div",qE,[e.createElementVNode("img",{src:_(A),alt:A.file_name,class:"w-full h-full object-cover"},null,8,QE),T.showActions&&l.value===A.uuid?(e.openBlock(),e.createElementBlock("div",e4,[e.createVNode(e.unref(B.IonButton),{"data-testid":"action-preview",fill:"clear",size:"small",color:"light",onClick:j=>f(A)},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{slot:"icon-only",name:"eye-outline"})]),_:1},8,["onClick"]),e.createVNode(e.unref(B.IonButton),{"data-testid":"action-edit",fill:"clear",size:"small",color:"light",onClick:j=>x(A)},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{slot:"icon-only",name:"create-outline"})]),_:1},8,["onClick"]),e.createVNode(e.unref(B.IonButton),{"data-testid":"action-detach",fill:"clear",size:"small",color:"danger",onClick:j=>$(A)},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{slot:"icon-only",name:"close-circle-outline"})]),_:1},8,["onClick"])])):e.createCommentVNode("",!0)])]),_:2},1024)],42,JE))),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(B.IonIcon),{name:"add-circle-outline",class:"text-4xl text-gray-400"}),F[1]||(F[1]=e.createElementVNode("span",{class:"text-sm text-gray-500"},"Add Media",-1))])],2))]))}}),n4=Me(t4,[["__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=_=>{if(r.value++,l.value=null,i.value=null,t.value=!1,_!=null&&typeof _=="object"&&!(_ instanceof Blob)&&("image"in _||"state"in _||"sessionKey"in _)){const C=_;o.value=C.image??null,s.value=C.state??null}else o.value=_??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},m=async _=>{try{return t.value=!0,i.value=_,a.onSave&&await a.onSave(_),u(),_}catch(C){const w=C;throw l.value=w,a.onError&&a.onError(w),w}finally{t.value=!1}},p=()=>{a.onCancel&&a.onCancel(),u()},h=_=>{l.value=_,a.onError&&a.onError(_)},v=()=>{l.value=null},y=()=>i.value,E=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:E,open:d,close:u,handleSave:m,handleCancel:p,handleError:h,clearError:v,getEditedImage:y}}let vi=null;function o4(a){return vi||(vi=pr(a)),vi}function a4(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 fr(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 zi(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 hr(a){if(a){const t={};a.apiBaseUrl!==void 0&&(t.apiBaseUrl=a.apiBaseUrl),a.isAdmin!==void 0&&(t.isAdmin=a.isAdmin),In(t)}return{name:"mediables",async upload(t,o){const r=await kt().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 kt().attachMedia(o.modelType,String(o.modelId),[t],o.collection||"images")},async attachMany(t,o){await kt().attachMedia(o.modelType,String(o.modelId),t,o.collection||"images")},async detach(t,o){await kt().detachMedia(o.modelType,String(o.modelId),t,o.collection||"images")},async reorder(t,o){await kt().reorderMedia(t.modelType,String(t.modelId),o,t.collection||"images")},async fetchModelMedia(t){return await kt().fetchModelMedia(t.modelType,String(t.modelId),t.collection||"images")},getUrl(t,o){return kt().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 kt().deleteMedia(t)},async update(t,o){const r=await kt().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),In(o)}}}let na=null;function i4(){return na||(na=hr()),na}function r4(){na=null}const s4={apiBaseUrl:"/media-library-pro"};function Zo(){var a;return typeof document>"u"?null:((a=document.querySelector('meta[name="csrf-token"]'))==null?void 0:a.getAttribute("content"))||null}function gi(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 vr(a){const n={...s4,...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||Zo();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 p=await d.json().catch(()=>({message:"Upload failed"}));throw new Error(p.message||`HTTP ${d.status}`)}const u=await d.json(),m=gi(u);return i!=null&&i.onProgress&&i.onProgress(100),{media:m,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||Zo();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(gi)}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||Zo();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||Zo();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 gi(c)},configure(o){Object.assign(n,o)}}}let oa=null;function l4(){return oa||(oa=vr()),oa}function c4(){oa=null}function gc(a,n){switch(a){case"mediables":return hr(n);case"spatie":return vr(n);default:throw new Error(`Unknown adapter: ${a}`)}}function ha(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 yc(a){var t;const n=a.split(".");return n.length>1?`.${(t=n.pop())==null?void 0:t.toLowerCase()}`:""}function gr(a){return a.type.startsWith("image/")}async function wc(a){return gr(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 bc(a,n){const t=[];if(n.maxFileSize&&a.size>n.maxFileSize&&t.push({field:"size",message:`File exceeds maximum size of ${ha(n.maxFileSize)}`,code:"MAX_FILE_SIZE"}),n.minFileSize&&a.size<n.minFileSize&&t.push({field:"size",message:`File is smaller than minimum size of ${ha(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=yc(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(gr(a)&&(n.maxDimensions||n.minDimensions)){const o=await wc(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 yr(a={}){const n=e.ref(a.rules||{});function t(c){n.value=c}async function o(c){return bc(c,n.value)}async function i(c){const d=new Map;return await Promise.all(c.map(async u=>{const m=await o(u);d.set(u,m)})),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 d4(){return`upload-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}function u4(a){if(a.type.startsWith("image/"))return URL.createObjectURL(a)}function kc(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),m=e.ref(new Set),p=o?{rules:o}:{},{validateFile:h}=yr(p);async function v(){if(m.value.size>=t)return;const k=Array.from(u.value.entries()).find(([A,R])=>R.status==="pending"&&!m.value.has(A));if(!k){Array.from(u.value.values()).every(R=>R.status==="completed"||R.status==="error")&&u.value.size>0&&(d==null||d());return}const[T,F]=k;await y(T,F)}async function y(k,T){m.value.add(k),T.status="uploading",T.abortController=new AbortController,u.value.set(k,{...T}),r==null||r(T);try{const F={onProgress:R=>{T.progress=R,u.value.set(k,{...T}),s==null||s(T)},signal:T.abortController.signal};i&&(F.collection=i);const A=await n.upload(T.file,F);T.status="completed",T.progress=100,T.media=A.media,u.value.set(k,{...T}),l==null||l(T,A.media)}catch(F){F.name==="AbortError"?u.value.delete(k):(T.status="error",T.error=F.message,u.value.set(k,{...T}),c==null||c(T,F))}finally{m.value.delete(k),delete T.abortController,v()}}async function E(k){var A;const T=Array.from(k),F=[];for(const R of T){const j=await h(R),K=d4(),I=u4(R),D={id:K,file:R,progress:0,status:j.valid?"pending":"error"};!j.valid&&((A=j.errors[0])!=null&&A.message)&&(D.error=j.errors[0].message),I&&(D.previewUrl=I),u.value.set(K,D);const Z={media:null,clientId:K,name:R.name,order:0,upload:D,errors:j.errors};F.push(Z)}for(let R=0;R<t;R++)v();return F}function _(k){const T=u.value.get(k);T&&(T.abortController&&T.abortController.abort(),T.previewUrl&&URL.revokeObjectURL(T.previewUrl),u.value.delete(k),m.value.delete(k),v())}async function C(k){const T=u.value.get(k);!T||T.status!=="error"||(T.status="pending",T.progress=0,delete T.error,u.value.set(k,{...T}),v())}function w(){for(const[k,T]of u.value.entries())(T.status==="completed"||T.status==="error")&&(T.previewUrl&&URL.revokeObjectURL(T.previewUrl),u.value.delete(k))}function f(){for(const k of u.value.values())k.abortController&&k.abortController.abort(),k.previewUrl&&URL.revokeObjectURL(k.previewUrl);u.value.clear(),m.value.clear()}function x(k){return u.value.get(k)}const $=e.computed(()=>m.value.size>0),N=e.computed(()=>m.value.size),g=e.computed(()=>Array.from(u.value.values()).filter(k=>k.status==="pending").length),S=e.computed(()=>u.value.size===0?!0:Array.from(u.value.values()).every(k=>k.status==="completed"||k.status==="error")),O=e.computed(()=>Array.from(u.value.values()));return{uploads:u,isUploading:$,activeCount:N,pendingCount:g,isComplete:S,addFiles:E,cancelUpload:_,retryUpload:C,clearCompleted:w,clearAll:f,getUpload:x,uploadsArray:O}}function xc(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(C,w,f){n&&("dataTransfer"in C&&C.dataTransfer&&(C.dataTransfer.effectAllowed="move",C.dataTransfer.setData("text/plain",String(f))),d=C.target,d&&d.classList.add(r),l.value={isDragging:!0,dragIndex:f,dropIndex:f,draggedItem:w},c.value=!0,o==null||o(w,f))}function m(C,w){var f;if(!(!n||!l.value.isDragging)&&(C.preventDefault(),l.value.dropIndex!==w)){const x=document.querySelector(`.${s}`);x==null||x.classList.remove(s);const $=(f=C.target)==null?void 0:f.closest("[data-index]");$==null||$.classList.add(s),l.value.dropIndex=w}}function p(){if(!l.value.isDragging)return;const{dragIndex:C,dropIndex:w,draggedItem:f}=l.value;d&&d.classList.remove(r);const x=document.querySelector(`.${s}`);x==null||x.classList.remove(s),C!==null&&w!==null&&C!==w&&f&&(t==null||t({fromIndex:C,toIndex:w,item:f})),v(),i==null||i()}function h(){d&&d.classList.remove(r);const C=document.querySelector(`.${s}`);C==null||C.classList.remove(s),v(),i==null||i()}function v(){l.value={isDragging:!1,dragIndex:null,dropIndex:null,draggedItem:null},c.value=!1,d=null}function y(C,w,f){const x=[...C],[$]=x.splice(w,1);return x.splice(f,0,$),x.map((N,g)=>({...N,order:g}))}function E(C,w){return{draggable:n,"data-index":w,onDragstart:f=>u(f,C,w),onDragover:f=>m(f,w),onDragend:()=>p(),onDrop:f=>{f.preventDefault(),p()}}}function _(C){C.key==="Escape"&&l.value.isDragging&&h()}return e.onMounted(()=>{document.addEventListener("keydown",_)}),e.onUnmounted(()=>{document.removeEventListener("keydown",_),h()}),{dragState:l,isDragging:c,startDrag:u,handleDragOver:m,endDrag:p,cancelDrag:h,reorderItems:y,getDragProps:E}}function za(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:m="mediables",adapter:p,maxConcurrentUploads:h=3,onChange:v,onUpload:y,onUploadComplete:E,onUploadError:_,onRemove:C,onReorder:w,onError:f,onReadyToSubmitChange:x}=a,$={maxItems:r,maxFileSize:s,acceptedMimeTypes:l,...u},N=p||gc(m),g=e.ref([]),S=e.ref(!1),O=e.ref([]);function k(ie){if(ie.length===0)return[];const le=ie[0];return"media"in le&&"clientId"in le?ie:zi(ie)}g.value=k(n);const{acceptString:T,canAddFiles:F}=yr({rules:$}),A=kc({adapter:N,maxConcurrent:h,rules:$,collection:i,onUploadStart:ie=>{y==null||y(ie)},onUploadComplete:(ie,le)=>{const ke=g.value.findIndex(Ve=>Ve.clientId===ie.id);ke!==-1&&(g.value[ke]={...g.value[ke],media:le,name:le.name||le.file_name,upload:{...ie,status:"completed"}}),E==null||E(le)},onUploadError:(ie,le)=>{const ke=g.value.findIndex(Ve=>Ve.clientId===ie.id);ke!==-1&&(g.value[ke]={...g.value[ke],upload:{...ie,status:"error",error:le.message},errors:[{field:"upload",message:le.message,code:"UPLOAD_ERROR"}]}),_==null||_({file:ie.file,message:le.message})},onQueueComplete:()=>{v==null||v(g.value)}}),{dragState:R,getDragProps:j,reorderItems:K}=xc({enabled:c&&!d,onReorder:ie=>{g.value=K(g.value,ie.fromIndex,ie.toIndex),w==null||w(g.value),v==null||v(g.value)}}),I=e.computed(()=>A.isUploading.value),D=e.computed(()=>!A.isUploading.value&&A.pendingCount.value===0),Z=e.computed(()=>r?g.value.length>=r:!1),W=e.computed(()=>fr(g.value)),oe=e.computed(()=>g.value.length),we=e.computed(()=>r?Math.max(0,r-g.value.length):1/0);e.watch(D,ie=>{x==null||x(ie)});function Ce(ie){g.value=k(ie),v==null||v(g.value)}async function ne(ie){if(d)return;const le=Array.from(ie);if(!F(le.length,g.value.length)){const We={field:"count",message:`Maximum ${r} files allowed`,code:"MAX_ITEMS"};O.value=[We],f==null||f([We]);return}const ke=await A.addFiles(le),Ve=g.value.length,et=ke.map((We,fe)=>({...We,order:Ve+fe}));g.value=[...g.value,...et],v==null||v(g.value)}function M(ie){d||(ie.upload&&(ie.upload.status==="uploading"||ie.upload.status==="pending")&&A.cancelUpload(ie.clientId),g.value=g.value.filter(le=>le.clientId!==ie.clientId),g.value=g.value.map((le,ke)=>({...le,order:ke})),C==null||C(ie),v==null||v(g.value))}function z(ie){const le=g.value.find(ke=>ke.clientId===ie);le&&M(le)}function me(){d||(A.clearAll(),g.value=[],v==null||v(g.value))}function ae(ie,le){d||!c||(g.value=K(g.value,ie,le),w==null||w(g.value),v==null||v(g.value))}function Y(ie,le){if(d)return;const ke=g.value.findIndex(Ve=>Ve.clientId===ie);ke!==-1&&(g.value[ke]={...g.value[ke],...le},v==null||v(g.value))}function Te(ie){A.cancelUpload(ie),z(ie)}async function ue(ie){await A.retryUpload(ie)}async function se(){if(!t||!o)throw new Error("modelType and modelId are required for save()");const ie={modelType:t,modelId:o,collection:i},le=g.value.filter(ke=>ke.media&&!ke.markedForRemoval).map(ke=>ke.media.uuid);S.value=!0;try{await N.attachMany(le,ie),await N.reorder(ie,le)}finally{S.value=!1}}async function be(){if(!t||!o)throw new Error("modelType and modelId are required for load()");const ie={modelType:t,modelId:o,collection:i};S.value=!0;try{const le=await N.fetchModelMedia(ie);g.value=zi(le),v==null||v(g.value)}finally{S.value=!1}}return e.onMounted(()=>{t&&o&&n.length===0&&be().catch(console.error)}),e.onUnmounted(()=>{A.clearAll()}),{items:g,setItems:Ce,addFiles:ne,removeItem:M,removeItemById:z,clearAll:me,reorderItems:ae,updateItem:Y,cancelUpload:Te,retryUpload:ue,save:se,load:be,isLoading:S,isUploading:I,isReadyToSubmit:D,isAtMaxItems:Z,errors:O,dragState:R,getDragProps:j,adapter:N,formValues:W,acceptString:T,count:oe,remainingSlots:we}}const m4=["aria-disabled"],p4=["accept","multiple","disabled"],f4={class:"media-dropzone__content"},h4={class:"media-dropzone__title"},v4={class:"media-dropzone__subtitle"},g4=["disabled"],y4={key:0,class:"media-dropzone__helper"},w4=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: ${ha(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 m(y){var _;if(y.preventDefault(),i.value=!1,t.disabled)return;const E=(_=y.dataTransfer)==null?void 0:_.files;E&&E.length>0&&o("files",E)}function p(){var y;t.disabled||(y=r.value)==null||y.click()}function h(y){const E=y.target,_=E.files;_&&_.length>0&&o("files",_),E.value=""}function v(y){(y.key==="Enter"||y.key===" ")&&(y.preventDefault(),p())}return(y,E)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(s.value),role:"button",tabindex:"0","aria-disabled":y.disabled,"aria-label":"Upload files",onClick:p,onKeydown:v,onDragenter:c,onDragleave:d,onDragover:u,onDrop:m},[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,p4),e.createElementVNode("div",f4,[e.renderSlot(y.$slots,"icon",{},()=>[E[0]||(E[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",h4,[e.renderSlot(y.$slots,"title",{},()=>[e.createTextVNode(e.toDisplayString(y.title),1)],!0)]),e.createElementVNode("p",v4,[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(p,["stop"])},[e.renderSlot(y.$slots,"button",{},()=>[e.createTextVNode(e.toDisplayString(y.buttonText),1)],!0)],8,g4),l.value?(e.openBlock(),e.createElementBlock("p",y4,e.toDisplayString(l.value),1)):e.createCommentVNode("",!0)])],42,m4))}}),wr=Me(w4,[["__scopeId","data-v-b1366c1e"]]),b4=["data-index"],k4={key:0,class:"media-item__drag-handle","aria-label":"Drag to reorder",role:"button",tabindex:"0"},x4={class:"media-item__thumbnail"},E4=["src","alt"],V4={key:1,class:"media-item__file-icon"},S4={key:2,class:"media-item__progress-overlay"},C4={class:"media-item__progress-text"},N4={key:3,class:"media-item__processing-overlay"},_4={key:4,class:"media-item__error-overlay"},T4={class:"media-item__info"},M4=["title"],B4={key:0,class:"media-item__size"},I4={key:1,class:"media-item__error-message"},F4={class:"media-item__actions"},R4=["disabled"],$4=["disabled"],D4=["disabled"],U4=["disabled"],O4=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 w;return(w=t.item.upload)!=null&&w.previewUrl?t.item.upload.previewUrl:t.item.media?t.adapter.getThumbnailUrl(t.item.media):null}),s=e.computed(()=>{var w,f,x;return((w=t.item.upload)==null?void 0:w.status)==="uploading"||((f=t.item.upload)==null?void 0:f.status)==="pending"||((x=t.item.upload)==null?void 0:x.status)==="queued"}),l=e.computed(()=>{var w;return((w=t.item.upload)==null?void 0:w.status)==="processing"}),c=e.computed(()=>{var w;return((w=t.item.upload)==null?void 0:w.status)==="error"||t.item.errors&&t.item.errors.length>0}),d=e.computed(()=>{var w;return(w=t.item.upload)!=null&&w.error?t.item.upload.error:t.item.errors&&t.item.errors.length>0?t.item.errors[0].message:null}),u=e.computed(()=>{var w;return((w=t.item.upload)==null?void 0:w.progress)||0}),m=e.computed(()=>{var w;return t.item.name||((w=t.item.media)==null?void 0:w.file_name)||"Unknown file"}),p=e.computed(()=>{var N,g;const w=((N=t.item.media)==null?void 0:N.size)||((g=t.item.upload)==null?void 0:g.file.size);if(!w)return"";const f=1024,x=["Bytes","KB","MB","GB"],$=Math.floor(Math.log(w)/Math.log(f));return parseFloat((w/Math.pow(f,$)).toFixed(2))+" "+x[$]}),h=e.computed(()=>{var f,x;const w=((f=t.item.media)==null?void 0:f.mime_type)||((x=t.item.upload)==null?void 0:x.file.type);return w==null?void 0:w.startsWith("image/")}),v=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 E(){t.disabled||o("edit",t.item)}function _(){t.disabled||o("retry",t.item)}function C(){t.disabled||o("cancel",t.item)}return(w,f)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(v.value),"data-index":w.index,onMouseenter:f[0]||(f[0]=x=>i.value=!0),onMouseleave:f[1]||(f[1]=x=>i.value=!1)},[w.sortable&&!w.disabled?(e.openBlock(),e.createElementBlock("div",k4,[...f[2]||(f[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",x4,[r.value&&h.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:r.value,alt:m.value,class:"media-item__image"},null,8,E4)):(e.openBlock(),e.createElementBlock("div",V4,[...f[3]||(f[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",S4,[e.createElementVNode("div",{class:"media-item__progress-bar",style:e.normalizeStyle({width:`${u.value}%`})},null,4),e.createElementVNode("span",C4,e.toDisplayString(u.value)+"%",1)])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",N4,[...f[4]||(f[4]=[e.createElementVNode("div",{class:"media-item__spinner","aria-label":"Processing"},null,-1)])])):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createElementBlock("div",_4,[...f[5]||(f[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",T4,[e.createElementVNode("span",{class:"media-item__name",title:m.value},e.toDisplayString(m.value),9,M4),p.value?(e.openBlock(),e.createElementBlock("span",B4,e.toDisplayString(p.value),1)):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createElementBlock("span",I4,e.toDisplayString(d.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",F4,[s.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"media-item__action media-item__action--cancel",disabled:w.disabled,"aria-label":"Cancel upload",onClick:C},[...f[6]||(f[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,R4)):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"media-item__action media-item__action--retry",disabled:w.disabled,"aria-label":"Retry upload",onClick:_},[...f[7]||(f[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,$4)):e.createCommentVNode("",!0),w.showEdit&&w.item.media&&!s.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"media-item__action media-item__action--edit",disabled:w.disabled,"aria-label":"Edit",onClick:E},[...f[8]||(f[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,D4)):e.createCommentVNode("",!0),w.showRemove?(e.openBlock(),e.createElementBlock("button",{key:3,type:"button",class:"media-item__action media-item__action--remove",disabled:w.disabled,"aria-label":"Remove",onClick:y},[...f[9]||(f[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,U4)):e.createCommentVNode("",!0)])],42,b4))}}),br=Me(O4,[["__scopeId","data-v-ff81c9ec"]]),A4=["aria-label"],L4=["draggable","data-index","onDragstart","onDragover","onDragend","onDrop"],z4={key:0,class:"media-collection__footer"},P4={class:"media-collection__count"},j4={key:0},W4={key:0,class:"media-collection__uploading"},Z4=["name","value"],X4=["name","value"],H4=["name","value"],G4=["name","value"],J4={key:3,class:"media-collection__errors",role:"alert","aria-live":"polite"},Y4=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:I=>{o("update:modelValue",I),o("change",I)},onUpload:I=>{o("upload",I)},onUploadComplete:I=>{o("upload-complete",I)},onUploadError:I=>{o("upload-error",I)},onRemove:I=>{o("remove",I)},onReorder:I=>{o("reorder",I)},onError:I=>{o("validation-error",I)},onReadyToSubmitChange:I=>{o("is-ready-to-submit-change",I)}},{items:r,setItems:s,addFiles:l,removeItem:c,reorderItems:d,cancelUpload:u,retryUpload:m,isLoading:p,isUploading:h,isAtMaxItems:v,errors:y,dragState:E,getDragProps:_,adapter:C,formValues:w,acceptString:f,count:x,remainingSlots:$}=za(i);e.provide("mediaAdapter",C),e.provide("mediaCollection",{items:r,addFiles:l,removeItem:c,reorderItems:d}),e.watch(()=>t.modelValue,I=>{I!==r.value&&s(I)},{deep:!0});const N=e.computed(()=>t.showUploadZone&&!t.disabled&&!t.readonly&&!v.value),g=e.computed(()=>({"media-collection":!0,"media-collection--disabled":t.disabled,"media-collection--readonly":t.readonly,"media-collection--loading":p.value,"media-collection--has-items":r.value.length>0,"media-collection--dragging":E.value.isDragging}));function S(I){l(I)}function O(I){c(I)}function k(I){m(I.clientId)}function T(I){u(I.clientId)}function F(I){}function A(I,D,Z){if(!t.sortable||t.disabled)return;const W=_(D,Z);W.onDragstart&&W.onDragstart(I)}function R(I,D){if(!t.sortable||t.disabled)return;I.preventDefault();const Z=r.value[D],W=_(Z,D);W.onDragover&&W.onDragover(I)}function j(I,D){const Z=_(I,D);Z.onDragend&&Z.onDragend()}function K(I,D){I.preventDefault();const Z=r.value[D],W=_(Z,D);W.onDrop&&W.onDrop(I)}return(I,D)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(g.value)},[e.renderSlot(I.$slots,"dropzone",{addFiles:e.unref(l)},()=>[N.value?(e.openBlock(),e.createBlock(wr,{key:0,accept:e.unref(f),multiple:I.maxItems!==1,disabled:I.disabled,"max-file-size":I.maxFileSize,"max-items":e.unref($),onFiles:S},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(x)} media items`},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(r),(Z,W)=>e.renderSlot(I.$slots,"item",{key:Z.clientId,item:Z,index:W,remove:()=>O(Z)},()=>[e.createElementVNode("div",{class:e.normalizeClass(["media-collection__item-wrapper",{"media-collection__item-wrapper--drag-over":e.unref(E).dropIndex===W}]),draggable:I.sortable&&!I.disabled,"data-index":W,onDragstart:oe=>A(oe,Z,W),onDragover:oe=>R(oe,W),onDragend:oe=>j(Z,W),onDrop:oe=>K(oe,W)},[e.createVNode(br,{item:Z,adapter:e.unref(C),disabled:I.disabled,sortable:I.sortable,"show-remove":!I.readonly,"show-edit":!1,index:W,onRemove:O,onRetry:k,onCancel:T,onEdit:F},null,8,["item","adapter","disabled","sortable","show-remove","index"])],42,L4)],!0)),128))],8,A4)):N.value?e.createCommentVNode("",!0):e.renderSlot(I.$slots,"empty",{key:1},()=>[D[0]||(D[0]=e.createElementVNode("div",{class:"media-collection__empty"},[e.createElementVNode("p",null,"No files uploaded")],-1))],!0),e.renderSlot(I.$slots,"footer",{count:e.unref(x),isUploading:e.unref(h)},()=>[e.unref(r).length>0?(e.openBlock(),e.createElementBlock("div",z4,[e.createElementVNode("span",P4,[e.createTextVNode(e.toDisplayString(e.unref(x))+" "+e.toDisplayString(e.unref(x)===1?"file":"files")+" ",1),I.maxItems?(e.openBlock(),e.createElementBlock("span",j4," / "+e.toDisplayString(I.maxItems)+" max",1)):e.createCommentVNode("",!0)]),e.unref(h)?(e.openBlock(),e.createElementBlock("span",W4," Uploading... ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],!0),I.generateFormFields?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(w),(Z,W)=>(e.openBlock(),e.createElementBlock("input",{key:`${I.name}-${Z.uuid}`,type:"hidden",name:`${I.name}[${W}][uuid]`,value:Z.uuid},null,8,Z4))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(w),(Z,W)=>(e.openBlock(),e.createElementBlock("input",{key:`${I.name}-${Z.uuid}-name`,type:"hidden",name:`${I.name}[${W}][name]`,value:Z.name},null,8,X4))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(w),(Z,W)=>(e.openBlock(),e.createElementBlock("input",{key:`${I.name}-${Z.uuid}-order`,type:"hidden",name:`${I.name}[${W}][order]`,value:Z.order},null,8,H4))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(w),(Z,W)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:`${I.name}-${Z.uuid}-props`},[Z.custom_properties?(e.openBlock(),e.createElementBlock("input",{key:0,type:"hidden",name:`${I.name}[${W}][custom_properties]`,value:JSON.stringify(Z.custom_properties)},null,8,G4)):e.createCommentVNode("",!0)],64))),128))],64)):e.createCommentVNode("",!0),e.unref(y).length>0?(e.openBlock(),e.createElementBlock("div",J4,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(y),Z=>(e.openBlock(),e.createElementBlock("p",{key:Z.code||Z.message,class:"media-collection__error"},e.toDisplayString(Z.message),1))),128))])):e.createCommentVNode("",!0)],2))}}),K4=Me(Y4,[["__scopeId","data-v-10a5bfff"]]);function kr(a={}){const{initialItem:n,onChange:t,onReplace:o,onUpload:i,onUploadComplete:r,onUploadError:s,onRemove:l,onError:c,onReadyToSubmitChange:d,...u}=a,p={...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=za(p),v=e.computed(()=>h.items.value[0]||null),y=e.computed(()=>v.value!==null),E=e.computed(()=>h.formValues.value[0]||null);function _(N){N===null?h.clearAll():h.setItems([N])}async function C(N){const g=v.value;g&&h.removeItem(g),await h.addFiles([N])}function w(){v.value&&h.removeItem(v.value)}async function f(N){const g=v.value;g&&h.removeItem(g),await h.addFiles([N]);const S=h.items.value[0];S&&(o==null||o(g,S))}function x(){var N;(N=v.value)!=null&&N.upload&&h.cancelUpload(v.value.clientId)}async function $(){var N,g;((g=(N=v.value)==null?void 0:N.upload)==null?void 0:g.status)==="error"&&await h.retryUpload(v.value.clientId)}return{item:v,setItem:_,addFile:C,removeItem:w,replaceItem:f,cancelUpload:x,retryUpload:$,save:h.save,load:h.load,isLoading:h.isLoading,isUploading:h.isUploading,isReadyToSubmit:h.isReadyToSubmit,hasItem:y,errors:h.errors,adapter:h.adapter,formValue:E,acceptString:h.acceptString}}const q4=["accept","disabled"],Q4={class:"media-attachment__preview"},e3=["name","value"],t3=["name","value"],n3=["name","value"],o3=["name","value"],a3={key:4,class:"media-attachment__errors",role:"alert","aria-live":"polite"},i3=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:k=>{o("update:modelValue",k),o("change",k)},onUpload:k=>{o("upload",k)},onUploadComplete:k=>{o("upload-complete",k)},onUploadError:k=>{o("upload-error",k)},onRemove:k=>{o("remove",k)},onReplace:(k,T)=>{o("replace",T)},onError:k=>{o("validation-error",k)},onReadyToSubmitChange:k=>{o("is-ready-to-submit-change",k)}},{item:s,setItem:l,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:p,isLoading:h,hasItem:v,errors:y,adapter:E,formValue:_,acceptString:C}=kr(r);e.provide("mediaAdapter",E),e.watch(()=>t.modelValue,k=>{k!==s.value&&l(k)},{deep:!0});const w=e.computed(()=>t.showUploadZone&&!t.disabled&&!t.readonly&&!v.value),f=e.computed(()=>({"media-attachment":!0,"media-attachment--disabled":t.disabled,"media-attachment--readonly":t.readonly,"media-attachment--loading":h.value,"media-attachment--has-item":v.value}));function x(k){k.length>0&&c(k[0])}function $(){var k;(k=i.value)==null||k.click()}function N(k){const T=k.target,F=T.files;F&&F.length>0&&u(F[0]),T.value=""}function g(k){d()}function S(k){p()}function O(k){m()}return(k,T)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(f.value)},[e.createElementVNode("input",{ref_key:"fileInputRef",ref:i,type:"file",accept:e.unref(C),disabled:k.disabled,class:"media-attachment__hidden-input",onChange:N},null,40,q4),w.value?e.renderSlot(k.$slots,"dropzone",{key:0,addFile:e.unref(c)},()=>[e.createVNode(wr,{accept:e.unref(C),multiple:!1,disabled:k.disabled,"max-file-size":k.maxFileSize,onFiles:x},null,8,["accept","disabled","max-file-size"])],!0):e.unref(v)&&e.unref(s)?e.renderSlot(k.$slots,"preview",{key:1,item:e.unref(s),remove:e.unref(d),replace:$},()=>[e.createElementVNode("div",Q4,[e.createVNode(br,{item:e.unref(s),adapter:e.unref(E),disabled:k.disabled,sortable:!1,"show-remove":!k.readonly,"show-edit":!1,onRemove:g,onRetry:S,onCancel:O},null,8,["item","adapter","disabled","show-remove"]),k.showReplaceButton&&!k.readonly&&!k.disabled&&e.unref(s).media?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"media-attachment__replace-button",onClick:$},[...T[0]||(T[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(k.$slots,"empty",{key:2},()=>[T[1]||(T[1]=e.createElementVNode("div",{class:"media-attachment__empty"},[e.createElementVNode("p",null,"No file selected")],-1))],!0),k.generateFormFields&&e.unref(_)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("input",{type:"hidden",name:`${k.name}[uuid]`,value:e.unref(_).uuid},null,8,e3),e.createElementVNode("input",{type:"hidden",name:`${k.name}[name]`,value:e.unref(_).name},null,8,t3),e.createElementVNode("input",{type:"hidden",name:`${k.name}[order]`,value:e.unref(_).order},null,8,n3),e.unref(_).custom_properties?(e.openBlock(),e.createElementBlock("input",{key:0,type:"hidden",name:`${k.name}[custom_properties]`,value:JSON.stringify(e.unref(_).custom_properties)},null,8,o3)):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0),e.unref(y).length>0?(e.openBlock(),e.createElementBlock("div",a3,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(y),F=>(e.openBlock(),e.createElementBlock("p",{key:F.code||F.message,class:"media-attachment__error"},e.toDisplayString(F.message),1))),128))])):e.createCommentVNode("",!0)],2))}}),r3=Me(i3,[["__scopeId","data-v-26911174"]]),Ec={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"}},s3=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:k=>{i("update:modelValue",k),i("change",k)},onUpload:k=>{i("upload",k)},onUploadComplete:k=>{i("upload-complete",k)},onUploadError:k=>{i("upload-error",k)},onRemove:k=>{i("remove",k)},onReorder:k=>{i("reorder",k)},onError:k=>{i("validation-error",k)},onReadyToSubmitChange:k=>{i("is-ready-to-submit-change",k)}},{items:s,setItems:l,addFiles:c,removeItem:d,reorderItems:u,updateItem:m,cancelUpload:p,retryUpload:h,isLoading:v,isUploading:y,isReadyToSubmit:E,isAtMaxItems:_,errors:C,dragState:w,getDragProps:f,adapter:x,formValues:$,acceptString:N}=za(r);e.provide("mediaAdapter",x),e.provide("mediaCollection",{items:s,addFiles:c,removeItem:d,reorderItems:u}),e.watch(()=>o.modelValue,k=>{k!==s.value&&l(k)},{deep:!0});const g=e.computed(()=>({...Ec,...o.labels})),S=e.computed(()=>({accept:N.value,multiple:o.maxItems!==1,disabled:o.disabled||o.readonly||_.value})),O=e.computed(()=>({items:s.value,isLoading:v.value,isUploading:y.value,isReadyToSubmit:E.value,isAtMaxItems:_.value,errors:C.value,addFiles:c,removeItem:d,reorderItems:u,clearAll:()=>{s.value.forEach(k=>d(k))},cancelUpload:p,retryUpload:h,labels:g.value,dropzoneProps:S.value}));return n({items:s,addFiles:c,removeItem:d,reorderItems:u,updateItem:m,cancelUpload:p,retryUpload:h,isLoading:v,isUploading:y,isReadyToSubmit:E,isAtMaxItems:_,errors:C,dragState:w,getDragProps:f,adapter:x,formValues:$,acceptString:N}),(k,T)=>e.renderSlot(k.$slots,"default",e.normalizeProps(e.guardReactiveProps(O.value)))}}),l3=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:g=>{i("update:modelValue",g),i("change",g)},onUpload:g=>{i("upload",g)},onUploadComplete:g=>{i("upload-complete",g)},onUploadError:g=>{i("upload-error",g)},onRemove:g=>{i("remove",g)},onReplace:(g,S)=>{i("replace",S)},onError:g=>{i("validation-error",g)},onReadyToSubmitChange:g=>{i("is-ready-to-submit-change",g)}},{item:s,setItem:l,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:p,isLoading:h,isUploading:v,isReadyToSubmit:y,hasItem:E,errors:_,adapter:C,formValue:w,acceptString:f}=kr(r);e.provide("mediaAdapter",C),e.watch(()=>o.modelValue,g=>{g!==s.value&&l(g)},{deep:!0});const x=e.computed(()=>({...Ec,...o.labels})),$=e.computed(()=>({accept:f.value,multiple:!1,disabled:o.disabled||o.readonly||E.value})),N=e.computed(()=>({item:s.value,hasItem:E.value,isLoading:h.value,isUploading:v.value,isReadyToSubmit:y.value,errors:_.value,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:p,labels:x.value,dropzoneProps:$.value}));return n({item:s,setItem:l,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:p,isLoading:h,isUploading:v,isReadyToSubmit:y,hasItem:E,errors:_,adapter:C,formValue:w,acceptString:f}),(g,S)=>e.renderSlot(g.$slots,"default",e.normalizeProps(e.guardReactiveProps(N.value)))}}),c3=["name","value"],d3=["name","value"],u3=["name","value"],m3=["name","value"],p3=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(()=>fr(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,c3),e.createElementVNode("input",{type:"hidden",name:s(u,"name"),value:d.name},null,8,d3),e.createElementVNode("input",{type:"hidden",name:s(u,"order"),value:d.order},null,8,u3),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,m3)):e.createCommentVNode("",!0)],64))),128))}});exports.AlbumBrowser=vc;exports.AlbumManager=WE;exports.AlbumMediaGrid=n4;exports.AlbumTree=hc;exports.ArrayBufferTarget=Ji;exports.ImageEditor=Ys;exports.ImageEditorModal=Ks;exports.LiveStreamManager=gE;exports.ManagedMediaGallery=Jd;exports.MediaAttachment=r3;exports.MediaCollection=K4;exports.MediaCollectionDropzone=wr;exports.MediaCollectionItem=br;exports.MediaWorkspace=Zd;exports.ModelMediaManager=Wm;exports.Muxer=xl;exports.VideoEditor=Li;exports.VideoEditorDialog=eb;exports.VideoEditorSimple=Vb;exports.VideoExportPanel=ok;exports.VideoJobClient=mr;exports.VideoPlayer=mc;exports.VideoTimeline=Gb;exports.VideoToolsPanel=U2;exports.VideoUploader=Wk;exports._sfc_main=s3;exports._sfc_main$1=l3;exports._sfc_main$2=p3;exports.applyTemporaryMediaStoreConfig=Gs;exports.configureMediaStore=In;exports.createAdapter=gc;exports.createEmptyEditorState=Bd;exports.createImageEditor=a4;exports.createMediablesAdapter=hr;exports.createSpatieAdapter=vr;exports.deserializeEditorState=Md;exports.formatFileSize=ha;exports.fromMediaArray=zi;exports.getFileExtension=yc;exports.getImageDimensions=wc;exports.getMediablesAdapter=i4;exports.getSpatieAdapter=l4;exports.isImageFile=gr;exports.normalizeEditorState=Pi;exports.resetMediablesAdapter=r4;exports.resetSpatieAdapter=c4;exports.restoreMediaStoreConfig=Hs;exports.serializeEditorState=Zs;exports.snapshotMediaStoreConfig=Xs;exports.toFormValues=fr;exports.useAdminMediaStore=Js;exports.useAlbumDragDrop=fc;exports.useAlbumStore=La;exports.useAlbums=pc;exports.useGlobalImageEditor=o4;exports.useImageEditorModal=pr;exports.useMediaAttachment=kr;exports.useMediaCollection=za;exports.useMediaDragSort=xc;exports.useMediaStore=kt;exports.useMediaUploadQueue=kc;exports.useMediaValidation=yr;exports.validateFile=bc;
|
|
342
|
-
//# sourceMappingURL=index-
|
|
341
|
+
`+r):o.stack=r}catch{}}throw o}}_request(n,t){typeof n=="string"?(t=t||{},t.url=n):t=n||{},t=wn(this.defaults,t);const{transitional:o,paramsSerializer:i,headers:r}=t;o!==void 0&&ta.assertOptions(o,{silentJSONParsing:Ot.transitional(Ot.boolean),forcedJSONParsing:Ot.transitional(Ot.boolean),clarifyTimeoutError:Ot.transitional(Ot.boolean)},!1),i!=null&&(G.isFunction(i)?t.paramsSerializer={serialize:i}:ta.assertOptions(i,{encode:Ot.function,serialize:Ot.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),ta.assertOptions(t,{baseUrl:Ot.spelling("baseURL"),withXsrfToken:Ot.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=r&&G.merge(r.common,r[t.method]);r&&G.forEach(["delete","get","head","post","put","patch","common"],v=>{delete r[v]}),t.headers=gt.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,m=0,p;if(!c){const v=[Us.bind(this),void 0];for(v.unshift(...l),v.push(...d),p=v.length,u=Promise.resolve(t);m<p;)u=u.then(v[m++],v[m++]);return u}p=l.length;let h=t;for(m=0;m<p;){const v=l[m++],y=l[m++];try{h=v(h)}catch(E){y.call(this,E);break}}try{u=Us.call(this,h)}catch(v){return Promise.reject(v)}for(m=0,p=d.length;m<p;)u=u.then(d[m++],d[m++]);return u}getUri(n){n=wn(this.defaults,n);const t=ac(n.baseURL,n.url,n.allowAbsoluteUrls);return Ql(t,n.params,n.paramsSerializer)}};G.forEach(["delete","get","head","options"],function(n){gn.prototype[n]=function(t,o){return this.request(wn(o||{},{method:n,url:t,data:(o||{}).data}))}});G.forEach(["post","put","patch"],function(n){function t(o){return function(r,s,l){return this.request(wn(l||{},{method:n,headers:o?{"Content-Type":"multipart/form-data"}:{},url:r,data:s}))}}gn.prototype[n]=t(),gn.prototype[n+"Form"]=t(!0)});let Jy=class dc{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 jn(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 dc(function(i){n=i}),cancel:n}}};function Yy(a){return function(t){return a.apply(null,t)}}function Ky(a){return G.isObject(a)&&a.isAxiosError===!0}const Ai={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(Ai).forEach(([a,n])=>{Ai[n]=a});function uc(a){const n=new gn(a),t=zl(gn.prototype.request,n);return G.extend(t,gn.prototype,n,{allOwnKeys:!0}),G.extend(t,n,null,{allOwnKeys:!0}),t.create=function(i){return uc(wn(a,i))},t}const He=uc(_o);He.Axios=gn;He.CanceledError=jn;He.CancelToken=Jy;He.isCancel=nc;He.VERSION=cc;He.toFormData=Da;He.AxiosError=Be;He.Cancel=He.CanceledError;He.all=function(n){return Promise.all(n)};He.spread=Yy;He.isAxiosError=Ky;He.mergeConfig=wn;He.AxiosHeaders=gt;He.formToJSON=a=>tc(G.isHTMLForm(a)?new FormData(a):a);He.getAdapter=lc.getAdapter;He.HttpStatusCode=Ai;He.default=He;const{Axios:y3,AxiosError:w3,CanceledError:b3,isCancel:k3,CancelToken:x3,VERSION:E3,all:V3,Cancel:S3,isAxiosError:C3,spread:N3,toFormData:_3,AxiosHeaders:T3,HttpStatusCode:M3,formToJSON:B3,getAdapter:I3,mergeConfig:F3}=He;class mr{constructor(n="/api/v1"){this.eventSource=null,this.progressCallbacks=new Map,this.api=He.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 mr;const qy={key:0,class:"mobile-layout"},Qy={class:"mobile-toolbar"},ew={class:"mobile-toolbar-left"},tw=["aria-label"],nw={class:"mobile-toolbar-right"},ow=["disabled"],aw=["disabled"],iw={class:"preview-section"},rw={key:0,class:"mobile-export-overlay"},sw={class:"mobile-export-progress"},lw={class:"mobile-export-bar"},cw={class:"mobile-timeline-zoom"},dw={key:1,class:"desktop-layout"},uw={class:"desktop-main-row"},mw={class:"preview-panel"},pw={class:"fit-toggle"},fw={class:"editor-content"},hw={class:"editor-tabs"},vw={class:"tab-header"},gw=["onClick"],yw={class:"tab-content-area"},ww={class:"filter-controls"},bw={class:"text-controls"},kw={class:"transition-controls"},xw={class:"audio-controls"},Ew={class:"adjustments-controls"},Vw={key:1,class:"no-filter-selected"},Sw={class:"export-controls"},Cw={key:0,"data-testid":"video-export-status-completed"},Nw={key:1,"data-testid":"video-export-status-message",class:"export-status-message"},_w={class:"desktop-timeline-row"},Tw={class:"timeline-zoom"},Mw=["value"],Bw={class:"zoom-readout"},Iw={key:0,class:"dev-editor-controls","data-testid":"video-editor-dev-controls"},Fw={class:"dev-editor-row"},Rw={class:"dev-editor-field"},$w={class:"dev-editor-field"},Dw=["disabled"],Uw=["disabled"],Ow=["disabled"],Aw={class:"dev-editor-row"},Lw={class:"dev-editor-field dev-editor-field--wide"},zw=["value"],Pw=["disabled"],jw=["disabled"],Ww=["disabled"],Zw=["disabled"],Xw=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 b=o.media.uuid??o.media.id;return typeof b=="string"&&b.trim()!==""?b.trim():void 0}),s=e.computed(()=>{const b=typeof o.mediaUuid=="string"?o.mediaUuid.trim():"";return b!==""?b: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 b=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},V=o.featureFlags;return V?{filters:typeof V.filters=="boolean"?V.filters:b.filters,adjustments:typeof V.adjustments=="boolean"?V.adjustments:b.adjustments,text:typeof V.text=="boolean"?V.text:b.text,transitions:typeof V.transitions=="boolean"?V.transitions:b.transitions,audio:typeof V.audio=="boolean"?V.audio:b.audio,export:typeof V.export=="boolean"?V.export:b.export}:b}),m=e.computed(()=>l.value?c.value:d.value),p=e.computed(()=>m.value==="filters"||E.value),h=e.computed(()=>m.value!=="filters"&&!E.value),v=e.ref(null),y=e.ref(null),E=e.ref(!1),_=e.computed(()=>l.value?v.value:y.value);function C(b){return b==="contain"||b==="cover"||b==="none"}function w(b){if(!(b!=null&&b.metadata))return null;const V=b.metadata.fit_mode;return C(V)?V:null}const f=e.shallowRef(null),x=e.ref(null),$=e.ref(w(o.initialRecipe)??"contain"),N=e.ref(null),g=e.ref(null),S=e.ref(null),O=e.ref(!1),k=new Map,T=e.ref([]),F=e.ref([]),A=e.ref([]),R=e.ref([]),j=e.ref(1),K=()=>{l.value=window.innerWidth<768},I=[{id:"filters",label:"Filters",icon:an},{id:"adjustments",label:"Adjust",icon:pu},{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:po}],D=[{id:"filters",label:"Filters"},{id:"adjustments",label:"Adjustments"},{id:"text",label:"Text"},{id:"transitions",label:"Transitions"},{id:"audio",label:"Audio"},{id:"export",label:"Export"}],Z=e.computed(()=>I.filter(b=>u.value[b.id])),W=e.computed(()=>D.filter(b=>u.value[b.id])),oe=e.computed(()=>{var b,V;return((b=W.value[0])==null?void 0:b.id)??((V=Z.value[0])==null?void 0:V.id)??"filters"});e.watch(u,b=>{b[c.value]||(c.value=oe.value),b[d.value]||(d.value=oe.value)},{immediate:!0,deep:!0}),e.watch(oe,b=>{u.value[c.value]||(c.value=b),u.value[d.value]||(d.value=b)},{immediate:!0}),e.watch(u,b=>{b.export||(c.value==="export"&&(c.value=oe.value),d.value==="export"&&(d.value=oe.value))},{immediate:!0,deep:!0});const we=e.computed(()=>typeof window>"u"?!1:window.__MEDIABLES_EDITOR_DEV__===!0),{currentFrame:Ce,playheadPosition:ne,timelineClips:M,totalDuration:z,hasChanges:me,isPlaying:ae,selectedClip:Y,zoomLevel:Te,playbackSpeed:ue,handleTrim:se,handleSplit:be,handleClipSelect:ie,splitAtPlayhead:le,deleteSelectedClip:ke,duplicateSelectedClip:Ve,setZoomLevel:et,moveClip:We,setFilters:fe,setTextOverlays:P,setAudioTracks:J,saveDraft:ee,clearHasChanges:te,resetChanges:pe,generateRecipe:ve,zoomIn:Fe,zoomOut:Oe,fitToWindow:H,togglePlayback:re,setPlaying:xe,seekTo:Ne,frameForward:ze,frameBackward:wt,skipToStart:ut,skipToEnd:St,setPlaybackSpeed:Ge,updateSourceDuration:Zt}=cg(s.value,o.initialRecipe,o.media),{videoCompatibleFilters:Pa,activeFilters:qe,selectedFilter:xr,previewFilter:To,previewFilterEffect:Er,applyFilter:Vr,updateFilterParams:Vc,removeFilter:Sc,clearAllFilters:Sr,setActiveFilters:Cc}=wg();function Wn(b){var X,q;const V=((X=Y.value)==null?void 0:X.id)??((q=M.value[0])==null?void 0:q.id);V&&(O.value=!0,typeof b=="object"&&b.id?Vr(b.id):typeof b=="string"&&Vr(b),fe(qe.value),f.value?f.value.setClipFilters(V,qe.value):k.set(V,[...qe.value]),ie(V),O.value=!1,Rt())}function Nc(){var V,X;const b=((V=Y.value)==null?void 0:V.id)??((X=M.value[0])==null?void 0:X.id);b&&ie(b)}function Cr(b){const V=qe.value.find(X=>X.filterId===b);V&&Sc(V.id)}const Zn=e.computed(()=>Pa.value.map(V=>{var q;const X=[];if(V.controls&&V.controls.length>0)for(const ce of V.controls){const Q=ce.type;if(Q==="button"||Q==="text"||Q==="range")continue;const de={id:ce.property||ce.id,label:ce.label||ce.id,type:Q,default:ce.default??(Q==="toggle"?!1:Q==="color"?"#ffffff":0)};Q==="slider"&&(de.min=ce.min??0,de.max=ce.max??1,de.step=ce.step??.01),Q==="select"&&ce.options&&(de.options=ce.options),X.push(de)}else if(V.paramRanges){const ce=Object.entries(V.paramRanges);for(const[Q,de]of ce){const $e=Q.replace(/[-_]/g," ").replace(/\b\w/g,$t=>$t.toUpperCase()),mt=(q=V.defaultParams)==null?void 0:q[Q],Gt=(de.min+de.max)/2;X.push({id:Q,label:$e,min:de.min,max:de.max,step:de.step??.01,default:typeof mt=="number"?mt:Gt})}}return{id:V.id,name:V.name,category:V.category,params:X}})),En=e.ref("0.00"),Vn=e.ref("0.00"),qt=e.ref("");e.watch(Zn,b=>{if(b.length===0){qt.value="";return}b.some(X=>X.id===qt.value)||(qt.value=b[0].id)},{immediate:!0});const tt=e.ref(!1),Ze=e.ref(0),Xt=e.ref(!1),je=e.ref(null),Tt=e.ref(null);let Mo=null,Ct=!1,Ht=null;const ja=e.computed(()=>{const b=new Map;return qe.value.forEach(V=>b.set(V.filterId,V)),b}),_c=e.computed(()=>{var b,V;return Ce.value?Ce.value:((b=o.media)==null?void 0:b.thumbnail_url)||((V=o.media)==null?void 0:V.url)}),Ft=e.ref("");e.watch(()=>{var b,V;return{file:(b=o.media)==null?void 0:b.file,url:(V=o.media)==null?void 0:V.url}},(b,V,X)=>{var ce,Q;const q=Ft.value;X(()=>{q&&q.startsWith("blob:")&&URL.revokeObjectURL(q)}),(ce=o.media)!=null&&ce.file?Ft.value=URL.createObjectURL(o.media.file):(Q=o.media)!=null&&Q.url?Ft.value=o.media.url:Ft.value=""},{immediate:!0}),e.onUnmounted(()=>{Ft.value&&Ft.value.startsWith("blob:")&&URL.revokeObjectURL(Ft.value)});const Wa=e.computed(()=>Ft.value),Nr=e.computed(()=>{if(!o.media)return null;const{file:b,...V}=o.media;return{...V,url:Ft.value}}),_r=e.computed(()=>{var V;const b=(V=o.media)==null?void 0:V.url;return!!(b&&/^https?:/i.test(b))}),Tr=e.computed(()=>qe.value),Mr=e.computed(()=>ne.value),Tc=e.computed(()=>!!Y.value&&ne.value>0),Mc=e.computed(()=>!!Y.value&&M.value.length>1),Za=e.ref(0),Qt=e.computed(()=>{try{const b=z.value??z;return b&&typeof b=="number"&&b>0?b:Za.value}catch{return Za.value}}),Sn=e.ref(),Xa=e.ref(),Bo=e.ref(0),Io=e.ref(!1);let ft=null;e.watch(Qt,b=>{var X;if(Io.value||!b||b<=0)return;const V=Bo.value||((X=Sn.value)==null?void 0:X.clientWidth)||0;V>0&&(Io.value=!0,H(V))}),e.watch(Bo,b=>{if(Io.value||!b||b<=0)return;Qt.value>0&&(Io.value=!0,H(b))});function Cn(b){return Number.isFinite(b)?b.toFixed(2):"0.00"}function Br(b){const V=Number(b);return Number.isFinite(V)?V:null}function Bc(b){b&&(En.value=Cn(b.sourceIn),Vn.value=Cn(b.sourceOut))}e.watch(()=>{var b,V,X;return[(b=Y.value)==null?void 0:b.id,(V=Y.value)==null?void 0:V.sourceIn,(X=Y.value)==null?void 0:X.sourceOut]},()=>{Bc(Y.value)},{immediate:!0});function Ir(b){const V=Y.value;if(!V)return;const X=1/30,q=V.sourceMinIn??0,ce=V.sourceMaxOut??Qt.value,Q=V.sourceIn+(ne.value-V.timelineStart);if(b==="start"){const $e=Math.max(q,Math.min(Q,V.sourceOut-X));En.value=Cn($e);return}const de=Math.max(V.sourceIn+X,Math.min(Q,ce));Vn.value=Cn(de)}function Ic(){const b=Y.value;if(!b)return;const V=Br(En.value),X=Br(Vn.value);if(V===null||X===null)return;const q=1/30,ce=b.sourceMinIn??0,Q=b.sourceMaxOut??Qt.value,de=Math.max(ce,Math.min(V,Q-q)),$e=Math.max(de+q,Math.min(X,Q));se(b.id,"start",de),se(b.id,"end",$e),En.value=Cn(de),Vn.value=Cn($e),Y.value&&Ne(Y.value.timelineStart)}function Fc(){qt.value.trim()!==""&&Wn(qt.value)}function Rc(){var b;Sr(),fe(qe.value),(b=Y.value)!=null&&b.id&&(f.value?f.value.setClipFilters(Y.value.id,qe.value):k.set(Y.value.id,[...qe.value])),Rt()}function Fr(b,V,X){var ce,Q;const q=qe.value.find(de=>de.filterId===b);q?(q.params={...q.params,[V]:X},fe(qe.value),f.value&&((ce=Y.value)!=null&&ce.id)?f.value.setClipFilters(Y.value.id,qe.value):(Q=Y.value)!=null&&Q.id&&k.set(Y.value.id,[...qe.value]),Rt(),Nc()):To.value&&To.value.filterId===b&&(To.value.params={...To.value.params||{},[V]:X})}function Rr(b){Ne(b)}function $r(b){xe(b)}function Fo(b){!Number.isFinite(b)||b<=0||(Za.value=b,Zt(b))}function $c(){var V;const b=Bo.value||((V=Sn.value)==null?void 0:V.clientWidth)||800;H(b)}function Dc(b){const V=b.target,X=Number(V.value);et(X)}function Dr(b){const V=Math.min(600,Math.max(10,Te.value+b));et(V)}function Ur(b){var V;f.value=b,(V=f.value)!=null&&V.composition&&(N.value=new bg(f.value.composition),g.value=new ma(f.value.composition),S.value=new kg(f.value.composition));try{k.size&&(k.forEach((X,q)=>{f.value.setClipFilters(q,X)}),k.clear(),f.value.composition.computeFrame())}catch{}}function Uc(b){b!=null&&b.id&&Er(b.id)}function Oc(b){Vc(b),Rt()}async function Ac(b){if(!N.value)return;const V=await N.value.addTextOverlay(b);T.value.push({id:V,...b})}async function Lc(b,V){if(!N.value)return;await N.value.updateTextOverlay(b,V);const X=T.value.findIndex(q=>q.id===b);X!==-1&&(T.value[X]={...T.value[X],...V})}async function zc(b){N.value&&(await N.value.removeTextOverlay(b),T.value=T.value.filter(V=>V.id!==b))}async function Pc(b){if(!g.value||R.value.length<2)return;const[V,X]=R.value,q=await g.value.applyTransition(V,X,b);F.value.push({id:q,...b,name:b.type})}function jc(b){if(!g.value)return;const V=F.value[b];V&&(g.value.removeTransition(V.id),F.value.splice(b,1))}function Wc(b){}async function Zc(b){if(!S.value)return;const V=await S.value.addAudioTrack(b);A.value.push({id:V,...b})}async function Xc(b,V){if(!S.value)return;const X=A.value.findIndex(q=>q.id===b);X!==-1&&(A.value[X]={...A.value[X],...V})}async function Hc(b){S.value&&(await S.value.removeAudioTrack(b),A.value=A.value.filter(V=>V.id!==b))}async function Gc(b,V){if(!S.value)return;await S.value.updateVolume(b,V);const X=A.value.find(q=>q.id===b);X&&(X.volume=V)}async function Jc(b,V){if(!S.value)return;await S.value.muteTrack(b,V);const X=A.value.find(q=>q.id===b);X&&(X.muted=V)}function Yc(b){S.value&&(S.value.setMasterVolume(b),j.value=b)}function Kc(b){i("thumbnail-selected",b)}function en(){Mo!==null&&(clearInterval(Mo),Mo=null)}function qc(b,V){return V?{...b,output:{...b.output,format:V.format,quality:V.quality}}:b}function Xn(b){var V;return b.metadata||(b.metadata={created_at:new Date().toISOString(),editor_version:"2.0.0"}),b.metadata.fit_mode=$.value,(V=o.media)!=null&&V.url&&/^https?:/i.test(o.media.url)?b.metadata.source_url=o.media.url:delete b.metadata.source_url,b}function Xe(b,V,X){return Math.min(X,Math.max(V,b))}function Ha(b,V){if(typeof b=="number"&&Number.isFinite(b))return b;if(typeof b=="string"){const X=Number(b);if(Number.isFinite(X))return X}return V}function st(b,V,X){for(const q of V)if(q in b)return Ha(b[q],X);return X}function Qc(b){const V=typeof b.params=="object"&&b.params!==null?b.params:{};switch(b.filterId.trim().toLowerCase()){case"brightness":return[{type:"brightness",value:Xe(st(V,["value","brightness"],0),-1,1)}];case"contrast":return[{type:"contrast",value:Xe(st(V,["value","contrast"],1),.1,3)}];case"saturation":return[{type:"saturation",value:Xe(st(V,["value","saturation"],1),0,3)}];case"blur":case"gaussian-blur":case"kawase-blur":case"radial-blur":return[{type:"blur",value:Xe(st(V,["value","blur","radius"],0),0,25)}];case"sharpen":return[{type:"sharpen",value:Xe(st(V,["value","amount"],1),0,5)}];case"sepia":return[{type:"sepia",value:1}];case"grayscale":return[{type:"grayscale",value:1}];case"adjustment":{const q=Xe(st(V,["brightness"],1)-1,-1,1),ce=Xe(st(V,["contrast"],1),.1,3),Q=Xe(st(V,["saturation"],1),0,3);return[{type:"brightness",value:q},{type:"contrast",value:ce},{type:"saturation",value:Q}]}default:return[]}}function ed(b){const V=b.timeline[0],X=Array.isArray(V==null?void 0:V.filters)?V.filters:[],q=[];for(const Q of X)if(q.push(...Qc(Q)),q.length>=12)break;const ce={...b,filters:q.slice(0,12)};if(b.timeline.length===1&&V){const Q=Math.max(0,Ha(V.sourceIn,0)),de=Ha(V.sourceOut,Q);de>Q&&(ce.trim={start:Q,end:de})}return ce}function td(b){return{"360p":[640,360],"480p":[854,480],"720p":[1280,720],"1080p":[1920,1080],"1440p":[2560,1440],"2160p":[3840,2160]}[b??""]??[1920,1080]}function nd(b){if(!b||typeof b!="object")return null;const V=b.duration;if(typeof V=="number"&&Number.isFinite(V)&&V>0)return V;if(V&&typeof V=="object"&&"value"in V){const X=V.value;if(typeof X=="number"&&Number.isFinite(X)&&X>0)return X}return null}async function Or(b,V,X){var Gt,$t,Dt,Ut;const q=b.timeline[0],ce=q?Math.max(0,q.sourceIn):0,Q=q?q.sourceOut:void 0,[de,$e]=td((V==null?void 0:V.quality)??((Gt=b.output)==null?void 0:Gt.quality)),mt=(($t=b.output)==null?void 0:$t.fps)||30;xe(!1),E.value=!0,await e.nextTick();try{const nt=[200,500,1e3];let lt=!1;for(const ei of nt){await new Promise(xd=>setTimeout(xd,ei));const $o=_.value;if(!(!$o||typeof $o.captureFrameAt!="function")&&typeof $o.ensureReadyForCapture=="function"&&(lt=await $o.ensureReadyForCapture(),lt))break}const bt=_.value;if(!bt||typeof bt.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:Ro,isWebCodecsSupported:Hn}=await Promise.resolve().then(()=>require("./PixiFrameExporter-Suw6Dxf2.cjs"));if(!Hn())throw new Error("WebCodecs is not supported in this browser. Export requires Chrome 94+ or equivalent.");Ht=new AbortController;const Nn={width:de,height:$e,fps:mt,trimStart:ce,signal:Ht.signal};Q!==void 0&&(Nn.trimEnd=Q),X&&(Nn.onProgress=X);const Hr=Ft.value;Hr!==""&&(Nn.sourceUrl=Hr);const gd=typeof bt.duration=="number"&&bt.duration>0?bt.duration:((Dt=b.source)==null?void 0:Dt.duration)??Q??0,yd=await Ro({captureFrameAt:ei=>bt.captureFrameAt(ei),duration:{value:gd}},Nn),Qa=new File([yd],`edited-video-${Date.now()}.mp4`,{type:"video/mp4"}),wd=nd(bt),bd=((Ut=b.source)==null?void 0:Ut.duration)??0,kd=Math.max(0,(Q??wd??bd)-ce);return{file:Qa,recipe:b,meta:{duration:kd,width:de,height:$e,format:"mp4",sizeBytes:Qa.size,size_bytes:Qa.size}}}finally{E.value=!1,Ht=null}}async function od(b,V){var Ut;en(),Ct=!1,Ht=null,Tt.value=null,je.value=null,Xt.value=!1,Ze.value=0;const X=Xn(b??ve()),q=Zr(X),ce=Array.isArray(q.filters)&&q.filters.length>0,Q=Ya(q);if(!(me.value||ce||Q))return te(),i("video-exported",null),null;const $e=q.timeline[0],mt=$e?Math.max(0,$e.sourceIn):0,$t=(($e==null?void 0:$e.sourceOut)??((Ut=q.source)==null?void 0:Ut.duration)??Qt.value)-mt,Dt=o.serverRenderEndpoint!=null&&o.clientExportThreshold>0&&$t>o.clientExportThreshold;if(Dt){tt.value=!0;try{return await ad(q),null}catch(nt){const lt=nt instanceof Error?nt.message:"Server render failed";throw je.value=lt,i("server-render-failed",lt),nt}finally{tt.value=!1}}if(o.maxDuration>0&&$t>o.maxDuration&&!Dt){const nt=`This video is too long for in-browser export (${Math.round($t)}s). Server rendering is not available. Try a shorter clip.`;return je.value=nt,i("video-exported",null),null}tt.value=!0;try{const nt=await Or(q,V,lt=>{Ct||(Ze.value=lt)});return Ct?(je.value="Export canceled.",Ze.value=0,i("video-exported",null),null):(te(),i("recipe-generated",q),i("video-exported",nt),Ze.value=100,Xt.value=!0,nt)}catch(nt){if(Ct)return je.value="Export canceled.",Ze.value=0,i("video-exported",null),null;const lt=nt instanceof Error?nt.message:"Local WebGL export failed.";throw je.value=lt,new Error(`Video export failed: ${lt}`)}finally{tt.value=!1}}async function ad(b){const V=new mr(o.serverRenderEndpoint??"/api/v1");je.value="Starting server render...",Ze.value=0;const X=await V.createRenderJob({source_media_uuid:s.value,recipe:b});Tt.value=X.id,i("server-render-started",X.id),i("export-started",X.id),je.value="Rendering on server...";const q=await V.pollRenderJob(X.id,(Q,de)=>{Ze.value=Q,de==="processing"&&(je.value=`Server rendering: ${Q}%`)},3e3,(o.maxDuration>0?o.maxDuration*3:1800)*1e3);Ze.value=100,Xt.value=!0,je.value="Server render complete!",te(),i("recipe-generated",b);const ce={id:q.id};typeof q.output_media_id=="string"&&q.output_media_id!==""&&(ce.output_media_id=q.output_media_id),i("server-render-completed",ce)}async function Ar(){if(!tt.value)return;Ct=!0,E.value=!1,Ht&&(Ht.abort(),Ht=null),en();const b=Tt.value;if(b)try{const V=await fetch(`/api/v1/video/jobs/${b}`,{method:"DELETE"});if(!V.ok)throw new Error(`Cancel failed: ${V.status} ${V.statusText}`)}catch(V){const X=V instanceof Error?V.message:"Failed to cancel export";je.value=X,tt.value=!1,Tt.value=null;return}tt.value=!1,Ze.value=0,Xt.value=!1,Tt.value=null,je.value="Export canceled."}async function Lr(b){en(),Ct=!1,Ht=null,Tt.value=null,je.value=null,Xt.value=!1,tt.value=!0,Ze.value=0;try{const V=Xn(qc(ve(),b));i("recipe-generated",V);const X=s.value.startsWith("temp-"),q=V.timeline[0],ce=Array.isArray(q==null?void 0:q.filters)?q.filters:[],Q=!0,de=typeof window<"u"&&window.MEDIABLES_ALLOW_SERVER_EXPORT_FALLBACK===1||typeof localStorage<"u"&&localStorage.getItem("mediables.export.allowServerFallback")==="1";if(Q)try{const bt=await Or(V,b,Nn=>{Ct||(Ze.value=Nn)});if(Ct){je.value="Export canceled.",tt.value=!1,Ze.value=0;return}i("video-exported",bt);const Ro=URL.createObjectURL(bt.file),Hn=document.createElement("a");Hn.href=Ro,Hn.download=`edited-video-${Date.now()}.mp4`,Hn.click(),setTimeout(()=>URL.revokeObjectURL(Ro),100),tt.value=!1,Ze.value=100,Xt.value=!0;return}catch(bt){if(Ct){je.value="Export canceled.",tt.value=!1,Ze.value=0;return}if(X||!de)throw bt;Ze.value=0,je.value="Local filter export failed, falling back to server render."}const $e={"360p":"low","480p":"low","720p":"medium","1080p":"high","1440p":"ultra","2160p":"ultra"},mt=(b==null?void 0:b.quality)??V.output.quality,Gt=$e[mt]??"high",$t={...ed(V),export:{format:(b==null?void 0:b.format)??V.output.format,quality:Gt,resolution:mt,framerate:V.output.fps}},Dt=await fetch("/api/v1/video/jobs",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({source_media_id:s.value,recipe:$t})});if(!Dt.ok)throw new Error(`Export failed: ${Dt.status} ${Dt.statusText}`);const Ut=await Dt.json(),nt=(Ut==null?void 0:Ut.data)??Ut,lt=typeof(nt==null?void 0:nt.id)=="string"?nt.id:null;if(!lt)throw new Error("Export failed: missing job id");Tt.value=lt,i("export-started",lt),hd(lt)}catch(V){if(E.value=!1,Ht=null,Ct){je.value="Export canceled.",tt.value=!1,Ze.value=0,Tt.value=null;return}try{const X=Xn(ve()),q=new Blob([JSON.stringify(X,null,2)],{type:"application/json"}),ce=URL.createObjectURL(q),Q=document.createElement("a");Q.href=ce,Q.download=`video-recipe-${Date.now()}.json`,Q.click(),setTimeout(()=>URL.revokeObjectURL(ce),100)}finally{tt.value=!1,Ze.value=0,Tt.value=null,je.value=V instanceof Error?V.message:"Export failed"}}}const Ga=async b=>{await new Promise(V=>{window.setTimeout(V,b)})},Ja=b=>{if(!b||b.width<=0||b.height<=0)return null;try{return b.toDataURL("image/jpeg",.85)}catch{return null}},id=b=>{if(!b||typeof b!="object")return null;const X=b.pixiCanvas;if(X&&typeof X=="object"&&"value"in X){const q=X.value;return q instanceof HTMLCanvasElement?q:null}return X instanceof HTMLCanvasElement?X:null},rd=b=>{if(!b||typeof b!="object")return null;const V=b.duration;if(typeof V=="number"&&Number.isFinite(V))return V;if(V&&typeof V=="object"&&"value"in V){const X=V.value;if(typeof X=="number"&&Number.isFinite(X))return X}return null},sd=b=>{if(!b||typeof b!="object")return null;const X=b.videoElement;if(X&&typeof X=="object"&&"value"in X){const q=X.value;return q instanceof HTMLVideoElement?q:null}return X instanceof HTMLVideoElement?X:null},zr=b=>typeof b.params=="object"&&b.params!==null?b.params:{},ld=b=>{const V=[];for(const X of b){const q=zr(X),ce=X.filterId.trim().toLowerCase();if(ce==="brightness"){const de=(Xe(st(q,["value","brightness"],0),-1,1)+1)*100;V.push(`brightness(${de.toFixed(2)}%)`);continue}if(ce==="contrast"){const Q=Xe(st(q,["value","contrast"],1),.1,4);V.push(`contrast(${(Q*100).toFixed(2)}%)`);continue}if(ce==="saturation"||ce==="saturate"){const Q=Xe(st(q,["value","saturation"],1),0,4);V.push(`saturate(${(Q*100).toFixed(2)}%)`);continue}if(ce==="grayscale"){V.push("grayscale(100%)");continue}if(ce==="sepia"){V.push("sepia(100%)");continue}if(ce==="blur"||ce==="gaussian-blur"||ce==="kawase-blur"){const Q=Xe(st(q,["value","blur","radius"],0),0,30);Q>.01&&V.push(`blur(${Q.toFixed(2)}px)`);continue}if(ce==="adjustment"){const Q=st(q,["brightness"],1),de=st(q,["contrast"],1),$e=st(q,["saturation"],1);Math.abs(Q-1)>.01&&V.push(`brightness(${(Xe(Q,0,5)*100).toFixed(2)}%)`),Math.abs(de-1)>.01&&V.push(`contrast(${(Xe(de,.1,5)*100).toFixed(2)}%)`),Math.abs($e-1)>.01&&V.push(`saturate(${(Xe($e,0,5)*100).toFixed(2)}%)`);continue}if(ce==="cinematic"){V.push("contrast(120%) brightness(95%) saturate(85%)");continue}if(ce==="dramatic"){V.push("contrast(140%) brightness(90%) saturate(110%) sepia(10%)");continue}if(ce==="dreamy"){V.push("blur(0.5px) brightness(105%) saturate(90%) contrast(95%)");continue}}return V.join(" ")},cd=b=>{const V=b.find(ce=>ce.filterId.trim().toLowerCase()==="noise");if(!V)return 0;const X=zr(V),q=st(X,["noise","value","amount","intensity"],.2);return q<=1?Xe(q,0,1):Xe(q/100,0,1)},dd=(b,V,X,q)=>{if(q<=0)return;const ce=b.getImageData(0,0,V,X),Q=255*q;for(let de=0;de<ce.data.length;de+=4){const $e=(Math.random()*2-1)*Q;ce.data[de]=Xe(ce.data[de]+$e,0,255),ce.data[de+1]=Xe(ce.data[de+1]+$e,0,255),ce.data[de+2]=Xe(ce.data[de+2]+$e,0,255)}b.putImageData(ce,0,0)},Pr=async b=>{b.readyState>=2&&b.videoWidth>0&&b.videoHeight>0||await new Promise(V=>{let X=!1,q=0;const ce=()=>{X||(X=!0,b.removeEventListener("loadedmetadata",Q),b.removeEventListener("loadeddata",Q),b.removeEventListener("canplay",Q),window.clearTimeout(q),V())},Q=()=>{ce()};b.addEventListener("loadedmetadata",Q),b.addEventListener("loadeddata",Q),b.addEventListener("canplay",Q),q=window.setTimeout(()=>ce(),800),b.play().catch(()=>{})})},ud=async(b,V)=>{await new Promise(X=>{let q=!1,ce=0;const Q=()=>{q||(q=!0,b.removeEventListener("seeked",de),window.clearTimeout(ce),X())},de=()=>{Q()};if(Math.abs(b.currentTime-V)<.016){requestAnimationFrame(()=>Q());return}b.addEventListener("seeked",de),ce=window.setTimeout(()=>Q(),700),b.currentTime=V})},jr=async(b,V)=>{await Pr(b);const X=Math.floor(b.videoWidth),q=Math.floor(b.videoHeight);if(X<=0||q<=0)return null;const ce=Number.isFinite(b.duration)&&b.duration>0?b.duration:0,Q=ce>0?Xe(V,0,ce):0;await ud(b,Q);const de=document.createElement("canvas");de.width=X,de.height=q;const $e=de.getContext("2d");if(!$e)return null;const mt=ld(qe.value);mt!==""&&($e.filter=mt);try{$e.drawImage(b,0,0,X,q)}catch{return null}const Gt=cd(qe.value);return dd($e,X,q,Gt),Ja(de)},md=async(b,V)=>{const X=document.createElement("video");X.src=b,X.muted=!0,X.playsInline=!0,X.preload="auto",b.startsWith("blob:")||(X.crossOrigin="anonymous");try{return await Pr(X),await jr(X,V)}catch{return null}finally{X.pause(),X.removeAttribute("src"),X.load()}},pd=async b=>{const V=_.value,X=Ja(id(V));if(X)return X;if(V!=null&&V.captureFrameAt)for(let Q=0;Q<4;Q+=1){const de=rd(V);if(de!==null&&de<=0&&Q<2){await Ga(80);continue}const $e=await Promise.race([V.captureFrameAt(b),Ga(450).then(()=>null)]),mt=Ja($e);if(mt)return mt;await Ga(80)}const q=sd(V);if(q){const Q=await jr(q,b);if(Q)return Q}const ce=Wa.value.trim();if(ce!==""){const Q=await md(ce,b);if(Q)return Q}return null},Wr=b=>b.map(V=>({...V,params:V.params&&typeof V.params=="object"?{...V.params}:V.params}));function Zr(b){const V=Wr(qe.value);if(!Ya(b)&&V.length>0&&Array.isArray(b.timeline)&&b.timeline.length>0){const q=b.timeline[0];q&&(b.timeline=[{...q,filters:V},...b.timeline.slice(1)])}return b}const Ya=b=>Array.isArray(b.timeline)?b.timeline.some(V=>Array.isArray(V.filters)&&V.filters.length>0):!1,fd=b=>{if(!b||typeof b!="object")return null;const V=b.posterFrame;if(typeof V!="string")return null;const X=V.trim();return X!==""?X:null};async function Ka(){const b=Xn(Zr(ee())),V=Wr(qe.value),X=Ya(b)||V.length>0,q=fd(o.initialRecipe);if(X){const ce=ne.value>0?ne.value:.1;try{const Q=await pd(ce);Q?b.posterFrame=Q:q&&(b.posterFrame=q)}catch{q&&(b.posterFrame=q)}}else delete b.posterFrame;return te(),i("draft-saved",b),b}function Xr(){pe()&&(Sr(),Rt())}async function hd(b){en(),Mo=window.setInterval(async()=>{var V,X;try{if(Ct){en();return}const q=await fetch(`/api/v1/video/jobs/${b}`);if(!q.ok)throw new Error(`Status poll failed: ${q.status} ${q.statusText}`);const ce=await q.json(),Q=(ce==null?void 0:ce.data)??ce,de=Number((Q==null?void 0:Q.progress)??0);if(Ze.value=Number.isFinite(de)?de:0,Q.status==="completed"||Q.status==="failed"||Q.status==="cancelled")if(en(),tt.value=!1,Tt.value=null,Q.status==="completed"){const $e=((V=Q==null?void 0:Q.output_media)==null?void 0:V.url)??(Q==null?void 0:Q.output_url);Ze.value=100,Xt.value=!0,je.value=null}else{const $e=!!((X=Q==null?void 0:Q.meta)!=null&&X.is_cancelled)||Q.status==="cancelled"||typeof(Q==null?void 0:Q.error_message)=="string"&&/cancel/i.test(Q.error_message);je.value=$e?"Export canceled.":typeof(Q==null?void 0:Q.error_message)=="string"&&Q.error_message.trim()!==""?Q.error_message:"Export failed"}}catch(q){en(),tt.value=!1,Tt.value=null,je.value=q instanceof Error?q.message:"Failed to check export progress"}},2e3)}function qa(){const b=Xn(ve());try{const V=b.timeline??[]}catch{}x.value=b}let sn=null;function Rt(){sn&&clearTimeout(sn),sn=setTimeout(()=>{qa(),sn=null},200)}e.watch(()=>M.value,Rt,{deep:!0}),e.watch(()=>Y.value,b=>{if(O.value||!b)return;const V=(b==null?void 0:b.filters)??[];Cc(V)},{immediate:!0}),e.watch(()=>qe.value,b=>{fe(b),Rt()},{deep:!0}),e.watch(()=>T.value,b=>{P(b),Rt()},{deep:!0}),e.watch(()=>A.value,b=>{const V=b.map(X=>({...X,source:typeof X.source=="string"?X.source:void 0}));J(V),Rt()},{deep:!0}),e.watch(()=>ne.value,Rt),n({saveDraft:Ka,exportForUpload:od}),qa(),e.onUnmounted(()=>{en(),Ct=!0,sn&&(clearTimeout(sn),sn=null),f.value&&(f.value.destroy(),f.value=null),N.value=null,g.value=null,S.value=null});function vd(){ft||!Xa.value||(ft=new ag({filters:Zn.value,callbacks:{onApplyFilter:b=>{Wn(b.id)},onRemoveFilter:b=>{Cr(b)},onUpdateParam:(b,V,X)=>{Fr(b,V,X)},onPreviewFilter:b=>{Er(b.id)}}}),ft.mount(Xa.value),ft.setActiveFilters(ja.value))}e.watch(ja,b=>{ft==null||ft.setActiveFilters(b)},{deep:!0}),e.watch(Zn,b=>{ft==null||ft.setFilters(b)});let tn=null;return e.onMounted(()=>{window.addEventListener("resize",K);const b=()=>{!Sn.value||tn||(tn=new ResizeObserver(V=>{V[0]&&(Bo.value=Math.round(V[0].contentRect.width))}),tn.observe(Sn.value))};b(),tn||e.nextTick(b),o.media&&qa(),l.value&&e.nextTick(()=>{vd()}),e.nextTick(()=>{const V=document.querySelector(".video-editor");V&&V.getBoundingClientRect();const X=document.querySelector(".mobile-layout");X&&X.getBoundingClientRect()})}),e.onUnmounted(()=>{window.removeEventListener("resize",K),tn==null||tn.disconnect(),tn=null,ft==null||ft.destroy(),ft=null}),(b,V)=>{var X,q,ce,Q;return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-editor",{mobile:l.value}])},[l.value?(e.openBlock(),e.createElementBlock("div",qy,[e.createElementVNode("div",Qy,[e.createElementVNode("div",ew,[e.createElementVNode("button",{class:e.normalizeClass(["mobile-toolbar-btn",{active:e.unref(ae)}]),onClick:V[0]||(V[0]=(...de)=>e.unref(re)&&e.unref(re)(...de)),"aria-label":e.unref(ae)?"Pause":"Play","data-testid":"btn-mobile-play"},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(ae)?e.unref(nl):e.unref(al)},null,8,["icon"])],10,tw),e.createElementVNode("button",{class:"mobile-toolbar-btn",onClick:Xr,"aria-label":"Reset all changes","data-testid":"btn-mobile-reset"},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Un)},null,8,["icon"])])]),e.createElementVNode("div",nw,[e.createElementVNode("button",{class:"mobile-toolbar-btn mobile-toolbar-save",onClick:Ka,"aria-label":"Save","data-testid":"btn-mobile-save",disabled:!e.unref(me)},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Zi)},null,8,["icon"]),V[14]||(V[14]=e.createElementVNode("span",null,"Save",-1))],8,ow),e.createElementVNode("button",{class:"mobile-toolbar-btn",onClick:V[1]||(V[1]=de=>Lr()),"aria-label":"Export","data-testid":"btn-mobile-export",disabled:tt.value||!e.unref(me)},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(po)},null,8,["icon"])],8,aw),e.createElementVNode("button",{class:"mobile-toolbar-btn",onClick:V[2]||(V[2]=de=>i("close")),"aria-label":"Close","data-testid":"btn-mobile-close"},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Fn)},null,8,["icon"])])])]),e.createElementVNode("div",iw,[e.withDirectives(e.createVNode(ns,{ref_key:"pixiPreviewMobileRef",ref:v,"aria-hidden":!p.value,class:"preview-host-child",source:Wa.value,filters:Tr.value,playhead:Mr.value,"is-playing":e.unref(ae),"fit-mode":$.value,active:p.value,onPlayPause:e.unref(re),onDurationChange:Fo},null,8,["aria-hidden","source","filters","playhead","is-playing","fit-mode","active","onPlayPause"]),[[e.vShow,p.value]]),e.withDirectives(e.createVNode(ks,{"aria-hidden":!h.value,class:"preview-host-child","media-uuid":s.value,recipe:x.value,media:Nr.value,"enable-engine":h.value&&_r.value,"fit-mode":$.value,onTimeUpdate:Rr,onPlayStateChange:$r,onDurationChange:Fo,onEngineReady:Ur},null,8,["aria-hidden","media-uuid","recipe","media","enable-engine","fit-mode"]),[[e.vShow,h.value]]),tt.value?(e.openBlock(),e.createElementBlock("div",rw,[e.createElementVNode("div",sw,[e.createElementVNode("span",null,"Exporting "+e.toDisplayString(Ze.value)+"%",1),e.createElementVNode("div",lw,[e.createElementVNode("div",{class:"mobile-export-bar-fill",style:e.normalizeStyle({width:Ze.value+"%"})},null,4)]),e.createElementVNode("button",{class:"mobile-export-cancel",onClick:Ar},"Cancel")])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",{ref_key:"timelineContainerRef",ref:Sn,class:"timeline-section"},[e.createElementVNode("div",cw,[e.createElementVNode("button",{class:"mobile-zoom-btn",onClick:V[3]||(V[3]=de=>Dr(-20)),"aria-label":"Zoom out timeline","data-testid":"btn-timeline-zoom-out"},[...V[15]||(V[15]=[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)])]),e.createElementVNode("button",{class:"mobile-zoom-btn",onClick:V[4]||(V[4]=de=>Dr(20)),"aria-label":"Zoom in timeline","data-testid":"btn-timeline-zoom-in"},[...V[16]||(V[16]=[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)])])]),e.createVNode(xs,{playhead:e.unref(ne),clips:e.unref(M),"selected-clip-id":((X=e.unref(Y))==null?void 0:X.id)??((q=e.unref(M)[0])==null?void 0:q.id)??null,duration:Qt.value,"zoom-level":e.unref(Te),sensitivity:.25,"is-mobile":!0,"onUpdate:playhead":e.unref(Ne),onTrim:e.unref(se),onSplit:e.unref(be),onClipSelect:e.unref(ie),onClipMove:e.unref(We)},null,8,["playhead","clips","selected-clip-id","duration","zoom-level","onUpdate:playhead","onTrim","onSplit","onClipSelect","onClipMove"])],512),e.createElementVNode("div",{ref_key:"mobileControlsRef",ref:Xa,class:"controls-section mobile-controls"},null,512)])):(e.openBlock(),e.createElementBlock("div",dw,[e.createElementVNode("div",uw,[e.createElementVNode("div",mw,[e.createElementVNode("div",pw,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":V[5]||(V[5]=de=>$.value=de),"aria-label":"Fit mode","data-testid":"select-video-fit-mode"},[...V[17]||(V[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,$.value]])])]),e.withDirectives(e.createVNode(ns,{ref_key:"pixiPreviewDesktopRef",ref:y,"aria-hidden":!p.value,class:"preview-host-child",source:Wa.value,filters:Tr.value,playhead:Mr.value,"is-playing":e.unref(ae),"fit-mode":$.value,active:p.value,onPlayPause:e.unref(re),onDurationChange:Fo},null,8,["aria-hidden","source","filters","playhead","is-playing","fit-mode","active","onPlayPause"]),[[e.vShow,p.value]]),e.withDirectives(e.createVNode(ks,{"aria-hidden":!h.value,class:"preview-host-child","media-uuid":s.value,recipe:x.value,media:Nr.value,"enable-engine":h.value&&_r.value,"fit-mode":$.value,onTimeUpdate:Rr,onPlayStateChange:$r,onDurationChange:Fo,onEngineReady:Ur},null,8,["aria-hidden","media-uuid","recipe","media","enable-engine","fit-mode"]),[[e.vShow,h.value]]),b.showThumbnailPicker?(e.openBlock(),e.createBlock(Iv,{key:0,"media-uuid":s.value,duration:Qt.value,onSelect:Kc},null,8,["media-uuid","duration"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",fw,[e.createElementVNode("div",hw,[e.createElementVNode("div",vw,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(W.value,de=>(e.openBlock(),e.createElementBlock("button",{key:de.id,class:e.normalizeClass(["tab-btn",{active:d.value===de.id}]),onClick:$e=>d.value=de.id},e.toDisplayString(de.label),11,gw))),128))]),e.createElementVNode("div",yw,[e.withDirectives(e.createElementVNode("div",ww,[e.createVNode(j0,{filters:Zn.value,"active-filters":ja.value,"thumbnail-url":_c.value,onApplyFilter:Wn,onRemoveFilter:Cr,onUpdateParam:Fr,onPreviewFilter:Uc},null,8,["filters","active-filters","thumbnail-url"])],512),[[e.vShow,d.value==="filters"]]),e.withDirectives(e.createElementVNode("div",bw,[e.createVNode(Qv,{overlays:T.value,onAddOverlay:Ac,onUpdateOverlay:Lc,onRemoveOverlay:zc},null,8,["overlays"])],512),[[e.vShow,d.value==="text"]]),e.withDirectives(e.createElementVNode("div",kw,[e.createVNode(k1,{"selected-clips":R.value,"applied-transitions":F.value,onApplyTransition:Pc,onRemoveTransition:jc,onPreviewTransition:Wc},null,8,["selected-clips","applied-transitions"])],512),[[e.vShow,d.value==="transitions"]]),e.withDirectives(e.createElementVNode("div",xw,[e.createVNode(ng,{"audio-layers":A.value,"master-volume":j.value,onAddTrack:Zc,onUpdateTrack:Xc,onRemoveTrack:Hc,onUpdateVolume:Gc,onToggleMute:Jc,onUpdateMasterVolume:Yc},null,8,["audio-layers","master-volume"])],512),[[e.vShow,d.value==="audio"]]),e.withDirectives(e.createElementVNode("div",Ew,[e.unref(xr)?(e.openBlock(),e.createBlock(nv,{key:0,filter:e.unref(xr),"current-frame":e.unref(Ce),onUpdateParams:Oc},null,8,["filter","current-frame"])):(e.openBlock(),e.createElementBlock("div",Vw,[...V[18]||(V[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",Sw,[e.createVNode(gv,{"can-export":e.unref(me),"is-exporting":tt.value,"export-progress":Ze.value,onExport:Lr,onCancelExport:Ar,onSaveDraft:Ka,onReset:Xr},null,8,["can-export","is-exporting","export-progress"]),Xt.value?(e.openBlock(),e.createElementBlock("div",Cw," Export complete ")):e.createCommentVNode("",!0),je.value&&!Xt.value?(e.openBlock(),e.createElementBlock("div",Nw,e.toDisplayString(je.value),1)):e.createCommentVNode("",!0)],512),[[e.vShow,d.value==="export"]])])])])]),e.createElementVNode("div",_w,[e.createElementVNode("div",{ref_key:"timelineContainerRef",ref:Sn,class:"timeline-container"},[e.createElementVNode("div",Tw,[e.createElementVNode("label",null,[V[19]||(V[19]=e.createTextVNode(" Zoom ",-1)),e.createElementVNode("input",{type:"range",min:"10",max:"600",value:e.unref(Te),onInput:V[6]||(V[6]=de=>Dc(de))},null,40,Mw)]),e.createElementVNode("span",Bw,e.toDisplayString(Math.round(e.unref(Te)))+" px/s",1)]),e.createVNode(xs,{playhead:e.unref(ne),clips:e.unref(M),"selected-clip-id":((ce=e.unref(Y))==null?void 0:ce.id)??((Q=e.unref(M)[0])==null?void 0:Q.id)??null,duration:Qt.value,"zoom-level":e.unref(Te),sensitivity:.25,"onUpdate:playhead":e.unref(Ne),onTrim:e.unref(se),onSplit:e.unref(be),onClipSelect:e.unref(ie),onClipMove:e.unref(We)},null,8,["playhead","clips","selected-clip-id","duration","zoom-level","onUpdate:playhead","onTrim","onSplit","onClipSelect","onClipMove"]),e.createVNode(a0,{"selected-clip":e.unref(Y),"can-split":Tc.value,"can-delete":Mc.value,"is-playing":e.unref(ae),"zoom-level":e.unref(Te),"playback-speed":e.unref(ue),onSplit:e.unref(le),onDelete:e.unref(ke),onDuplicate:e.unref(Ve),onZoomIn:e.unref(Fe),onZoomOut:e.unref(Oe),onZoomChange:e.unref(et),onFitToWindow:$c,onPlayPause:e.unref(re),onFrameForward:e.unref(ze),onFrameBackward:e.unref(wt),onSkipToStart:e.unref(ut),onSkipToEnd:e.unref(St),onSpeedChange:e.unref(Ge)},null,8,["selected-clip","can-split","can-delete","is-playing","zoom-level","playback-speed","onSplit","onDelete","onDuplicate","onZoomIn","onZoomOut","onZoomChange","onPlayPause","onFrameForward","onFrameBackward","onSkipToStart","onSkipToEnd","onSpeedChange"]),we.value?(e.openBlock(),e.createElementBlock("div",Iw,[e.createElementVNode("div",Fw,[e.createElementVNode("label",Rw,[V[20]||(V[20]=e.createElementVNode("span",null,"Trim start (s)",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":V[7]||(V[7]=de=>En.value=de),type:"number",step:"0.01",min:"0",inputmode:"decimal","data-testid":"video-dev-trim-start"},null,512),[[e.vModelText,En.value]])]),e.createElementVNode("label",$w,[V[21]||(V[21]=e.createElementVNode("span",null,"Trim end (s)",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":V[8]||(V[8]=de=>Vn.value=de),type:"number",step:"0.01",min:"0",inputmode:"decimal","data-testid":"video-dev-trim-end"},null,512),[[e.vModelText,Vn.value]])]),e.createElementVNode("button",{class:"dev-editor-button",type:"button","data-testid":"video-dev-trim-start-playhead",disabled:!e.unref(Y),onClick:V[9]||(V[9]=de=>Ir("start"))}," Start = Playhead ",8,Dw),e.createElementVNode("button",{class:"dev-editor-button",type:"button","data-testid":"video-dev-trim-end-playhead",disabled:!e.unref(Y),onClick:V[10]||(V[10]=de=>Ir("end"))}," End = Playhead ",8,Uw),e.createElementVNode("button",{class:"dev-editor-button dev-editor-button--primary",type:"button","data-testid":"video-dev-apply-trim",disabled:!e.unref(Y),onClick:Ic}," Apply Trim ",8,Ow)]),e.createElementVNode("div",Aw,[e.createElementVNode("label",Lw,[V[22]||(V[22]=e.createElementVNode("span",null,"Quick filter",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":V[11]||(V[11]=de=>qt.value=de),"data-testid":"video-dev-filter-select"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Zn.value,de=>(e.openBlock(),e.createElementBlock("option",{key:de.id,value:de.id},e.toDisplayString(de.name),9,zw))),128))],512),[[e.vModelSelect,qt.value]])]),e.createElementVNode("button",{class:"dev-editor-button dev-editor-button--primary",type:"button","data-testid":"video-dev-apply-filter",disabled:!e.unref(Y)||qt.value==="",onClick:Fc}," Apply Filter ",8,Pw),e.createElementVNode("button",{class:"dev-editor-button",type:"button","data-testid":"video-dev-clear-filters",disabled:e.unref(qe).length===0,onClick:Rc}," Clear Filters ",8,jw),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(Y),onClick:V[12]||(V[12]=de=>Wn("noise"))}," QA: Noise ",8,Ww),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(Y),onClick:V[13]||(V[13]=de=>Wn("grayscale"))}," QA: Grayscale ",8,Zw)])])):e.createCommentVNode("",!0)],512)])]))],2)}}}),Li=Me(Xw,[["__scopeId","data-v-5d8a0dc1"]]),Hw={key:0,class:"ve-fullscreen"},Gw=["aria-label"],Jw={class:"ve-header"},Yw={class:"ve-title"},Kw={class:"ve-body"},qw={class:"ve-footer"},Qw=e.defineComponent({__name:"VideoEditorDialog",props:{open:{type:Boolean},mediaUuid:{},initialRecipe:{},media:{},showThumbnailPicker:{type:Boolean,default:!1},title:{default:"Edit Video"}},emits:["update:open","close","recipe-generated","export-started","draft-saved","thumbnail-selected"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(typeof window<"u"?window.innerWidth<768:!1);function r(){i.value=window.innerWidth<768}e.onMounted(()=>window.addEventListener("resize",r)),e.onUnmounted(()=>window.removeEventListener("resize",r));const s=e.computed(()=>t.open??!0),l=e.computed(()=>{var d;return t.mediaUuid||((d=t.media)==null?void 0:d.id)||`temp-${Date.now()}`});function c(){o("close"),o("update:open",!1)}return(d,u)=>s.value&&i.value?(e.openBlock(),e.createElementBlock("div",Hw,[e.createVNode(Li,e.mergeProps({"media-uuid":l.value},{...d.initialRecipe?{initialRecipe:d.initialRecipe}:{},...d.media?{media:d.media}:{}},{"show-thumbnail-picker":d.showThumbnailPicker??!1,onRecipeGenerated:u[0]||(u[0]=m=>d.$emit("recipe-generated",m)),onExportStarted:u[1]||(u[1]=m=>d.$emit("export-started",m)),onDraftSaved:u[2]||(u[2]=m=>d.$emit("draft-saved",m)),onThumbnailSelected:u[3]||(u[3]=m=>d.$emit("thumbnail-selected",m))}),null,16,["media-uuid","show-thumbnail-picker"])])):s.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:"ve-overlay",onClick:e.withModifiers(c,["self"])},[e.createElementVNode("div",{class:"ve-dialog",role:"dialog","aria-label":d.title,"aria-modal":"true"},[e.createElementVNode("header",Jw,[e.createElementVNode("h2",Yw,e.toDisplayString(d.title),1),e.createElementVNode("button",{class:"ve-close",onClick:c,"aria-label":"Close"}," ✕ ")]),e.createElementVNode("section",Kw,[e.createVNode(Li,e.mergeProps({"media-uuid":l.value},{...d.initialRecipe?{initialRecipe:d.initialRecipe}:{},...d.media?{media:d.media}:{}},{"show-thumbnail-picker":d.showThumbnailPicker??!1,onRecipeGenerated:u[4]||(u[4]=m=>d.$emit("recipe-generated",m)),onExportStarted:u[5]||(u[5]=m=>d.$emit("export-started",m)),onDraftSaved:u[6]||(u[6]=m=>d.$emit("draft-saved",m)),onThumbnailSelected:u[7]||(u[7]=m=>d.$emit("thumbnail-selected",m))}),null,16,["media-uuid","show-thumbnail-picker"])]),e.createElementVNode("footer",qw,[e.renderSlot(d.$slots,"footer",{},()=>[e.createElementVNode("button",{class:"ve-btn",onClick:c},"Cancel")],!0)])],8,Gw)])):e.createCommentVNode("",!0)}}),eb=Me(Qw,[["__scopeId","data-v-b948d9bc"]]),tb={class:"video-editor-modal"},nb={class:"video-preview-container"},ob=["src"],ab={class:"video-overlay-controls"},ib=["aria-label"],rb={class:"time-display"},sb={class:"timeline-container"},lb={class:"clip-name"},cb={class:"timeline-time-labels"},db={class:"tool-tabs"},ub=["onClick"],mb={class:"tool-panel"},pb={key:0,class:"trim-panel"},fb={class:"trim-controls"},hb={key:1,class:"filters-panel"},vb={class:"filter-grid"},gb=["onClick"],yb={key:2,class:"text-panel"},wb={key:3,class:"transitions-panel"},bb={class:"transition-grid"},kb=["onClick"],xb={class:"action-buttons"},Eb=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),m=e.ref(0),p=e.ref(null),h=e.ref("trim"),v=e.ref(null),y=e.ref(""),E=[{id:"trim",label:"Trim",icon:el},{id:"filters",label:"Filters",icon:ou},{id:"text",label:"Text",icon:il},{id:"transitions",label:"Transitions",icon:uu}],_=[{id:"none",name:"None"},{id:"grayscale",name:"Grayscale"},{id:"sepia",name:"Sepia"},{id:"blur",name:"Blur"},{id:"brightness",name:"Brightness"},{id:"contrast",name:"Contrast"}],C=[{id:"fade",name:"Fade"},{id:"slide",name:"Slide"},{id:"zoom",name:"Zoom"},{id:"wipe",name:"Wipe"}],w=e.ref();e.onMounted(()=>{var I,D;(I=t.media)!=null&&I.url?r.value=t.media.url:(D=t.media)!=null&&D.file&&(r.value=URL.createObjectURL(t.media.file))}),e.onUnmounted(()=>{var I;(I=t.media)!=null&&I.file&&r.value&&URL.revokeObjectURL(r.value)});function f(){i.value&&(c.value=i.value.duration,m.value=c.value)}function x(){i.value&&(l.value=i.value.currentTime)}function $(){s.value=!1}function N(){i.value&&(s.value?(i.value.pause(),s.value=!1):(i.value.play(),s.value=!0))}function g(I){if(!I||isNaN(I))return"00:00";const D=Math.floor(I/60),Z=Math.floor(I%60);return`${D.toString().padStart(2,"0")}:${Z.toString().padStart(2,"0")}`}function S(I){if(!i.value||!w.value)return;const D=w.value.getBoundingClientRect(),oe=(I.clientX-D.left)/D.width*c.value;i.value.currentTime=Math.max(0,Math.min(oe,c.value))}function O(){u.value=l.value}function k(){m.value=l.value}function T(){u.value=0,m.value=c.value}function F(I){p.value=I;const D=W=>{if(!p.value||!w.value)return;const oe=w.value.getBoundingClientRect(),ne=(W.clientX-oe.left)/oe.width*c.value;p.value==="start"?u.value=Math.max(0,Math.min(ne,m.value-1)):m.value=Math.max(u.value+1,Math.min(ne,c.value))},Z=()=>{p.value=null,document.removeEventListener("mousemove",D),document.removeEventListener("mouseup",Z)};document.addEventListener("mousemove",D),document.addEventListener("mouseup",Z)}function A(I){if(v.value=I,!i.value)return;const D={none:"none",grayscale:"grayscale(100%)",sepia:"sepia(100%)",blur:"blur(5px)",brightness:"brightness(150%)",contrast:"contrast(150%)"};i.value.style.filter=D[I]||"none"}function R(){}function j(I){}function K(){const I={timeline:[{id:d.value,url:r.value,startTime:0,endTime:c.value,sourceIn:u.value,sourceOut:m.value,track:0}],filters:v.value?[{type:v.value}]:[],textOverlays:y.value?[{content:y.value}]:[],duration:m.value-u.value};o("save",I)}return(I,D)=>(e.openBlock(),e.createElementBlock("div",tb,[e.createElementVNode("div",nb,[e.createElementVNode("video",{ref_key:"videoElement",ref:i,class:"video-preview",src:r.value,onLoadedmetadata:f,onTimeupdate:x,onEnded:$,controls:""},null,40,ob),e.createElementVNode("div",ab,[e.createElementVNode("button",{class:"play-pause-btn",onClick:N,"aria-label":s.value?"Pause":"Play"},[e.createVNode(e.unref(B.IonIcon),{icon:s.value?e.unref(hu):e.unref(wu)},null,8,["icon"])],8,ib),e.createElementVNode("div",rb,e.toDisplayString(g(l.value))+" / "+e.toDisplayString(g(c.value)),1)])]),e.createElementVNode("div",sb,[e.createElementVNode("div",{class:"timeline-track",onClick:S,ref_key:"timelineTrack",ref:w},[e.createElementVNode("div",{class:"timeline-clip",style:e.normalizeStyle({left:`${u.value/c.value*100}%`,right:`${100-m.value/c.value*100}%`})},[e.createElementVNode("span",lb,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:D[0]||(D[0]=Z=>F("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:`${m.value/c.value*100}%`}),onMousedown:D[1]||(D[1]=Z=>F("end"))},null,36)):e.createCommentVNode("",!0)],512),e.createElementVNode("div",cb,[e.createElementVNode("span",null,e.toDisplayString(g(0)),1),e.createElementVNode("span",null,e.toDisplayString(g(c.value)),1)])]),e.createElementVNode("div",db,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(E,Z=>e.createElementVNode("button",{key:Z.id,class:e.normalizeClass(["tool-tab",{active:h.value===Z.id}]),onClick:W=>h.value=Z.id},[e.createVNode(e.unref(B.IonIcon),{icon:Z.icon},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(Z.label),1)],10,ub)),64))]),e.createElementVNode("div",mb,[h.value==="trim"?(e.openBlock(),e.createElementBlock("div",pb,[D[7]||(D[7]=e.createElementVNode("h3",null,"Trim Video",-1)),D[8]||(D[8]=e.createElementVNode("p",null,"Click and drag on the timeline to set trim points",-1)),e.createElementVNode("div",fb,[e.createElementVNode("button",{class:"btn-trim",onClick:O},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Kr)},null,8,["icon"]),D[4]||(D[4]=e.createTextVNode(" Set Start ",-1))]),e.createElementVNode("button",{class:"btn-trim",onClick:k},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Kr)},null,8,["icon"]),D[5]||(D[5]=e.createTextVNode(" Set End ",-1))]),e.createElementVNode("button",{class:"btn-trim",onClick:T},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Fn)},null,8,["icon"]),D[6]||(D[6]=e.createTextVNode(" Clear ",-1))])])])):h.value==="filters"?(e.openBlock(),e.createElementBlock("div",hb,[D[9]||(D[9]=e.createElementVNode("h3",null,"Filters",-1)),e.createElementVNode("div",vb,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(_,Z=>e.createElementVNode("button",{key:Z.id,class:e.normalizeClass(["filter-option",{active:v.value===Z.id}]),onClick:W=>A(Z.id)},e.toDisplayString(Z.name),11,gb)),64))])])):h.value==="text"?(e.openBlock(),e.createElementBlock("div",yb,[D[10]||(D[10]=e.createElementVNode("h3",null,"Text Overlay",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":D[2]||(D[2]=Z=>y.value=Z),type:"text",placeholder:"Enter text...",class:"text-input"},null,512),[[e.vModelText,y.value]]),e.createElementVNode("button",{class:"btn-add-text",onClick:R},"Add Text")])):h.value==="transitions"?(e.openBlock(),e.createElementBlock("div",wb,[D[11]||(D[11]=e.createElementVNode("h3",null,"Transitions",-1)),e.createElementVNode("div",bb,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(C,Z=>e.createElementVNode("button",{key:Z.id,class:"transition-option",onClick:W=>(Z.id,void 0)},e.toDisplayString(Z.name),9,kb)),64))])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",xb,[e.createElementVNode("button",{class:"btn-cancel",onClick:D[3]||(D[3]=Z=>I.$emit("cancel"))},"CANCEL"),e.createElementVNode("button",{class:"btn-save",onClick:K},"SAVE")])]))}}),Vb=Me(Eb,[["__scopeId","data-v-b933f33b"]]),Sb={class:"time-label"},Cb=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),m=c%(l*5)===0;s.push({time:c,position:d,label:u,major:m})}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",Sb,e.toDisplayString(c.label),1),e.createElementVNode("div",{class:e.normalizeClass(["time-tick",{major:c.major}])},null,2)],4))),128))],4))}}),Nb=Me(Cb,[["__scopeId","data-v-0ef9c910"]]),_b=["data-track-index"],Tb={class:"track-header"},Mb={class:"track-label"},Bb={class:"track-controls"},Ib=["data-testid","aria-label"],Fb=["data-testid","onMousedown","onClick"],Rb={class:"clip-content"},$b={class:"clip-name"},Db={key:0,class:"clip-thumbnail"},Ub=["src","alt"],Ob=["onMousedown","aria-label"],Ab=["onMousedown","aria-label"],Lb=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(E){const _=E.timelineEnd-E.timelineStart,C=E.timelineStart/t.duration*100,w=_/t.duration*100;return{left:`${C}%`,width:`${w}%`,backgroundColor:u(E)}}function u(E){const _=["#4A90E2","#7ED321","#F5A623","#BD10E0","#9013FE","#50E3C2","#B8E986","#F8E71C"],C=parseInt(E.id.replace(/\D/g,""))%_.length;return _[C]}function m(E){return E.label?E.label:E.url?(E.url.split("/").pop()||"Clip").split(".")[0]:`Clip ${E.id.slice(-4)}`}function p(E){i.value=E.id,o("clip-select",E.id)}function h(){r.value=!r.value}function v(E,_){if(l.value)return;s.value=!0;const C=_.clientX,w=E.timelineStart,f=$=>{if(!s.value)return;const N=$.clientX-C,g=parseFloat(c.value.width),S=N/(t.zoom*100)*(t.duration/g),O=Math.max(0,w+S);o("clip-move",E.id,O)},x=()=>{s.value=!1,document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",x)};document.addEventListener("mousemove",f),document.addEventListener("mouseup",x)}function y(E,_,C){l.value=_;const w=C.clientX,f=E.sourceIn,x=E.sourceOut,$=g=>{if(!l.value)return;const S=g.clientX-w,O=parseFloat(c.value.width),k=S/(t.zoom*100)*(t.duration/O);if(l.value==="start"){const T=Math.max(0,f+k);o("clip-trim",E.id,T,x)}else{const T=Math.max(f+1,x+k);o("clip-trim",E.id,f,T)}},N=()=>{l.value=null,document.removeEventListener("mousemove",$),document.removeEventListener("mouseup",N)};document.addEventListener("mousemove",$),document.addEventListener("mouseup",N)}return(E,_)=>(e.openBlock(),e.createElementBlock("div",{class:"video-track","data-track-index":E.trackIndex},[e.createElementVNode("div",Tb,[e.createElementVNode("span",Mb,"Track "+e.toDisplayString(E.trackIndex+1),1),e.createElementVNode("div",Bb,[E.clips.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,class:"track-btn","data-testid":`btn-mute-track-${E.trackIndex}`,"aria-label":`${r.value?"Unmute":"Mute"} track ${E.trackIndex+1}`,onClick:h},[e.createVNode(e.unref(B.IonIcon),{icon:r.value?e.unref(Ru):e.unref(Iu)},null,8,["icon"])],8,Ib)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:"track-timeline",style:e.normalizeStyle(c.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.clips,C=>(e.openBlock(),e.createElementBlock("div",{key:C.id,class:e.normalizeClass(["timeline-clip",{selected:C.id===i.value}]),style:e.normalizeStyle(d(C)),"data-testid":`clip-${C.id}`,onMousedown:w=>v(C,w),onClick:w=>p(C)},[e.createElementVNode("div",Rb,[e.createElementVNode("span",$b,e.toDisplayString(m(C)),1),C.thumbnail?(e.openBlock(),e.createElementBlock("div",Db,[e.createElementVNode("img",{src:C.thumbnail,alt:m(C)},null,8,Ub)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",{class:"trim-handle trim-start",onMousedown:e.withModifiers(w=>y(C,"start",w),["stop"]),"aria-label":`Trim start of ${m(C)}`},null,40,Ob),e.createElementVNode("div",{class:"trim-handle trim-end",onMousedown:e.withModifiers(w=>y(C,"end",w),["stop"]),"aria-label":`Trim end of ${m(C)}`},null,40,Ab)],46,Fb))),128))],4)],8,_b))}}),zb=Me(Lb,[["__scopeId","data-v-48e480d2"]]),Pb={class:"video-timeline"},jb={class:"timeline-tracks"},Wb=["aria-label","aria-valuenow","aria-valuemax"],Zb={class:"timeline-controls"},Xb={class:"zoom-level"},Hb=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 w=Math.max(0,...t.clips.map(f=>f.track||0));return Array(w+1).fill(null)}),d=e.computed(()=>`${t.currentTime/t.duration*100}%`);function u(w){return t.clips.filter(f=>(f.track||0)===w)}function m(w){const f=Math.floor(w/60),x=Math.floor(w%60);return`${f}:${x.toString().padStart(2,"0")}`}function p(w,f){o("clip-move",w,f)}function h(w,f,x){o("clip-trim",w,f,x)}function v(w){r.value=w}function y(){i.value=Math.min(i.value*1.2,5)}function E(){i.value=Math.max(i.value/1.2,.5)}function _(){s.value=!0;const w=x=>{if(!s.value||!l.value)return;const $=l.value.getBoundingClientRect(),S=Math.max(0,Math.min(x.clientX-$.left,$.width))/$.width*t.duration;o("seek",S)},f=()=>{s.value=!1,document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",f)};document.addEventListener("mousemove",w),document.addEventListener("mouseup",f)}function C(w){let f=t.currentTime;switch(w.key){case"ArrowLeft":f=Math.max(0,t.currentTime-1);break;case"ArrowRight":f=Math.min(t.duration,t.currentTime+1);break;case"Home":f=0;break;case"End":f=t.duration;break;default:return}w.preventDefault(),o("seek",f)}return e.onMounted(()=>{l.value=document.querySelector(".video-timeline")}),e.onUnmounted(()=>{}),(w,f)=>(e.openBlock(),e.createElementBlock("div",Pb,[e.createVNode(Nb,{duration:w.duration,zoom:i.value},null,8,["duration","zoom"]),e.createElementVNode("div",jb,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(x,$)=>(e.openBlock(),e.createBlock(zb,{key:`track-${$}`,"data-testid":`track-${$}`,clips:u($),"track-index":$,zoom:i.value,duration:w.duration,onClipMove:p,onClipTrim:h,onClipSelect:v},null,8,["data-testid","clips","track-index","zoom","duration"]))),128))]),e.createElementVNode("div",{class:"timeline-playhead",style:e.normalizeStyle({left:d.value}),onMousedown:_,"data-testid":"playhead","aria-label":`Playhead at ${m(w.currentTime)}`,role:"slider","aria-valuenow":w.currentTime,"aria-valuemax":w.duration,tabindex:"0",onKeydown:C},null,44,Wb),e.createElementVNode("div",Zb,[e.createElementVNode("button",{"data-testid":"btn-zoom-in","aria-label":"Zoom in",onClick:y},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(ji)},null,8,["icon"])]),e.createElementVNode("span",Xb,e.toDisplayString(Math.round(i.value*100))+"%",1),e.createElementVNode("button",{"data-testid":"btn-zoom-out","aria-label":"Zoom out",onClick:E},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Su)},null,8,["icon"])])])]))}}),Gb=Me(Hb,[["__scopeId","data-v-001df415"]]),Jb={class:"video-filters-panel"},Yb={class:"filter-controls"},Kb=["for"],qb={class:"filter-slider-group"},Qb=["id","onUpdate:modelValue","min","max","step","data-testid","aria-label","aria-valuenow","aria-valuemin","aria-valuemax","onInput"],e2={class:"filter-value"},t2={class:"filter-actions"},n2={key:0,class:"filter-presets"},o2={class:"preset-list"},a2=["data-testid","aria-label","onClick"],i2=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((p,h)=>(p[h.type]=h.default,p),{})),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(p,h){switch(p){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(p){return["brightness","contrast","saturation","hue","blur","sharpen","sepia","grayscale"].includes(p)}function c(p){if(!l(p))return;const h={id:`filter-${p}`,filterId:p,params:{value:i[p]},intensity:1};t("filter-change",h)}function d(){o.forEach(p=>{i[p.type]=p.default,c(p.type)})}function u(){const p=prompt("Enter preset name:");if(!p)return;const h={id:`custom-${Date.now()}`,name:p,values:{...i}};r.value.push(h)}function m(p){Object.entries(p.values).forEach(([h,v])=>{i[h]=v,c(h)})}return(p,h)=>(e.openBlock(),e.createElementBlock("div",Jb,[h[3]||(h[3]=e.createElementVNode("h3",null,"Video Filters",-1)),e.createElementVNode("div",Yb,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(o,v=>e.createElementVNode("div",{key:v.type,class:"filter-control"},[e.createElementVNode("label",{for:`filter-${v.type}`},e.toDisplayString(v.label),9,Kb),e.createElementVNode("div",qb,[e.withDirectives(e.createElementVNode("input",{id:`filter-${v.type}`,"onUpdate:modelValue":y=>i[v.type]=y,type:"range",min:v.min,max:v.max,step:v.step,class:"filter-slider","data-testid":`filter-${v.type}`,"aria-label":`${v.label} filter`,"aria-valuenow":i[v.type],"aria-valuemin":v.min,"aria-valuemax":v.max,onInput:y=>c(v.type)},null,40,Qb),[[e.vModelText,i[v.type],void 0,{number:!0}]]),e.createElementVNode("span",e2,e.toDisplayString(s(v.type,i[v.type])),1)])])),64))]),e.createElementVNode("div",t2,[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(B.IonIcon),{icon:e.unref(Un)},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(B.IonIcon),{icon:e.unref(Zi)},null,8,["icon"]),h[1]||(h[1]=e.createTextVNode(" Save as Preset ",-1))])]),r.value.length>0?(e.openBlock(),e.createElementBlock("div",n2,[h[2]||(h[2]=e.createElementVNode("h4",null,"Presets",-1)),e.createElementVNode("div",o2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,v=>(e.openBlock(),e.createElementBlock("button",{key:v.id,class:"preset-btn","data-testid":`preset-${v.id}`,"aria-label":`Apply ${v.name} preset`,onClick:y=>m(v)},e.toDisplayString(v.name),9,a2))),128))])])):e.createCommentVNode("",!0)]))}}),r2=Me(i2,[["__scopeId","data-v-5ad2ac63"]]),s2={class:"video-text-panel"},l2={class:"text-input-group"},c2={class:"text-options"},d2={class:"option-row"},u2={class:"option-row"},m2={class:"option-row"},p2={class:"option-row"},f2={class:"checkbox-label"},h2={class:"option-row"},v2={class:"text-overlay-list"},g2={key:0,class:"empty-state"},y2=["data-testid"],w2={class:"overlay-preview"},b2={class:"overlay-controls"},k2=["data-testid","aria-label","onClick"],x2=["data-testid","aria-label","onClick"],E2=["data-testid","aria-label","onClick"],V2=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(m=>m.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",s2,[u[17]||(u[17]=e.createElementVNode("h3",null,"Text Overlays",-1)),e.createElementVNode("div",l2,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[0]||(u[0]=m=>i.text=m),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(B.IonIcon),{icon:e.unref(ji)},null,8,["icon"]),u[7]||(u[7]=e.createTextVNode(" Add ",-1))])]),e.createElementVNode("div",c2,[e.createElementVNode("div",d2,[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]=m=>i.fontFamily=m),"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",u2,[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]=m=>i.fontSize=m),type:"number",min:"10",max:"200","data-testid":"input-font-size"},null,512),[[e.vModelText,i.fontSize,void 0,{number:!0}]])]),e.createElementVNode("div",m2,[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]=m=>i.color=m),type:"color","data-testid":"input-text-color"},null,512),[[e.vModelText,i.color]])]),e.createElementVNode("div",p2,[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]=m=>i.backgroundColor=m),type:"color","data-testid":"input-bg-color"},null,512),[[e.vModelText,i.backgroundColor]]),e.createElementVNode("label",f2,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[5]||(u[5]=m=>i.hasBackground=m),type:"checkbox","data-testid":"checkbox-bg"},null,512),[[e.vModelCheckbox,i.hasBackground]]),u[12]||(u[12]=e.createTextVNode(" Enable ",-1))])]),e.createElementVNode("div",h2,[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]=m=>i.animation=m),"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",v2,[u[16]||(u[16]=e.createElementVNode("h4",null,"Active Overlays",-1)),o.value.length===0?(e.openBlock(),e.createElementBlock("div",g2," No text overlays added yet ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(m,p)=>(e.openBlock(),e.createElementBlock("div",{key:m.id,class:"text-overlay-item","data-testid":`overlay-${p}`},[e.createElementVNode("div",w2,[e.createElementVNode("span",{style:e.normalizeStyle({fontFamily:m.fontFamily,fontSize:`${Math.min(m.fontSize/4,16)}px`,color:m.color})},e.toDisplayString(m.text),5)]),e.createElementVNode("div",b2,[e.createElementVNode("button",{class:"edit-btn","data-testid":`btn-edit-${p}`,"aria-label":`Edit overlay: ${m.text}`,onClick:h=>l(m)},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(ru)},null,8,["icon"])],8,k2),e.createElementVNode("button",{class:"duplicate-btn","data-testid":`btn-duplicate-${p}`,"aria-label":`Duplicate overlay: ${m.text}`,onClick:h=>c(m)},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(iu)},null,8,["icon"])],8,x2),e.createElementVNode("button",{class:"remove-btn","data-testid":`btn-remove-${p}`,"aria-label":`Remove overlay: ${m.text}`,onClick:h=>s(m.id)},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(_u)},null,8,["icon"])],8,E2)])],8,y2))),128))])]))}}),S2=Me(V2,[["__scopeId","data-v-4d240e1e"]]),C2={class:"video-tools-panel"},N2={class:"tool-tabs"},_2=["data-testid","aria-label","aria-selected","onClick"],T2={class:"tool-content"},M2={key:0,class:"trim-panel",role:"tabpanel","aria-label":"Trim controls"},B2={class:"trim-actions"},I2={key:3,class:"transitions-panel",role:"tabpanel","aria-label":"Transition controls"},F2={class:"transition-types"},R2=["data-testid","aria-label","onClick"],$2={class:"transition-preview"},D2=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:el},{id:"filters",name:"Filters",icon:an},{id:"text",name:"Text",icon:il},{id:"transitions",name:"Transitions",icon:es}],t=[{id:"fade",name:"Fade",icon:oi},{id:"slide-left",name:"Slide Left",icon:qd},{id:"slide-right",name:"Slide Right",icon:Qd},{id:"dissolve",name:"Dissolve",icon:oi},{id:"wipe",name:"Wipe",icon:es},{id:"zoom",name:"Zoom",icon:oi}];return(o,i)=>(e.openBlock(),e.createElementBlock("div",C2,[e.createElementVNode("div",N2,[(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(B.IonIcon),{icon:r.icon},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(r.name),1)],10,_2)),64))]),e.createElementVNode("div",T2,[o.activeTool==="trim"?(e.openBlock(),e.createElementBlock("div",M2,[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",B2,[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(B.IonIcon),{icon:e.unref(qr)},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(B.IonIcon),{icon:e.unref(qr)},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(B.IonIcon),{icon:e.unref(Fn)},null,8,["icon"]),i[7]||(i[7]=e.createTextVNode(" Clear ",-1))])])])):e.createCommentVNode("",!0),o.activeTool==="filters"?(e.openBlock(),e.createBlock(r2,{key:1,onFilterChange:i[3]||(i[3]=r=>o.$emit("filter-change",r))})):e.createCommentVNode("",!0),o.activeTool==="text"?(e.openBlock(),e.createBlock(S2,{key:2,onTextAdd:i[4]||(i[4]=r=>o.$emit("text-add",r))})):e.createCommentVNode("",!0),o.activeTool==="transitions"?(e.openBlock(),e.createElementBlock("div",I2,[i[10]||(i[10]=e.createElementVNode("h3",null,"Transitions",-1)),e.createElementVNode("div",F2,[(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",$2,[e.createVNode(e.unref(B.IonIcon),{icon:r.icon},null,8,["icon"])]),e.createElementVNode("span",null,e.toDisplayString(r.name),1)],8,R2)),64))])])):e.createCommentVNode("",!0)])]))}}),U2=Me(D2,[["__scopeId","data-v-fc135306"]]),O2={class:"video-export-panel"},A2={class:"export-presets"},L2=["value"],z2={key:0,class:"preset-details"},P2={class:"detail-row"},j2={class:"detail-row"},W2={class:"detail-row"},Z2={class:"advanced-options"},X2={class:"options-content"},H2={class:"option-group"},G2={class:"option-group"},J2={class:"option-group"},Y2=["disabled"],K2={key:1,class:"export-progress"},q2={class:"progress-message"},Q2={class:"progress-bar"},ek=["aria-valuenow"],tk={class:"progress-percentage"},nk=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",O2,[u[14]||(u[14]=e.createElementVNode("h3",null,"Export Video",-1)),e.createElementVNode("div",A2,[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]=m=>i.value=m),"data-testid":"preset-select","aria-label":"Select export preset"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.presets,m=>(e.openBlock(),e.createElementBlock("option",{key:m.id,value:m.id},e.toDisplayString(m.name),9,L2))),128))],512),[[e.vModelSelect,i.value]])]),s.value?(e.openBlock(),e.createElementBlock("div",z2,[e.createElementVNode("div",P2,[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",j2,[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",W2,[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",Z2,[u[12]||(u[12]=e.createElementVNode("summary",null,"Advanced Options",-1)),e.createElementVNode("div",X2,[e.createElementVNode("div",H2,[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]=m=>r.quality=m),"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",G2,[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]=m=>r.bitrate=m),type:"number",min:"1",max:"50","data-testid":"bitrate-input"},null,512),[[e.vModelText,r.bitrate,void 0,{number:!0}]])]),e.createElementVNode("div",J2,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[3]||(u[3]=m=>r.includeAudio=m),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(B.IonSpinner),{key:0,name:"crescent"})):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(po)},null,8,["icon"]),u[13]||(u[13]=e.createTextVNode(" Export Video ",-1))],64))],8,Y2),d.isExporting?(e.openBlock(),e.createElementBlock("div",K2,[e.createElementVNode("div",q2,e.toDisplayString(l.value),1),e.createElementVNode("div",Q2,[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,ek)]),e.createElementVNode("div",tk,e.toDisplayString(d.exportProgress)+"% ",1)])):e.createCommentVNode("",!0)]))}}),ok=Me(nk,[["__scopeId","data-v-5caf8fe6"]]),ak=["data-testid"],ik={class:"progress-header"},rk={class:"file-info"},sk={class:"file-details"},lk={class:"file-name"},ck={class:"file-meta"},dk={class:"file-size"},uk={key:0,class:"separator"},mk={key:1,class:"upload-speed"},pk={key:2,class:"separator"},fk={key:3,class:"time-remaining"},hk={class:"progress-actions"},vk={key:0,class:"status-icon completed","data-testid":"video-upload-status-completed"},gk={key:1,class:"status-icon error","data-testid":"video-upload-status-error"},yk={key:2,class:"status-icon processing","data-testid":"video-upload-status-processing",role:"status","aria-label":"Processing video"},wk=["aria-valuenow","aria-label"],bk={class:"progress-bar"},kk={class:"progress-percent"},xk={key:1,class:"error-message","data-testid":"video-upload-error"},Ek={key:2,class:"thumbnail-preview","data-testid":"video-upload-thumbnail"},Vk=["src","alt"],Sk={key:0,class:"video-duration"},Ck=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(()=>rl),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 p=n.upload.timeRemaining;if(p<60)return`${Math.round(p)}s`;const h=Math.floor(p/60);return h<60?`${h}m ${Math.round(p%60)}s`:`${Math.floor(h/60)}h ${h%60}m`}),l=e.computed(()=>{var p;return n.upload.status==="completed"&&((p=n.upload.media)!=null&&p.thumbnail_url)?n.upload.media.thumbnail_url:null}),c=e.computed(()=>{var p;return(p=n.upload.media)==null?void 0:p.duration});function d(p){if(p===0)return"0 B";const h=["B","KB","MB","GB","TB"],v=1024,y=Math.floor(Math.log(p)/Math.log(v));return`${(p/Math.pow(v,y)).toFixed(1)} ${h[y]}`}function u(p){if(p===0)return"0 B/s";const h=["B/s","KB/s","MB/s","GB/s"],v=1024,y=Math.floor(Math.log(p)/Math.log(v));return`${(p/Math.pow(v,y)).toFixed(1)} ${h[y]}`}function m(p){const h=Math.floor(p/3600),v=Math.floor(p%3600/60),y=Math.floor(p%60);return h>0?`${h}:${v.toString().padStart(2,"0")}:${y.toString().padStart(2,"0")}`:`${v}:${y.toString().padStart(2,"0")}`}return(p,h)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["upload-progress-item",t.value]),"data-testid":`video-upload-progress-${p.upload.id}`},[e.createElementVNode("div",ik,[e.createElementVNode("div",rk,[e.createVNode(e.unref(B.IonIcon),{icon:o.value,class:"file-icon","aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("div",sk,[e.createElementVNode("h4",lk,e.toDisplayString(p.upload.filename),1),e.createElementVNode("p",ck,[e.createElementVNode("span",dk,e.toDisplayString(d(p.upload.bytesTotal||0)),1),p.upload.status==="uploading"?(e.openBlock(),e.createElementBlock("span",uk,"•")):e.createCommentVNode("",!0),p.upload.status==="uploading"?(e.openBlock(),e.createElementBlock("span",mk,e.toDisplayString(u(p.upload.uploadSpeed||0)),1)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("span",pk,"•")):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("span",fk,e.toDisplayString(s.value)+" remaining ",1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",hk,[p.upload.status==="completed"?(e.openBlock(),e.createElementBlock("div",vk,[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(qs)},null,8,["icon"])])):p.upload.status==="error"?(e.openBlock(),e.createElementBlock("div",gk,[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Kd),"aria-hidden":"true"},null,8,["icon"])])):p.upload.status==="processing"?(e.openBlock(),e.createElementBlock("div",yk,[e.createVNode(e.unref(B.IonSpinner),{name:"crescent"})])):e.createCommentVNode("",!0),p.upload.status==="uploading"?(e.openBlock(),e.createBlock(e.unref(B.IonButton),{key:3,fill:"clear",size:"small",onClick:h[0]||(h[0]=v=>p.$emit("cancel")),"data-testid":"btn-cancel-video-upload","aria-label":"Cancel upload"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Fn),slot:"icon-only"},null,8,["icon"])]),_:1})):p.upload.status==="error"?(e.openBlock(),e.createBlock(e.unref(B.IonButton),{key:4,fill:"clear",size:"small",onClick:h[1]||(h[1]=v=>p.$emit("retry")),"data-testid":"btn-retry-video-upload","aria-label":"Retry upload"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Un),slot:"icon-only"},null,8,["icon"])]),_:1})):p.upload.status==="completed"?(e.openBlock(),e.createBlock(e.unref(B.IonButton),{key:5,fill:"clear",size:"small",onClick:h[2]||(h[2]=v=>p.$emit("remove")),"data-testid":"btn-remove-video-upload","aria-label":"Remove from list"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Fn),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":p.upload.status==="processing"?"Processing progress":"Upload progress"},[e.createElementVNode("div",bk,[e.createElementVNode("div",{class:e.normalizeClass(["progress-fill",{indeterminate:p.upload.status==="processing"}]),style:e.normalizeStyle({width:r.value+"%"})},null,6)]),e.createElementVNode("span",kk,e.toDisplayString(Math.round(r.value))+"%",1)],8,wk)):e.createCommentVNode("",!0),p.upload.error?(e.openBlock(),e.createElementBlock("div",xk,[e.createVNode(e.unref(B.IonIcon),{icon:e.unref($u)},null,8,["icon"]),e.createElementVNode("span",null,e.toDisplayString(p.upload.error),1)])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",Ek,[e.createElementVNode("img",{src:l.value,alt:p.upload.filename},null,8,Vk),c.value?(e.openBlock(),e.createElementBlock("div",Sk,e.toDisplayString(m(c.value)),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],10,ak))}}),Nk=Me(Ck,[["__scopeId","data-v-9eacbf91"]]),fi=4,_k=500,Tk=new Set([408,425,429,500,502,503,504,520,521,522,523,524,525]);function Aa(a){return typeof a=="object"&&a!==null}function As(a){return Aa(a)?typeof a.upload_url=="string"&&typeof a.upload_id=="string"&&typeof a.media_uuid=="string"&&typeof a.expires_at=="string":!1}function Mk(a){if(As(a))return a;if(Aa(a)&&As(a.data))return a.data;throw new Error("Invalid upload response from backend")}function Ls(a){return Aa(a)?typeof a.uuid=="string"&&typeof a.processing_status=="string":!1}function Bk(a){if(Ls(a))return a;if(Aa(a)&&Ls(a.data))return a.data;throw new Error("Invalid media response from backend")}function zo(a){return a?{...a}:{}}function zs(a,n="PUT"){return typeof a.method=="string"&&a.method.trim()!==""?a.method.trim().toUpperCase():n}function Ik(a){return a.resumable===!0?!0:/tusupload/i.test(a.upload_url)}function Fk(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 Rk(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} ${Fk(i)}`).join(",")}function Po(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 $k(a,n){return a instanceof Error?a:new Error(n)}function Dk(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 Ps(a){const n=Math.max(0,a-1),t=_k*Math.pow(2,n);return Math.min(5e3,t)}function js(a){return new Promise(n=>{window.setTimeout(n,a)})}async function Ws(a,n){for(let t=1;t<=fi;t+=1)try{const o=await n();if(o.ok||!Tk.has(o.status)||t>=fi)return o;await js(Ps(t))}catch(o){if(!Dk(o)||t>=fi)throw o;await js(Ps(t))}throw new Error(`${a} failed after retry attempts`)}function Uk(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 k=Array.from(n.value.values());return k.length===0?0:k.reduce((F,A)=>F+A.progress,0)/k.length});function d(k){o.value=k}function u(){}async function m(k){var F;const T=k.filter(A=>p(A));if(T.length!==0&&((F=a.onFilesSelected)==null||F.call(a,T),a.autoUpload!==!1))for(const A of T)await h(A)}function p(k){return!(a.maxFileSize&&k.size>a.maxFileSize||a.allowedFormats&&a.allowedFormats.length>0&&!a.allowedFormats.includes(k.type))}async function h(k){var A,R,j;const T=O(k);if(n.value.has(T)){const K=n.value.get(T);if((K==null?void 0:K.status)==="uploading")return}const F={id:T,file:k,filename:k.name,progress:0,status:"pending",startedAt:new Date,bytesTotal:k.size,bytesUploaded:0};n.value.set(F.id,F),t.value.add(F.id);try{F.status="uploading",(A=a.onUploadStart)==null||A.call(a,F);const K=await v(k);a.resumable===!0||K.resumable===!0?await E(F,K):await y(F,K),F.status="processing",F.progress=100;const D=await x(K.media_uuid);F.status="completed",F.media=D,(R=a.onUploadComplete)==null||R.call(a,D)}catch(K){if(F.status!=="cancelled"){const I=$k(K,"Upload failed");F.status="error",F.error=I.message,(j=a.onUploadError)==null||j.call(a,I,F)}}finally{t.value.delete(F.id),i.delete(F.id),r.delete(F.id)}}async function v(k){if(!o.value)throw new Error("API client not configured");const T={collection:a.collection||"videos",filename:k.name,size:k.size,mime_type:k.type,...a.ownerUuid!==void 0?{ownerUuid:a.ownerUuid}:{},...a.ownerType!==void 0?{ownerType:a.ownerType}:{}},F=await o.value.post("/api/v1/video/upload",T);return Mk(F)}async function y(k,T){const F=new XMLHttpRequest,A=zs(T),R=zo(T.headers);return new Promise((j,K)=>{F.upload.addEventListener("progress",I=>{var D;I.lengthComputable&&(Po(k,I.loaded),(D=a.onUploadProgress)==null||D.call(a,k))}),F.addEventListener("load",()=>{i.delete(k.id),F.status>=200&&F.status<300?j():K(new Error(`Upload failed with status ${F.status}`))}),F.addEventListener("error",()=>{i.delete(k.id),K(new Error("Upload failed"))}),F.addEventListener("abort",()=>{i.delete(k.id),K(new Error("Upload cancelled"))}),F.open(A,T.upload_url),Object.entries(R).forEach(([I,D])=>{F.setRequestHeader(I,D)}),!Object.keys(R).some(I=>I.toLowerCase()==="content-type")&&k.file.type&&F.setRequestHeader("Content-Type",k.file.type),i.set(k.id,F),F.send(k.file)})}async function E(k,T){var K;if(Ik(T)){await _(k,T);return}const F=a.chunkSize||5*1024*1024,A=C(k.file,F),R=new AbortController;r.set(k.id,R);const j=await f(T.upload_id);j&&(A.forEach(I=>{I.end<=j.bytesUploaded&&(I.uploaded=!0)}),Po(k,j.bytesUploaded));for(const I of A)I.uploaded||(await w(k,T,I,R),Po(k,I.end),(K=a.onUploadProgress)==null||K.call(a,k))}async function _(k,T){var Z;const F=new AbortController;r.set(k.id,F);const A={...zo(T.headers),"Tus-Resumable":"1.0.0","Upload-Length":String(k.file.size),"Upload-Metadata":Rk(k,T)},R=await Ws("Resumable upload initialization",()=>fetch(T.upload_url,{method:"POST",headers:A,signal:F.signal}));if(!R.ok)throw new Error(`Failed to initialize resumable upload: ${R.status}`);const j=R.headers.get("Location");if(!j)throw new Error("Resumable upload endpoint did not return upload location");const K=new URL(j,T.upload_url).toString(),I=a.chunkSize||5*1024*1024;let D=0;for(;D<k.file.size;){const W=Math.min(D+I,k.file.size),oe=k.file.slice(D,W),we={...zo(T.headers),"Tus-Resumable":"1.0.0","Upload-Offset":String(D),"Content-Type":"application/offset+octet-stream"},Ce=await Ws("Resumable chunk upload",()=>fetch(K,{method:"PATCH",headers:we,body:oe,signal:F.signal}));if(Ce.status===409){const M=Number(Ce.headers.get("Upload-Offset")??"-1");if(Number.isFinite(M)&&M>=0){D=M;continue}}if(!Ce.ok)throw new Error(`Resumable chunk upload failed: ${Ce.status}`);const ne=Number(Ce.headers.get("Upload-Offset")??String(W));D=Number.isFinite(ne)&&ne>D?ne:W,Po(k,D),(Z=a.onUploadProgress)==null||Z.call(a,k)}}function C(k,T){const F=[];let A=0,R=0;for(;A<k.size;){const j=Math.min(A+T,k.size);F.push({start:A,end:j,blob:k.slice(A,j),index:R,uploaded:!1}),A=j,R++}return F}async function w(k,T,F,A){const R={...zo(T.headers),"Content-Range":`bytes ${F.start}-${F.end-1}/${k.file.size}`,"Content-Type":k.file.type||"application/octet-stream"},j=await fetch(T.upload_url,{method:zs(T),headers:R,body:F.blob,signal:A.signal});if(!j.ok)throw new Error(`Chunk upload failed: ${j.status}`);F.uploaded=!0}async function f(k){return null}async function x(k){if(!o.value)throw new Error("API client not configured");const T=60;let F=0;for(;F<T;){const A=await o.value.get(`/api/v1/video/${k}`),R=Bk(A),j=String(R.processing_status);if(j==="ready")return R;if(j==="failed"||j==="error")throw new Error("Video processing failed");await new Promise(K=>{window.setTimeout(K,5e3)}),F++}throw new Error("Video processing timeout")}function $(k){const T=n.value.get(k);if(!T)return;const F=i.get(k);F&&(F.abort(),i.delete(k));const A=r.get(k);A&&(A.abort(),r.delete(k)),T.status="cancelled",T.error="Upload cancelled",t.value.delete(k)}async function N(k){const T=n.value.get(k);T&&(T.status="pending",T.error="",T.progress=0,T.bytesUploaded=0,await h(T.file))}function g(k){n.value.delete(k),t.value.delete(k),i.delete(k),r.delete(k)}function S(){Array.from(n.value.entries()).forEach(([k,T])=>{T.status==="completed"&&n.value.delete(k)})}function O(k){return`${k.name}-${k.size}-${Date.now()}`}return{uploads:l,isUploading:s,totalProgress:c,openFilePicker:u,handleFileSelect:m,validateFile:p,startUpload:h,cancelUpload:$,retryUpload:N,removeUpload:g,clearCompleted:S,setApiClient:d}}const Ok=["accept","multiple"],Ak={key:0,class:"upload-trigger","data-testid":"video-uploader-trigger"},Lk=["onKeydown"],zk={key:1,class:"upload-list","data-testid":"video-upload-list"},Pk={class:"drag-content"},jk=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:m,setApiClient:p}=Uk({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:f=>o("upload-start",f),onUploadProgress:f=>o("upload-progress",f),onUploadComplete:f=>o("upload-complete",f),onUploadError:(f,x)=>o("upload-error",f,x),onFilesSelected:f=>o("files-selected",f)});t.apiClient&&p(t.apiClient);const h=e.computed(()=>t.allowedFormats.join(",")),v=e.computed(()=>t.multiple||s.value.length===0);function y(){i.value&&i.value.click()}function E(f){const x=f.target,$=Array.from(x.files||[]);$.length>0&&(c($),x.value="")}function _(f){var N;f.preventDefault(),r.value=!1;const $=Array.from(((N=f.dataTransfer)==null?void 0:N.files)||[]).filter(g=>g.type.startsWith("video/"));$.length>0&&c($)}function C(f){var x;f.preventDefault(),(x=f.dataTransfer)!=null&&x.types.includes("Files")&&(r.value=!0)}function w(f){f.target.closest(".video-uploader")||(r.value=!1)}return e.onMounted(()=>{document.addEventListener("dragover",C),document.addEventListener("dragleave",w),document.addEventListener("drop",f=>f.preventDefault())}),e.onUnmounted(()=>{document.removeEventListener("dragover",C),document.removeEventListener("dragleave",w),document.removeEventListener("drop",f=>f.preventDefault())}),(f,x)=>(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:f.multiple,onChange:E,"data-testid":"video-uploader-input","aria-label":"Select video files to upload",hidden:""},null,40,Ok),!e.unref(l)||v.value?(e.openBlock(),e.createElementBlock("div",Ak,[e.renderSlot(f.$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(B.IonIcon),{icon:e.unref(rl),class:"upload-icon","aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("h3",null,e.toDisplayString(f.label),1),e.createElementVNode("p",null,e.toDisplayString(f.description),1),e.createVNode(e.unref(B.IonButton),{size:"small","data-testid":"btn-select-video","aria-label":"Select video file"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(ji),slot:"start","aria-hidden":"true"},null,8,["icon"]),x[2]||(x[2]=e.createTextVNode(" Select Video ",-1))]),_:1})],40,Lk)],!0)])):e.createCommentVNode("",!0),e.unref(s).length>0?(e.openBlock(),e.createElementBlock("div",zk,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s),$=>(e.openBlock(),e.createBlock(Nk,{key:$.id,upload:$,onCancel:N=>e.unref(d)($.id),onRetry:N=>e.unref(u)($.id),onRemove:N=>e.unref(m)($.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:_,onDragover:x[0]||(x[0]=e.withModifiers(()=>{},["prevent"])),onDragleave:x[1]||(x[1]=$=>r.value=!1)},[e.createElementVNode("div",Pk,[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(po),"aria-hidden":"true"},null,8,["icon"]),x[3]||(x[3]=e.createElementVNode("p",null,"Drop video files here",-1))])],32)):e.createCommentVNode("",!0)],2))}}),Wk=Me(jk,[["__scopeId","data-v-ea7587f7"]]),Zk=["aria-valuenow","aria-valuemax","aria-label"],Xk={class:"progress-bar"},Hk={class:"time-display","data-testid":"video-time-display"},Gk={class:"current-time"},Jk={class:"duration"},Yk={class:"control-buttons"},Kk={class:"controls-left"},qk=["aria-label"],Qk={class:"controls-center"},ex={key:0,class:"volume-controls"},tx=["aria-label"],nx=["value"],ox={class:"controls-right"},ax={key:0,class:"quality-selector"},ix=["aria-expanded"],rx={class:"quality-label"},sx={key:0,class:"quality-menu","data-testid":"video-quality-menu",role:"menu"},lx=["data-testid","aria-label","onClick"],cx=["aria-label"],dx=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=B.isPlatform("mobile"),c="pictureInPictureEnabled"in document,d=e.computed(()=>({width:`${t.currentTime/t.duration*100}%`})),u=e.computed(()=>({left:`${t.currentTime/t.duration*100}%`})),m=e.computed(()=>{if(!t.buffered||t.buffered.length===0)return{width:"0%"};for(let f=0;f<t.buffered.length;f++){const x=t.buffered.start(f),$=t.buffered.end(f);if(t.currentTime>=x&&t.currentTime<=$)return{width:`${$/t.duration*100}%`}}return t.buffered.length>0?{width:`${t.buffered.end(0)/t.duration*100}%`}:{width:"0%"}}),p=e.computed(()=>t.muted||t.volume===0?Fu:t.volume<33?Mu:t.volume<66?Bu:Tu);let h=null;function v(){i.value=!0,y()}function y(){h&&clearTimeout(h),t.playing&&!l&&(h=setTimeout(()=>{i.value=!1},3e3))}function E(f){if(!s.value||t.isLive)return;const x=s.value.getBoundingClientRect(),N=(f.clientX-x.left)/x.width*t.duration;o("seek",Math.max(0,Math.min(N,t.duration)))}function _(f){const x=f.target;o("setVolume",parseInt(x.value))}function C(f){o("selectQuality",f),r.value=!1}function w(f){if(!isFinite(f))return"0:00";const x=Math.floor(f/3600),$=Math.floor(f%3600/60),N=Math.floor(f%60);return x>0?`${x}:${$.toString().padStart(2,"0")}:${N.toString().padStart(2,"0")}`:`${$}:${N.toString().padStart(2,"0")}`}return e.onMounted(()=>{document.addEventListener("mousemove",v),y()}),e.onUnmounted(()=>{document.removeEventListener("mousemove",v),h&&clearTimeout(h)}),(f,x)=>(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(f.currentTime),"aria-valuemin":"0","aria-valuemax":Math.round(f.duration),"aria-label":f.isLive?"Live stream":"Video progress",tabindex:"0",onClick:E},[e.createElementVNode("div",Xk,[e.createElementVNode("div",{class:"progress-buffered",style:e.normalizeStyle(m.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",Hk,[e.createElementVNode("span",Gk,e.toDisplayString(w(f.currentTime)),1),x[7]||(x[7]=e.createElementVNode("span",{class:"separator"},"/",-1)),e.createElementVNode("span",Jk,e.toDisplayString(f.isLive?"LIVE":w(f.duration)),1)])],8,Zk),e.createElementVNode("div",Yk,[e.createElementVNode("div",Kk,[e.createElementVNode("button",{class:"control-btn play-pause","data-testid":"btn-video-play-pause",onClick:x[0]||(x[0]=$=>f.$emit("play-pause")),"aria-label":f.playing?"Pause":"Play"},[e.createVNode(e.unref(B.IonIcon),{icon:f.playing?e.unref(fu):e.unref(vu),"aria-hidden":"true"},null,8,["icon"])],8,qk),f.isLive?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,class:"control-btn skip-backward","data-testid":"btn-video-skip-backward",onClick:x[1]||(x[1]=$=>f.$emit("skip-backward")),"aria-label":"Skip backward 10 seconds"},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(gu),"aria-hidden":"true"},null,8,["icon"]),x[8]||(x[8]=e.createElementVNode("span",{class:"skip-label"},"10",-1))])),f.isLive?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:1,class:"control-btn skip-forward","data-testid":"btn-video-skip-forward",onClick:x[2]||(x[2]=$=>f.$emit("skip-forward")),"aria-label":"Skip forward 10 seconds"},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(bu),"aria-hidden":"true"},null,8,["icon"]),x[9]||(x[9]=e.createElementVNode("span",{class:"skip-label"},"10",-1))]))]),e.createElementVNode("div",Qk,[e.unref(l)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",ex,[e.createElementVNode("button",{class:"control-btn mute-btn","data-testid":"btn-video-mute",onClick:x[3]||(x[3]=$=>f.$emit("toggleMute")),"aria-label":f.muted?"Unmute":"Mute"},[e.createVNode(e.unref(B.IonIcon),{icon:p.value,"aria-hidden":"true"},null,8,["icon"])],8,tx),e.createElementVNode("input",{type:"range",class:"volume-slider","data-testid":"slider-video-volume",min:"0",max:"100",value:f.muted?0:f.volume,onInput:_,"aria-label":"Volume"},null,40,nx)]))]),e.createElementVNode("div",ox,[f.qualityLevels.length>1?(e.openBlock(),e.createElementBlock("div",ax,[e.createElementVNode("button",{class:"control-btn quality-btn","data-testid":"btn-video-quality",onClick:x[4]||(x[4]=$=>r.value=!r.value),"aria-label":"Quality settings","aria-expanded":r.value},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Cu),"aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("span",rx,e.toDisplayString(f.currentQuality),1)],8,ix),r.value?(e.openBlock(),e.createElementBlock("div",sx,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.qualityLevels,$=>(e.openBlock(),e.createElementBlock("button",{key:$.label,class:e.normalizeClass(["quality-option",{active:$.label===f.currentQuality}]),"data-testid":`btn-video-quality-${$.label}`,"aria-label":`Set quality to ${$.label}`,role:"menuitem",onClick:N=>C($)},e.toDisplayString($.label),11,lx))),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:x[5]||(x[5]=$=>f.$emit("togglePiP")),"aria-label":"Picture in Picture"},[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Nu),"aria-hidden":"true"},null,8,["icon"])])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"control-btn fullscreen-btn","data-testid":"btn-video-fullscreen",onClick:x[6]||(x[6]=$=>f.$emit("toggleFullscreen")),"aria-label":f.fullscreen?"Exit fullscreen":"Enter fullscreen"},[e.createVNode(e.unref(B.IonIcon),{icon:f.fullscreen?e.unref(au):e.unref(su),"aria-hidden":"true"},null,8,["icon"])],8,cx)])])],2))}}),ux=Me(dx,[["__scopeId","data-v-2ae77c13"]]);function mx(a={}){var oe,we,Ce;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),m=e.ref(!1),p=e.ref(null),h=e.ref("idle"),v=e.ref(a.playbackUrl||((oe=a.media)==null?void 0:oe.playback_url)||((we=a.media)==null?void 0:we.url)||""),y=e.ref(null),E=e.ref(a.isLive||!1),_=e.ref(null),C=e.ref(null);function w(ne){C.value=ne}if((Ce=a.media)!=null&&Ce.token_expires_at){const ne=new Date(a.media.token_expires_at);y.value=Number.isNaN(ne.getTime())?null:ne}async function f(){var M;const ne=E.value?t.value:n.value;if(ne)try{await ne.play(),o.value=!0,h.value=E.value?"live":"playing",(M=a.onPlay)==null||M.call(a)}catch{p.value="Failed to play video",h.value="error"}}function x(){var M;const ne=E.value?t.value:n.value;ne&&(ne.pause(),o.value=!1,h.value="paused",(M=a.onPause)==null||M.call(a))}function $(){o.value?x():f()}function N(ne){const M=E.value?t.value:n.value;if(!M||E.value)return;const z=Number.isFinite(M.duration)?M.duration:ne;M.currentTime=Math.max(0,Math.min(ne,z)),i.value=M.currentTime}function g(ne=10){const M=n.value;!M||E.value||N(M.currentTime+ne)}function S(ne=10){const M=n.value;!M||E.value||N(M.currentTime-ne)}function O(){const ne=E.value?t.value:n.value;ne&&(ne.muted=!ne.muted,l.value=ne.muted)}function k(ne){const M=E.value?t.value:n.value;if(!M)return;const z=Math.max(0,Math.min(100,ne));M.volume=z/100,s.value=z,z>0&&M.muted&&(M.muted=!1,l.value=!1)}function T(ne){const M=n.value;!M||E.value||(M.playbackRate=ne,u.value=ne)}async function F(){const ne=document.querySelector(".video-player-container");if(ne)try{document.fullscreenElement?(await document.exitFullscreen(),c.value=!1):(await ne.requestFullscreen(),c.value=!0)}catch{}}async function A(){const ne=E.value?t.value:n.value;if(ne)try{document.pictureInPictureElement?await document.exitPictureInPicture():document.pictureInPictureEnabled&&await ne.requestPictureInPicture()}catch{}}async function R(){var M;p.value=null,h.value="loading",(M=a.media)!=null&&M.provider&&a.media.provider!=="local"&&await j();const ne=E.value?t.value:n.value;ne&&(ne.load(),await f())}async function j(){if(!(!C.value||!a.media))try{m.value=!0;const ne=await C.value.get(`/api/v1/video/${a.media.uuid}/playback`);v.value=ne.playback_url,y.value=new Date(ne.token_expires_at);const M=E.value?t.value:n.value;if(M&&M.src!==v.value){const z=!M.paused,me=M.currentTime;M.src=v.value,E.value||(M.currentTime=me),z&&await f()}}catch{p.value="Failed to refresh playback token",h.value="error"}finally{m.value=!1}}async function K(ne){if(t.value){if(t.value.canPlayType("application/vnd.apple.mpegurl")){t.value.src=ne;return}try{t.value.src=ne}catch{p.value="Live streaming not supported in this browser",h.value="error"}}}function I(){_.value&&(_.value.destroy(),_.value=null)}function D(){var M;const ne=E.value?t.value:n.value;ne&&(i.value=ne.currentTime,r.value=ne.duration,(M=a.onTimeUpdate)==null||M.call(a,ne.currentTime))}const Z=e.computed(()=>{if(!d.value||d.value.length===0||!r.value)return 0;for(let ne=0;ne<d.value.length;ne++){const M=d.value.start(ne),z=d.value.end(ne);if(i.value>=M&&i.value<=z)return z/r.value*100}return 0});function W(){if(!y.value)return!1;const ne=new Date;return y.value.getTime()-ne.getTime()<5*60*1e3}return e.watch([n,t],([ne,M])=>{const z=E.value?M:ne;z&&(z.addEventListener("timeupdate",D),z.addEventListener("loadedmetadata",()=>{r.value=z.duration,h.value="ready"}),z.addEventListener("progress",()=>{d.value=z.buffered}),z.addEventListener("ended",()=>{var me;o.value=!1,h.value="ended",(me=a.onEnded)==null||me.call(a)}),z.addEventListener("error",me=>{var ae;h.value="error",(ae=a.onError)==null||ae.call(a,"Video playback error")}),z.volume=s.value/100,z.muted=l.value)}),e.onUnmounted(()=>{I();const ne=E.value?t.value:n.value;ne&&ne.removeEventListener("timeupdate",D)}),{videoEl:n,liveVideoEl:t,playing:o,currentTime:i,duration:r,volume:s,muted:l,isFullscreen:c,bufferedRanges:d,bufferedPercent:Z,playbackRate:u,isLoading:m,error:p,status:h,currentPlaybackUrl:v,tokenExpiresAt:y,play:f,pause:x,togglePlayPause:$,seek:N,skipForward:g,skipBackward:S,toggleMute:O,setVolume:k,setPlaybackRate:T,toggleFullscreen:F,togglePiP:A,retry:R,refreshToken:j,setupLiveStream:K,setApiClient:w,shouldRefreshToken:W}}const px=["src","poster","controls","autoplay","muted","loop","preload"],fx={key:1,ref:"livePlayerEl",class:"live-player"},hx=["controls","muted"],vx={key:0,class:"live-indicator","data-testid":"video-live-indicator","aria-label":"Live stream"},gx={key:2,class:"video-loading","data-testid":"video-loading",role:"status","aria-label":"Loading video"},yx={key:3,class:"video-error","data-testid":"video-error",role:"alert"},wx={key:5,class:"gesture-zones","data-testid":"video-gesture-zones"},bx=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:m,bufferedRanges:p,isLoading:h,error:v,status:y,currentPlaybackUrl:E,tokenExpiresAt:_,play:C,pause:w,seek:f,toggleMute:x,setVolume:$,toggleFullscreen:N,togglePlayPause:g,skipForward:S,skipBackward:O,retry:k,refreshToken:T,setApiClient:F,shouldRefreshToken:A,setupLiveStream:R}=mx({...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 T()}const K=e.computed(()=>{const ae=["video-player-container"];return t.className&&ae.push(t.className),m.value&&ae.push("fullscreen"),t.isLive&&ae.push("is-live"),s.value&&ae.push("is-playing"),h.value&&ae.push("is-loading"),ae}),I=e.computed(()=>{var ae,Y;if(t.poster)return t.poster;if((ae=t.media)!=null&&ae.poster_url)return t.media.poster_url;if((Y=t.media)!=null&&Y.thumbnail_url)return t.media.thumbnail_url});function D(ae){const Y=ae.target;o("loadedmetadata",{duration:Y.duration,width:Y.videoWidth,height:Y.videoHeight})}function Z(ae){const Y=ae.target;l.value=Y.currentTime,o("timeupdate",Y.currentTime)}function W(){s.value=!0,o("play")}function oe(){s.value=!1,o("pause")}function we(){s.value=!1,o("ended")}function Ce(ae){const Y=ae.target;let Te="Failed to load video";if(Y.error)switch(Y.error.code){case Y.error.MEDIA_ERR_ABORTED:Te="Video playback aborted";break;case Y.error.MEDIA_ERR_NETWORK:Te="Network error while loading video";break;case Y.error.MEDIA_ERR_DECODE:Te="Video decoding error";break;case Y.error.MEDIA_ERR_SRC_NOT_SUPPORTED:Te="Video format not supported";break}v.value=Te,o("error",Te)}function ne(ae){const Y=ae.target;p.value=Y.buffered,o("progress",Y.buffered)}function M(){h.value=!0}function z(){h.value=!1}e.watch(()=>t.apiClient,ae=>{ae&&F(ae)},{immediate:!0}),e.watch(()=>t.playbackUrl,ae=>{typeof ae=="string"&&ae.length>0&&(E.value=ae)},{immediate:!0}),e.watch(()=>{var ae;return(ae=t.media)==null?void 0:ae.token_expires_at},ae=>{if(!ae){_.value=null;return}const Y=new Date(ae);_.value=Number.isNaN(Y.getTime())?null:Y},{immediate:!0}),e.watch(()=>{var ae;return(ae=t.media)==null?void 0:ae.playback_url},async(ae,Y)=>{if(t.playbackUrl||!ae||ae===Y)return;const Te=i.value;if(!Te||t.isLive){E.value=ae;return}const ue=!Te.paused,se=Te.currentTime;E.value=ae,await e.nextTick();try{Te.currentTime=se}catch{}ue&&await C()},{immediate:!0});let me=null;return e.watch(()=>t.isLive,async ae=>{var Te;if(!ae)return;const Y=t.playbackUrl||((Te=t.media)==null?void 0:Te.playback_url)||"";Y&&await R(Y)},{immediate:!0}),e.onMounted(()=>{var ae;(ae=t.media)!=null&&ae.provider&&t.media.provider!=="local"&&(me=setInterval(()=>{A()&&j()},3e4)),B.isPlatform("mobile")&&t.showCustomControls}),e.onUnmounted(()=>{me&&clearInterval(me)}),(ae,Y)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-player-container",K.value]),"data-testid":"video-player"},[ae.isLive?(e.openBlock(),e.createElementBlock("div",fx,[e.createElementVNode("video",{ref_key:"liveVideoEl",ref:r,controls:ae.controls&&!ae.showCustomControls,autoplay:!0,muted:e.unref(u),onPlay:W,onPause:oe,onError:Ce,playsinline:"",class:"video-element","data-testid":"video-element"},null,40,hx),e.unref(y)==="live"?(e.openBlock(),e.createElementBlock("div",vx,[...Y[3]||(Y[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(E),poster:I.value,controls:ae.controls&&!ae.showCustomControls,autoplay:ae.autoplay,muted:e.unref(u),loop:ae.loop,preload:ae.preload,onLoadedmetadata:D,onTimeupdate:Z,onPlay:W,onPause:oe,onEnded:we,onError:Ce,onProgress:ne,onWaiting:M,onCanplay:z,playsinline:"",class:"video-element","data-testid":"video-element"},null,40,px)),e.unref(h)?(e.openBlock(),e.createElementBlock("div",gx,[e.createVNode(e.unref(B.IonSpinner),{name:"crescent"})])):e.createCommentVNode("",!0),e.unref(v)?(e.openBlock(),e.createElementBlock("div",yx,[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Wi),"aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("p",null,e.toDisplayString(e.unref(v)),1),e.createVNode(e.unref(B.IonButton),{size:"small",onClick:e.unref(k),"data-testid":"btn-video-retry","aria-label":"Retry loading video"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{icon:e.unref(Un),slot:"start","aria-hidden":"true"},null,8,["icon"]),Y[4]||(Y[4]=e.createTextVNode(" Retry ",-1))]),_:1},8,["onClick"])])):e.createCommentVNode("",!0),ae.showCustomControls&&!e.unref(v)?(e.openBlock(),e.createBlock(ux,{key:4,playing:e.unref(s),currentTime:e.unref(l),duration:e.unref(c),buffered:e.unref(p),volume:e.unref(d),muted:e.unref(u),fullscreen:e.unref(m),isLive:ae.isLive,onPlay:e.unref(C),onPause:e.unref(w),onSeek:e.unref(f),onToggleMute:e.unref(x),onSetVolume:e.unref($),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),ae.enableGestures&&!e.unref(v)?(e.openBlock(),e.createElementBlock("div",wx,[e.createElementVNode("div",{class:"gesture-left","data-testid":"video-gesture-skip-back","aria-label":"Double tap to skip backward",onDblclick:Y[0]||(Y[0]=(...Te)=>e.unref(O)&&e.unref(O)(...Te))},null,32),e.createElementVNode("div",{class:"gesture-center","data-testid":"video-gesture-play-pause","aria-label":"Tap to play or pause",onClick:Y[1]||(Y[1]=(...Te)=>e.unref(g)&&e.unref(g)(...Te))}),e.createElementVNode("div",{class:"gesture-right","data-testid":"video-gesture-skip-forward","aria-label":"Double tap to skip forward",onDblclick:Y[2]||(Y[2]=(...Te)=>e.unref(S)&&e.unref(S)(...Te))},null,32)])):e.createCommentVNode("",!0)],2))}}),mc=Me(bx,[["__scopeId","data-v-b8db4951"]]),kx=va.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(R=>R.status==="live")),c=e.computed(()=>r.value.filter(R=>R.processing_status==="processing"));function d(R){a.value.set(R.uuid,R)}function u(R,j){const K=a.value.get(R);K&&a.value.set(R,{...K,...j})}function m(R){a.value.delete(R)}function p(R){return a.value.get(R)}function h(R){n.value.set(R.id,R)}function v(R,j){const K=n.value.get(R);K&&n.value.set(R,{...K,...j})}function y(R,j){const K=n.value.get(R);K&&n.value.set(R,{...K,status:j.status,viewer_count:j.viewer_count,peak_viewers:j.peak_viewers})}function E(R){n.value.delete(R)}function _(R){return n.value.get(R)}function C(R){return s.value.find(j=>j.media_uuid===R)}function w(R){t.value.set(R.id,R)}function f(R,j){const K=t.value.get(R);K&&t.value.set(R,{...K,...j})}function x(R){t.value.delete(R)}function $(R){return t.value.get(R)}function N(R){return Array.from(t.value.values()).filter(j=>j.media_uuid===R)}function g(R){o.value=R}function S(R){o.value&&(o.value={...o.value,...R})}function O(){o.value=null}function k(R){i.value=R}function T(){a.value.clear(),n.value.clear(),t.value.clear(),o.value=null,i.value=!1}function F(R){a.value.clear(),R.forEach(j=>{a.value.set(j.uuid,j)})}function A(R){n.value.clear(),R.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:m,getVideo:p,setLiveStream:h,updateLiveStream:v,updateLiveStreamStats:y,removeLiveStream:E,getLiveStream:_,getLiveStreamByMedia:C,addExportJob:w,updateExportJob:f,removeExportJob:x,getExportJob:$,getExportJobsByMedia:N,setEditorState:g,updateEditorState:S,clearEditorState:O,setProcessing:k,clearAll:T,loadVideos:F,loadLiveStreams:A}});let mn=null;function xx(a){mn=a}const jo={post:async(a,n)=>{if(!mn)throw new Error("HTTP client not configured");return await mn(`/api/v1/video${a}`,{method:"POST",body:JSON.stringify(n),headers:{"Content-Type":"application/json"}})},get:async a=>{if(!mn)throw new Error("HTTP client not configured");return await mn(`/api/v1/video${a}`)},delete:async a=>{if(!mn)throw new Error("HTTP client not configured");return await mn(`/api/v1/video${a}`,{method:"DELETE"})}};function Wo(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 hi(a,n){return a instanceof Error&&a.message?a.message:n}function Ex(a){const n=kx(),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),m=e.ref(0);let p;const h=e.computed(()=>d.value?Math.floor((new Date().getTime()-d.value.getTime())/1e3):0),v=e.computed(()=>{var O;if(!((O=t.value)!=null&&O.playback_url))return null;const S=new URL(t.value.playback_url);return S.searchParams.set("live","true"),o.value&&S.searchParams.set("latency","low"),S.toString()}),y=e.computed(()=>{var S;return((S=t.value)==null?void 0:S.status)==="live"}),E=e.computed(()=>{var S;return((S=t.value)==null?void 0:S.status)==="idle"}),_=e.computed(()=>{var S;return((S=t.value)==null?void 0:S.status)==="ended"});async function C(S={}){s.value=!0,c.value=null;try{const O=await jo.post("/live",{title:r.value||S.title||"Live Stream",low_latency:S.low_latency??o.value,auto_record:S.auto_record??i.value,...S}),k=Wo(O);return t.value=k,n.setLiveStream(k),$(),k}catch(O){throw c.value=hi(O,"Failed to create stream"),O instanceof Error?O:new Error(c.value)}finally{s.value=!1}}async function w(){if(!t.value)throw new Error("No active stream");l.value=!0,c.value=null;try{const S=await jo.post(`/live/${t.value.id}/end`),O=Wo(S,t.value);return t.value=O,n.setLiveStream(O),N(),O}catch(S){throw c.value=hi(S,"Failed to end stream"),S instanceof Error?S:new Error(c.value)}finally{l.value=!1}}async function f(){if(t.value)try{const S=await jo.get(`/live/${t.value.id}`),O=Wo(S,t.value);u.value=O.viewer_count,m.value=O.peak_viewers,t.value=O;const k={status:O.status,viewer_count:O.viewer_count,peak_viewers:O.peak_viewers};O.started_at&&(k.started_at=O.started_at),O.ended_at&&(k.ended_at=O.ended_at),n.updateLiveStreamStats(O.id,k),O.status==="live"&&!d.value&&O.started_at&&(d.value=new Date(O.started_at)),O.status==="ended"&&N()}catch{}}async function x(S){try{const O=await jo.get(`/live/${S}`),k=Wo(O,t.value);return{rtmp_url:k.rtmp_url,stream_key:k.stream_key,playback_url:k.playback_url||""}}catch(O){throw c.value=hi(O,"Failed to get stream credentials"),O instanceof Error?O:new Error(c.value)}}function $(S=5e3){N(),p=window.setInterval(()=>{f()},S)}function N(){p!==void 0&&(clearInterval(p),p=void 0)}async function g(){if(!a)return;const S=n.getLiveStreamByMedia(a);S&&(t.value=S,u.value=S.viewer_count,m.value=S.peak_viewers,S.status==="live"&&($(),S.started_at&&(d.value=new Date(S.started_at))))}return a&&g(),e.onUnmounted(()=>{N()}),{stream:t,lowLatency:o,autoRecord:i,streamTitle:r,isCreating:s,isEnding:l,error:c,streamDuration:h,viewerCount:u,peakViewers:m,playbackUrl:v,isLive:y,isIdle:E,hasEnded:_,createStream:C,endStream:w,refreshStreamStatus:f,getStreamCredentials:x,startStatusPolling:$,stopStatusPolling:N}}const Vx={class:"stream-status"},Sx={class:"flex items-center justify-between"},Cx={class:"flex items-center gap-3"},Nx={key:0,class:"flex items-center"},_x={key:2,class:"text-sm text-gray-600"},Tx={key:0,class:"flex items-center gap-2"},Mx={class:"text-sm font-medium text-gray-700"},Bx={key:0,class:"text-xs text-gray-500"},Ix=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",Vx,[e.createElementVNode("div",Sx,[e.createElementVNode("div",Cx,[r.status==="live"?(e.openBlock(),e.createElementBlock("div",Nx,[...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",_x,e.toDisplayString(i.value),1)):e.createCommentVNode("",!0)]),r.viewers!==void 0?(e.openBlock(),e.createElementBlock("div",Tx,[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",Mx,e.toDisplayString(r.viewers)+" "+e.toDisplayString(r.viewers===1?"viewer":"viewers"),1),r.peakViewers>r.viewers?(e.openBlock(),e.createElementBlock("span",Bx," (Peak: "+e.toDisplayString(r.peakViewers)+") ",1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])]))}}),Fx=Me(Ix,[["__scopeId","data-v-1d09c19f"]]),Rx={class:"stream-credentials"},$x={class:"space-y-3"},Dx={class:"credential-field"},Ux={class:"flex gap-2"},Ox=["value"],Ax={class:"credential-field"},Lx={class:"flex gap-2"},zx=["value","type"],Px=["aria-label"],jx={key:0,class:"w-4 h-4 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Wx={key:1,class:"w-4 h-4 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Zx={key:0,class:"mt-2 text-sm text-green-600"},Xx=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",Rx,[u[8]||(u[8]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 mb-3"},"Stream Settings",-1)),e.createElementVNode("div",$x,[e.createElementVNode("div",Dx,[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",Ux,[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,Ox),e.createElementVNode("button",{onClick:u[0]||(u[0]=m=>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",Ax,[u[7]||(u[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 mb-1"},"Stream Key",-1)),e.createElementVNode("div",Lx,[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,zx),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",Wx,[...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",jx,[...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,Px),e.createElementVNode("button",{onClick:u[1]||(u[1]=m=>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",Zx,e.toDisplayString(r.value)+" copied to clipboard! ",1)):e.createCommentVNode("",!0)]),_:1})]))}}),Hx=Me(Xx,[["__scopeId","data-v-306d92f6"]]),Gx={class:"live-stream-manager","data-testid":"live-stream-manager"},Jx={key:0,class:"stream-setup"},Yx={class:"space-y-4"},Kx={class:"flex items-center justify-between p-4 bg-gray-50 rounded-lg"},qx={class:"flex items-center justify-between p-4 bg-gray-50 rounded-lg"},Qx=["disabled"],eE={key:0},tE={key:1,class:"flex items-center justify-center"},nE={key:1,class:"stream-active space-y-6"},oE={key:1,class:"video-preview"},aE={key:2,class:"analytics-panel"},iE={class:"grid grid-cols-2 gap-4"},rE={class:"bg-gray-50 p-3 rounded"},sE={class:"text-2xl font-bold text-gray-900"},lE={class:"bg-gray-50 p-3 rounded"},cE={class:"text-2xl font-bold text-gray-900"},dE={class:"stream-controls flex gap-3"},uE=["disabled"],mE={key:0},pE={key:1},fE={key:2,class:"mt-4 p-4 bg-red-50 border border-red-200 rounded-lg"},hE={class:"text-red-600 text-sm"},vE=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&&xx(t.httpClient);const{stream:i,lowLatency:r,autoRecord:s,streamTitle:l,isCreating:c,isEnding:d,error:u,createStream:m,endStream:p,streamDuration:h,playbackUrl:v,refreshStreamStatus:y}=Ex(t.mediaUuid),E=e.ref(!1);async function _(){var $;try{const N=await m({title:l.value,low_latency:r.value,auto_record:s.value});o("stream-created",N),($=t.onStreamCreated)==null||$.call(t,N)}catch(N){o("error",N)}}async function C(){var $;try{const N=await p();o("stream-ended",N),($=t.onStreamEnded)==null||$.call(t,N)}catch(N){o("error",N)}}function w(){i.value=null,l.value="",E.value=!1,u.value=null}async function f($,N){try{await navigator.clipboard.writeText($)}catch{}}let x;return e.onMounted(()=>{var $;(($=i.value)==null?void 0:$.status)==="live"&&(x=window.setInterval(()=>{y()},5e3))}),e.onUnmounted(()=>{x&&clearInterval(x)}),($,N)=>(e.openBlock(),e.createElementBlock("div",Gx,[e.unref(i)?(e.openBlock(),e.createElementBlock("div",nE,[e.createVNode(Fx,{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(Hx,{key:0,"rtmp-url":e.unref(i).rtmp_url,"stream-key":e.unref(i).stream_key,onCopy:f},null,8,["rtmp-url","stream-key"])):e.createCommentVNode("",!0),e.unref(v)?(e.openBlock(),e.createElementBlock("div",oE,[N[9]||(N[9]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 mb-2"},"Live Preview",-1)),e.createVNode(mc,{"playback-url":e.unref(v),"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",aE,[N[12]||(N[12]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 mb-3"},"Live Analytics",-1)),e.createElementVNode("div",iE,[e.createElementVNode("div",rE,[e.createElementVNode("div",sE,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",lE,[e.createElementVNode("div",cE,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",dE,[e.unref(i).status==="idle"?(e.openBlock(),e.createElementBlock("button",{key:0,onClick:N[3]||(N[3]=g=>E.value=!E.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(E.value?"Hide":"Show")+" Credentials ",1)):e.createCommentVNode("",!0),e.unref(i).status==="live"?(e.openBlock(),e.createElementBlock("button",{key:1,onClick:C,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",pE,"Ending...")):(e.openBlock(),e.createElementBlock("span",mE,"End Stream"))],8,uE)):e.createCommentVNode("",!0),e.unref(i).status==="ended"?(e.openBlock(),e.createElementBlock("button",{key:2,onClick:w,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",Jx,[N[8]||(N[8]=e.createElementVNode("h3",{class:"text-lg font-semibold mb-4"},"Start Live Stream",-1)),e.createElementVNode("div",Yx,[e.createElementVNode("div",Kx,[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]=g=>e.isRef(r)?r.value=g: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",qx,[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]=g=>e.isRef(s)?s.value=g: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]=g=>e.isRef(l)?l.value=g: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:_,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",tE,[...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",eE,"Create Stream"))],8,Qx)])])),e.unref(u)?(e.openBlock(),e.createElementBlock("div",fE,[e.createElementVNode("p",hE,e.toDisplayString(e.unref(u)),1)])):e.createCommentVNode("",!0)]))}}),gE=Me(vE,[["__scopeId","data-v-26291f6f"]]),yE={class:"album-tree-node"},wE=["data-album-id","draggable","aria-selected","aria-expanded"],bE={key:1,class:"album-node__chevron-placeholder"},kE={key:2,"data-testid":"media-count",class:"album-node__count"},xE={key:0,class:"album-tree-node__children",role:"group"},EE=16,VE=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*EE}px`),d=e.computed(()=>{var w;return((w=t.dragState)==null?void 0:w.draggedAlbumId)===t.album.id}),u=e.computed(()=>{var w;return((w=t.dragState)==null?void 0:w.dropTargetId)===t.album.id}),m=e.computed(()=>{var w;return(w=t.dragState)!=null&&w.draggedAlbumId?t.dragState.draggedAlbumId===t.album.id:!1}),p=e.computed(()=>{const w=["album-node"];return r.value&&w.push("album-node--selected"),s.value&&w.push("album-node--focused"),t.compact&&w.push("album-node--compact"),d.value&&w.push("album-node--dragging"),u.value&&w.push("album-node--drop-target"),m.value&&w.push("album-node--invalid-drop"),w});function h(){o("select",t.album)}function v(w){w.stopPropagation(),o("toggle-expand",t.album.id)}function y(w){t.draggable&&(w.dataTransfer&&(w.dataTransfer.setData("text/plain",t.album.id),w.dataTransfer.effectAllowed="move"),o("drag-start",t.album.id))}function E(w){t.draggable&&(w.preventDefault(),w.dataTransfer&&(w.dataTransfer.dropEffect="move"),o("drag-over",t.album.id))}function _(){o("drag-leave",t.album.id)}function C(w){t.draggable&&(w.preventDefault(),o("drop",t.album.id))}return(w,f)=>{var $;const x=e.resolveComponent("AlbumTreeNode",!0);return e.openBlock(),e.createElementBlock("div",yE,[e.createElementVNode("div",{"data-testid":"album-node","data-album-id":w.album.id,class:e.normalizeClass(p.value),style:e.normalizeStyle({paddingLeft:c.value}),draggable:w.draggable,role:"treeitem","aria-selected":r.value,"aria-expanded":l.value?i.value:void 0,onDragstart:y,onDragover:E,onDragleave:_,onDrop:C},[l.value?(e.openBlock(),e.createElementBlock("button",{key:0,"data-testid":"expand-chevron",class:"album-node__chevron",type:"button","aria-label":"Toggle expand",onClick:v},[e.createVNode(e.unref(B.IonIcon),{icon:i.value?e.unref(tu):e.unref(nu)},null,8,["icon"])])):(e.openBlock(),e.createElementBlock("span",bE)),e.createVNode(e.unref(B.IonIcon),{icon:e.unref(du),class:"album-node__icon"},null,8,["icon"]),e.createElementVNode("span",{"data-testid":"album-name",class:"album-node__name",onClick:h},e.toDisplayString(w.album.name),1),w.showMediaCount?(e.openBlock(),e.createElementBlock("span",kE,e.toDisplayString(w.album.media_count),1)):e.createCommentVNode("",!0)],46,wE),i.value&&(($=w.album.children)!=null&&$.length)?(e.openBlock(),e.createElementBlock("div",xE,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(w.album.children,N=>(e.openBlock(),e.createBlock(x,{key:N.id,album:N,depth:w.depth+1,"selected-id":w.selectedId,"expanded-ids":w.expandedIds,"focused-id":w.focusedId,draggable:w.draggable,"show-media-count":w.showMediaCount,compact:w.compact,onSelect:f[0]||(f[0]=g=>o("select",g)),onToggleExpand:f[1]||(f[1]=g=>o("toggle-expand",g))},null,8,["album","depth","selected-id","expanded-ids","focused-id","draggable","show-media-count","compact"]))),128))])):e.createCommentVNode("",!0)])}}}),SE=Me(VE,[["__scopeId","data-v-76be65a6"]]),La=va.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 f=new Map;return a.value.forEach(x=>f.set(x.id,x)),f}),s=e.computed(()=>a.value.filter(f=>f.parent_id===null));async function l(f){t.value=!0,o.value=null;try{const x=(f==null?void 0:f.parent_id)??null,$=x?`/api/v1/albums?parent_id=${x}`:"/api/v1/albums?parent_id=null",N=await fetch($);if(!N.ok)throw new Error("Failed to fetch albums");((await N.json()).data||[]).forEach(O=>{const k=a.value.findIndex(T=>T.id===O.id);k>=0?a.value[k]=O:a.value.push(O)}),x!==null&&i.value.add(x)}catch(x){o.value=x instanceof Error?x.message:"Unknown error"}finally{t.value=!1}}async function c(f){t.value=!0,o.value=null;try{const x=await fetch(`/api/v1/albums/${f}`);if(!x.ok)throw new Error("Failed to fetch album");const N=(await x.json()).data,g=a.value.findIndex(S=>S.id===N.id);return g>=0?a.value[g]=N:a.value.push(N),N}catch(x){throw o.value=x instanceof Error?x.message:"Unknown error",x}finally{t.value=!1}}async function d(f){t.value=!0,o.value=null;try{const x=await fetch(`/api/v1/albums/${f}/media`);if(!x.ok)throw new Error("Failed to fetch album media");const N=(await x.json()).data||[];return n.value.set(f,N),N}catch(x){throw o.value=x instanceof Error?x.message:"Unknown error",x}finally{t.value=!1}}async function u(f,x){t.value=!0,o.value=null;try{if(!(await fetch(`/api/v1/albums/${f}/media/reorder`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({media_ids:x})})).ok)throw new Error("Failed to reorder album media");const N=n.value.get(f)||[],g=x.map(S=>N.find(O=>O.uuid===S)).filter(S=>S!==void 0);n.value.set(f,g)}catch($){throw o.value=$ instanceof Error?$.message:"Unknown error",$}finally{t.value=!1}}async function m(f){t.value=!0,o.value=null;try{const x=await fetch("/api/v1/albums",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(f)});if(!x.ok)throw new Error("Failed to create album");const N=(await x.json()).data;return a.value.push(N),N}catch(x){throw o.value=x instanceof Error?x.message:"Unknown error",x}finally{t.value=!1}}async function p(f,x){t.value=!0,o.value=null;try{const $=await fetch(`/api/v1/albums/${f}`,{method:"PATCH",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(x)});if(!$.ok)throw new Error("Failed to update album");const g=(await $.json()).data,S=a.value.findIndex(O=>O.id===g.id);return S>=0&&(a.value[S]=g),g}catch($){throw o.value=$ instanceof Error?$.message:"Unknown error",$}finally{t.value=!1}}async function h(f){t.value=!0,o.value=null;try{if(!(await fetch(`/api/v1/albums/${f}`,{method:"DELETE",headers:{"Content-Type":"application/json"},credentials:"include"})).ok)throw new Error("Failed to delete album");const $=a.value.findIndex(N=>N.id===f);$>=0&&a.value.splice($,1),n.value.delete(f)}catch(x){throw o.value=x instanceof Error?x.message:"Unknown error",x}finally{t.value=!1}}function v(f){return a.value.filter(x=>x.parent_id===f)}function y(f){return i.value.has(f)}function E(f){return n.value.get(f)||[]}async function _(f,x){const $=a.value.findIndex(g=>g.id===f);if($<0)return;const N=a.value[$];a.value[$]={...N,parent_id:x};try{if(!(await fetch(`/api/v1/albums/${f}/move`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({parent_id:x})})).ok)throw new Error("Failed to move album")}catch(g){throw a.value[$]=N,o.value=g instanceof Error?g.message:"Unknown error",g instanceof Error?g:new Error("Failed to move album")}}function C(f){a.value=f}function w(){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:m,updateAlbum:p,deleteAlbum:h,getChildrenOf:v,childrenLoaded:y,getAlbumMedia:E,moveAlbum:_,setAlbums:C,reset:w}});function pc(){const a=La(),{albums:n,albumsById:t,rootAlbums:o,loading:i,error:r}=va.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,m){await a.moveAlbum(u,m)}return{albums:n,albumsById:t,rootAlbums:o,loading:i,error:r,fetchAlbums:s,getChildrenOf:l,childrenLoaded:c,moveAlbum:d}}function fc(a){const{childrenByParentId:n,onMove:t}=a,o=e.ref({isDragging:!1,draggedAlbumId:null,dropTargetId:null,dropPosition:null});function i(m,p){if(m===p)return!0;const h=new Set,v=[m];for(;v.length>0;){const y=v.shift();if(!y||h.has(y))continue;h.add(y);const E=n.get(y)||[];for(const _ of E){if(_===p)return!0;v.push(_)}}return!1}function r(m,p){return m===p?!1:p===null?!0:!i(m,p)}function s(m){o.value={isDragging:!0,draggedAlbumId:m,dropTargetId:null,dropPosition:null}}function l(){o.value={isDragging:!1,draggedAlbumId:null,dropTargetId:null,dropPosition:null}}function c(m){o.value.dropTargetId=m}function d(){o.value.dropTargetId=null,o.value.dropPosition=null}async function u(){const{draggedAlbumId:m,dropTargetId:p}=o.value;if(!m){l();return}if(!r(m,p)){l();return}try{await t(m,p)}finally{l()}}return{dragState:o,isDescendant:i,canDropOn:r,startDrag:s,endDrag:l,setDropTarget:c,clearDropTarget:d,executeDrop:u}}const CE={key:0,"data-testid":"loading-spinner",class:"album-tree__loading"},NE={key:1,"data-testid":"error-state",class:"album-tree__error"},_E={key:2,"data-testid":"empty-state",class:"album-tree__empty"},TE={key:3,class:"album-tree__content",role:"group"},ME=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:m,fetchAlbums:p,getChildrenOf:h,childrenLoaded:v,moveAlbum:y}=pc(),E=e.shallowRef(new Set(o.expandedIds)),_=e.ref(o.modelValue??null),C=e.ref(null),w=new Map,f=new Map;function x(M){w.clear(),f.clear();for(const z of M){w.set(z.id,z);const me=z.parent_id??null,ae=f.get(me)??[];ae.push(z.id),f.set(me,ae)}}e.watch(c,M=>{x(M)},{immediate:!0});const{dragState:$,canDropOn:N,startDrag:g,endDrag:S,setDropTarget:O,clearDropTarget:k,executeDrop:T}=fc({childrenByParentId:f,onMove:async(M,z)=>{await y(M,z),i("album-moved",{albumId:M,newParentId:z})}});e.watch(()=>o.modelValue,M=>{_.value=M??null}),e.watch(()=>o.expandedIds,M=>{E.value=new Set(M)}),e.onMounted(async()=>{await p({parent_id:null})});const F=e.computed(()=>d.value.map(M=>A(M)));function A(M){if(!E.value.has(M.id))return M;const z=h(M.id);return{...M,children:z.map(me=>A(me))}}const R=e.computed(()=>{const M=[];function z(me){var ae;for(const Y of me)M.push(Y),E.value.has(Y.id)&&((ae=Y.children)!=null&&ae.length)&&z(Y.children)}return z(F.value),M});function j(M){var ae;if(!R.value.length)return;const z=C.value?R.value.findIndex(Y=>Y.id===C.value):-1,me=z>=0?R.value[z]:null;switch(M.key){case"ArrowDown":M.preventDefault(),z<R.value.length-1?C.value=R.value[z+1].id:z===-1&&R.value.length>0&&(C.value=R.value[0].id);break;case"ArrowUp":M.preventDefault(),z>0&&(C.value=R.value[z-1].id);break;case"ArrowRight":M.preventDefault(),me&&(me.children_count>0&&!E.value.has(me.id)?K(me.id):E.value.has(me.id)&&((ae=me.children)!=null&&ae.length)&&(C.value=me.children[0].id));break;case"ArrowLeft":M.preventDefault(),me&&(E.value.has(me.id)&&me.children_count>0?K(me.id):me.parent_id&&(C.value=me.parent_id));break;case"Enter":case" ":M.preventDefault(),me&&I(me);break;case"Home":M.preventDefault(),R.value.length>0&&(C.value=R.value[0].id);break;case"End":M.preventDefault(),R.value.length>0&&(C.value=R.value[R.value.length-1].id);break}}async function K(M){E.value.has(M)?(E.value.delete(M),i("album-collapsed",M)):(v(M)||await p({parent_id:M}),E.value.add(M),i("album-expanded",M))}function I(M){_.value=M.id,i("update:modelValue",M.id),i("album-selected",M)}function D(M){o.draggable&&g(M)}function Z(M){var me;if(!o.draggable)return;const z=(me=$.value)==null?void 0:me.draggedAlbumId;z&&(O(M),N(z,M))}function W(){o.draggable&&k()}async function oe(M){o.draggable&&(O(M),await T())}function we(M){o.draggable&&(M.preventDefault(),O(null))}async function Ce(M){o.draggable&&(M.preventDefault(),O(null),await T())}function ne(){S()}return n({focusedId:C}),(M,z)=>(e.openBlock(),e.createElementBlock("div",{class:"album-tree","data-testid":"album-tree",tabindex:"0",role:"tree","aria-label":"Album tree",onKeydown:j,onDragover:we,onDrop:Ce,onDragend:ne},[e.unref(u)?(e.openBlock(),e.createElementBlock("div",CE,[e.createVNode(e.unref(B.IonSpinner),{name:"crescent"})])):e.unref(m)?(e.openBlock(),e.createElementBlock("div",NE,[e.createElementVNode("p",null,e.toDisplayString(e.unref(m)),1)])):e.unref(d).length?(e.openBlock(),e.createElementBlock("div",TE,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(F.value,me=>(e.openBlock(),e.createBlock(SE,{key:me.id,album:me,depth:0,"selected-id":_.value,"expanded-ids":E.value,"focused-id":C.value,draggable:r.value,"drag-state":r.value?e.unref($):null,"show-media-count":s.value,compact:l.value,onSelect:I,onToggleExpand:K,onDragStart:D,onDragOver:Z,onDragLeave:W,onDrop:oe},null,8,["album","selected-id","expanded-ids","focused-id","draggable","drag-state","show-media-count","compact"]))),128))])):(e.openBlock(),e.createElementBlock("div",_E,[z[0]||(z[0]=e.createElementVNode("p",null,"No albums yet",-1)),e.renderSlot(M.$slots,"empty-action",{},void 0,!0)]))],32))}}),hc=Me(ME,[["__scopeId","data-v-ae3dea7a"]]),BE=300,IE=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 v=Date.now();if(l.value===h.id&&v-s.value<BE){o("confirm",h);return}s.value=v,l.value=h.id,i.value=h.id,r.value=h}function u(){r.value&&o("confirm",r.value)}function m(){o("close")}function p(){o("close")}return(h,v)=>(e.openBlock(),e.createBlock(e.unref(B.IonModal),{"is-open":h.isOpen,class:"album-browser-modal",onDidDismiss:p},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonTitle),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(h.title),1)]),_:1}),e.createVNode(e.unref(B.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButton),{"data-testid":"cancel-button",onClick:m},{default:e.withCtx(()=>[...v[1]||(v[1]=[e.createTextVNode(" Cancel ",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),e.createVNode(e.unref(B.IonContent),{class:"album-browser-content"},{default:e.withCtx(()=>[e.createVNode(hc,{modelValue:i.value,"onUpdate:modelValue":v[0]||(v[0]=y=>i.value=y),draggable:!1,"show-media-count":!0,compact:!1,onAlbumSelected:d},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(B.IonFooter),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButton),{fill:"clear",onClick:m},{default:e.withCtx(()=>[...v[2]||(v[2]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),e.createVNode(e.unref(B.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"]))}}),vc=Me(IE,[["__scopeId","data-v-21676ec1"]]),FE={class:"ion-padding-start text-sm"},RE={class:"ion-padding-start text-sm"},$E={key:1},DE={key:1,class:"album-manager-inline rounded-lg border border-gray-200 bg-white p-4"},UE={class:"flex items-center justify-between gap-3 pb-3"},OE={class:"text-base font-semibold text-gray-900"},AE={class:"ion-padding-start text-sm"},LE={class:"ion-padding-start text-sm"},zE={class:"flex justify-between pt-2"},PE={key:1},qn=255,Qn=1e3,jE=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=La(),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),m=e.ref(!1),p=e.ref(null),h=e.ref(!1),v=e.ref(!1),y=e.computed(()=>d.value.name?c.value.name.trim()?c.value.name.length>qn?`Name must be ${qn} characters or less`:null:"Name is required":null),E=e.computed(()=>d.value.description&&c.value.description.length>Qn?`Description must be ${Qn} characters or less`:null),_=e.computed(()=>{const j=c.value.name.trim().length>0,K=c.value.name.length<=qn,I=c.value.description.length<=Qn;return j&&K&&I&&!h.value}),C=e.computed(()=>{var j;return((j=u.value)==null?void 0:j.name)??"None (Root)"}),w=e.computed(()=>p.value?p.value.children_count===0&&p.value.media_count===0:!1),f=e.computed(()=>p.value?p.value.children_count>0?"Cannot delete album with child albums. Move or delete children first.":p.value.media_count>0?"Cannot delete album with media. Remove media first.":`Are you sure you want to delete "${p.value.name}"? This action cannot be undone.`:"");e.onMounted(async()=>{t.albumId&&await x()});async function x(){if(t.albumId)try{const j=await i.fetchAlbum(t.albumId);p.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 $(){d.value.name=!0}function N(){d.value.description=!0}function g(){m.value=!0}function S(j){u.value={id:j.id,name:j.name},c.value.parent_id=j.id,m.value=!1}function O(){m.value=!1}function k(){o("close")}function T(){o("close")}async function F(){if(d.value.name=!0,d.value.description=!0,!(!_.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 K=await i.updateAlbum(t.albumId,j);o("updated",K)}else{const K=await i.createAlbum(j);o("created",K)}o("close")}catch(j){o("error",j)}finally{h.value=!1}}}function A(){w.value&&(v.value=!0)}async function R(j){var I;if((((I=j.detail)==null?void 0:I.role)??"")!=="confirm"){v.value=!1;return}if(t.albumId){h.value=!0;try{await i.deleteAlbum(t.albumId),o("deleted",t.albumId),o("close")}catch(D){o("error",D)}finally{h.value=!1,v.value=!1}}}return(j,K)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[j.mode==="modal"?(e.openBlock(),e.createBlock(e.unref(B.IonModal),{key:0,"is-open":j.isOpen,class:"album-manager-modal",onDidDismiss:T},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonTitle),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value),1)]),_:1}),e.createVNode(e.unref(B.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButton),{"data-testid":"cancel-btn",fill:"clear",onClick:k},{default:e.withCtx(()=>[...K[4]||(K[4]=[e.createTextVNode(" Cancel ",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),e.createVNode(e.unref(B.IonContent),{class:"album-manager-content"},{default:e.withCtx(()=>[e.createElementVNode("form",{"data-testid":"album-form",class:"p-4 space-y-3",onSubmit:e.withModifiers(F,["prevent"])},[e.createVNode(e.unref(B.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...K[5]||(K[5]=[e.createTextVNode("Name *",-1)])]),_:1}),e.createVNode(e.unref(B.IonInput),{modelValue:c.value.name,"onUpdate:modelValue":K[0]||(K[0]=I=>c.value.name=I),"data-testid":"name-input",maxlength:qn,onIonBlur:$},null,8,["modelValue"])]),_:1}),y.value?(e.openBlock(),e.createBlock(e.unref(B.IonText),{key:0,color:"danger","data-testid":"name-error"},{default:e.withCtx(()=>[e.createElementVNode("p",FE,e.toDisplayString(y.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(B.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...K[6]||(K[6]=[e.createTextVNode("Description",-1)])]),_:1}),e.createVNode(e.unref(B.IonTextarea),{modelValue:c.value.description,"onUpdate:modelValue":K[1]||(K[1]=I=>c.value.description=I),"data-testid":"description-input",maxlength:Qn,onIonBlur:N},null,8,["modelValue"])]),_:1}),E.value?(e.openBlock(),e.createBlock(e.unref(B.IonText),{key:1,color:"danger","data-testid":"description-error"},{default:e.withCtx(()=>[e.createElementVNode("p",RE,e.toDisplayString(E.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(B.IonItem),{button:"","data-testid":"parent-selector",onClick:g},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...K[7]||(K[7]=[e.createTextVNode("Parent Album",-1)])]),_:1}),e.createVNode(e.unref(B.IonNote),{slot:"end","data-testid":"parent-name"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(C.value),1)]),_:1})]),_:1})],32)]),_:1}),e.createVNode(e.unref(B.IonFooter),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButtons),{slot:"start"},{default:e.withCtx(()=>[r.value?(e.openBlock(),e.createBlock(e.unref(B.IonButton),{key:0,"data-testid":"delete-btn",color:"danger",disabled:!w.value,title:w.value?void 0:f.value,onClick:A},{default:e.withCtx(()=>[...K[8]||(K[8]=[e.createTextVNode(" Delete ",-1)])]),_:1},8,["disabled","title"])):e.createCommentVNode("",!0)]),_:1}),e.createVNode(e.unref(B.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonButton),{"data-testid":"submit-btn",type:"submit",color:"primary",disabled:!_.value,onClick:F},{default:e.withCtx(()=>[h.value?(e.openBlock(),e.createBlock(e.unref(B.IonSpinner),{key:0,"data-testid":"loading-spinner",name:"crescent"})):(e.openBlock(),e.createElementBlock("span",$E,e.toDisplayString(l.value),1))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1})]),_:1},8,["is-open"])):(e.openBlock(),e.createElementBlock("div",DE,[e.createElementVNode("div",UE,[e.createElementVNode("h2",OE,e.toDisplayString(s.value),1),e.createVNode(e.unref(B.IonButton),{"data-testid":"cancel-btn",fill:"clear",onClick:k},{default:e.withCtx(()=>[...K[9]||(K[9]=[e.createTextVNode(" Cancel ",-1)])]),_:1})]),e.createElementVNode("form",{"data-testid":"album-form",class:"space-y-3",onSubmit:e.withModifiers(F,["prevent"])},[e.createVNode(e.unref(B.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...K[10]||(K[10]=[e.createTextVNode("Name *",-1)])]),_:1}),e.createVNode(e.unref(B.IonInput),{modelValue:c.value.name,"onUpdate:modelValue":K[2]||(K[2]=I=>c.value.name=I),"data-testid":"name-input",maxlength:qn,onIonBlur:$},null,8,["modelValue"])]),_:1}),y.value?(e.openBlock(),e.createBlock(e.unref(B.IonText),{key:0,color:"danger","data-testid":"name-error"},{default:e.withCtx(()=>[e.createElementVNode("p",AE,e.toDisplayString(y.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(B.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...K[11]||(K[11]=[e.createTextVNode("Description",-1)])]),_:1}),e.createVNode(e.unref(B.IonTextarea),{modelValue:c.value.description,"onUpdate:modelValue":K[3]||(K[3]=I=>c.value.description=I),"data-testid":"description-input",maxlength:Qn,onIonBlur:N},null,8,["modelValue"])]),_:1}),E.value?(e.openBlock(),e.createBlock(e.unref(B.IonText),{key:1,color:"danger","data-testid":"description-error"},{default:e.withCtx(()=>[e.createElementVNode("p",LE,e.toDisplayString(E.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(B.IonItem),{button:"","data-testid":"parent-selector",onClick:g},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonLabel),null,{default:e.withCtx(()=>[...K[12]||(K[12]=[e.createTextVNode("Parent Album",-1)])]),_:1}),e.createVNode(e.unref(B.IonNote),{slot:"end","data-testid":"parent-name"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(C.value),1)]),_:1})]),_:1}),e.createElementVNode("div",zE,[e.createElementVNode("div",null,[r.value?(e.openBlock(),e.createBlock(e.unref(B.IonButton),{key:0,"data-testid":"delete-btn",color:"danger",fill:"outline",disabled:!w.value,title:w.value?void 0:f.value,onClick:A},{default:e.withCtx(()=>[...K[13]||(K[13]=[e.createTextVNode(" Delete ",-1)])]),_:1},8,["disabled","title"])):e.createCommentVNode("",!0)]),e.createVNode(e.unref(B.IonButton),{"data-testid":"submit-btn",type:"submit",color:"primary",disabled:!_.value,onClick:F},{default:e.withCtx(()=>[h.value?(e.openBlock(),e.createBlock(e.unref(B.IonSpinner),{key:0,"data-testid":"loading-spinner",name:"crescent"})):(e.openBlock(),e.createElementBlock("span",PE,e.toDisplayString(l.value),1))]),_:1},8,["disabled"])])],32)])),e.createVNode(vc,{"is-open":m.value,"selected-album-id":c.value.parent_id,title:"Select Parent Album",onClose:O,onConfirm:S},null,8,["is-open","selected-album-id"]),e.createVNode(e.unref(B.IonAlert),{"is-open":v.value,header:"Delete Album?",message:f.value,buttons:[{text:"Cancel",role:"cancel"},{text:"Delete",role:"confirm",cssClass:"alert-button-danger"}],onDidDismiss:R},null,8,["is-open","message"])],64))}}),WE=Me(jE,[["__scopeId","data-v-22083f3a"]]),ZE={class:"album-media-grid"},XE={class:"aspect-square"},HE={key:1,"data-testid":"empty-state",class:"flex flex-col items-center justify-center py-12 gap-4"},GE={class:"text-gray-500"},JE=["data-media-id","draggable","onDragstart","onDragover","onDrop","onMouseenter"],YE={key:0,"data-testid":"drop-indicator",class:"absolute inset-0 border-2 border-primary rounded-lg pointer-events-none z-30"},KE={key:1,class:"absolute top-2 right-2 z-20 opacity-0 group-hover:opacity-100 transition-opacity cursor-grab"},qE={class:"aspect-square relative"},QE=["src","alt"],e4={key:0,class:"absolute inset-0 bg-black/50 flex items-center justify-center gap-2 transition-opacity"},t4=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=La(),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),m=e.computed(()=>!u.value&&r.value.length===0),p=e.computed(()=>{const T=t.columns;return["grid","gap-4",`grid-cols-${T.mobile??2}`,`sm:grid-cols-${T.sm??3}`,`md:grid-cols-${T.md??4}`,`lg:grid-cols-${T.lg??5}`,`xl:grid-cols-${T.xl??6}`]}),h=e.computed(()=>(t.columns.md??4)*2);e.onMounted(async()=>{await v()}),e.watch(()=>t.albumId,async()=>{await v()});async function v(){s.value=!0;try{const T=await i.fetchAlbumMedia(t.albumId);r.value=T}catch{r.value=[]}finally{s.value=!1}}function y(T){return t.selectedItems.includes(T)}function E(T){o("toggle-select",T);const F=y(T.uuid)?t.selectedItems.filter(A=>A!==T.uuid):[...t.selectedItems,T.uuid];o("selection-change",F)}function _(T){if(T.conversions&&typeof T.conversions=="object"){const F=T.conversions.thumb;if(typeof F=="string")return F}return T.original_url}function C(T){l.value=T}function w(){l.value=null}function f(T){o("preview",T)}function x(T){o("edit",T)}function $(T){o("detach",T.uuid)}function N(){o("add")}function g(T,F){t.reorderable&&(c.value=F,T.dataTransfer&&(T.dataTransfer.effectAllowed="move",T.dataTransfer.setData("text/plain",String(F))))}function S(T,F){!t.reorderable||c.value===null||(T.preventDefault(),d.value=F)}function O(T,F){if(!t.reorderable||c.value===null)return;T.preventDefault();const A=c.value;if(A!==F){const R=[...r.value],[j]=R.splice(A,1);R.splice(F,0,j),r.value=R;const K=R.map(I=>I.uuid);o("reorder",K),i.reorderAlbumMedia(t.albumId,K).catch(()=>{v()})}c.value=null,d.value=null}function k(){c.value=null,d.value=null}return(T,F)=>(e.openBlock(),e.createElementBlock("div",ZE,[u.value?(e.openBlock(),e.createElementBlock("div",{key:0,"data-testid":"loading-grid",class:e.normalizeClass(p.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,A=>(e.openBlock(),e.createBlock(e.unref(B.IonCard),{key:A,class:"m-0"},{default:e.withCtx(()=>[e.createElementVNode("div",XE,[e.createVNode(e.unref(B.IonSkeletonText),{animated:"",class:"w-full h-full skeleton"})])]),_:1}))),128))],2)):m.value?(e.openBlock(),e.createElementBlock("div",HE,[e.createVNode(e.unref(B.IonIcon),{name:"images-outline",class:"text-6xl text-gray-400"}),e.createElementVNode("p",GE,e.toDisplayString(T.emptyText),1),e.createVNode(e.unref(B.IonButton),{"data-testid":"add-media-btn",onClick:N},{default:e.withCtx(()=>[...F[0]||(F[0]=[e.createTextVNode(" Add Media ",-1)])]),_:1})])):(e.openBlock(),e.createElementBlock("div",{key:2,"data-testid":"media-grid",class:e.normalizeClass(p.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,(A,R)=>(e.openBlock(),e.createElementBlock("div",{key:A.uuid,"data-media-id":A.uuid,class:e.normalizeClass(["media-item relative group",{"opacity-50":c.value===R,"ring-2 ring-primary":d.value===R&&c.value!==R}]),draggable:T.reorderable,onDragstart:j=>g(j,R),onDragover:j=>S(j,R),onDrop:j=>O(j,R),onDragend:k,onMouseenter:j=>C(A.uuid),onMouseleave:w},[d.value===R&&c.value!==R&&T.reorderable?(e.openBlock(),e.createElementBlock("div",YE)):e.createCommentVNode("",!0),T.reorderable?(e.openBlock(),e.createElementBlock("div",KE,[e.createVNode(e.unref(B.IonIcon),{name:"reorder-three-outline",class:"text-white drop-shadow-md"})])):e.createCommentVNode("",!0),T.selectionMode?(e.openBlock(),e.createBlock(e.unref(B.IonCheckbox),{key:2,"data-testid":"media-checkbox",checked:y(A.uuid),class:"absolute top-2 left-2 z-20",onIonChange:j=>E(A)},null,8,["checked","onIonChange"])):e.createCommentVNode("",!0),e.createVNode(e.unref(B.IonCard),{class:"m-0 overflow-hidden"},{default:e.withCtx(()=>[e.createElementVNode("div",qE,[e.createElementVNode("img",{src:_(A),alt:A.file_name,class:"w-full h-full object-cover"},null,8,QE),T.showActions&&l.value===A.uuid?(e.openBlock(),e.createElementBlock("div",e4,[e.createVNode(e.unref(B.IonButton),{"data-testid":"action-preview",fill:"clear",size:"small",color:"light",onClick:j=>f(A)},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{slot:"icon-only",name:"eye-outline"})]),_:1},8,["onClick"]),e.createVNode(e.unref(B.IonButton),{"data-testid":"action-edit",fill:"clear",size:"small",color:"light",onClick:j=>x(A)},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{slot:"icon-only",name:"create-outline"})]),_:1},8,["onClick"]),e.createVNode(e.unref(B.IonButton),{"data-testid":"action-detach",fill:"clear",size:"small",color:"danger",onClick:j=>$(A)},{default:e.withCtx(()=>[e.createVNode(e.unref(B.IonIcon),{slot:"icon-only",name:"close-circle-outline"})]),_:1},8,["onClick"])])):e.createCommentVNode("",!0)])]),_:2},1024)],42,JE))),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(B.IonIcon),{name:"add-circle-outline",class:"text-4xl text-gray-400"}),F[1]||(F[1]=e.createElementVNode("span",{class:"text-sm text-gray-500"},"Add Media",-1))])],2))]))}}),n4=Me(t4,[["__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=_=>{if(r.value++,l.value=null,i.value=null,t.value=!1,_!=null&&typeof _=="object"&&!(_ instanceof Blob)&&("image"in _||"state"in _||"sessionKey"in _)){const C=_;o.value=C.image??null,s.value=C.state??null}else o.value=_??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},m=async _=>{try{return t.value=!0,i.value=_,a.onSave&&await a.onSave(_),u(),_}catch(C){const w=C;throw l.value=w,a.onError&&a.onError(w),w}finally{t.value=!1}},p=()=>{a.onCancel&&a.onCancel(),u()},h=_=>{l.value=_,a.onError&&a.onError(_)},v=()=>{l.value=null},y=()=>i.value,E=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:E,open:d,close:u,handleSave:m,handleCancel:p,handleError:h,clearError:v,getEditedImage:y}}let vi=null;function o4(a){return vi||(vi=pr(a)),vi}function a4(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 fr(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 zi(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 hr(a){if(a){const t={};a.apiBaseUrl!==void 0&&(t.apiBaseUrl=a.apiBaseUrl),a.isAdmin!==void 0&&(t.isAdmin=a.isAdmin),In(t)}return{name:"mediables",async upload(t,o){const r=await kt().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 kt().attachMedia(o.modelType,String(o.modelId),[t],o.collection||"images")},async attachMany(t,o){await kt().attachMedia(o.modelType,String(o.modelId),t,o.collection||"images")},async detach(t,o){await kt().detachMedia(o.modelType,String(o.modelId),t,o.collection||"images")},async reorder(t,o){await kt().reorderMedia(t.modelType,String(t.modelId),o,t.collection||"images")},async fetchModelMedia(t){return await kt().fetchModelMedia(t.modelType,String(t.modelId),t.collection||"images")},getUrl(t,o){return kt().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 kt().deleteMedia(t)},async update(t,o){const r=await kt().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),In(o)}}}let na=null;function i4(){return na||(na=hr()),na}function r4(){na=null}const s4={apiBaseUrl:"/media-library-pro"};function Zo(){var a;return typeof document>"u"?null:((a=document.querySelector('meta[name="csrf-token"]'))==null?void 0:a.getAttribute("content"))||null}function gi(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 vr(a){const n={...s4,...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||Zo();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 p=await d.json().catch(()=>({message:"Upload failed"}));throw new Error(p.message||`HTTP ${d.status}`)}const u=await d.json(),m=gi(u);return i!=null&&i.onProgress&&i.onProgress(100),{media:m,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||Zo();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(gi)}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||Zo();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||Zo();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 gi(c)},configure(o){Object.assign(n,o)}}}let oa=null;function l4(){return oa||(oa=vr()),oa}function c4(){oa=null}function gc(a,n){switch(a){case"mediables":return hr(n);case"spatie":return vr(n);default:throw new Error(`Unknown adapter: ${a}`)}}function ha(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 yc(a){var t;const n=a.split(".");return n.length>1?`.${(t=n.pop())==null?void 0:t.toLowerCase()}`:""}function gr(a){return a.type.startsWith("image/")}async function wc(a){return gr(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 bc(a,n){const t=[];if(n.maxFileSize&&a.size>n.maxFileSize&&t.push({field:"size",message:`File exceeds maximum size of ${ha(n.maxFileSize)}`,code:"MAX_FILE_SIZE"}),n.minFileSize&&a.size<n.minFileSize&&t.push({field:"size",message:`File is smaller than minimum size of ${ha(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=yc(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(gr(a)&&(n.maxDimensions||n.minDimensions)){const o=await wc(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 yr(a={}){const n=e.ref(a.rules||{});function t(c){n.value=c}async function o(c){return bc(c,n.value)}async function i(c){const d=new Map;return await Promise.all(c.map(async u=>{const m=await o(u);d.set(u,m)})),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 d4(){return`upload-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}function u4(a){if(a.type.startsWith("image/"))return URL.createObjectURL(a)}function kc(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),m=e.ref(new Set),p=o?{rules:o}:{},{validateFile:h}=yr(p);async function v(){if(m.value.size>=t)return;const k=Array.from(u.value.entries()).find(([A,R])=>R.status==="pending"&&!m.value.has(A));if(!k){Array.from(u.value.values()).every(R=>R.status==="completed"||R.status==="error")&&u.value.size>0&&(d==null||d());return}const[T,F]=k;await y(T,F)}async function y(k,T){m.value.add(k),T.status="uploading",T.abortController=new AbortController,u.value.set(k,{...T}),r==null||r(T);try{const F={onProgress:R=>{T.progress=R,u.value.set(k,{...T}),s==null||s(T)},signal:T.abortController.signal};i&&(F.collection=i);const A=await n.upload(T.file,F);T.status="completed",T.progress=100,T.media=A.media,u.value.set(k,{...T}),l==null||l(T,A.media)}catch(F){F.name==="AbortError"?u.value.delete(k):(T.status="error",T.error=F.message,u.value.set(k,{...T}),c==null||c(T,F))}finally{m.value.delete(k),delete T.abortController,v()}}async function E(k){var A;const T=Array.from(k),F=[];for(const R of T){const j=await h(R),K=d4(),I=u4(R),D={id:K,file:R,progress:0,status:j.valid?"pending":"error"};!j.valid&&((A=j.errors[0])!=null&&A.message)&&(D.error=j.errors[0].message),I&&(D.previewUrl=I),u.value.set(K,D);const Z={media:null,clientId:K,name:R.name,order:0,upload:D,errors:j.errors};F.push(Z)}for(let R=0;R<t;R++)v();return F}function _(k){const T=u.value.get(k);T&&(T.abortController&&T.abortController.abort(),T.previewUrl&&URL.revokeObjectURL(T.previewUrl),u.value.delete(k),m.value.delete(k),v())}async function C(k){const T=u.value.get(k);!T||T.status!=="error"||(T.status="pending",T.progress=0,delete T.error,u.value.set(k,{...T}),v())}function w(){for(const[k,T]of u.value.entries())(T.status==="completed"||T.status==="error")&&(T.previewUrl&&URL.revokeObjectURL(T.previewUrl),u.value.delete(k))}function f(){for(const k of u.value.values())k.abortController&&k.abortController.abort(),k.previewUrl&&URL.revokeObjectURL(k.previewUrl);u.value.clear(),m.value.clear()}function x(k){return u.value.get(k)}const $=e.computed(()=>m.value.size>0),N=e.computed(()=>m.value.size),g=e.computed(()=>Array.from(u.value.values()).filter(k=>k.status==="pending").length),S=e.computed(()=>u.value.size===0?!0:Array.from(u.value.values()).every(k=>k.status==="completed"||k.status==="error")),O=e.computed(()=>Array.from(u.value.values()));return{uploads:u,isUploading:$,activeCount:N,pendingCount:g,isComplete:S,addFiles:E,cancelUpload:_,retryUpload:C,clearCompleted:w,clearAll:f,getUpload:x,uploadsArray:O}}function xc(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(C,w,f){n&&("dataTransfer"in C&&C.dataTransfer&&(C.dataTransfer.effectAllowed="move",C.dataTransfer.setData("text/plain",String(f))),d=C.target,d&&d.classList.add(r),l.value={isDragging:!0,dragIndex:f,dropIndex:f,draggedItem:w},c.value=!0,o==null||o(w,f))}function m(C,w){var f;if(!(!n||!l.value.isDragging)&&(C.preventDefault(),l.value.dropIndex!==w)){const x=document.querySelector(`.${s}`);x==null||x.classList.remove(s);const $=(f=C.target)==null?void 0:f.closest("[data-index]");$==null||$.classList.add(s),l.value.dropIndex=w}}function p(){if(!l.value.isDragging)return;const{dragIndex:C,dropIndex:w,draggedItem:f}=l.value;d&&d.classList.remove(r);const x=document.querySelector(`.${s}`);x==null||x.classList.remove(s),C!==null&&w!==null&&C!==w&&f&&(t==null||t({fromIndex:C,toIndex:w,item:f})),v(),i==null||i()}function h(){d&&d.classList.remove(r);const C=document.querySelector(`.${s}`);C==null||C.classList.remove(s),v(),i==null||i()}function v(){l.value={isDragging:!1,dragIndex:null,dropIndex:null,draggedItem:null},c.value=!1,d=null}function y(C,w,f){const x=[...C],[$]=x.splice(w,1);return x.splice(f,0,$),x.map((N,g)=>({...N,order:g}))}function E(C,w){return{draggable:n,"data-index":w,onDragstart:f=>u(f,C,w),onDragover:f=>m(f,w),onDragend:()=>p(),onDrop:f=>{f.preventDefault(),p()}}}function _(C){C.key==="Escape"&&l.value.isDragging&&h()}return e.onMounted(()=>{document.addEventListener("keydown",_)}),e.onUnmounted(()=>{document.removeEventListener("keydown",_),h()}),{dragState:l,isDragging:c,startDrag:u,handleDragOver:m,endDrag:p,cancelDrag:h,reorderItems:y,getDragProps:E}}function za(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:m="mediables",adapter:p,maxConcurrentUploads:h=3,onChange:v,onUpload:y,onUploadComplete:E,onUploadError:_,onRemove:C,onReorder:w,onError:f,onReadyToSubmitChange:x}=a,$={maxItems:r,maxFileSize:s,acceptedMimeTypes:l,...u},N=p||gc(m),g=e.ref([]),S=e.ref(!1),O=e.ref([]);function k(ie){if(ie.length===0)return[];const le=ie[0];return"media"in le&&"clientId"in le?ie:zi(ie)}g.value=k(n);const{acceptString:T,canAddFiles:F}=yr({rules:$}),A=kc({adapter:N,maxConcurrent:h,rules:$,collection:i,onUploadStart:ie=>{y==null||y(ie)},onUploadComplete:(ie,le)=>{const ke=g.value.findIndex(Ve=>Ve.clientId===ie.id);ke!==-1&&(g.value[ke]={...g.value[ke],media:le,name:le.name||le.file_name,upload:{...ie,status:"completed"}}),E==null||E(le)},onUploadError:(ie,le)=>{const ke=g.value.findIndex(Ve=>Ve.clientId===ie.id);ke!==-1&&(g.value[ke]={...g.value[ke],upload:{...ie,status:"error",error:le.message},errors:[{field:"upload",message:le.message,code:"UPLOAD_ERROR"}]}),_==null||_({file:ie.file,message:le.message})},onQueueComplete:()=>{v==null||v(g.value)}}),{dragState:R,getDragProps:j,reorderItems:K}=xc({enabled:c&&!d,onReorder:ie=>{g.value=K(g.value,ie.fromIndex,ie.toIndex),w==null||w(g.value),v==null||v(g.value)}}),I=e.computed(()=>A.isUploading.value),D=e.computed(()=>!A.isUploading.value&&A.pendingCount.value===0),Z=e.computed(()=>r?g.value.length>=r:!1),W=e.computed(()=>fr(g.value)),oe=e.computed(()=>g.value.length),we=e.computed(()=>r?Math.max(0,r-g.value.length):1/0);e.watch(D,ie=>{x==null||x(ie)});function Ce(ie){g.value=k(ie),v==null||v(g.value)}async function ne(ie){if(d)return;const le=Array.from(ie);if(!F(le.length,g.value.length)){const We={field:"count",message:`Maximum ${r} files allowed`,code:"MAX_ITEMS"};O.value=[We],f==null||f([We]);return}const ke=await A.addFiles(le),Ve=g.value.length,et=ke.map((We,fe)=>({...We,order:Ve+fe}));g.value=[...g.value,...et],v==null||v(g.value)}function M(ie){d||(ie.upload&&(ie.upload.status==="uploading"||ie.upload.status==="pending")&&A.cancelUpload(ie.clientId),g.value=g.value.filter(le=>le.clientId!==ie.clientId),g.value=g.value.map((le,ke)=>({...le,order:ke})),C==null||C(ie),v==null||v(g.value))}function z(ie){const le=g.value.find(ke=>ke.clientId===ie);le&&M(le)}function me(){d||(A.clearAll(),g.value=[],v==null||v(g.value))}function ae(ie,le){d||!c||(g.value=K(g.value,ie,le),w==null||w(g.value),v==null||v(g.value))}function Y(ie,le){if(d)return;const ke=g.value.findIndex(Ve=>Ve.clientId===ie);ke!==-1&&(g.value[ke]={...g.value[ke],...le},v==null||v(g.value))}function Te(ie){A.cancelUpload(ie),z(ie)}async function ue(ie){await A.retryUpload(ie)}async function se(){if(!t||!o)throw new Error("modelType and modelId are required for save()");const ie={modelType:t,modelId:o,collection:i},le=g.value.filter(ke=>ke.media&&!ke.markedForRemoval).map(ke=>ke.media.uuid);S.value=!0;try{await N.attachMany(le,ie),await N.reorder(ie,le)}finally{S.value=!1}}async function be(){if(!t||!o)throw new Error("modelType and modelId are required for load()");const ie={modelType:t,modelId:o,collection:i};S.value=!0;try{const le=await N.fetchModelMedia(ie);g.value=zi(le),v==null||v(g.value)}finally{S.value=!1}}return e.onMounted(()=>{t&&o&&n.length===0&&be().catch(console.error)}),e.onUnmounted(()=>{A.clearAll()}),{items:g,setItems:Ce,addFiles:ne,removeItem:M,removeItemById:z,clearAll:me,reorderItems:ae,updateItem:Y,cancelUpload:Te,retryUpload:ue,save:se,load:be,isLoading:S,isUploading:I,isReadyToSubmit:D,isAtMaxItems:Z,errors:O,dragState:R,getDragProps:j,adapter:N,formValues:W,acceptString:T,count:oe,remainingSlots:we}}const m4=["aria-disabled"],p4=["accept","multiple","disabled"],f4={class:"media-dropzone__content"},h4={class:"media-dropzone__title"},v4={class:"media-dropzone__subtitle"},g4=["disabled"],y4={key:0,class:"media-dropzone__helper"},w4=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: ${ha(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 m(y){var _;if(y.preventDefault(),i.value=!1,t.disabled)return;const E=(_=y.dataTransfer)==null?void 0:_.files;E&&E.length>0&&o("files",E)}function p(){var y;t.disabled||(y=r.value)==null||y.click()}function h(y){const E=y.target,_=E.files;_&&_.length>0&&o("files",_),E.value=""}function v(y){(y.key==="Enter"||y.key===" ")&&(y.preventDefault(),p())}return(y,E)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(s.value),role:"button",tabindex:"0","aria-disabled":y.disabled,"aria-label":"Upload files",onClick:p,onKeydown:v,onDragenter:c,onDragleave:d,onDragover:u,onDrop:m},[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,p4),e.createElementVNode("div",f4,[e.renderSlot(y.$slots,"icon",{},()=>[E[0]||(E[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",h4,[e.renderSlot(y.$slots,"title",{},()=>[e.createTextVNode(e.toDisplayString(y.title),1)],!0)]),e.createElementVNode("p",v4,[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(p,["stop"])},[e.renderSlot(y.$slots,"button",{},()=>[e.createTextVNode(e.toDisplayString(y.buttonText),1)],!0)],8,g4),l.value?(e.openBlock(),e.createElementBlock("p",y4,e.toDisplayString(l.value),1)):e.createCommentVNode("",!0)])],42,m4))}}),wr=Me(w4,[["__scopeId","data-v-b1366c1e"]]),b4=["data-index"],k4={key:0,class:"media-item__drag-handle","aria-label":"Drag to reorder",role:"button",tabindex:"0"},x4={class:"media-item__thumbnail"},E4=["src","alt"],V4={key:1,class:"media-item__file-icon"},S4={key:2,class:"media-item__progress-overlay"},C4={class:"media-item__progress-text"},N4={key:3,class:"media-item__processing-overlay"},_4={key:4,class:"media-item__error-overlay"},T4={class:"media-item__info"},M4=["title"],B4={key:0,class:"media-item__size"},I4={key:1,class:"media-item__error-message"},F4={class:"media-item__actions"},R4=["disabled"],$4=["disabled"],D4=["disabled"],U4=["disabled"],O4=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 w;return(w=t.item.upload)!=null&&w.previewUrl?t.item.upload.previewUrl:t.item.media?t.adapter.getThumbnailUrl(t.item.media):null}),s=e.computed(()=>{var w,f,x;return((w=t.item.upload)==null?void 0:w.status)==="uploading"||((f=t.item.upload)==null?void 0:f.status)==="pending"||((x=t.item.upload)==null?void 0:x.status)==="queued"}),l=e.computed(()=>{var w;return((w=t.item.upload)==null?void 0:w.status)==="processing"}),c=e.computed(()=>{var w;return((w=t.item.upload)==null?void 0:w.status)==="error"||t.item.errors&&t.item.errors.length>0}),d=e.computed(()=>{var w;return(w=t.item.upload)!=null&&w.error?t.item.upload.error:t.item.errors&&t.item.errors.length>0?t.item.errors[0].message:null}),u=e.computed(()=>{var w;return((w=t.item.upload)==null?void 0:w.progress)||0}),m=e.computed(()=>{var w;return t.item.name||((w=t.item.media)==null?void 0:w.file_name)||"Unknown file"}),p=e.computed(()=>{var N,g;const w=((N=t.item.media)==null?void 0:N.size)||((g=t.item.upload)==null?void 0:g.file.size);if(!w)return"";const f=1024,x=["Bytes","KB","MB","GB"],$=Math.floor(Math.log(w)/Math.log(f));return parseFloat((w/Math.pow(f,$)).toFixed(2))+" "+x[$]}),h=e.computed(()=>{var f,x;const w=((f=t.item.media)==null?void 0:f.mime_type)||((x=t.item.upload)==null?void 0:x.file.type);return w==null?void 0:w.startsWith("image/")}),v=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 E(){t.disabled||o("edit",t.item)}function _(){t.disabled||o("retry",t.item)}function C(){t.disabled||o("cancel",t.item)}return(w,f)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(v.value),"data-index":w.index,onMouseenter:f[0]||(f[0]=x=>i.value=!0),onMouseleave:f[1]||(f[1]=x=>i.value=!1)},[w.sortable&&!w.disabled?(e.openBlock(),e.createElementBlock("div",k4,[...f[2]||(f[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",x4,[r.value&&h.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:r.value,alt:m.value,class:"media-item__image"},null,8,E4)):(e.openBlock(),e.createElementBlock("div",V4,[...f[3]||(f[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",S4,[e.createElementVNode("div",{class:"media-item__progress-bar",style:e.normalizeStyle({width:`${u.value}%`})},null,4),e.createElementVNode("span",C4,e.toDisplayString(u.value)+"%",1)])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",N4,[...f[4]||(f[4]=[e.createElementVNode("div",{class:"media-item__spinner","aria-label":"Processing"},null,-1)])])):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createElementBlock("div",_4,[...f[5]||(f[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",T4,[e.createElementVNode("span",{class:"media-item__name",title:m.value},e.toDisplayString(m.value),9,M4),p.value?(e.openBlock(),e.createElementBlock("span",B4,e.toDisplayString(p.value),1)):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createElementBlock("span",I4,e.toDisplayString(d.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",F4,[s.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"media-item__action media-item__action--cancel",disabled:w.disabled,"aria-label":"Cancel upload",onClick:C},[...f[6]||(f[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,R4)):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"media-item__action media-item__action--retry",disabled:w.disabled,"aria-label":"Retry upload",onClick:_},[...f[7]||(f[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,$4)):e.createCommentVNode("",!0),w.showEdit&&w.item.media&&!s.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"media-item__action media-item__action--edit",disabled:w.disabled,"aria-label":"Edit",onClick:E},[...f[8]||(f[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,D4)):e.createCommentVNode("",!0),w.showRemove?(e.openBlock(),e.createElementBlock("button",{key:3,type:"button",class:"media-item__action media-item__action--remove",disabled:w.disabled,"aria-label":"Remove",onClick:y},[...f[9]||(f[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,U4)):e.createCommentVNode("",!0)])],42,b4))}}),br=Me(O4,[["__scopeId","data-v-ff81c9ec"]]),A4=["aria-label"],L4=["draggable","data-index","onDragstart","onDragover","onDragend","onDrop"],z4={key:0,class:"media-collection__footer"},P4={class:"media-collection__count"},j4={key:0},W4={key:0,class:"media-collection__uploading"},Z4=["name","value"],X4=["name","value"],H4=["name","value"],G4=["name","value"],J4={key:3,class:"media-collection__errors",role:"alert","aria-live":"polite"},Y4=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:I=>{o("update:modelValue",I),o("change",I)},onUpload:I=>{o("upload",I)},onUploadComplete:I=>{o("upload-complete",I)},onUploadError:I=>{o("upload-error",I)},onRemove:I=>{o("remove",I)},onReorder:I=>{o("reorder",I)},onError:I=>{o("validation-error",I)},onReadyToSubmitChange:I=>{o("is-ready-to-submit-change",I)}},{items:r,setItems:s,addFiles:l,removeItem:c,reorderItems:d,cancelUpload:u,retryUpload:m,isLoading:p,isUploading:h,isAtMaxItems:v,errors:y,dragState:E,getDragProps:_,adapter:C,formValues:w,acceptString:f,count:x,remainingSlots:$}=za(i);e.provide("mediaAdapter",C),e.provide("mediaCollection",{items:r,addFiles:l,removeItem:c,reorderItems:d}),e.watch(()=>t.modelValue,I=>{I!==r.value&&s(I)},{deep:!0});const N=e.computed(()=>t.showUploadZone&&!t.disabled&&!t.readonly&&!v.value),g=e.computed(()=>({"media-collection":!0,"media-collection--disabled":t.disabled,"media-collection--readonly":t.readonly,"media-collection--loading":p.value,"media-collection--has-items":r.value.length>0,"media-collection--dragging":E.value.isDragging}));function S(I){l(I)}function O(I){c(I)}function k(I){m(I.clientId)}function T(I){u(I.clientId)}function F(I){}function A(I,D,Z){if(!t.sortable||t.disabled)return;const W=_(D,Z);W.onDragstart&&W.onDragstart(I)}function R(I,D){if(!t.sortable||t.disabled)return;I.preventDefault();const Z=r.value[D],W=_(Z,D);W.onDragover&&W.onDragover(I)}function j(I,D){const Z=_(I,D);Z.onDragend&&Z.onDragend()}function K(I,D){I.preventDefault();const Z=r.value[D],W=_(Z,D);W.onDrop&&W.onDrop(I)}return(I,D)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(g.value)},[e.renderSlot(I.$slots,"dropzone",{addFiles:e.unref(l)},()=>[N.value?(e.openBlock(),e.createBlock(wr,{key:0,accept:e.unref(f),multiple:I.maxItems!==1,disabled:I.disabled,"max-file-size":I.maxFileSize,"max-items":e.unref($),onFiles:S},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(x)} media items`},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(r),(Z,W)=>e.renderSlot(I.$slots,"item",{key:Z.clientId,item:Z,index:W,remove:()=>O(Z)},()=>[e.createElementVNode("div",{class:e.normalizeClass(["media-collection__item-wrapper",{"media-collection__item-wrapper--drag-over":e.unref(E).dropIndex===W}]),draggable:I.sortable&&!I.disabled,"data-index":W,onDragstart:oe=>A(oe,Z,W),onDragover:oe=>R(oe,W),onDragend:oe=>j(Z,W),onDrop:oe=>K(oe,W)},[e.createVNode(br,{item:Z,adapter:e.unref(C),disabled:I.disabled,sortable:I.sortable,"show-remove":!I.readonly,"show-edit":!1,index:W,onRemove:O,onRetry:k,onCancel:T,onEdit:F},null,8,["item","adapter","disabled","sortable","show-remove","index"])],42,L4)],!0)),128))],8,A4)):N.value?e.createCommentVNode("",!0):e.renderSlot(I.$slots,"empty",{key:1},()=>[D[0]||(D[0]=e.createElementVNode("div",{class:"media-collection__empty"},[e.createElementVNode("p",null,"No files uploaded")],-1))],!0),e.renderSlot(I.$slots,"footer",{count:e.unref(x),isUploading:e.unref(h)},()=>[e.unref(r).length>0?(e.openBlock(),e.createElementBlock("div",z4,[e.createElementVNode("span",P4,[e.createTextVNode(e.toDisplayString(e.unref(x))+" "+e.toDisplayString(e.unref(x)===1?"file":"files")+" ",1),I.maxItems?(e.openBlock(),e.createElementBlock("span",j4," / "+e.toDisplayString(I.maxItems)+" max",1)):e.createCommentVNode("",!0)]),e.unref(h)?(e.openBlock(),e.createElementBlock("span",W4," Uploading... ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],!0),I.generateFormFields?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(w),(Z,W)=>(e.openBlock(),e.createElementBlock("input",{key:`${I.name}-${Z.uuid}`,type:"hidden",name:`${I.name}[${W}][uuid]`,value:Z.uuid},null,8,Z4))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(w),(Z,W)=>(e.openBlock(),e.createElementBlock("input",{key:`${I.name}-${Z.uuid}-name`,type:"hidden",name:`${I.name}[${W}][name]`,value:Z.name},null,8,X4))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(w),(Z,W)=>(e.openBlock(),e.createElementBlock("input",{key:`${I.name}-${Z.uuid}-order`,type:"hidden",name:`${I.name}[${W}][order]`,value:Z.order},null,8,H4))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(w),(Z,W)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:`${I.name}-${Z.uuid}-props`},[Z.custom_properties?(e.openBlock(),e.createElementBlock("input",{key:0,type:"hidden",name:`${I.name}[${W}][custom_properties]`,value:JSON.stringify(Z.custom_properties)},null,8,G4)):e.createCommentVNode("",!0)],64))),128))],64)):e.createCommentVNode("",!0),e.unref(y).length>0?(e.openBlock(),e.createElementBlock("div",J4,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(y),Z=>(e.openBlock(),e.createElementBlock("p",{key:Z.code||Z.message,class:"media-collection__error"},e.toDisplayString(Z.message),1))),128))])):e.createCommentVNode("",!0)],2))}}),K4=Me(Y4,[["__scopeId","data-v-10a5bfff"]]);function kr(a={}){const{initialItem:n,onChange:t,onReplace:o,onUpload:i,onUploadComplete:r,onUploadError:s,onRemove:l,onError:c,onReadyToSubmitChange:d,...u}=a,p={...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=za(p),v=e.computed(()=>h.items.value[0]||null),y=e.computed(()=>v.value!==null),E=e.computed(()=>h.formValues.value[0]||null);function _(N){N===null?h.clearAll():h.setItems([N])}async function C(N){const g=v.value;g&&h.removeItem(g),await h.addFiles([N])}function w(){v.value&&h.removeItem(v.value)}async function f(N){const g=v.value;g&&h.removeItem(g),await h.addFiles([N]);const S=h.items.value[0];S&&(o==null||o(g,S))}function x(){var N;(N=v.value)!=null&&N.upload&&h.cancelUpload(v.value.clientId)}async function $(){var N,g;((g=(N=v.value)==null?void 0:N.upload)==null?void 0:g.status)==="error"&&await h.retryUpload(v.value.clientId)}return{item:v,setItem:_,addFile:C,removeItem:w,replaceItem:f,cancelUpload:x,retryUpload:$,save:h.save,load:h.load,isLoading:h.isLoading,isUploading:h.isUploading,isReadyToSubmit:h.isReadyToSubmit,hasItem:y,errors:h.errors,adapter:h.adapter,formValue:E,acceptString:h.acceptString}}const q4=["accept","disabled"],Q4={class:"media-attachment__preview"},e3=["name","value"],t3=["name","value"],n3=["name","value"],o3=["name","value"],a3={key:4,class:"media-attachment__errors",role:"alert","aria-live":"polite"},i3=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:k=>{o("update:modelValue",k),o("change",k)},onUpload:k=>{o("upload",k)},onUploadComplete:k=>{o("upload-complete",k)},onUploadError:k=>{o("upload-error",k)},onRemove:k=>{o("remove",k)},onReplace:(k,T)=>{o("replace",T)},onError:k=>{o("validation-error",k)},onReadyToSubmitChange:k=>{o("is-ready-to-submit-change",k)}},{item:s,setItem:l,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:p,isLoading:h,hasItem:v,errors:y,adapter:E,formValue:_,acceptString:C}=kr(r);e.provide("mediaAdapter",E),e.watch(()=>t.modelValue,k=>{k!==s.value&&l(k)},{deep:!0});const w=e.computed(()=>t.showUploadZone&&!t.disabled&&!t.readonly&&!v.value),f=e.computed(()=>({"media-attachment":!0,"media-attachment--disabled":t.disabled,"media-attachment--readonly":t.readonly,"media-attachment--loading":h.value,"media-attachment--has-item":v.value}));function x(k){k.length>0&&c(k[0])}function $(){var k;(k=i.value)==null||k.click()}function N(k){const T=k.target,F=T.files;F&&F.length>0&&u(F[0]),T.value=""}function g(k){d()}function S(k){p()}function O(k){m()}return(k,T)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(f.value)},[e.createElementVNode("input",{ref_key:"fileInputRef",ref:i,type:"file",accept:e.unref(C),disabled:k.disabled,class:"media-attachment__hidden-input",onChange:N},null,40,q4),w.value?e.renderSlot(k.$slots,"dropzone",{key:0,addFile:e.unref(c)},()=>[e.createVNode(wr,{accept:e.unref(C),multiple:!1,disabled:k.disabled,"max-file-size":k.maxFileSize,onFiles:x},null,8,["accept","disabled","max-file-size"])],!0):e.unref(v)&&e.unref(s)?e.renderSlot(k.$slots,"preview",{key:1,item:e.unref(s),remove:e.unref(d),replace:$},()=>[e.createElementVNode("div",Q4,[e.createVNode(br,{item:e.unref(s),adapter:e.unref(E),disabled:k.disabled,sortable:!1,"show-remove":!k.readonly,"show-edit":!1,onRemove:g,onRetry:S,onCancel:O},null,8,["item","adapter","disabled","show-remove"]),k.showReplaceButton&&!k.readonly&&!k.disabled&&e.unref(s).media?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"media-attachment__replace-button",onClick:$},[...T[0]||(T[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(k.$slots,"empty",{key:2},()=>[T[1]||(T[1]=e.createElementVNode("div",{class:"media-attachment__empty"},[e.createElementVNode("p",null,"No file selected")],-1))],!0),k.generateFormFields&&e.unref(_)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("input",{type:"hidden",name:`${k.name}[uuid]`,value:e.unref(_).uuid},null,8,e3),e.createElementVNode("input",{type:"hidden",name:`${k.name}[name]`,value:e.unref(_).name},null,8,t3),e.createElementVNode("input",{type:"hidden",name:`${k.name}[order]`,value:e.unref(_).order},null,8,n3),e.unref(_).custom_properties?(e.openBlock(),e.createElementBlock("input",{key:0,type:"hidden",name:`${k.name}[custom_properties]`,value:JSON.stringify(e.unref(_).custom_properties)},null,8,o3)):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0),e.unref(y).length>0?(e.openBlock(),e.createElementBlock("div",a3,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(y),F=>(e.openBlock(),e.createElementBlock("p",{key:F.code||F.message,class:"media-attachment__error"},e.toDisplayString(F.message),1))),128))])):e.createCommentVNode("",!0)],2))}}),r3=Me(i3,[["__scopeId","data-v-26911174"]]),Ec={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"}},s3=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:k=>{i("update:modelValue",k),i("change",k)},onUpload:k=>{i("upload",k)},onUploadComplete:k=>{i("upload-complete",k)},onUploadError:k=>{i("upload-error",k)},onRemove:k=>{i("remove",k)},onReorder:k=>{i("reorder",k)},onError:k=>{i("validation-error",k)},onReadyToSubmitChange:k=>{i("is-ready-to-submit-change",k)}},{items:s,setItems:l,addFiles:c,removeItem:d,reorderItems:u,updateItem:m,cancelUpload:p,retryUpload:h,isLoading:v,isUploading:y,isReadyToSubmit:E,isAtMaxItems:_,errors:C,dragState:w,getDragProps:f,adapter:x,formValues:$,acceptString:N}=za(r);e.provide("mediaAdapter",x),e.provide("mediaCollection",{items:s,addFiles:c,removeItem:d,reorderItems:u}),e.watch(()=>o.modelValue,k=>{k!==s.value&&l(k)},{deep:!0});const g=e.computed(()=>({...Ec,...o.labels})),S=e.computed(()=>({accept:N.value,multiple:o.maxItems!==1,disabled:o.disabled||o.readonly||_.value})),O=e.computed(()=>({items:s.value,isLoading:v.value,isUploading:y.value,isReadyToSubmit:E.value,isAtMaxItems:_.value,errors:C.value,addFiles:c,removeItem:d,reorderItems:u,clearAll:()=>{s.value.forEach(k=>d(k))},cancelUpload:p,retryUpload:h,labels:g.value,dropzoneProps:S.value}));return n({items:s,addFiles:c,removeItem:d,reorderItems:u,updateItem:m,cancelUpload:p,retryUpload:h,isLoading:v,isUploading:y,isReadyToSubmit:E,isAtMaxItems:_,errors:C,dragState:w,getDragProps:f,adapter:x,formValues:$,acceptString:N}),(k,T)=>e.renderSlot(k.$slots,"default",e.normalizeProps(e.guardReactiveProps(O.value)))}}),l3=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:g=>{i("update:modelValue",g),i("change",g)},onUpload:g=>{i("upload",g)},onUploadComplete:g=>{i("upload-complete",g)},onUploadError:g=>{i("upload-error",g)},onRemove:g=>{i("remove",g)},onReplace:(g,S)=>{i("replace",S)},onError:g=>{i("validation-error",g)},onReadyToSubmitChange:g=>{i("is-ready-to-submit-change",g)}},{item:s,setItem:l,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:p,isLoading:h,isUploading:v,isReadyToSubmit:y,hasItem:E,errors:_,adapter:C,formValue:w,acceptString:f}=kr(r);e.provide("mediaAdapter",C),e.watch(()=>o.modelValue,g=>{g!==s.value&&l(g)},{deep:!0});const x=e.computed(()=>({...Ec,...o.labels})),$=e.computed(()=>({accept:f.value,multiple:!1,disabled:o.disabled||o.readonly||E.value})),N=e.computed(()=>({item:s.value,hasItem:E.value,isLoading:h.value,isUploading:v.value,isReadyToSubmit:y.value,errors:_.value,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:p,labels:x.value,dropzoneProps:$.value}));return n({item:s,setItem:l,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:p,isLoading:h,isUploading:v,isReadyToSubmit:y,hasItem:E,errors:_,adapter:C,formValue:w,acceptString:f}),(g,S)=>e.renderSlot(g.$slots,"default",e.normalizeProps(e.guardReactiveProps(N.value)))}}),c3=["name","value"],d3=["name","value"],u3=["name","value"],m3=["name","value"],p3=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(()=>fr(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,c3),e.createElementVNode("input",{type:"hidden",name:s(u,"name"),value:d.name},null,8,d3),e.createElementVNode("input",{type:"hidden",name:s(u,"order"),value:d.order},null,8,u3),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,m3)):e.createCommentVNode("",!0)],64))),128))}});exports.AlbumBrowser=vc;exports.AlbumManager=WE;exports.AlbumMediaGrid=n4;exports.AlbumTree=hc;exports.ArrayBufferTarget=Ji;exports.ImageEditor=Ys;exports.ImageEditorModal=Ks;exports.LiveStreamManager=gE;exports.ManagedMediaGallery=Jd;exports.MediaAttachment=r3;exports.MediaCollection=K4;exports.MediaCollectionDropzone=wr;exports.MediaCollectionItem=br;exports.MediaWorkspace=Zd;exports.ModelMediaManager=Wm;exports.Muxer=xl;exports.VideoEditor=Li;exports.VideoEditorDialog=eb;exports.VideoEditorSimple=Vb;exports.VideoExportPanel=ok;exports.VideoJobClient=mr;exports.VideoPlayer=mc;exports.VideoTimeline=Gb;exports.VideoToolsPanel=U2;exports.VideoUploader=Wk;exports._sfc_main=s3;exports._sfc_main$1=l3;exports._sfc_main$2=p3;exports.applyTemporaryMediaStoreConfig=Gs;exports.configureMediaStore=In;exports.createAdapter=gc;exports.createEmptyEditorState=Bd;exports.createImageEditor=a4;exports.createMediablesAdapter=hr;exports.createSpatieAdapter=vr;exports.deserializeEditorState=Md;exports.formatFileSize=ha;exports.fromMediaArray=zi;exports.getFileExtension=yc;exports.getImageDimensions=wc;exports.getMediablesAdapter=i4;exports.getSpatieAdapter=l4;exports.isImageFile=gr;exports.normalizeEditorState=Pi;exports.resetMediablesAdapter=r4;exports.resetSpatieAdapter=c4;exports.restoreMediaStoreConfig=Hs;exports.serializeEditorState=Zs;exports.snapshotMediaStoreConfig=Xs;exports.toFormValues=fr;exports.useAdminMediaStore=Js;exports.useAlbumDragDrop=fc;exports.useAlbumStore=La;exports.useAlbums=pc;exports.useGlobalImageEditor=o4;exports.useImageEditorModal=pr;exports.useMediaAttachment=kr;exports.useMediaCollection=za;exports.useMediaDragSort=xc;exports.useMediaStore=kt;exports.useMediaUploadQueue=kc;exports.useMediaValidation=yr;exports.validateFile=bc;
|
|
342
|
+
//# sourceMappingURL=index-wOQ7eP9R.cjs.map
|