@codingfactory/mediables-vue 2.7.0 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{PixiFrameExporter-Cf5jtmG5.js → PixiFrameExporter-BcywK0MP.js} +2 -2
- package/dist/{PixiFrameExporter-Cf5jtmG5.js.map → PixiFrameExporter-BcywK0MP.js.map} +1 -1
- package/dist/{PixiFrameExporter-aitdNkqV.cjs → PixiFrameExporter-CqKXaoCX.cjs} +2 -2
- package/dist/{PixiFrameExporter-aitdNkqV.cjs.map → PixiFrameExporter-CqKXaoCX.cjs.map} +1 -1
- package/dist/components/video/VideoEditorDialog.vue.d.ts +3 -2
- package/dist/{index-CvzKjaYw.cjs → index-DNo3Kr1t.cjs} +2 -2
- package/dist/{index-CvzKjaYw.cjs.map → index-DNo3Kr1t.cjs.map} +1 -1
- package/dist/{index-x6MmiEXL.js → index-DpkdpuMs.js} +6 -6
- package/dist/{index-x6MmiEXL.js.map → index-DpkdpuMs.js.map} +1 -1
- package/dist/mediables-vue.cjs +1 -1
- package/dist/mediables-vue.mjs +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
|
@@ -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 a=new this(n);return t.forEach(i=>a.set(i)),a}static accessor(n){const a=(this[Ll]=this[Ll]={accessors:{}}).accessors,i=this.prototype;function r(s){const l=ka(s);a[l]||(Kw(i,s),a[l]=!0)}return q.isArray(n)?n.forEach(r):r(n),this}};Ft.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);q.reduceDescriptors(Ft.prototype,({value:o},n)=>{let t=n[0].toUpperCase()+n.slice(1);return{get:()=>o,set(a){this[t]=a}}});q.freezeMethods(Ft);function ir(o,n){const t=this||Ka,a=n||t,i=Ft.from(a.headers);let r=a.data;return q.forEach(o,function(l){r=l.call(t,r,i.normalize(),n?n.status:void 0)}),i.normalize(),r}function Cd(o){return!!(o&&o.__CANCEL__)}function ma(o,n,t){Oe.call(this,o??"canceled",Oe.ERR_CANCELED,n,t),this.name="CanceledError"}q.inherits(ma,Oe,{__CANCEL__:!0});function Sd(o,n,t){const a=t.config.validateStatus;!t.status||!a||a(t.status)?o(t):n(new Oe("Request failed with status code "+t.status,[Oe.ERR_BAD_REQUEST,Oe.ERR_BAD_RESPONSE][Math.floor(t.status/100)-4],t.config,t.request,t))}function Qw(o){const n=/^([-+\w]{1,25})(:?\/\/|:)/.exec(o);return n&&n[1]||""}function e2(o,n){o=o||10;const t=new Array(o),a=new Array(o);let i=0,r=0,s;return n=n!==void 0?n:1e3,function(c){const d=Date.now(),u=a[r];s||(s=d),t[i]=c,a[i]=d;let m=r,h=0;for(;m!==i;)h+=t[m++],m=m%o;if(i=(i+1)%o,i===r&&(r=(r+1)%o),d-s<n)return;const p=u&&d-u;return p?Math.round(h*1e3/p):void 0}}function t2(o,n){let t=0,a=1e3/n,i,r;const s=(d,u=Date.now())=>{t=u,i=null,r&&(clearTimeout(r),r=null),o(...d)};return[(...d)=>{const u=Date.now(),m=u-t;m>=a?s(d,u):(i=d,r||(r=setTimeout(()=>{r=null,s(i)},a-m)))},()=>i&&s(i)]}const jo=(o,n,t=3)=>{let a=0;const i=e2(50,250);return t2(r=>{const s=r.loaded,l=r.lengthComputable?r.total:void 0,c=s-a,d=i(c),u=s<=l;a=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};o(m)},t)},Ul=(o,n)=>{const t=o!=null;return[a=>n[0]({lengthComputable:t,total:o,loaded:a}),n[1]]},Ol=o=>(...n)=>q.asap(()=>o(...n)),n2=Et.hasStandardBrowserEnv?((o,n)=>t=>(t=new URL(t,Et.origin),o.protocol===t.protocol&&o.host===t.host&&(n||o.port===t.port)))(new URL(Et.origin),Et.navigator&&/(msie|trident)/i.test(Et.navigator.userAgent)):()=>!0,a2=Et.hasStandardBrowserEnv?{write(o,n,t,a,i,r){const s=[o+"="+encodeURIComponent(n)];q.isNumber(t)&&s.push("expires="+new Date(t).toGMTString()),q.isString(a)&&s.push("path="+a),q.isString(i)&&s.push("domain="+i),r===!0&&s.push("secure"),document.cookie=s.join("; ")},read(o){const n=document.cookie.match(new RegExp("(^|;\\s*)("+o+")=([^;]*)"));return n?decodeURIComponent(n[3]):null},remove(o){this.write(o,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function o2(o){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(o)}function i2(o,n){return n?o.replace(/\/?\/$/,"")+"/"+n.replace(/^\/+/,""):o}function Vd(o,n,t){let a=!o2(n);return o&&(a||t==!1)?i2(o,n):n}const Pl=o=>o instanceof Ft?{...o}:o;function An(o,n){n=n||{};const t={};function a(d,u,m,h){return q.isPlainObject(d)&&q.isPlainObject(u)?q.merge.call({caseless:h},d,u):q.isPlainObject(u)?q.merge({},u):q.isArray(u)?u.slice():u}function i(d,u,m,h){if(q.isUndefined(u)){if(!q.isUndefined(d))return a(void 0,d,m,h)}else return a(d,u,m,h)}function r(d,u){if(!q.isUndefined(u))return a(void 0,u)}function s(d,u){if(q.isUndefined(u)){if(!q.isUndefined(d))return a(void 0,d)}else return a(void 0,u)}function l(d,u,m){if(m in n)return a(d,u);if(m in o)return a(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(Pl(d),Pl(u),m,!0)};return q.forEach(Object.keys({...o,...n}),function(u){const m=c[u]||i,h=m(o[u],n[u],u);q.isUndefined(h)&&m!==l||(t[u]=h)}),t}const Nd=o=>{const n=An({},o);let{data:t,withXSRFToken:a,xsrfHeaderName:i,xsrfCookieName:r,headers:s,auth:l}=n;n.headers=s=Ft.from(s),n.url=_d(Vd(n.baseURL,n.url,n.allowAbsoluteUrls),o.params,o.paramsSerializer),l&&s.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):"")));let c;if(q.isFormData(t)){if(Et.hasStandardBrowserEnv||Et.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(Et.hasStandardBrowserEnv&&(a&&q.isFunction(a)&&(a=a(n)),a||a!==!1&&n2(n.url))){const d=i&&r&&a2.read(r);d&&s.set(i,d)}return n},r2=typeof XMLHttpRequest<"u",s2=r2&&function(o){return new Promise(function(t,a){const i=Nd(o);let r=i.data;const s=Ft.from(i.headers).normalize();let{responseType:l,onUploadProgress:c,onDownloadProgress:d}=i,u,m,h,p,v;function g(){p&&p(),v&&v(),i.cancelToken&&i.cancelToken.unsubscribe(u),i.signal&&i.signal.removeEventListener("abort",u)}let w=new XMLHttpRequest;w.open(i.method.toUpperCase(),i.url,!0),w.timeout=i.timeout;function M(){if(!w)return;const b=Ft.from("getAllResponseHeaders"in w&&w.getAllResponseHeaders()),_={data:!l||l==="text"||l==="json"?w.responseText:w.response,status:w.status,statusText:w.statusText,headers:b,config:o,request:w};Sd(function(B){t(B),g()},function(B){a(B),g()},_),w=null}"onloadend"in w?w.onloadend=M:w.onreadystatechange=function(){!w||w.readyState!==4||w.status===0&&!(w.responseURL&&w.responseURL.indexOf("file:")===0)||setTimeout(M)},w.onabort=function(){w&&(a(new Oe("Request aborted",Oe.ECONNABORTED,o,w)),w=null)},w.onerror=function(){a(new Oe("Network Error",Oe.ERR_NETWORK,o,w)),w=null},w.ontimeout=function(){let f=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const _=i.transitional||Ed;i.timeoutErrorMessage&&(f=i.timeoutErrorMessage),a(new Oe(f,_.clarifyTimeoutError?Oe.ETIMEDOUT:Oe.ECONNABORTED,o,w)),w=null},r===void 0&&s.setContentType(null),"setRequestHeader"in w&&q.forEach(s.toJSON(),function(f,_){w.setRequestHeader(_,f)}),q.isUndefined(i.withCredentials)||(w.withCredentials=!!i.withCredentials),l&&l!=="json"&&(w.responseType=i.responseType),d&&([h,v]=jo(d,!0),w.addEventListener("progress",h)),c&&w.upload&&([m,p]=jo(c),w.upload.addEventListener("progress",m),w.upload.addEventListener("loadend",p)),(i.cancelToken||i.signal)&&(u=b=>{w&&(a(!b||b.type?new ma(null,o,w):b),w.abort(),w=null)},i.cancelToken&&i.cancelToken.subscribe(u),i.signal&&(i.signal.aborted?u():i.signal.addEventListener("abort",u)));const V=Qw(i.url);if(V&&Et.protocols.indexOf(V)===-1){a(new Oe("Unsupported protocol "+V+":",Oe.ERR_BAD_REQUEST,o));return}w.send(r||null)})},l2=(o,n)=>{const{length:t}=o=o?o.filter(Boolean):[];if(n||t){let a=new AbortController,i;const r=function(d){if(!i){i=!0,l();const u=d instanceof Error?d:this.reason;a.abort(u instanceof Oe?u:new ma(u instanceof Error?u.message:u))}};let s=n&&setTimeout(()=>{s=null,r(new Oe(`timeout ${n} of ms exceeded`,Oe.ETIMEDOUT))},n);const l=()=>{o&&(s&&clearTimeout(s),s=null,o.forEach(d=>{d.unsubscribe?d.unsubscribe(r):d.removeEventListener("abort",r)}),o=null)};o.forEach(d=>d.addEventListener("abort",r));const{signal:c}=a;return c.unsubscribe=()=>q.asap(l),c}},c2=function*(o,n){let t=o.byteLength;if(t<n){yield o;return}let a=0,i;for(;a<t;)i=a+n,yield o.slice(a,i),a=i},d2=async function*(o,n){for await(const t of u2(o))yield*c2(t,n)},u2=async function*(o){if(o[Symbol.asyncIterator]){yield*o;return}const n=o.getReader();try{for(;;){const{done:t,value:a}=await n.read();if(t)break;yield a}}finally{await n.cancel()}},zl=(o,n,t,a)=>{const i=d2(o,n);let r=0,s,l=c=>{s||(s=!0,a&&a(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 h=r+=m;t(h)}c.enqueue(new Uint8Array(u))}catch(d){throw l(d),d}},cancel(c){return l(c),i.return()}},{highWaterMark:2})},fi=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",Td=fi&&typeof ReadableStream=="function",m2=fi&&(typeof TextEncoder=="function"?(o=>n=>o.encode(n))(new TextEncoder):async o=>new Uint8Array(await new Response(o).arrayBuffer())),Md=(o,...n)=>{try{return!!o(...n)}catch{return!1}},p2=Td&&Md(()=>{let o=!1;const n=new Request(Et.origin,{body:new ReadableStream,method:"POST",get duplex(){return o=!0,"half"}}).headers.has("Content-Type");return o&&!n}),jl=64*1024,Pr=Td&&Md(()=>q.isReadableStream(new Response("").body)),Wo={stream:Pr&&(o=>o.body)};fi&&(o=>{["text","arrayBuffer","blob","formData","stream"].forEach(n=>{!Wo[n]&&(Wo[n]=q.isFunction(o[n])?t=>t[n]():(t,a)=>{throw new Oe(`Response type '${n}' is not supported`,Oe.ERR_NOT_SUPPORT,a)})})})(new Response);const f2=async o=>{if(o==null)return 0;if(q.isBlob(o))return o.size;if(q.isSpecCompliantForm(o))return(await new Request(Et.origin,{method:"POST",body:o}).arrayBuffer()).byteLength;if(q.isArrayBufferView(o)||q.isArrayBuffer(o))return o.byteLength;if(q.isURLSearchParams(o)&&(o=o+""),q.isString(o))return(await m2(o)).byteLength},h2=async(o,n)=>{const t=q.toFiniteNumber(o.getContentLength());return t??f2(n)},v2=fi&&(async o=>{let{url:n,method:t,data:a,signal:i,cancelToken:r,timeout:s,onDownloadProgress:l,onUploadProgress:c,responseType:d,headers:u,withCredentials:m="same-origin",fetchOptions:h}=Nd(o);d=d?(d+"").toLowerCase():"text";let p=l2([i,r&&r.toAbortSignal()],s),v;const g=p&&p.unsubscribe&&(()=>{p.unsubscribe()});let w;try{if(c&&p2&&t!=="get"&&t!=="head"&&(w=await h2(u,a))!==0){let _=new Request(n,{method:"POST",body:a,duplex:"half"}),D;if(q.isFormData(a)&&(D=_.headers.get("content-type"))&&u.setContentType(D),_.body){const[B,E]=Ul(w,jo(Ol(c)));a=zl(_.body,jl,B,E)}}q.isString(m)||(m=m?"include":"omit");const M="credentials"in Request.prototype;v=new Request(n,{...h,signal:p,method:t.toUpperCase(),headers:u.normalize().toJSON(),body:a,duplex:"half",credentials:M?m:void 0});let V=await fetch(v,h);const b=Pr&&(d==="stream"||d==="response");if(Pr&&(l||b&&g)){const _={};["status","statusText","headers"].forEach(S=>{_[S]=V[S]});const D=q.toFiniteNumber(V.headers.get("content-length")),[B,E]=l&&Ul(D,jo(Ol(l),!0))||[];V=new Response(zl(V.body,jl,B,()=>{E&&E(),g&&g()}),_)}d=d||"text";let f=await Wo[q.findKey(Wo,d)||"text"](V,o);return!b&&g&&g(),await new Promise((_,D)=>{Sd(_,D,{data:f,headers:Ft.from(V.headers),status:V.status,statusText:V.statusText,config:o,request:v})})}catch(M){throw g&&g(),M&&M.name==="TypeError"&&/Load failed|fetch/i.test(M.message)?Object.assign(new Oe("Network Error",Oe.ERR_NETWORK,o,v),{cause:M.cause||M}):Oe.from(M,M&&M.code,o,v)}}),zr={http:Bw,xhr:s2,fetch:v2};q.forEach(zr,(o,n)=>{if(o){try{Object.defineProperty(o,"name",{value:n})}catch{}Object.defineProperty(o,"adapterName",{value:n})}});const Wl=o=>`- ${o}`,g2=o=>q.isFunction(o)||o===null||o===!1,Bd={getAdapter:o=>{o=q.isArray(o)?o:[o];const{length:n}=o;let t,a;const i={};for(let r=0;r<n;r++){t=o[r];let s;if(a=t,!g2(t)&&(a=zr[(s=String(t)).toLowerCase()],a===void 0))throw new Oe(`Unknown adapter '${s}'`);if(a)break;i[s||"#"+r]=a}if(!a){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(Wl).join(`
|
|
340
340
|
`):" "+Wl(r[0]):"as no adapter specified";throw new Oe("There is no suitable adapter to dispatch the request "+s,"ERR_NOT_SUPPORT")}return a},adapters:zr};function rr(o){if(o.cancelToken&&o.cancelToken.throwIfRequested(),o.signal&&o.signal.aborted)throw new ma(null,o)}function Zl(o){return rr(o),o.headers=Ft.from(o.headers),o.data=ir.call(o,o.transformRequest),["post","put","patch"].indexOf(o.method)!==-1&&o.headers.setContentType("application/x-www-form-urlencoded",!1),Bd.getAdapter(o.adapter||Ka.adapter)(o).then(function(a){return rr(o),a.data=ir.call(o,o.transformResponse,a),a.headers=Ft.from(a.headers),a},function(a){return Cd(a)||(rr(o),a&&a.response&&(a.response.data=ir.call(o,o.transformResponse,a.response),a.response.headers=Ft.from(a.response.headers))),Promise.reject(a)})}const Fd="1.11.0",hi={};["object","boolean","number","function","string","symbol"].forEach((o,n)=>{hi[o]=function(a){return typeof a===o||"a"+(n<1?"n ":" ")+o}});const Hl={};hi.transitional=function(n,t,a){function i(r,s){return"[Axios v"+Fd+"] Transitional option '"+r+"'"+s+(a?". "+a:"")}return(r,s,l)=>{if(n===!1)throw new Oe(i(s," has been removed"+(t?" in "+t:"")),Oe.ERR_DEPRECATED);return t&&!Hl[s]&&(Hl[s]=!0),n?n(r,s,l):!0}};hi.spelling=function(n){return(t,a)=>!0};function y2(o,n,t){if(typeof o!="object")throw new Oe("options must be an object",Oe.ERR_BAD_OPTION_VALUE);const a=Object.keys(o);let i=a.length;for(;i-- >0;){const r=a[i],s=n[r];if(s){const l=o[r],c=l===void 0||s(l,r,o);if(c!==!0)throw new Oe("option "+r+" must be "+c,Oe.ERR_BAD_OPTION_VALUE);continue}if(t!==!0)throw new Oe("Unknown option "+r,Oe.ERR_BAD_OPTION)}}const Fo={assertOptions:y2,validators:hi},Qt=Fo.validators;let $n=class{constructor(n){this.defaults=n||{},this.interceptors={request:new Al,response:new Al}}async request(n,t){try{return await this._request(n,t)}catch(a){if(a instanceof Error){let i={};Error.captureStackTrace?Error.captureStackTrace(i):i=new Error;const r=i.stack?i.stack.replace(/^.+\n/,""):"";try{a.stack?r&&!String(a.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(a.stack+=`
|
|
341
|
-
`+r):a.stack=r}catch{}}throw a}}_request(n,t){typeof n=="string"?(t=t||{},t.url=n):t=n||{},t=An(this.defaults,t);const{transitional:a,paramsSerializer:i,headers:r}=t;a!==void 0&&Fo.assertOptions(a,{silentJSONParsing:Qt.transitional(Qt.boolean),forcedJSONParsing:Qt.transitional(Qt.boolean),clarifyTimeoutError:Qt.transitional(Qt.boolean)},!1),i!=null&&(q.isFunction(i)?t.paramsSerializer={serialize:i}:Fo.assertOptions(i,{encode:Qt.function,serialize:Qt.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),Fo.assertOptions(t,{baseUrl:Qt.spelling("baseURL"),withXsrfToken:Qt.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=r&&q.merge(r.common,r[t.method]);r&&q.forEach(["delete","get","head","post","put","patch","common"],v=>{delete r[v]}),t.headers=Ft.concat(s,r);const l=[];let c=!0;this.interceptors.request.forEach(function(g){typeof g.runWhen=="function"&&g.runWhen(t)===!1||(c=c&&g.synchronous,l.unshift(g.fulfilled,g.rejected))});const d=[];this.interceptors.response.forEach(function(g){d.push(g.fulfilled,g.rejected)});let u,m=0,h;if(!c){const v=[Zl.bind(this),void 0];for(v.unshift(...l),v.push(...d),h=v.length,u=Promise.resolve(t);m<h;)u=u.then(v[m++],v[m++]);return u}h=l.length;let p=t;for(m=0;m<h;){const v=l[m++],g=l[m++];try{p=v(p)}catch(w){g.call(this,w);break}}try{u=Zl.call(this,p)}catch(v){return Promise.reject(v)}for(m=0,h=d.length;m<h;)u=u.then(d[m++],d[m++]);return u}getUri(n){n=An(this.defaults,n);const t=Vd(n.baseURL,n.url,n.allowAbsoluteUrls);return _d(t,n.params,n.paramsSerializer)}};q.forEach(["delete","get","head","options"],function(n){$n.prototype[n]=function(t,a){return this.request(An(a||{},{method:n,url:t,data:(a||{}).data}))}});q.forEach(["post","put","patch"],function(n){function t(a){return function(r,s,l){return this.request(An(l||{},{method:n,headers:a?{"Content-Type":"multipart/form-data"}:{},url:r,data:s}))}}$n.prototype[n]=t(),$n.prototype[n+"Form"]=t(!0)});let b2=class Id{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 a=this;this.promise.then(i=>{if(!a._listeners)return;let r=a._listeners.length;for(;r-- >0;)a._listeners[r](i);a._listeners=null}),this.promise.then=i=>{let r;const s=new Promise(l=>{a.subscribe(l),r=l}).then(i);return s.cancel=function(){a.unsubscribe(r)},s},n(function(r,s,l){a.reason||(a.reason=new ma(r,s,l),t(a.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=a=>{n.abort(a)};return this.subscribe(t),n.signal.unsubscribe=()=>this.unsubscribe(t),n.signal}static source(){let n;return{token:new Id(function(i){n=i}),cancel:n}}};function w2(o){return function(t){return o.apply(null,t)}}function k2(o){return q.isObject(o)&&o.isAxiosError===!0}const jr={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(jr).forEach(([o,n])=>{jr[n]=o});function $d(o){const n=new $n(o),t=dd($n.prototype.request,n);return q.extend(t,$n.prototype,n,{allOwnKeys:!0}),q.extend(t,n,null,{allOwnKeys:!0}),t.create=function(i){return $d(An(o,i))},t}const it=$d(Ka);it.Axios=$n;it.CanceledError=ma;it.CancelToken=b2;it.isCancel=Cd;it.VERSION=Fd;it.toFormData=pi;it.AxiosError=Oe;it.Cancel=it.CanceledError;it.all=function(n){return Promise.all(n)};it.spread=w2;it.isAxiosError=k2;it.mergeConfig=An;it.AxiosHeaders=Ft;it.formToJSON=o=>xd(q.isHTMLForm(o)?new FormData(o):o);it.getAdapter=Bd.getAdapter;it.HttpStatusCode=jr;it.default=it;const{Axios:aT,AxiosError:oT,CanceledError:iT,isCancel:rT,CancelToken:sT,VERSION:lT,all:cT,Cancel:dT,isAxiosError:uT,spread:mT,toFormData:pT,AxiosHeaders:fT,HttpStatusCode:hT,formToJSON:vT,getAdapter:gT,mergeConfig:yT}=it;class vi{constructor(n="/api/v1"){this.eventSource=null,this.progressCallbacks=new Map,this.api=it.create({baseURL:n,headers:{"Content-Type":"application/json",Accept:"application/json"}}),this.api.interceptors.request.use(t=>{const a=this.getAuthToken();return a&&(t.headers.Authorization=`Bearer ${a}`),t}),this.api.interceptors.response.use(t=>t,t=>{var a;return(a=t.response)==null||a.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,a=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)}},a)})}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",a=>{const i=JSON.parse(a.data),r=this.progressCallbacks.get(i.jobId);r&&r(i.progress)}),this.eventSource.addEventListener("complete",a=>{const i=JSON.parse(a.data),r=this.progressCallbacks.get(i.jobId);r&&(r(100),this.unsubscribeFromProgress(i.jobId))}),this.eventSource.addEventListener("error",a=>{this.progressCallbacks.forEach((i,r)=>{this.pollProgress(r)})})}catch{}}async pollProgress(n){const t=setInterval(async()=>{try{const a=await this.getJob(n),i=this.progressCallbacks.get(n);i&&i(a.progress),(a.status==="completed"||a.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 a of t){const[i,r]=a.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 a=await this.api.get(`/video/jobs/${n}/thumbnail`,{params:{time:t},responseType:"blob"});return URL.createObjectURL(a.data)}catch(a){throw a}}normalizeJob(n){const t=n,a={...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!==""&&(a.output_media_id=i);const r=t.error_message??t.errorMessage;typeof r=="string"&&r!==""&&(a.error_message=r);const s=t.started_at??t.startedAt;typeof s=="string"&&s!==""&&(a.started_at=s);const l=t.completed_at??t.completedAt;return typeof l=="string"&&l!==""&&(a.completed_at=l),a}}new vi;const _2={key:0,class:"mobile-layout"},E2={class:"mobile-toolbar"},x2={class:"mobile-toolbar-left"},C2=["aria-label"],S2={class:"mobile-toolbar-right"},V2=["disabled"],N2=["disabled"],T2={class:"preview-section"},M2={key:0,class:"mobile-export-overlay"},B2={class:"mobile-export-progress"},F2={class:"mobile-export-bar"},I2={class:"mobile-timeline-zoom"},$2={class:"mobile-edit-strip"},R2={class:"mobile-selection-summary"},D2={class:"mobile-selection-title"},A2={class:"mobile-selection-meta"},L2={class:"mobile-readout-row"},U2=["disabled"],O2={class:"mobile-readout-grid"},P2={class:"mobile-readout-chip","data-testid":"mobile-playhead-readout"},z2={class:"mobile-readout-chip","data-testid":"mobile-clip-in-readout"},j2={class:"mobile-readout-chip","data-testid":"mobile-clip-out-readout"},W2={class:"mobile-readout-chip","data-testid":"mobile-duration-readout"},Z2=["disabled"],H2={class:"mobile-speed-strip"},X2={class:"mobile-speed-chips"},G2=["data-testid","onClick"],J2={class:"mobile-edit-actions"},Y2=["disabled"],q2=["disabled"],K2=["disabled"],Q2=["disabled"],ek=["disabled"],tk={class:"mobile-action-sheet-header"},nk={class:"mobile-action-sheet-title"},ak={class:"mobile-action-sheet-subtitle"},ok={class:"mobile-action-sheet-actions"},ik=["disabled"],rk=["disabled"],sk=["disabled"],lk=["disabled"],ck=["disabled"],dk={key:1,class:"desktop-layout"},uk={class:"desktop-main-row"},mk={class:"preview-panel"},pk={class:"fit-toggle"},fk={class:"editor-content"},hk={class:"editor-tabs"},vk={class:"tab-header"},gk=["onClick"],yk={class:"tab-content-area"},bk={class:"filter-controls"},wk={class:"text-controls"},kk={class:"transition-controls"},_k={class:"audio-controls"},Ek={class:"adjustments-controls"},xk={key:1,class:"no-filter-selected"},Ck={class:"export-controls"},Sk={key:0,"data-testid":"video-export-status-completed"},Vk={key:1,"data-testid":"video-export-status-message",class:"export-status-message"},Nk={class:"desktop-timeline-row"},Tk={class:"timeline-zoom"},Mk=["value"],Bk={class:"zoom-readout"},Fk={key:0,class:"dev-editor-controls","data-testid":"video-editor-dev-controls"},Ik={class:"dev-editor-row"},$k={class:"dev-editor-field"},Rk={class:"dev-editor-field"},Dk=["disabled"],Ak=["disabled"],Lk=["disabled"],Uk={class:"dev-editor-row"},Ok={class:"dev-editor-field dev-editor-field--wide"},Pk=["value"],zk=["disabled"],jk=["disabled"],Wk=["disabled"],Zk=["disabled"],Hk=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(o,{expose:n,emit:t}){const a=o,i=t,r=e.computed(()=>{if(!a.media||typeof a.media!="object")return;const y=a.media.uuid??a.media.id;return typeof y=="string"&&y.trim()!==""?y.trim():void 0}),s=e.computed(()=>{const y=typeof a.mediaUuid=="string"?a.mediaUuid.trim():"";return y!==""?y: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 y=a.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},x=a.featureFlags;return x?{filters:typeof x.filters=="boolean"?x.filters:y.filters,adjustments:typeof x.adjustments=="boolean"?x.adjustments:y.adjustments,text:typeof x.text=="boolean"?x.text:y.text,transitions:typeof x.transitions=="boolean"?x.transitions:y.transitions,audio:typeof x.audio=="boolean"?x.audio:y.audio,export:typeof x.export=="boolean"?x.export:y.export}:y}),m=e.computed(()=>l.value?c.value:d.value),h=e.computed(()=>m.value==="filters"||w.value),p=e.computed(()=>m.value!=="filters"&&!w.value),v=e.ref(null),g=e.ref(null),w=e.ref(!1),M=e.computed(()=>l.value?v.value:g.value);function V(y){return y==="contain"||y==="cover"||y==="none"}function b(y){if(!(y!=null&&y.metadata))return null;const x=y.metadata.fit_mode;return V(x)?x:null}const f=e.shallowRef(null),_=e.ref(null),D=e.ref(b(a.initialRecipe)??"contain"),B=e.ref(null),E=e.ref(null),S=e.ref(null),P=e.ref(!1),C=new Map,A=e.ref([]),R=e.ref([]),W=e.ref([]),O=e.ref([]),I=e.ref(1),F=()=>{l.value=window.innerWidth<768},k=[{id:"filters",label:"Filters",icon:yn},{id:"adjustments",label:"Adjust",icon:fp},{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:aa}],$=[{id:"filters",label:"Filters"},{id:"adjustments",label:"Adjustments"},{id:"text",label:"Text"},{id:"transitions",label:"Transitions"},{id:"audio",label:"Audio"},{id:"export",label:"Export"}],j=e.computed(()=>k.filter(y=>u.value[y.id])),Z=e.computed(()=>$.filter(y=>u.value[y.id])),K=e.computed(()=>{var y,x;return((y=Z.value[0])==null?void 0:y.id)??((x=j.value[0])==null?void 0:x.id)??"filters"});e.watch(u,y=>{y[c.value]||(c.value=K.value),y[d.value]||(d.value=K.value)},{immediate:!0,deep:!0}),e.watch(K,y=>{u.value[c.value]||(c.value=y),u.value[d.value]||(d.value=y)},{immediate:!0}),e.watch(u,y=>{y.export||(c.value==="export"&&(c.value=K.value),d.value==="export"&&(d.value=K.value))},{immediate:!0,deep:!0});const ge=e.computed(()=>typeof window>"u"?!1:window.__MEDIABLES_EDITOR_DEV__===!0),we=Ec(),{currentFrame:ne,playheadPosition:N,timelineClips:L,totalDuration:te,hasChanges:ae,isPlaying:ie,selectedClip:he,zoomLevel:se,playbackSpeed:fe,handleTrim:xe,handleSplit:le,handleClipSelect:de,splitAtPlayhead:Ve,deleteSelectedClip:Be,duplicateSelectedClip:dt,setZoomLevel:Ke,moveClip:bt,setFilters:et,setTextOverlays:at,setAudioTracks:wt,saveDraft:Vt,clearHasChanges:rt,resetChanges:vt,generateRecipe:ue,zoomIn:Se,zoomOut:Te,fitToWindow:je,togglePlayback:T,setPlaying:z,seekTo:G,frameForward:ee,frameBackward:pe,skipToStart:be,skipToEnd:$e,setPlaybackSpeed:Ae,updateSourceDuration:Re,undo:Pe,redo:Je,canUndo:tt,canRedo:xt}=od(s.value,a.initialRecipe,a.media),{videoCompatibleFilters:Ht,activeFilters:nt,selectedFilter:Xt,previewFilter:jn,previewFilterEffect:pa,applyFilter:Wn,updateFilterParams:Qa,removeFilter:fa,clearAllFilters:Zn,setActiveFilters:ha}=sd();function wn(y){var X,oe;const x=((X=he.value)==null?void 0:X.id)??((oe=L.value[0])==null?void 0:oe.id);x&&(P.value=!0,typeof y=="object"&&y.id?Wn(y.id):typeof y=="string"&&Wn(y),et(nt.value),f.value?f.value.setClipFilters(x,nt.value):C.set(x,[...nt.value]),de(x),P.value=!1,Yt())}function wi(){var x,X;const y=((x=he.value)==null?void 0:x.id)??((X=L.value[0])==null?void 0:X.id);y&&de(y)}function ki(y){const x=nt.value.find(X=>X.filterId===y);x&&fa(x.id)}const Hn=e.computed(()=>Ht.value.map(x=>{var oe;const X=[];if(x.controls&&x.controls.length>0)for(const ve of x.controls){const ce=ve.type;if(ce==="button"||ce==="text"||ce==="range")continue;const me={id:ve.property||ve.id,label:ve.label||ve.id,type:ce,default:ve.default??(ce==="toggle"?!1:ce==="color"?"#ffffff":0)};ce==="slider"&&(me.min=ve.min??0,me.max=ve.max??1,me.step=ve.step??.01),ce==="select"&&ve.options&&(me.options=ve.options),X.push(me)}else if(x.paramRanges){const ve=Object.entries(x.paramRanges);for(const[ce,me]of ve){const He=ce.replace(/[-_]/g," ").replace(/\b\w/g,qt=>qt.toUpperCase()),Ct=(oe=x.defaultParams)==null?void 0:oe[ce],sn=(me.min+me.max)/2;X.push({id:ce,label:He,min:me.min,max:me.max,step:me.step??.01,default:typeof Ct=="number"?Ct:sn})}}return{id:x.id,name:x.name,category:x.category,params:X}})),Y=e.ref("0.00"),Q=e.ref("0.00"),ye=e.ref("");e.watch(Hn,y=>{if(y.length===0){ye.value="";return}y.some(X=>X.id===ye.value)||(ye.value=y[0].id)},{immediate:!0});const Ee=e.ref(!1),Ne=e.ref(0),Ue=e.ref(!1),Le=e.ref(null),mt=e.ref(null);let kn=null,Nt=!1,Pt=null;const _i=e.computed(()=>{const y=new Map;return nt.value.forEach(x=>y.set(x.filterId,x)),y}),cu=e.computed(()=>{var y,x;return ne.value?ne.value:((y=a.media)==null?void 0:y.thumbnail_url)||((x=a.media)==null?void 0:x.url)}),Gt=e.ref("");e.watch(()=>{var y,x;return{file:(y=a.media)==null?void 0:y.file,url:(x=a.media)==null?void 0:x.url}},(y,x,X)=>{var ve,ce;const oe=Gt.value;X(()=>{oe&&oe.startsWith("blob:")&&URL.revokeObjectURL(oe)}),(ve=a.media)!=null&&ve.file?Gt.value=URL.createObjectURL(a.media.file):(ce=a.media)!=null&&ce.url?Gt.value=a.media.url:Gt.value=""},{immediate:!0}),e.onUnmounted(()=>{Gt.value&&Gt.value.startsWith("blob:")&&URL.revokeObjectURL(Gt.value)});const Ei=e.computed(()=>Gt.value),Vs=e.computed(()=>{if(!a.media)return null;const{file:y,...x}=a.media;return{...x,url:Gt.value}}),Ns=e.computed(()=>{var x;const y=(x=a.media)==null?void 0:x.url;return!!(y&&/^https?:/i.test(y))}),Ts=e.computed(()=>nt.value),Ms=e.computed(()=>N.value),xi=e.computed(()=>!!he.value&&N.value>0),Ci=e.computed(()=>!!he.value&&L.value.length>1),Bs=e.computed(()=>!!he.value),un=e.ref(!0),du=[.5,1,1.5,2],eo=e.computed(()=>{const y=new Set([0,Lt.value]);for(const x of L.value)y.add(x.timelineStart),y.add(x.timelineEnd);return Array.from(y).filter(x=>Number.isFinite(x)).sort((x,X)=>x-X)}),uu=e.computed(()=>eo.value.some(y=>y<N.value-.001)),mu=e.computed(()=>eo.value.some(y=>y>N.value+.001)),to=e.ref(!1),no=e.ref(null);function mn(y){if(!Number.isFinite(y)||y<0)return"0:00";const x=Math.floor(y/60),X=Math.floor(y%60);return`${x}:${X.toString().padStart(2,"0")}`}const pu=e.computed(()=>{var X;const y=he.value??L.value[0];if(!y)return"No clip selected";const x=(X=y.label)==null?void 0:X.trim();return x&&x.length>0?x:`Clip ${y.id.slice(-4)}`}),fu=e.computed(()=>{const y=he.value??L.value[0];if(!y)return"Tap a clip to start editing";const x=Math.max(0,y.timelineEnd-y.timelineStart);return`${mn(y.timelineStart)} - ${mn(y.timelineEnd)} • ${x.toFixed(1)}s`});function Fs(y){return!Number.isFinite(y)||y<0?"0.0s":y<60?`${y.toFixed(1)}s`:mn(y)}const hu=e.computed(()=>mn(N.value)),vu=e.computed(()=>{const y=he.value??L.value[0];return y?mn(y.sourceIn):"0:00"}),gu=e.computed(()=>{const y=he.value??L.value[0];return y?mn(y.sourceOut):"0:00"}),yu=e.computed(()=>{const y=he.value??L.value[0];return y?Fs(y.timelineEnd-y.timelineStart):"0.0s"}),Si=e.computed(()=>no.value===null?he.value??L.value[0]??null:L.value.find(y=>y.id===no.value)??null),bu=e.computed(()=>{var X;const y=Si.value;if(!y)return"Clip actions";const x=(X=y.label)==null?void 0:X.trim();return x&&x.length>0?x:`Clip ${y.id.slice(-4)}`}),wu=e.computed(()=>{const y=Si.value;return y?`${mn(y.timelineStart)} - ${mn(y.timelineEnd)} • ${Fs(y.timelineEnd-y.timelineStart)}`:"Choose an action"}),Vi=e.ref(0),Lt=e.computed(()=>{try{const y=te.value??te;return y&&typeof y=="number"&&y>0?y:Vi.value}catch{return Vi.value}}),Xn=e.ref(),Ni=e.ref(),Ti=e.ref(),Mi=e.ref(),ao=e.ref(0),_n=e.ref(!1);let Tt=null,Jt=null;e.watch(Lt,y=>{var X;if(_n.value||!y||y<=0)return;const x=ao.value||((X=Xn.value)==null?void 0:X.clientWidth)||0;x>0&&(_n.value=!0,je(x))}),e.watch(ao,y=>{if(_n.value||!y||y<=0)return;Lt.value>0&&(_n.value=!0,je(y))}),e.watch(l,y=>{y||En()}),e.watch(()=>{var y;return(y=Si.value)==null?void 0:y.id},y=>{to.value&&!y&&En()});function Gn(y){return Number.isFinite(y)?y.toFixed(2):"0.00"}function Is(y){const x=Number(y);return Number.isFinite(x)?x:null}function ku(y){y&&(Y.value=Gn(y.sourceIn),Q.value=Gn(y.sourceOut))}e.watch(()=>{var y,x,X;return[(y=he.value)==null?void 0:y.id,(x=he.value)==null?void 0:x.sourceIn,(X=he.value)==null?void 0:X.sourceOut]},()=>{ku(he.value)},{immediate:!0});function $s(y){const x=he.value;if(!x)return;const X=1/30,oe=x.sourceMinIn??0,ve=x.sourceMaxOut??Lt.value,ce=x.sourceIn+(N.value-x.timelineStart);if(y==="start"){const He=Math.max(oe,Math.min(ce,x.sourceOut-X));Y.value=Gn(He);return}const me=Math.max(x.sourceIn+X,Math.min(ce,ve));Q.value=Gn(me)}function _u(){const y=he.value;if(!y)return;const x=Is(Y.value),X=Is(Q.value);if(x===null||X===null)return;const oe=1/30,ve=y.sourceMinIn??0,ce=y.sourceMaxOut??Lt.value,me=Math.max(ve,Math.min(x,ce-oe)),He=Math.max(me+oe,Math.min(X,ce));xe(y.id,"start",me),xe(y.id,"end",He),Y.value=Gn(me),Q.value=Gn(He),he.value&&G(he.value.timelineStart)}function Eu(){ye.value.trim()!==""&&wn(ye.value)}function xu(){var y;Zn(),et(nt.value),(y=he.value)!=null&&y.id&&(f.value?f.value.setClipFilters(he.value.id,nt.value):C.set(he.value.id,[...nt.value])),Yt()}function Rs(y,x,X){var ve,ce;const oe=nt.value.find(me=>me.filterId===y);oe?(oe.params={...oe.params,[x]:X},et(nt.value),f.value&&((ve=he.value)!=null&&ve.id)?f.value.setClipFilters(he.value.id,nt.value):(ce=he.value)!=null&&ce.id&&C.set(he.value.id,[...nt.value]),Yt(),wi()):jn.value&&jn.value.filterId===y&&(jn.value.params={...jn.value.params||{},[x]:X})}function Ds(y){G(y)}function As(y){!y||!Number.isFinite(y.timestamp)||G(y.timestamp)}function Ls(y){z(y)}function oo(y){!Number.isFinite(y)||y<=0||(Vi.value=y,Re(y))}function En(){to.value=!1,no.value=null}function Cu(y){l.value&&(no.value=y,to.value=!0)}function Bi(y){var oe,ve,ce,me;const x=((oe=he.value)==null?void 0:oe.id)??((ve=L.value[0])==null?void 0:ve.id)??null;de(y),(((ce=he.value)==null?void 0:ce.id)??((me=L.value[0])==null?void 0:me.id)??null)!==x&&we.selection()}function Us(y){Bi(y),Cu(y)}function Os(y){y&&we.selection()}function Ps(){un.value=!un.value,we.selection()}function zs(){const y=eo.value.filter(X=>X<N.value-.001),x=y.length>0?y[y.length-1]:0;G(x)}function js(){const y=eo.value.find(x=>x>N.value+.001);G(y??Lt.value)}function Fi(){Pe()}function Ii(){Je()}function io(){const y=L.value.length;Ve(),L.value.length>y&&(we.success(),En())}function Ws(y){const x=L.value.length;le(y),L.value.length>x&&we.success()}function $i(){const y=L.value.length;dt(),L.value.length>y&&(we.selection(),En())}function Ri(){const y=L.value.length;Be(),L.value.length<y&&(we.error(),En())}function Su(y){const x=fe.value;Ae(y),fe.value!==x&&we.selection()}function Vu(y){return y instanceof HTMLElement?y.closest('input, textarea, select, button, [contenteditable="true"]')!==null:!1}function Zs(y){if(l.value||Vu(y.target))return;const x=y.key.toLowerCase(),X=y.metaKey||y.ctrlKey;if(y.code==="Space"){y.preventDefault(),T();return}if(!X&&x==="s"){y.preventDefault(),io();return}if(x==="arrowleft"){y.preventDefault(),pe();return}if(x==="arrowright"){y.preventDefault(),ee();return}if(x==="home"){y.preventDefault(),be();return}if(x==="end"){y.preventDefault(),$e();return}if(!X&&x==="["){y.preventDefault(),zs();return}if(!X&&x==="]"){y.preventDefault(),js();return}if(X&&x==="z"&&y.shiftKey){y.preventDefault(),Ii();return}X&&x==="z"&&(y.preventDefault(),Fi())}function Nu(){var x;const y=ao.value||((x=Xn.value)==null?void 0:x.clientWidth)||800;je(y)}function Di(y){_n.value=!0,Ke(y)}function Tu(){_n.value=!0,Se()}function Mu(){_n.value=!0,Te()}function Bu(y){const x=y.target,X=Number(x.value);Di(X)}function Hs(y){const x=Math.min(600,Math.max(10,se.value+y));Di(x)}function Ai(){Jt==null||Jt(),Jt=null;const y=Ti.value,x=Mi.value;if(!l.value||!y||!x)return;const X=()=>{Hs(-20)},oe=()=>{Hs(20)};y.addEventListener("click",X),x.addEventListener("click",oe),Jt=()=>{y.removeEventListener("click",X),x.removeEventListener("click",oe)}}e.watch([l,Ti,Mi],()=>{Ai()},{flush:"post"});function Xs(y){var x;f.value=y,(x=f.value)!=null&&x.composition&&(B.value=new ld(f.value.composition),E.value=new La(f.value.composition),S.value=new cd(f.value.composition));try{C.size&&(C.forEach((X,oe)=>{f.value.setClipFilters(oe,X)}),C.clear(),f.value.composition.computeFrame())}catch{}}function Fu(y){y!=null&&y.id&&pa(y.id)}function Iu(y){Qa(y),Yt()}async function $u(y){if(!B.value)return;const x=await B.value.addTextOverlay(y);A.value.push({id:x,...y})}async function Ru(y,x){if(!B.value)return;await B.value.updateTextOverlay(y,x);const X=A.value.findIndex(oe=>oe.id===y);X!==-1&&(A.value[X]={...A.value[X],...x})}async function Du(y){B.value&&(await B.value.removeTextOverlay(y),A.value=A.value.filter(x=>x.id!==y))}async function Au(y){if(!E.value||O.value.length<2)return;const[x,X]=O.value,oe=await E.value.applyTransition(x,X,y);R.value.push({id:oe,...y,name:y.type})}function Lu(y){if(!E.value)return;const x=R.value[y];x&&(E.value.removeTransition(x.id),R.value.splice(y,1))}function Uu(y){}async function Ou(y){if(!S.value)return;const x=await S.value.addAudioTrack(y);W.value.push({id:x,...y})}async function Pu(y,x){if(!S.value)return;const X=W.value.findIndex(oe=>oe.id===y);X!==-1&&(W.value[X]={...W.value[X],...x})}async function zu(y){S.value&&(await S.value.removeAudioTrack(y),W.value=W.value.filter(x=>x.id!==y))}async function ju(y,x){if(!S.value)return;await S.value.updateVolume(y,x);const X=W.value.find(oe=>oe.id===y);X&&(X.volume=x)}async function Wu(y,x){if(!S.value)return;await S.value.muteTrack(y,x);const X=W.value.find(oe=>oe.id===y);X&&(X.muted=x)}function Zu(y){S.value&&(S.value.setMasterVolume(y),I.value=y)}function Hu(y){i("thumbnail-selected",y)}function pn(){kn!==null&&(clearInterval(kn),kn=null)}function Xu(y,x){return x?{...y,output:{...y.output,format:x.format,quality:x.quality}}:y}function va(y){var x;return y.metadata||(y.metadata={created_at:new Date().toISOString(),editor_version:"2.0.0"}),y.metadata.fit_mode=D.value,(x=a.media)!=null&&x.url&&/^https?:/i.test(a.media.url)?y.metadata.source_url=a.media.url:delete y.metadata.source_url,y}function ot(y,x,X){return Math.min(X,Math.max(x,y))}function Li(y,x){if(typeof y=="number"&&Number.isFinite(y))return y;if(typeof y=="string"){const X=Number(y);if(Number.isFinite(X))return X}return x}function kt(y,x,X){for(const oe of x)if(oe in y)return Li(y[oe],X);return X}function Gu(y){const x=typeof y.params=="object"&&y.params!==null?y.params:{};switch(y.filterId.trim().toLowerCase()){case"brightness":return[{type:"brightness",value:ot(kt(x,["value","brightness"],0),-1,1)}];case"contrast":return[{type:"contrast",value:ot(kt(x,["value","contrast"],1),.1,3)}];case"saturation":return[{type:"saturation",value:ot(kt(x,["value","saturation"],1),0,3)}];case"blur":case"gaussian-blur":case"kawase-blur":case"radial-blur":return[{type:"blur",value:ot(kt(x,["value","blur","radius"],0),0,25)}];case"sharpen":return[{type:"sharpen",value:ot(kt(x,["value","amount"],1),0,5)}];case"sepia":return[{type:"sepia",value:1}];case"grayscale":return[{type:"grayscale",value:1}];case"adjustment":{const oe=ot(kt(x,["brightness"],1)-1,-1,1),ve=ot(kt(x,["contrast"],1),.1,3),ce=ot(kt(x,["saturation"],1),0,3);return[{type:"brightness",value:oe},{type:"contrast",value:ve},{type:"saturation",value:ce}]}default:return[]}}function Ju(y){const x=y.timeline[0],X=Array.isArray(x==null?void 0:x.filters)?x.filters:[],oe=[];for(const ce of X)if(oe.push(...Gu(ce)),oe.length>=12)break;const ve={...y,filters:oe.slice(0,12)};if(y.timeline.length===1&&x){const ce=Math.max(0,Li(x.sourceIn,0)),me=Li(x.sourceOut,ce);me>ce&&(ve.trim={start:ce,end:me})}return ve}function Yu(y){return{"360p":[640,360],"480p":[854,480],"720p":[1280,720],"1080p":[1920,1080],"1440p":[2560,1440],"2160p":[3840,2160]}[y??""]??[1920,1080]}function qu(y){if(!y||typeof y!="object")return null;const x=y.duration;if(typeof x=="number"&&Number.isFinite(x)&&x>0)return x;if(x&&typeof x=="object"&&"value"in x){const X=x.value;if(typeof X=="number"&&Number.isFinite(X)&&X>0)return X}return null}async function Gs(y,x,X){var sn,qt,Jn,hn;const oe=y.timeline[0],ve=oe?Math.max(0,oe.sourceIn):0,ce=oe?oe.sourceOut:void 0,[me,He]=Yu((x==null?void 0:x.quality)??((sn=y.output)==null?void 0:sn.quality)),Ct=((qt=y.output)==null?void 0:qt.fps)||30;z(!1),w.value=!0,await e.nextTick();try{const pt=[200,500,1e3];let gt=!1;for(const Hi of pt){await new Promise(gm=>setTimeout(gm,Hi));const lo=M.value;if(!(!lo||typeof lo.captureFrameAt!="function")&&typeof lo.ensureReadyForCapture=="function"&&(gt=await lo.ensureReadyForCapture(),gt))break}const Kt=M.value;if(!Kt||typeof Kt.captureFrameAt!="function")throw new Error("PIXI preview not available for export. Ensure the preview is mounted.");if(!gt)throw new Error("PIXI preview not ready for frame capture after retries. The video may still be loading.");const{exportWithPixiFrames:ga,isWebCodecsSupported:Wi}=await Promise.resolve().then(()=>require("./PixiFrameExporter-aitdNkqV.cjs"));if(!Wi())throw new Error("WebCodecs is not supported in this browser. Export requires Chrome 94+ or equivalent.");Pt=new AbortController;const so={width:me,height:He,fps:Ct,trimStart:ve,signal:Pt.signal};ce!==void 0&&(so.trimEnd=ce),X&&(so.onProgress=X);const al=Gt.value;al!==""&&(so.sourceUrl=al);const mm=typeof Kt.duration=="number"&&Kt.duration>0?Kt.duration:((Jn=y.source)==null?void 0:Jn.duration)??ce??0,pm=await ga({captureFrameAt:Hi=>Kt.captureFrameAt(Hi),duration:{value:mm}},so),Zi=new File([pm],`edited-video-${Date.now()}.mp4`,{type:"video/mp4"}),fm=qu(Kt),hm=((hn=y.source)==null?void 0:hn.duration)??0,vm=Math.max(0,(ce??fm??hm)-ve);return{file:Zi,recipe:y,meta:{duration:vm,width:me,height:He,format:"mp4",sizeBytes:Zi.size,size_bytes:Zi.size}}}finally{w.value=!1,Pt=null}}async function Ku(y,x){var hn;pn(),Nt=!1,Pt=null,mt.value=null,Le.value=null,Ue.value=!1,Ne.value=0;const X=va(y??ue()),oe=tl(X),ve=Array.isArray(oe.filters)&&oe.filters.length>0,ce=Pi(oe);if(!(ae.value||ve||ce))return rt(),i("video-exported",null),null;const He=oe.timeline[0],Ct=He?Math.max(0,He.sourceIn):0,qt=((He==null?void 0:He.sourceOut)??((hn=oe.source)==null?void 0:hn.duration)??Lt.value)-Ct,Jn=a.serverRenderEndpoint!=null&&a.clientExportThreshold>0&&qt>a.clientExportThreshold;if(Jn){Ee.value=!0;try{return await Qu(oe),null}catch(pt){const gt=pt instanceof Error?pt.message:"Server render failed";throw Le.value=gt,i("server-render-failed",gt),pt}finally{Ee.value=!1}}if(a.maxDuration>0&&qt>a.maxDuration&&!Jn){const pt=`This video is too long for in-browser export (${Math.round(qt)}s). Server rendering is not available. Try a shorter clip.`;return Le.value=pt,i("video-exported",null),null}Ee.value=!0;try{const pt=await Gs(oe,x,gt=>{Nt||(Ne.value=gt)});return Nt?(Le.value="Export canceled.",Ne.value=0,i("video-exported",null),null):(rt(),i("recipe-generated",oe),i("video-exported",pt),Ne.value=100,Ue.value=!0,pt)}catch(pt){if(Nt)return Le.value="Export canceled.",Ne.value=0,i("video-exported",null),null;const gt=pt instanceof Error?pt.message:"Local WebGL export failed.";throw Le.value=gt,new Error(`Video export failed: ${gt}`)}finally{Ee.value=!1}}function ro(){return new vi(a.serverRenderEndpoint??"/api/v1")}async function Qu(y){const x=ro();Le.value="Starting server render...",Ne.value=0;const X=await x.createRenderJob({source_media_uuid:s.value,recipe:y});mt.value=X.id,i("server-render-started",X.id),i("export-started",X.id),Le.value="Rendering on server...";const oe=await x.pollRenderJob(X.id,(ce,me)=>{Ne.value=ce,me==="processing"&&(Le.value=`Server rendering: ${ce}%`)},3e3,(a.maxDuration>0?a.maxDuration*3:1800)*1e3);Ne.value=100,Ue.value=!0,Le.value="Server render complete!",rt(),i("recipe-generated",y);const ve={id:oe.id};typeof oe.output_media_id=="string"&&oe.output_media_id!==""&&(ve.output_media_id=oe.output_media_id),i("server-render-completed",ve)}async function Js(){if(!Ee.value)return;Nt=!0,w.value=!1,Pt&&(Pt.abort(),Pt=null),pn();const y=mt.value;if(y)try{await ro().cancelJob(y)}catch(x){const X=x instanceof Error?x.message:"Failed to cancel export";Le.value=X,Ee.value=!1,mt.value=null;return}Ee.value=!1,Ne.value=0,Ue.value=!1,mt.value=null,Le.value="Export canceled."}async function Ys(y){pn(),Nt=!1,Pt=null,mt.value=null,Le.value=null,Ue.value=!1,Ee.value=!0,Ne.value=0;try{const x=va(Xu(ue(),y));i("recipe-generated",x);const X=s.value.startsWith("temp-"),oe=x.timeline[0],ve=Array.isArray(oe==null?void 0:oe.filters)?oe.filters:[],ce=!0,me=typeof window<"u"&&window.MEDIABLES_ALLOW_SERVER_EXPORT_FALLBACK===1||typeof localStorage<"u"&&localStorage.getItem("mediables.export.allowServerFallback")==="1";if(ce)try{const gt=await Gs(x,y,Wi=>{Nt||(Ne.value=Wi)});if(Nt){Le.value="Export canceled.",Ee.value=!1,Ne.value=0;return}i("video-exported",gt);const Kt=URL.createObjectURL(gt.file),ga=document.createElement("a");ga.href=Kt,ga.download=`edited-video-${Date.now()}.mp4`,ga.click(),setTimeout(()=>URL.revokeObjectURL(Kt),100),Ee.value=!1,Ne.value=100,Ue.value=!0;return}catch(gt){if(Nt){Le.value="Export canceled.",Ee.value=!1,Ne.value=0;return}if(X||!me)throw gt;Ne.value=0,Le.value="Local filter export failed, falling back to server render."}const He={"360p":"low","480p":"low","720p":"medium","1080p":"high","1440p":"ultra","2160p":"ultra"},Ct=(y==null?void 0:y.quality)??x.output.quality,sn=He[Ct]??"high",qt={...Ju(x),export:{format:(y==null?void 0:y.format)??x.output.format,quality:sn,resolution:Ct,framerate:x.output.fps}},hn=await ro().createJob({source_media_id:s.value,recipe:qt}),pt=typeof hn.id=="string"?hn.id:null;if(!pt)throw new Error("Export failed: missing job id");mt.value=pt,i("export-started",pt),dm(pt)}catch(x){if(w.value=!1,Pt=null,Nt){Le.value="Export canceled.",Ee.value=!1,Ne.value=0,mt.value=null;return}try{const X=va(ue()),oe=new Blob([JSON.stringify(X,null,2)],{type:"application/json"}),ve=URL.createObjectURL(oe),ce=document.createElement("a");ce.href=ve,ce.download=`video-recipe-${Date.now()}.json`,ce.click(),setTimeout(()=>URL.revokeObjectURL(ve),100)}finally{Ee.value=!1,Ne.value=0,mt.value=null,Le.value=x instanceof Error?x.message:"Export failed"}}}const Ui=async y=>{await new Promise(x=>{window.setTimeout(x,y)})},Oi=y=>{if(!y||y.width<=0||y.height<=0)return null;try{return y.toDataURL("image/jpeg",.85)}catch{return null}},em=y=>{if(!y||typeof y!="object")return null;const X=y.pixiCanvas;if(X&&typeof X=="object"&&"value"in X){const oe=X.value;return oe instanceof HTMLCanvasElement?oe:null}return X instanceof HTMLCanvasElement?X:null},tm=y=>{if(!y||typeof y!="object")return null;const x=y.duration;if(typeof x=="number"&&Number.isFinite(x))return x;if(x&&typeof x=="object"&&"value"in x){const X=x.value;if(typeof X=="number"&&Number.isFinite(X))return X}return null},nm=y=>{if(!y||typeof y!="object")return null;const X=y.videoElement;if(X&&typeof X=="object"&&"value"in X){const oe=X.value;return oe instanceof HTMLVideoElement?oe:null}return X instanceof HTMLVideoElement?X:null},qs=y=>typeof y.params=="object"&&y.params!==null?y.params:{},am=y=>{const x=[];for(const X of y){const oe=qs(X),ve=X.filterId.trim().toLowerCase();if(ve==="brightness"){const me=(ot(kt(oe,["value","brightness"],0),-1,1)+1)*100;x.push(`brightness(${me.toFixed(2)}%)`);continue}if(ve==="contrast"){const ce=ot(kt(oe,["value","contrast"],1),.1,4);x.push(`contrast(${(ce*100).toFixed(2)}%)`);continue}if(ve==="saturation"||ve==="saturate"){const ce=ot(kt(oe,["value","saturation"],1),0,4);x.push(`saturate(${(ce*100).toFixed(2)}%)`);continue}if(ve==="grayscale"){x.push("grayscale(100%)");continue}if(ve==="sepia"){x.push("sepia(100%)");continue}if(ve==="blur"||ve==="gaussian-blur"||ve==="kawase-blur"){const ce=ot(kt(oe,["value","blur","radius"],0),0,30);ce>.01&&x.push(`blur(${ce.toFixed(2)}px)`);continue}if(ve==="adjustment"){const ce=kt(oe,["brightness"],1),me=kt(oe,["contrast"],1),He=kt(oe,["saturation"],1);Math.abs(ce-1)>.01&&x.push(`brightness(${(ot(ce,0,5)*100).toFixed(2)}%)`),Math.abs(me-1)>.01&&x.push(`contrast(${(ot(me,.1,5)*100).toFixed(2)}%)`),Math.abs(He-1)>.01&&x.push(`saturate(${(ot(He,0,5)*100).toFixed(2)}%)`);continue}if(ve==="cinematic"){x.push("contrast(120%) brightness(95%) saturate(85%)");continue}if(ve==="dramatic"){x.push("contrast(140%) brightness(90%) saturate(110%) sepia(10%)");continue}if(ve==="dreamy"){x.push("blur(0.5px) brightness(105%) saturate(90%) contrast(95%)");continue}}return x.join(" ")},om=y=>{const x=y.find(ve=>ve.filterId.trim().toLowerCase()==="noise");if(!x)return 0;const X=qs(x),oe=kt(X,["noise","value","amount","intensity"],.2);return oe<=1?ot(oe,0,1):ot(oe/100,0,1)},im=(y,x,X,oe)=>{if(oe<=0)return;const ve=y.getImageData(0,0,x,X),ce=255*oe;for(let me=0;me<ve.data.length;me+=4){const He=(Math.random()*2-1)*ce;ve.data[me]=ot(ve.data[me]+He,0,255),ve.data[me+1]=ot(ve.data[me+1]+He,0,255),ve.data[me+2]=ot(ve.data[me+2]+He,0,255)}y.putImageData(ve,0,0)},Ks=async y=>{y.readyState>=2&&y.videoWidth>0&&y.videoHeight>0||await new Promise(x=>{let X=!1,oe=0;const ve=()=>{X||(X=!0,y.removeEventListener("loadedmetadata",ce),y.removeEventListener("loadeddata",ce),y.removeEventListener("canplay",ce),window.clearTimeout(oe),x())},ce=()=>{ve()};y.addEventListener("loadedmetadata",ce),y.addEventListener("loadeddata",ce),y.addEventListener("canplay",ce),oe=window.setTimeout(()=>ve(),800),y.play().catch(()=>{})})},rm=async(y,x)=>{await new Promise(X=>{let oe=!1,ve=0;const ce=()=>{oe||(oe=!0,y.removeEventListener("seeked",me),window.clearTimeout(ve),X())},me=()=>{ce()};if(Math.abs(y.currentTime-x)<.016){requestAnimationFrame(()=>ce());return}y.addEventListener("seeked",me),ve=window.setTimeout(()=>ce(),700),y.currentTime=x})},Qs=async(y,x)=>{await Ks(y);const X=Math.floor(y.videoWidth),oe=Math.floor(y.videoHeight);if(X<=0||oe<=0)return null;const ve=Number.isFinite(y.duration)&&y.duration>0?y.duration:0,ce=ve>0?ot(x,0,ve):0;await rm(y,ce);const me=document.createElement("canvas");me.width=X,me.height=oe;const He=me.getContext("2d");if(!He)return null;const Ct=am(nt.value);Ct!==""&&(He.filter=Ct);try{He.drawImage(y,0,0,X,oe)}catch{return null}const sn=om(nt.value);return im(He,X,oe,sn),Oi(me)},sm=async(y,x)=>{const X=document.createElement("video");X.src=y,X.muted=!0,X.playsInline=!0,X.preload="auto",y.startsWith("blob:")||(X.crossOrigin="anonymous");try{return await Ks(X),await Qs(X,x)}catch{return null}finally{X.pause(),X.removeAttribute("src"),X.load()}},lm=async y=>{const x=M.value,X=Oi(em(x));if(X)return X;if(x!=null&&x.captureFrameAt)for(let ce=0;ce<4;ce+=1){const me=tm(x);if(me!==null&&me<=0&&ce<2){await Ui(80);continue}const He=await Promise.race([x.captureFrameAt(y),Ui(450).then(()=>null)]),Ct=Oi(He);if(Ct)return Ct;await Ui(80)}const oe=nm(x);if(oe){const ce=await Qs(oe,y);if(ce)return ce}const ve=Ei.value.trim();if(ve!==""){const ce=await sm(ve,y);if(ce)return ce}return null},el=y=>y.map(x=>({...x,params:x.params&&typeof x.params=="object"?{...x.params}:x.params}));function tl(y){const x=el(nt.value);if(!Pi(y)&&x.length>0&&Array.isArray(y.timeline)&&y.timeline.length>0){const oe=y.timeline[0];oe&&(y.timeline=[{...oe,filters:x},...y.timeline.slice(1)])}return y}const Pi=y=>Array.isArray(y.timeline)?y.timeline.some(x=>Array.isArray(x.filters)&&x.filters.length>0):!1,cm=y=>{if(!y||typeof y!="object")return null;const x=y.posterFrame;if(typeof x!="string")return null;const X=x.trim();return X!==""?X:null};async function zi(){const y=va(tl(Vt())),x=el(nt.value),X=Pi(y)||x.length>0,oe=cm(a.initialRecipe);if(X){const ve=N.value>0?N.value:.1;try{const ce=await lm(ve);ce?y.posterFrame=ce:oe&&(y.posterFrame=oe)}catch{oe&&(y.posterFrame=oe)}}else delete y.posterFrame;return rt(),i("draft-saved",y),y}function nl(){vt()&&(Zn(),Yt())}async function dm(y){pn();const x=ro();kn=window.setInterval(async()=>{try{if(Nt){pn();return}const X=await x.getJob(y),oe=Number(X.progress??0);if(Ne.value=Number.isFinite(oe)?oe:0,X.status==="completed"||X.status==="failed"||X.status==="cancelled")if(pn(),Ee.value=!1,mt.value=null,X.status==="completed")Ne.value=100,Ue.value=!0,Le.value=null;else{const ve=X.status==="cancelled"||typeof X.error_message=="string"&&/cancel/i.test(X.error_message);Le.value=ve?"Export canceled.":typeof X.error_message=="string"&&X.error_message.trim()!==""?X.error_message:"Export failed"}}catch(X){pn(),Ee.value=!1,mt.value=null,Le.value=X instanceof Error?X.message:"Failed to check export progress"}},2e3)}function ji(){const y=va(ue());try{const x=y.timeline??[]}catch{}_.value=y}let xn=null;function Yt(){xn&&clearTimeout(xn),xn=setTimeout(()=>{ji(),xn=null},200)}e.watch(()=>L.value,Yt,{deep:!0}),e.watch(()=>he.value,y=>{if(P.value||!y)return;const x=(y==null?void 0:y.filters)??[];ha(x)},{immediate:!0}),e.watch(()=>nt.value,y=>{et(y),Yt()},{deep:!0}),e.watch(()=>A.value,y=>{at(y),Yt()},{deep:!0}),e.watch(()=>W.value,y=>{const x=y.map(X=>({...X,source:typeof X.source=="string"?X.source:void 0}));wt(x),Yt()},{deep:!0}),e.watch(()=>N.value,Yt),n({saveDraft:zi,exportForUpload:Ku}),ji(),e.onUnmounted(()=>{pn(),Nt=!0,xn&&(clearTimeout(xn),xn=null),f.value&&(f.value.destroy(),f.value=null),B.value=null,E.value=null,S.value=null});function um(){Tt||!Ni.value||(Tt=new Fb({filters:Hn.value,callbacks:{onApplyFilter:y=>{wn(y.id)},onRemoveFilter:y=>{ki(y)},onUpdateParam:(y,x,X)=>{Rs(y,x,X)},onPreviewFilter:y=>{pa(y.id)}}}),Tt.mount(Ni.value),Tt.setActiveFilters(_i.value))}e.watch(_i,y=>{Tt==null||Tt.setActiveFilters(y)},{deep:!0}),e.watch(Hn,y=>{Tt==null||Tt.setFilters(y)});let fn=null;return e.onMounted(()=>{window.addEventListener("resize",F),window.addEventListener("keydown",Zs);const y=()=>{!Xn.value||fn||(fn=new ResizeObserver(x=>{x[0]&&(ao.value=Math.round(x[0].contentRect.width))}),fn.observe(Xn.value))};y(),fn||e.nextTick(y),l.value&&(Ai(),Jt||e.nextTick(Ai)),a.media&&ji(),l.value&&e.nextTick(()=>{um()}),e.nextTick(()=>{const x=document.querySelector(".video-editor");x&&x.getBoundingClientRect();const X=document.querySelector(".mobile-layout");X&&X.getBoundingClientRect()})}),e.onUnmounted(()=>{window.removeEventListener("resize",F),window.removeEventListener("keydown",Zs),fn==null||fn.disconnect(),fn=null,Jt==null||Jt(),Jt=null,Tt==null||Tt.destroy(),Tt=null}),(y,x)=>{var X,oe,ve,ce;return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-editor",{mobile:l.value}])},[l.value?(e.openBlock(),e.createElementBlock("div",_2,[e.createElementVNode("div",E2,[e.createElementVNode("div",x2,[e.createElementVNode("button",{class:e.normalizeClass(["mobile-toolbar-btn",{active:e.unref(ie)}]),onClick:x[0]||(x[0]=(...me)=>e.unref(T)&&e.unref(T)(...me)),"aria-label":e.unref(ie)?"Pause":"Play","data-testid":"btn-mobile-play"},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(ie)?e.unref(Gr):e.unref(Jr)},null,8,["icon"])],10,C2),e.createElementVNode("button",{class:"mobile-toolbar-btn",onClick:nl,"aria-label":"Reset all changes","data-testid":"btn-mobile-reset"},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Un)},null,8,["icon"])])]),e.createElementVNode("div",S2,[e.createElementVNode("button",{class:"mobile-toolbar-btn mobile-toolbar-save",onClick:zi,"aria-label":"Save","data-testid":"btn-mobile-save",disabled:!e.unref(ae)},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Xo)},null,8,["icon"]),x[13]||(x[13]=e.createElementVNode("span",null,"Save",-1))],8,V2),e.createElementVNode("button",{class:"mobile-toolbar-btn",onClick:x[1]||(x[1]=me=>Ys()),"aria-label":"Export","data-testid":"btn-mobile-export",disabled:Ee.value||!e.unref(ae)},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(aa)},null,8,["icon"])],8,N2),e.createElementVNode("button",{class:"mobile-toolbar-btn",onClick:x[2]||(x[2]=me=>i("close")),"aria-label":"Close","data-testid":"btn-mobile-close"},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Rn)},null,8,["icon"])])])]),e.createElementVNode("div",T2,[e.withDirectives(e.createVNode(fr,{ref_key:"pixiPreviewMobileRef",ref:v,"aria-hidden":!h.value,class:"preview-host-child",source:Ei.value,"fallback-duration":Lt.value,filters:Ts.value,playhead:Ms.value,"is-playing":e.unref(ie),"fit-mode":D.value,active:h.value,onPlayPause:e.unref(T),onFrameUpdate:As,onDurationChange:oo},null,8,["aria-hidden","source","fallback-duration","filters","playhead","is-playing","fit-mode","active","onPlayPause"]),[[e.vShow,h.value]]),e.withDirectives(e.createVNode(Mr,{"aria-hidden":!p.value,class:"preview-host-child","media-uuid":s.value,recipe:_.value,media:Vs.value,"enable-engine":p.value&&Ns.value,"fit-mode":D.value,onTimeUpdate:Ds,onPlayStateChange:Ls,onDurationChange:oo,onEngineReady:Xs},null,8,["aria-hidden","media-uuid","recipe","media","enable-engine","fit-mode"]),[[e.vShow,p.value]]),Ee.value?(e.openBlock(),e.createElementBlock("div",M2,[e.createElementVNode("div",B2,[e.createElementVNode("span",null,"Exporting "+e.toDisplayString(Ne.value)+"%",1),e.createElementVNode("div",F2,[e.createElementVNode("div",{class:"mobile-export-bar-fill",style:e.normalizeStyle({width:Ne.value+"%"})},null,4)]),e.createElementVNode("button",{class:"mobile-export-cancel",onClick:Js},"Cancel")])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",{ref_key:"timelineContainerRef",ref:Xn,class:"timeline-section"},[e.createElementVNode("div",I2,[e.createElementVNode("button",{ref_key:"mobileZoomOutButtonRef",ref:Ti,type:"button",class:"mobile-zoom-btn","aria-label":"Zoom out timeline","data-testid":"btn-timeline-zoom-out"},[...x[14]||(x[14]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 16 16"},[e.createElementVNode("path",{d:"M4 8h8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})],-1)])],512),e.createElementVNode("button",{ref_key:"mobileZoomInButtonRef",ref:Mi,type:"button",class:"mobile-zoom-btn","aria-label":"Zoom in timeline","data-testid":"btn-timeline-zoom-in"},[...x[15]||(x[15]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 16 16"},[e.createElementVNode("path",{d:"M4 8h8M8 4v8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})],-1)])],512)]),e.createVNode(Br,{playhead:e.unref(N),clips:e.unref(L),"selected-clip-id":((X=e.unref(he))==null?void 0:X.id)??((oe=e.unref(L)[0])==null?void 0:oe.id)??null,duration:Lt.value,"zoom-level":e.unref(se),"snap-enabled":un.value,sensitivity:.25,"is-mobile":!0,"onUpdate:playhead":e.unref(G),onTrim:e.unref(xe),onSplit:Ws,onClipSelect:Bi,onClipMove:e.unref(bt),onClipLongPress:Us,onSnapStateChange:Os},null,8,["playhead","clips","selected-clip-id","duration","zoom-level","snap-enabled","onUpdate:playhead","onTrim","onClipMove"])],512),e.createElementVNode("div",$2,[e.createElementVNode("div",R2,[e.createElementVNode("span",D2,e.toDisplayString(pu.value),1),e.createElementVNode("span",A2,e.toDisplayString(fu.value),1)]),e.createElementVNode("div",L2,[e.createElementVNode("button",{type:"button",class:"mobile-cut-nav-btn","data-testid":"btn-mobile-prev-cut","aria-label":"Jump to previous cut",disabled:!uu.value,onClick:zs}," Prev Cut ",8,U2),e.createElementVNode("div",O2,[e.createElementVNode("span",P2,"Playhead "+e.toDisplayString(hu.value),1),e.createElementVNode("span",z2,"In "+e.toDisplayString(vu.value),1),e.createElementVNode("span",j2,"Out "+e.toDisplayString(gu.value),1),e.createElementVNode("span",W2,"Duration "+e.toDisplayString(yu.value),1)]),e.createElementVNode("button",{type:"button",class:"mobile-cut-nav-btn","data-testid":"btn-mobile-next-cut","aria-label":"Jump to next cut",disabled:!mu.value,onClick:js}," Next Cut ",8,Z2)]),e.createElementVNode("div",H2,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["mobile-snap-toggle",{active:un.value}]),"data-testid":"btn-mobile-snap-toggle",onClick:Ps},e.toDisplayString(un.value?"Snap On":"Snap Off"),3),e.createElementVNode("div",X2,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(du,me=>e.createElementVNode("button",{key:me,type:"button",class:e.normalizeClass(["mobile-speed-chip",{active:e.unref(fe)===me}]),"data-testid":`btn-mobile-speed-${String(me).replace(".","-")}`,onClick:He=>Su(me)},e.toDisplayString(me)+"x ",11,G2)),64))])]),e.createElementVNode("div",J2,[e.createElementVNode("button",{type:"button",class:"mobile-edit-btn","data-testid":"btn-mobile-undo","aria-label":"Undo",disabled:!e.unref(tt),onClick:Fi}," Undo ",8,Y2),e.createElementVNode("button",{type:"button",class:"mobile-edit-btn","data-testid":"btn-mobile-redo","aria-label":"Redo",disabled:!e.unref(xt),onClick:Ii}," Redo ",8,q2),e.createElementVNode("button",{type:"button",class:"mobile-edit-btn","data-testid":"btn-mobile-split","aria-label":"Split at playhead",disabled:!xi.value,onClick:io}," Split ",8,K2),e.createElementVNode("button",{type:"button",class:"mobile-edit-btn","data-testid":"btn-mobile-duplicate","aria-label":"Duplicate selected clip",disabled:!Bs.value,onClick:$i}," Duplicate ",8,Q2),e.createElementVNode("button",{type:"button",class:"mobile-edit-btn mobile-edit-btn--danger","data-testid":"btn-mobile-delete","aria-label":"Delete selected clip",disabled:!Ci.value,onClick:Ri}," Delete ",8,ek)])]),e.createElementVNode("div",{ref_key:"mobileControlsRef",ref:Ni,class:"controls-section mobile-controls"},null,512),to.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mobile-action-sheet-backdrop","data-testid":"video-mobile-action-sheet",onClick:En},[e.createElementVNode("div",{class:"mobile-action-sheet",onClick:x[3]||(x[3]=e.withModifiers(()=>{},["stop"]))},[x[16]||(x[16]=e.createElementVNode("div",{class:"mobile-action-sheet-handle"},null,-1)),e.createElementVNode("div",tk,[e.createElementVNode("span",nk,e.toDisplayString(bu.value),1),e.createElementVNode("span",ak,e.toDisplayString(wu.value),1)]),e.createElementVNode("div",ok,[e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn","data-testid":"btn-mobile-sheet-undo",disabled:!e.unref(tt),onClick:Fi},"Undo",8,ik),e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn","data-testid":"btn-mobile-sheet-redo",disabled:!e.unref(xt),onClick:Ii},"Redo",8,rk),e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn","data-testid":"btn-mobile-sheet-split",disabled:!xi.value,onClick:io},"Split",8,sk),e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn","data-testid":"btn-mobile-sheet-duplicate",disabled:!Bs.value,onClick:$i},"Duplicate",8,lk),e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn mobile-action-sheet-btn--danger","data-testid":"btn-mobile-sheet-delete",disabled:!Ci.value,onClick:Ri},"Delete",8,ck),e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn","data-testid":"btn-mobile-sheet-close",onClick:En},"Close")])])])):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",dk,[e.createElementVNode("div",uk,[e.createElementVNode("div",mk,[e.createElementVNode("div",pk,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":x[4]||(x[4]=me=>D.value=me),"aria-label":"Fit mode","data-testid":"select-video-fit-mode"},[...x[17]||(x[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,D.value]])])]),e.withDirectives(e.createVNode(fr,{ref_key:"pixiPreviewDesktopRef",ref:g,"aria-hidden":!h.value,class:"preview-host-child",source:Ei.value,"fallback-duration":Lt.value,filters:Ts.value,playhead:Ms.value,"is-playing":e.unref(ie),"fit-mode":D.value,active:h.value,onPlayPause:e.unref(T),onFrameUpdate:As,onDurationChange:oo},null,8,["aria-hidden","source","fallback-duration","filters","playhead","is-playing","fit-mode","active","onPlayPause"]),[[e.vShow,h.value]]),e.withDirectives(e.createVNode(Mr,{"aria-hidden":!p.value,class:"preview-host-child","media-uuid":s.value,recipe:_.value,media:Vs.value,"enable-engine":p.value&&Ns.value,"fit-mode":D.value,onTimeUpdate:Ds,onPlayStateChange:Ls,onDurationChange:oo,onEngineReady:Xs},null,8,["aria-hidden","media-uuid","recipe","media","enable-engine","fit-mode"]),[[e.vShow,p.value]]),y.showThumbnailPicker?(e.openBlock(),e.createBlock(cy,{key:0,"media-uuid":s.value,duration:Lt.value,onSelect:Hu},null,8,["media-uuid","duration"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",fk,[e.createElementVNode("div",hk,[e.createElementVNode("div",vk,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Z.value,me=>(e.openBlock(),e.createElementBlock("button",{key:me.id,class:e.normalizeClass(["tab-btn",{active:d.value===me.id}]),onClick:He=>d.value=me.id},e.toDisplayString(me.label),11,gk))),128))]),e.createElementVNode("div",yk,[e.withDirectives(e.createElementVNode("div",bk,[e.createVNode(Fr,{filters:Hn.value,"active-filters":_i.value,"thumbnail-url":cu.value,onApplyFilter:wn,onRemoveFilter:ki,onUpdateParam:Rs,onPreviewFilter:Fu},null,8,["filters","active-filters","thumbnail-url"])],512),[[e.vShow,d.value==="filters"]]),e.withDirectives(e.createElementVNode("div",wk,[e.createVNode(Rr,{overlays:A.value,onAddOverlay:$u,onUpdateOverlay:Ru,onRemoveOverlay:Du},null,8,["overlays"])],512),[[e.vShow,d.value==="text"]]),e.withDirectives(e.createElementVNode("div",kk,[e.createVNode(Dr,{"selected-clips":O.value,"applied-transitions":R.value,onApplyTransition:Au,onRemoveTransition:Lu,onPreviewTransition:Uu},null,8,["selected-clips","applied-transitions"])],512),[[e.vShow,d.value==="transitions"]]),e.withDirectives(e.createElementVNode("div",_k,[e.createVNode(Ar,{"audio-layers":W.value,"master-volume":I.value,onAddTrack:Ou,onUpdateTrack:Pu,onRemoveTrack:zu,onUpdateVolume:ju,onToggleMute:Wu,onUpdateMasterVolume:Zu},null,8,["audio-layers","master-volume"])],512),[[e.vShow,d.value==="audio"]]),e.withDirectives(e.createElementVNode("div",Ek,[e.unref(Xt)?(e.openBlock(),e.createBlock(Ir,{key:0,filter:e.unref(Xt),"current-frame":e.unref(ne),onUpdateParams:Iu},null,8,["filter","current-frame"])):(e.openBlock(),e.createElementBlock("div",xk,[...x[18]||(x[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",Ck,[e.createVNode($r,{"can-export":e.unref(ae),"is-exporting":Ee.value,"export-progress":Ne.value,onExport:Ys,onCancelExport:Js,onSaveDraft:zi,onReset:nl},null,8,["can-export","is-exporting","export-progress"]),Ue.value?(e.openBlock(),e.createElementBlock("div",Sk," Export complete ")):e.createCommentVNode("",!0),Le.value&&!Ue.value?(e.openBlock(),e.createElementBlock("div",Vk,e.toDisplayString(Le.value),1)):e.createCommentVNode("",!0)],512),[[e.vShow,d.value==="export"]])])])])]),e.createElementVNode("div",Nk,[e.createElementVNode("div",{ref_key:"timelineContainerRef",ref:Xn,class:"timeline-container"},[e.createElementVNode("div",Tk,[e.createElementVNode("label",null,[x[19]||(x[19]=e.createTextVNode(" Zoom ",-1)),e.createElementVNode("input",{type:"range",min:"10",max:"600",value:e.unref(se),onInput:x[5]||(x[5]=me=>Bu(me))},null,40,Mk)]),e.createElementVNode("span",Bk,e.toDisplayString(Math.round(e.unref(se)))+" px/s",1),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["desktop-snap-toggle",{active:un.value}]),"data-testid":"btn-desktop-snap-toggle",onClick:Ps},e.toDisplayString(un.value?"Snap On":"Snap Off"),3)]),e.createVNode(Br,{playhead:e.unref(N),clips:e.unref(L),"selected-clip-id":((ve=e.unref(he))==null?void 0:ve.id)??((ce=e.unref(L)[0])==null?void 0:ce.id)??null,duration:Lt.value,"zoom-level":e.unref(se),"snap-enabled":un.value,sensitivity:.25,"onUpdate:playhead":e.unref(G),onTrim:e.unref(xe),onSplit:Ws,onClipSelect:Bi,onClipMove:e.unref(bt),onClipLongPress:Us,onSnapStateChange:Os},null,8,["playhead","clips","selected-clip-id","duration","zoom-level","snap-enabled","onUpdate:playhead","onTrim","onClipMove"]),e.createVNode(ad,{"selected-clip":e.unref(he),"can-split":xi.value,"can-delete":Ci.value,"is-playing":e.unref(ie),"zoom-level":e.unref(se),"playback-speed":e.unref(fe),onSplit:io,onDelete:Ri,onDuplicate:$i,onZoomIn:Tu,onZoomOut:Mu,onZoomChange:Di,onFitToWindow:Nu,onPlayPause:e.unref(T),onFrameForward:e.unref(ee),onFrameBackward:e.unref(pe),onSkipToStart:e.unref(be),onSkipToEnd:e.unref($e),onSpeedChange:e.unref(Ae)},null,8,["selected-clip","can-split","can-delete","is-playing","zoom-level","playback-speed","onPlayPause","onFrameForward","onFrameBackward","onSkipToStart","onSkipToEnd","onSpeedChange"]),ge.value?(e.openBlock(),e.createElementBlock("div",Fk,[e.createElementVNode("div",Ik,[e.createElementVNode("label",$k,[x[20]||(x[20]=e.createElementVNode("span",null,"Trim start (s)",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":x[6]||(x[6]=me=>Y.value=me),type:"number",step:"0.01",min:"0",inputmode:"decimal","data-testid":"video-dev-trim-start"},null,512),[[e.vModelText,Y.value]])]),e.createElementVNode("label",Rk,[x[21]||(x[21]=e.createElementVNode("span",null,"Trim end (s)",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":x[7]||(x[7]=me=>Q.value=me),type:"number",step:"0.01",min:"0",inputmode:"decimal","data-testid":"video-dev-trim-end"},null,512),[[e.vModelText,Q.value]])]),e.createElementVNode("button",{class:"dev-editor-button",type:"button","data-testid":"video-dev-trim-start-playhead",disabled:!e.unref(he),onClick:x[8]||(x[8]=me=>$s("start"))}," Start = Playhead ",8,Dk),e.createElementVNode("button",{class:"dev-editor-button",type:"button","data-testid":"video-dev-trim-end-playhead",disabled:!e.unref(he),onClick:x[9]||(x[9]=me=>$s("end"))}," End = Playhead ",8,Ak),e.createElementVNode("button",{class:"dev-editor-button dev-editor-button--primary",type:"button","data-testid":"video-dev-apply-trim",disabled:!e.unref(he),onClick:_u}," Apply Trim ",8,Lk)]),e.createElementVNode("div",Uk,[e.createElementVNode("label",Ok,[x[22]||(x[22]=e.createElementVNode("span",null,"Quick filter",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":x[10]||(x[10]=me=>ye.value=me),"data-testid":"video-dev-filter-select"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Hn.value,me=>(e.openBlock(),e.createElementBlock("option",{key:me.id,value:me.id},e.toDisplayString(me.name),9,Pk))),128))],512),[[e.vModelSelect,ye.value]])]),e.createElementVNode("button",{class:"dev-editor-button dev-editor-button--primary",type:"button","data-testid":"video-dev-apply-filter",disabled:!e.unref(he)||ye.value==="",onClick:Eu}," Apply Filter ",8,zk),e.createElementVNode("button",{class:"dev-editor-button",type:"button","data-testid":"video-dev-clear-filters",disabled:e.unref(nt).length===0,onClick:xu}," Clear Filters ",8,jk),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(he),onClick:x[11]||(x[11]=me=>wn("noise"))}," QA: Noise ",8,Wk),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(he),onClick:x[12]||(x[12]=me=>wn("grayscale"))}," QA: Grayscale ",8,Zk)])])):e.createCommentVNode("",!0)],512)])]))],2)}}}),Rd=Me(Hk,[["__scopeId","data-v-f427827a"]]),Xk={key:0,class:"video-editor-v2-toolbar"},Gk={class:"video-editor-v2-body"},Jk={class:"video-editor-v2-main"},Yk={class:"video-editor-v2-canvas"},qk={key:0,class:"video-editor-v2-timeline"},Kk={class:"video-editor-v2-side","data-testid":"v2-side-panel"},Qk="(max-width: 900px)",e_=e.defineComponent({__name:"SplitPanelLayout",setup(o,{expose:n}){const t=e.ref(!1);let a=null,i=null;const r=s=>{t.value=s};return e.onMounted(()=>{typeof window>"u"||!window.matchMedia||(a=window.matchMedia(Qk),r(a.matches),i=s=>r(s.matches),a.addEventListener?a.addEventListener("change",i):"addListener"in a&&a.addListener(i))}),e.onBeforeUnmount(()=>{!a||!i||(a.removeEventListener?a.removeEventListener("change",i):"removeListener"in a&&a.removeListener(i),a=null,i=null)}),n({isMobile:t}),(s,l)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-editor-v2",{"is-mobile":t.value,"is-desktop":!t.value}]),"data-testid":"video-editor-v2-shell"},[s.$slots.toolbar?(e.openBlock(),e.createElementBlock("div",Xk,[e.renderSlot(s.$slots,"toolbar",{},void 0,!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Gk,[e.createElementVNode("div",Jk,[e.createElementVNode("div",Yk,[e.renderSlot(s.$slots,"canvas",{},void 0,!0)]),s.$slots.timeline?(e.openBlock(),e.createElementBlock("div",qk,[e.renderSlot(s.$slots,"timeline",{},void 0,!0)])):e.createCommentVNode("",!0)]),e.withDirectives(e.createElementVNode("aside",Kk,[e.renderSlot(s.$slots,"inspector",{},void 0,!0)],512),[[e.vShow,!t.value]])]),t.value?e.renderSlot(s.$slots,"drawer",{key:1},void 0,!0):e.createCommentVNode("",!0)],2))}}),t_=Me(e_,[["__scopeId","data-v-a0d79157"]]),n_={class:"inspector-tabs",role:"tablist","aria-label":"Editor tools"},a_=["aria-selected","data-testid","onClick"],o_=["aria-labelledby"],i_={class:"inspector-placeholder","data-testid":"v2-inspector-placeholder"},r_=e.defineComponent({__name:"InspectorPanel",props:{activeTab:{},tabs:{},compact:{type:Boolean,default:!1}},emits:["update:activeTab"],setup(o,{emit:n}){const t=o,a=n,i=e.computed(()=>t.tabs.filter(s=>s.enabled)),r=s=>{s!==t.activeTab&&a("update:activeTab",s)};return(s,l)=>(e.openBlock(),e.createElementBlock("section",{class:e.normalizeClass(["inspector-panel",{"inspector-panel--compact":s.compact}]),"data-testid":"v2-inspector-panel"},[e.createElementVNode("nav",n_,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,c=>(e.openBlock(),e.createElementBlock("button",{key:c.id,type:"button",role:"tab",class:e.normalizeClass(["inspector-tab",{"is-active":s.activeTab===c.id}]),"aria-selected":s.activeTab===c.id?"true":"false","data-testid":`v2-inspector-tab-${c.id}`,onClick:d=>r(c.id)},e.toDisplayString(c.label),11,a_))),128))]),e.createElementVNode("div",{class:"inspector-body",role:"tabpanel","aria-labelledby":`v2-inspector-tab-${s.activeTab}`},[e.renderSlot(s.$slots,s.activeTab,{},()=>[e.createElementVNode("div",i_,[e.createElementVNode("p",null,e.toDisplayString(s.activeTab)+" controls — coming soon",1)])],!0)],8,o_)],2))}}),Xl=Me(r_,[["__scopeId","data-v-7f5b0e50"]]),s_=["aria-label","data-snap"],l_=["aria-expanded"],c_={class:"drawer-header"},d_={class:"drawer-body"},u_=e.defineComponent({__name:"VideoBottomDrawer",props:{initialSnap:{default:"half"},ariaLabel:{default:"Editor controls drawer"},containerHeight:{default:0}},emits:["snap-change"],setup(o,{expose:n,emit:t}){const a=["collapsed","half","full"],i=o,r=t,s=e.ref(null),l=e.ref(null),c=e.ref(i.initialSnap);let d=!1,u=!1,m=null,h=0,p=0,v=0;const g=S=>{const P=v||(typeof window<"u"?window.innerHeight:600);switch(S){case"collapsed":return 80;case"half":return Math.round(P*.45);case"full":return Math.round(P*.85)}},w=(S,{animate:P=!0}={})=>{var R;if(!s.value)return;const C=c.value;c.value=S;const A=typeof window<"u"&&((R=window.matchMedia)==null?void 0:R.call(window,"(prefers-reduced-motion: reduce)").matches);s.value.style.transition=P&&!A?"height 0.25s cubic-bezier(0.33, 1, 0.68, 1)":"none",s.value.style.height=`${g(S)}px`,S!==C&&r("snap-change",S,C)},M=S=>{let P=a[0],C=1/0;for(const A of a){const R=Math.abs(g(A)-S);R<C&&(C=R,P=A)}return P},V=()=>{const S=a.indexOf(c.value);w(a[(S+1)%a.length])},b=S=>{if(u){u=!1,S.preventDefault();return}V()},f=S=>{var P,C,A;if(S.button===0){d=!0,u=!1,m=S.pointerId,h=S.clientY,p=((P=s.value)==null?void 0:P.offsetHeight)??0;try{(A=(C=l.value)==null?void 0:C.setPointerCapture)==null||A.call(C,S.pointerId)}catch{}s.value&&(s.value.style.transition="none")}},_=S=>{if(!d||S.pointerId!==m)return;const P=S.clientY-h,C=p-P,A=g("collapsed"),R=g("full"),W=Math.max(A,Math.min(R,C));s.value&&(s.value.style.height=`${W}px`),Math.abs(P)>4&&(u=!0),S.preventDefault()},D=S=>{var C,A,R;if(!d)return;d=!1;try{(A=(C=l.value)==null?void 0:C.releasePointerCapture)==null||A.call(C,S.pointerId)}catch{}m=null;const P=((R=s.value)==null?void 0:R.offsetHeight)??0;w(M(P))},B=(S,P={})=>{a.includes(S)&&w(S,{animate:P.animate!==!1})},E=S=>{v=Math.max(0,Number(S)||0),w(c.value,{animate:!1})};return e.watch(()=>i.containerHeight,S=>{S>0&&E(S)}),e.onMounted(()=>{i.containerHeight>0&&(v=i.containerHeight),w(c.value,{animate:!1})}),e.onBeforeUnmount(()=>{d=!1,m=null}),n({snapTo:B,updateContainerHeight:E,snap:c}),(S,P)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"rootEl",ref:s,class:"video-editor-v2-drawer",role:"dialog","aria-label":S.ariaLabel,"data-snap":c.value,"data-testid":"v2-video-bottom-drawer"},[e.createElementVNode("button",{ref_key:"handleEl",ref:l,type:"button",class:"drawer-handle","aria-label":"Drag to resize editor drawer","aria-expanded":c.value==="full"?"true":"false","data-testid":"v2-video-drawer-handle",onClick:b,onPointerdown:f,onPointermove:_,onPointerup:D,onPointercancel:D},[...P[0]||(P[0]=[e.createElementVNode("span",{class:"drawer-handle-grip","aria-hidden":"true"},null,-1)])],40,l_),e.createElementVNode("div",c_,[e.renderSlot(S.$slots,"header",{},void 0,!0)]),e.createElementVNode("div",d_,[e.renderSlot(S.$slots,"default",{},void 0,!0)])],8,s_))}}),m_=Me(u_,[["__scopeId","data-v-4ebedbf7"]]),p_={class:"v2-toolbar-group"},f_=["aria-label"],h_=["disabled"],v_={class:"v2-toolbar-group"},g_={class:"v2-toolbar-fit"},y_=["disabled"],b_=["disabled"],w_={class:"v2-preview-host"},k_={class:"v2-timeline"},__={class:"v2-timeline-topbar"},E_={class:"v2-timeline-zoom"},x_=["value"],C_={class:"v2-timeline-zoom-readout"},S_=["aria-pressed"],V_={key:1,class:"v2-empty-state"},N_={key:0,"data-testid":"v2-export-status-completed",class:"v2-export-status"},T_={key:1,class:"v2-export-status","data-testid":"v2-export-status-message"},M_={key:1,class:"v2-empty-state"},B_={key:0,class:"v2-export-status"},F_={key:1,class:"v2-export-status"},I_=e.defineComponent({__name:"VideoEditorV2",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(o,{expose:n,emit:t}){const a=o,i=t,r=e.computed(()=>{var ye;const Y=typeof a.mediaUuid=="string"?a.mediaUuid.trim():"";if(Y!=="")return Y;const Q=(ye=a.media)==null?void 0:ye.uuid;return typeof Q=="string"&&Q.trim()!==""?Q.trim():`temp-${Date.now()}`}),s=od(r.value,a.initialRecipe,a.media),l=sd(),c=e.ref("filters"),d=e.computed(()=>a.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}),u=e.computed(()=>{const Y=a.featureFlags??{},Q=["filters","adjustments","text","transitions","audio","export"],ye={filters:"Filters",adjustments:"Adjust",text:"Text",transitions:"Transitions",audio:"Audio",export:"Export"};return Q.map(Ee=>({id:Ee,label:ye[Ee],enabled:typeof Y[Ee]=="boolean"?Y[Ee]:d.value[Ee]}))}),m=e.ref(!1),h=e.computed(()=>c.value),p=e.computed(()=>h.value==="filters"||m.value),v=e.computed(()=>h.value!=="filters"&&!m.value),g=["contain","cover","none"],w=Y=>typeof Y=="string"&&g.includes(Y),M=Y=>{const Q=Y==null?void 0:Y.editor;return w(Q==null?void 0:Q.fitMode)?Q.fitMode:null},V=e.ref(M(a.initialRecipe)??"contain"),b=e.ref("");e.watch(()=>{var Y,Q;return{file:(Y=a.media)==null?void 0:Y.file,url:(Q=a.media)==null?void 0:Q.url}},(Y,Q,ye)=>{var Ne,Ue;const Ee=b.value;ye(()=>{Ee&&Ee.startsWith("blob:")&&URL.revokeObjectURL(Ee)}),(Ne=a.media)!=null&&Ne.file?b.value=URL.createObjectURL(a.media.file):(Ue=a.media)!=null&&Ue.url?b.value=a.media.url:b.value=""},{immediate:!0});const f=e.computed(()=>b.value),_=e.computed(()=>l.activeFilters.value),D=e.computed(()=>s.playheadPosition.value),B=e.computed(()=>{if(!a.media)return null;const{file:Y,...Q}=a.media;return{...Q,url:b.value}}),E=e.computed(()=>{var Q;const Y=(Q=a.media)==null?void 0:Q.url;return!!(Y&&/^https?:/i.test(Y))}),S=e.ref(0),P=e.computed(()=>{var Q;if(s.totalDuration.value>0)return s.totalDuration.value;if(S.value>0)return S.value;const Y=Number((Q=a.media)==null?void 0:Q.duration);return Number.isFinite(Y)&&Y>0?Y:0}),C=Y=>{!Number.isFinite(Y)||Y<=0||(S.value=Y,s.updateSourceDuration(Y))},A=Y=>{Y&&typeof Y.time=="number"&&Number.isFinite(Y.time)&&s.seekTo(Y.time)},R=Y=>{Number.isFinite(Y)&&s.seekTo(Y)},W=Y=>{s.setPlaying(Y)},O=e.computed(()=>l.videoCompatibleFilters.value.map(Q=>{var Ee;const ye=[];if(Q.controls&&Q.controls.length>0)for(const Ne of Q.controls){const Ue=Ne.type;if(Ue==="button"||Ue==="text"||Ue==="range")continue;const Le={id:Ne.property||Ne.id,label:Ne.label||Ne.id,type:Ue,default:Ne.default??(Ue==="toggle"?!1:Ue==="color"?"#ffffff":0)};Ue==="slider"&&(Le.min=Ne.min??0,Le.max=Ne.max??1,Le.step=Ne.step??.01),Ue==="select"&&Ne.options&&(Le.options=Ne.options),ye.push(Le)}else if(Q.paramRanges){const Ne=Object.entries(Q.paramRanges);for(const[Ue,Le]of Ne){const mt=Ue.replace(/[-_]/g," ").replace(/\b\w/g,Pt=>Pt.toUpperCase()),kn=(Ee=Q.defaultParams)==null?void 0:Ee[Ue],Nt=(Le.min+Le.max)/2;ye.push({id:Ue,label:mt,min:Le.min,max:Le.max,step:Le.step??.01,default:typeof kn=="number"?kn:Nt})}}return{id:Q.id,name:Q.name,category:Q.category,params:ye}})),I=e.computed(()=>{const Y=new Map;return l.activeFilters.value.forEach(Q=>Y.set(Q.filterId,Q)),Y}),F=e.computed(()=>{if(s.currentFrame.value)return s.currentFrame.value;const Y=a.media;return(Y==null?void 0:Y.thumbnail_url)??(Y==null?void 0:Y.url)}),k=e.shallowRef(null),$=e.ref(null),j=e.ref(null),Z=e.ref(null),K=e.ref(null),ge=e.ref(!1),we=new Map,ne=e.ref([]),N=e.ref([]),L=e.ref([]),te=e.ref(1),ae=e.ref([]),ie=Y=>{k.value=Y,Y!=null&&Y.composition&&(j.value=new ld(Y.composition),Z.value=new La(Y.composition),K.value=new cd(Y.composition));try{we.size&&k.value&&(we.forEach((Q,ye)=>{k.value.setClipFilters(ye,Q)}),we.clear(),k.value.composition.computeFrame())}catch{}},he=Y=>{k.value?k.value.setClipFilters(Y,l.activeFilters.value):we.set(Y,[...l.activeFilters.value])},se=Y=>{var ye,Ee;const Q=((ye=s.selectedClip.value)==null?void 0:ye.id)??((Ee=s.timelineClips.value[0])==null?void 0:Ee.id);Q&&(ge.value=!0,typeof Y=="object"&&Y!==null&&"id"in Y?l.applyFilter(Y.id):typeof Y=="string"&&l.applyFilter(Y),s.setFilters(l.activeFilters.value),he(Q),s.handleClipSelect(Q),ge.value=!1,T())},fe=Y=>{var Ee,Ne;const Q=l.activeFilters.value.find(Ue=>Ue.filterId===Y);Q&&l.removeFilter(Q.id),s.setFilters(l.activeFilters.value);const ye=((Ee=s.selectedClip.value)==null?void 0:Ee.id)??((Ne=s.timelineClips.value[0])==null?void 0:Ne.id);ye&&he(ye),T()},xe=(Y,Q,ye)=>{var Ue,Le;const Ee=l.activeFilters.value.find(mt=>mt.filterId===Y);if(Ee){Ee.params={...Ee.params??{},[Q]:ye},s.setFilters(l.activeFilters.value);const mt=((Ue=s.selectedClip.value)==null?void 0:Ue.id)??((Le=s.timelineClips.value[0])==null?void 0:Le.id);mt&&he(mt),T();return}const Ne=l.previewFilter.value;Ne&&Ne.filterId===Y&&(Ne.params={...Ne.params??{},[Q]:ye})},le=Y=>{Y&&typeof Y.id=="string"&&Y.id!==""&&l.previewFilterEffect(Y.id)},de=Y=>{l.updateFilterParams(Y),s.setFilters(l.activeFilters.value),T()},Ve=async Y=>{if(!j.value)return;const Q=await j.value.addTextOverlay(Y);ne.value.push({id:Q,...Y})},Be=async(Y,Q)=>{if(!j.value)return;await j.value.updateTextOverlay(Y,Q);const ye=ne.value.findIndex(Ee=>Ee.id===Y);ye!==-1&&(ne.value[ye]={...ne.value[ye],...Q})},dt=async Y=>{j.value&&(await j.value.removeTextOverlay(Y),ne.value=ne.value.filter(Q=>Q.id!==Y))},Ke=async Y=>{if(!Z.value||ae.value.length<2)return;const[Q,ye]=ae.value,Ee=await Z.value.applyTransition(Q,ye,Y);N.value.push({id:Ee,...Y,name:Y.type})},bt=Y=>{if(!Z.value)return;const Q=N.value[Y];Q&&(Z.value.removeTransition(Q.id),N.value.splice(Y,1))},et=Y=>{},at=async Y=>{if(!K.value)return;const Q=await K.value.addAudioTrack(Y);L.value.push({id:Q,...Y})},wt=async(Y,Q)=>{if(!K.value)return;const ye=L.value.findIndex(Ee=>Ee.id===Y);ye!==-1&&(L.value[ye]={...L.value[ye],...Q})},Vt=async Y=>{K.value&&(await K.value.removeAudioTrack(Y),L.value=L.value.filter(Q=>Q.id!==Y))},rt=async(Y,Q)=>{if(!K.value)return;await K.value.updateVolume(Y,Q);const ye=L.value.find(Ee=>Ee.id===Y);ye&&(ye.volume=Q)},vt=async(Y,Q)=>{if(!K.value)return;await K.value.muteTrack(Y,Q);const ye=L.value.find(Ee=>Ee.id===Y);ye&&(ye.muted=Q)},ue=Y=>{K.value&&(K.value.setMasterVolume(Y),te.value=Y)},Se=Y=>{var Q;return Y.metadata||(Y.metadata={created_at:new Date().toISOString(),editor_version:"2.0.0"}),Y.metadata.fit_mode=V.value,(Q=a.media)!=null&&Q.url&&/^https?:/i.test(a.media.url)?Y.metadata.source_url=a.media.url:delete Y.metadata.source_url,Y},Te=()=>{$.value=Se(s.generateRecipe())};let je=null;const T=()=>{je&&clearTimeout(je),je=setTimeout(()=>{Te(),je=null},200)};e.watch(()=>s.timelineClips.value,T,{deep:!0}),e.watch(()=>s.selectedClip.value,Y=>{if(ge.value||!Y)return;const Q=(Y==null?void 0:Y.filters)??[];l.setActiveFilters(Q)},{immediate:!0}),e.watch(()=>l.activeFilters.value,Y=>{s.setFilters(Y),T()},{deep:!0}),e.watch(()=>ne.value,Y=>{s.setTextOverlays(Y),T()},{deep:!0}),e.watch(()=>L.value,Y=>{const Q=Y.map(ye=>({...ye,source:typeof ye.source=="string"?ye.source:void 0}));s.setAudioTracks(Q),T()},{deep:!0}),e.watch(()=>s.playheadPosition.value,T),Te();const z=e.ref(!0),G=e.computed(()=>!!s.selectedClip.value&&s.playheadPosition.value>0),ee=e.computed(()=>!!s.selectedClip.value&&s.timelineClips.value.length>1),pe=Y=>{z.value=Y},be=()=>{z.value=!z.value},$e=Y=>{const Q=Y.target;if(!Q)return;const ye=Number(Q.value);Number.isFinite(ye)&&s.setZoomLevel(ye)},Ae=e.ref(!1),Re=e.ref(0),Pe=e.ref(!1),Je=e.ref(null),tt=e.ref(null);let xt=null,Ht=!1;const nt=()=>new vi(a.serverRenderEndpoint??"/api/v1"),Xt=()=>{xt!==null&&(clearInterval(xt),xt=null)},jn=Y=>{Xt();const Q=nt();xt=setInterval(async()=>{if(Ht){Xt();return}try{const ye=await Q.getJob(Y),Ee=Number(ye.progress??0);if(Re.value=Number.isFinite(Ee)?Ee:0,i("server-render-progress",Re.value),ye.status==="completed"||ye.status==="failed"||ye.status==="cancelled")if(Xt(),Ae.value=!1,tt.value=null,ye.status==="completed"){Re.value=100,Pe.value=!0,Je.value=null;const Ne=typeof ye.output_media_id=="string"?ye.output_media_id:void 0,Ue={id:Y};Ne!==void 0&&(Ue.output_media_id=Ne),i("server-render-completed",Ue)}else{const Ne=ye.status==="cancelled"||typeof ye.error_message=="string"&&/cancel/i.test(ye.error_message),Ue=Ne?"Export canceled.":typeof ye.error_message=="string"&&ye.error_message.trim()!==""?ye.error_message:"Export failed";Je.value=Ue,Ne||i("server-render-failed",Ue)}}catch(ye){Xt(),Ae.value=!1,tt.value=null;const Ee=ye instanceof Error?ye.message:"Failed to check export progress";Je.value=Ee,i("server-render-failed",Ee)}},2e3)},pa=Y=>{const Q=new Blob([JSON.stringify(Y,null,2)],{type:"application/json"}),ye=URL.createObjectURL(Q),Ee=document.createElement("a");Ee.href=ye,Ee.download=`video-recipe-${Date.now()}.json`,Ee.click(),setTimeout(()=>URL.revokeObjectURL(ye),100)},Wn=async Y=>{Xt(),Ht=!1,tt.value=null,Je.value=null,Pe.value=!1,Ae.value=!0,Re.value=0;try{const Q=Se(s.generateRecipe());i("recipe-generated",Q);const ye=!!a.serverRenderEndpoint,Ee=r.value.startsWith("temp-");if(!ye||Ee){pa(Q),Ae.value=!1,Re.value=100,Pe.value=!0,Je.value=Ee?"Local media — downloaded recipe.json. Switch to V1 for PIXI-based client export.":"No server render endpoint configured — downloaded recipe.json.";return}const Ue=await nt().createJob({source_media_id:r.value,recipe:Q}),Le=typeof Ue.id=="string"?Ue.id:null;if(!Le)throw new Error("Export failed: missing job id");tt.value=Le,i("export-started",Le),i("server-render-started",Le),jn(Le)}catch(Q){const ye=Se(s.generateRecipe());pa(ye);const Ee=Q instanceof Error?Q.message:"Export failed";Ae.value=!1,Re.value=0,tt.value=null,Je.value=Ee,i("server-render-failed",Ee)}},Qa=async()=>{Ht=!0;const Y=tt.value;if(Xt(),Ae.value=!1,Re.value=0,Je.value="Export canceled.",tt.value=null,Y&&a.serverRenderEndpoint)try{await nt().cancelJob(Y)}catch{}},fa=()=>{s.togglePlayback()},Zn=()=>{s.resetChanges()},ha=()=>{const Y=s.saveDraft();i("draft-saved",Y)},wn=()=>{Wn()},wi=()=>{i("close")};return n({saveDraft:async()=>{const Y=s.saveDraft();return i("draft-saved",Y),Y},exportForUpload:async Y=>null}),e.onMounted(()=>{document.documentElement.setAttribute("data-video-editor-version","v2")}),e.onBeforeUnmount(()=>{document.documentElement.getAttribute("data-video-editor-version")==="v2"&&document.documentElement.removeAttribute("data-video-editor-version")}),e.onUnmounted(()=>{Xt(),Ht=!0,je&&(clearTimeout(je),je=null),k.value&&(k.value.destroy(),k.value=null),j.value=null,Z.value=null,K.value=null}),(Y,Q)=>(e.openBlock(),e.createBlock(t_,{"data-testid":"video-editor-v2"},{toolbar:e.withCtx(()=>[e.createElementVNode("div",p_,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["v2-toolbar-btn",{"is-active":e.unref(s).isPlaying.value}]),"data-testid":"v2-btn-play","aria-label":e.unref(s).isPlaying.value?"Pause":"Play",onClick:fa},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(s).isPlaying.value?e.unref(Gr):e.unref(Jr),"aria-hidden":"true"},null,8,["icon"])],10,f_),e.createElementVNode("button",{type:"button",class:"v2-toolbar-btn","data-testid":"v2-btn-reset","aria-label":"Reset all changes",disabled:!e.unref(s).hasChanges.value,onClick:Zn},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Un),"aria-hidden":"true"},null,8,["icon"])],8,h_)]),Q[11]||(Q[11]=e.createElementVNode("div",{class:"v2-toolbar-title","aria-live":"polite"},[e.createElementVNode("span",{class:"v2-toolbar-badge"},"V2"),e.createTextVNode(" Video Editor ")],-1)),e.createElementVNode("div",v_,[e.createElementVNode("label",g_,[Q[9]||(Q[9]=e.createElementVNode("span",{class:"sr-only"},"Fit mode",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":Q[0]||(Q[0]=ye=>V.value=ye),"aria-label":"Fit mode","data-testid":"v2-select-fit-mode"},[...Q[8]||(Q[8]=[e.createElementVNode("option",{value:"contain"},"Contain",-1),e.createElementVNode("option",{value:"cover"},"Cover",-1),e.createElementVNode("option",{value:"none"},"None",-1)])],512),[[e.vModelSelect,V.value]])]),e.createElementVNode("button",{type:"button",class:"v2-toolbar-btn","data-testid":"v2-btn-save","aria-label":"Save draft",disabled:!e.unref(s).hasChanges.value,onClick:ha},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Xo),"aria-hidden":"true"},null,8,["icon"]),Q[10]||(Q[10]=e.createElementVNode("span",{class:"v2-toolbar-btn-label"},"Save",-1))],8,y_),e.createElementVNode("button",{type:"button",class:"v2-toolbar-btn","data-testid":"v2-btn-export","aria-label":"Export",disabled:Ae.value,onClick:wn},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(aa),"aria-hidden":"true"},null,8,["icon"])],8,b_),e.createElementVNode("button",{type:"button",class:"v2-toolbar-btn","data-testid":"v2-btn-close","aria-label":"Close editor",onClick:wi},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Rn),"aria-hidden":"true"},null,8,["icon"])])])]),canvas:e.withCtx(()=>[e.createElementVNode("div",w_,[e.withDirectives(e.createVNode(fr,{class:"v2-preview-child","aria-hidden":!p.value,source:f.value,"fallback-duration":P.value,filters:_.value,playhead:D.value,"is-playing":e.unref(s).isPlaying.value,"fit-mode":V.value,active:p.value,onPlayPause:fa,onFrameUpdate:A,onDurationChange:C},null,8,["aria-hidden","source","fallback-duration","filters","playhead","is-playing","fit-mode","active"]),[[e.vShow,p.value]]),e.withDirectives(e.createVNode(Mr,{class:"v2-preview-child","aria-hidden":!v.value,"media-uuid":r.value,recipe:$.value,media:B.value,"enable-engine":v.value&&E.value,"fit-mode":V.value,onTimeUpdate:R,onPlayStateChange:W,onDurationChange:C,onEngineReady:ie},null,8,["aria-hidden","media-uuid","recipe","media","enable-engine","fit-mode"]),[[e.vShow,v.value]])])]),timeline:e.withCtx(()=>{var ye,Ee;return[e.createElementVNode("div",k_,[e.createElementVNode("div",__,[e.createElementVNode("label",E_,[Q[12]||(Q[12]=e.createElementVNode("span",null,"Zoom",-1)),e.createElementVNode("input",{type:"range",min:"10",max:"600",value:e.unref(s).zoomLevel.value,"aria-label":"Timeline zoom","data-testid":"v2-timeline-zoom",onInput:$e},null,40,x_),e.createElementVNode("span",C_,e.toDisplayString(Math.round(e.unref(s).zoomLevel.value))+" px/s",1)]),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["v2-toolbar-btn v2-toolbar-btn--ghost",{"is-active":z.value}]),"data-testid":"v2-btn-snap-toggle","aria-pressed":z.value?"true":"false",onClick:be},e.toDisplayString(z.value?"Snap On":"Snap Off"),11,S_)]),e.createVNode(Br,{playhead:e.unref(s).playheadPosition.value,clips:e.unref(s).timelineClips.value,"selected-clip-id":((ye=e.unref(s).selectedClip.value)==null?void 0:ye.id)??((Ee=e.unref(s).timelineClips.value[0])==null?void 0:Ee.id)??null,duration:P.value,"zoom-level":e.unref(s).zoomLevel.value,"snap-enabled":z.value,sensitivity:.25,"onUpdate:playhead":Q[1]||(Q[1]=Ne=>e.unref(s).seekTo(Ne)),onTrim:Q[2]||(Q[2]=(Ne,Ue,Le)=>e.unref(s).handleTrim(Ne,Ue,Le)),onSplit:Q[3]||(Q[3]=Ne=>e.unref(s).handleSplit(Ne)),onClipSelect:Q[4]||(Q[4]=Ne=>e.unref(s).handleClipSelect(Ne)),onClipMove:Q[5]||(Q[5]=(Ne,Ue)=>e.unref(s).moveClip(Ne,Ue)),onSnapStateChange:pe},null,8,["playhead","clips","selected-clip-id","duration","zoom-level","snap-enabled"]),e.createVNode(ad,{"selected-clip":e.unref(s).selectedClip.value,"can-split":G.value,"can-delete":ee.value,"is-playing":e.unref(s).isPlaying.value,"zoom-level":e.unref(s).zoomLevel.value,"playback-speed":e.unref(s).playbackSpeed.value,onSplit:e.unref(s).splitAtPlayhead,onDelete:e.unref(s).deleteSelectedClip,onDuplicate:e.unref(s).duplicateSelectedClip,onZoomIn:e.unref(s).zoomIn,onZoomOut:e.unref(s).zoomOut,onZoomChange:e.unref(s).setZoomLevel,onFitToWindow:e.unref(s).fitToWindow,onPlayPause:fa,onFrameForward:e.unref(s).frameForward,onFrameBackward:e.unref(s).frameBackward,onSkipToStart:e.unref(s).skipToStart,onSkipToEnd:e.unref(s).skipToEnd,onSpeedChange:e.unref(s).setPlaybackSpeed},null,8,["selected-clip","can-split","can-delete","is-playing","zoom-level","playback-speed","onSplit","onDelete","onDuplicate","onZoomIn","onZoomOut","onZoomChange","onFitToWindow","onFrameForward","onFrameBackward","onSkipToStart","onSkipToEnd","onSpeedChange"])])]}),inspector:e.withCtx(()=>[e.createVNode(Xl,{"active-tab":c.value,"onUpdate:activeTab":Q[6]||(Q[6]=ye=>c.value=ye),tabs:u.value},{filters:e.withCtx(()=>[e.createVNode(Fr,{filters:O.value,"active-filters":I.value,"thumbnail-url":F.value,onApplyFilter:se,onRemoveFilter:fe,onUpdateParam:xe,onPreviewFilter:le},null,8,["filters","active-filters","thumbnail-url"])]),adjustments:e.withCtx(()=>[e.unref(l).selectedFilter.value?(e.openBlock(),e.createBlock(Ir,{key:0,filter:e.unref(l).selectedFilter.value,"current-frame":e.unref(s).currentFrame.value,onUpdateParams:de},null,8,["filter","current-frame"])):(e.openBlock(),e.createElementBlock("div",V_,[...Q[13]||(Q[13]=[e.createElementVNode("p",null,"Select a filter from the Filters tab to adjust its parameters.",-1)])]))]),text:e.withCtx(()=>[e.createVNode(Rr,{overlays:ne.value,onAddOverlay:Ve,onUpdateOverlay:Be,onRemoveOverlay:dt},null,8,["overlays"])]),transitions:e.withCtx(()=>[e.createVNode(Dr,{"selected-clips":ae.value,"applied-transitions":N.value,onApplyTransition:Ke,onRemoveTransition:bt,onPreviewTransition:et},null,8,["selected-clips","applied-transitions"])]),audio:e.withCtx(()=>[e.createVNode(Ar,{"audio-layers":L.value,"master-volume":te.value,onAddTrack:at,onUpdateTrack:wt,onRemoveTrack:Vt,onUpdateVolume:rt,onToggleMute:vt,onUpdateMasterVolume:ue},null,8,["audio-layers","master-volume"])]),export:e.withCtx(()=>[e.createVNode($r,{"can-export":e.unref(s).hasChanges.value,"is-exporting":Ae.value,"export-progress":Re.value,onExport:Wn,onCancelExport:Qa,onSaveDraft:ha,onReset:Zn},null,8,["can-export","is-exporting","export-progress"]),Pe.value?(e.openBlock(),e.createElementBlock("div",N_," Export complete ")):e.createCommentVNode("",!0),Je.value&&!Pe.value?(e.openBlock(),e.createElementBlock("div",T_,e.toDisplayString(Je.value),1)):e.createCommentVNode("",!0)]),_:1},8,["active-tab","tabs"])]),drawer:e.withCtx(()=>[e.createVNode(m_,{"initial-snap":"half","aria-label":"Video editor controls"},{default:e.withCtx(()=>[e.createVNode(Xl,{"active-tab":c.value,"onUpdate:activeTab":Q[7]||(Q[7]=ye=>c.value=ye),tabs:u.value,compact:""},{filters:e.withCtx(()=>[e.createVNode(Fr,{filters:O.value,"active-filters":I.value,"thumbnail-url":F.value,onApplyFilter:se,onRemoveFilter:fe,onUpdateParam:xe,onPreviewFilter:le},null,8,["filters","active-filters","thumbnail-url"])]),adjustments:e.withCtx(()=>[e.unref(l).selectedFilter.value?(e.openBlock(),e.createBlock(Ir,{key:0,filter:e.unref(l).selectedFilter.value,"current-frame":e.unref(s).currentFrame.value,onUpdateParams:de},null,8,["filter","current-frame"])):(e.openBlock(),e.createElementBlock("div",M_,[...Q[14]||(Q[14]=[e.createElementVNode("p",null,"Select a filter from the Filters tab to adjust its parameters.",-1)])]))]),text:e.withCtx(()=>[e.createVNode(Rr,{overlays:ne.value,onAddOverlay:Ve,onUpdateOverlay:Be,onRemoveOverlay:dt},null,8,["overlays"])]),transitions:e.withCtx(()=>[e.createVNode(Dr,{"selected-clips":ae.value,"applied-transitions":N.value,onApplyTransition:Ke,onRemoveTransition:bt,onPreviewTransition:et},null,8,["selected-clips","applied-transitions"])]),audio:e.withCtx(()=>[e.createVNode(Ar,{"audio-layers":L.value,"master-volume":te.value,onAddTrack:at,onUpdateTrack:wt,onRemoveTrack:Vt,onUpdateVolume:rt,onToggleMute:vt,onUpdateMasterVolume:ue},null,8,["audio-layers","master-volume"])]),export:e.withCtx(()=>[e.createVNode($r,{"can-export":e.unref(s).hasChanges.value,"is-exporting":Ae.value,"export-progress":Re.value,onExport:Wn,onCancelExport:Qa,onSaveDraft:ha,onReset:Zn},null,8,["can-export","is-exporting","export-progress"]),Pe.value?(e.openBlock(),e.createElementBlock("div",B_,"Export complete")):e.createCommentVNode("",!0),Je.value&&!Pe.value?(e.openBlock(),e.createElementBlock("div",F_,e.toDisplayString(Je.value),1)):e.createCommentVNode("",!0)]),_:1},8,["active-tab","tabs"])]),_:1})]),_:1}))}}),$_=Me(I_,[["__scopeId","data-v-be70d186"]]),Wt=o=>o===null||typeof o!="object"||Array.isArray(o)?null:o,Ge=o=>{if(typeof o=="number"&&Number.isFinite(o))return o;if(typeof o=="string"){const n=Number(o);return Number.isFinite(n)?n:null}return null},R_=(o,n)=>{if(n===null)return;const t=Wt(o.source)??{},a=Ge(t.duration);if(!(a!==null&&a>0&&a<=1&&n>a))return;t.duration=n,o.source=t;const r=Array.isArray(o.timeline)?o.timeline:[];if(r.length===1){const c=Wt(r[0]);if(c!==null){const d=Ge(c.sourceIn)??0,u=Ge(c.sourceOut)??Ge(c.end)??Ge(c.timelineEnd);if(d===0&&u!==null&&u>0&&u<=1){c.sourceOut=n;const h=Ge(c.end);h!==null&&h>0&&h<=1&&(c.end=n);const p=Ge(c.timelineEnd);p!==null&&p>0&&p<=1&&(c.timelineEnd=n)}}}const s=Ge(o.trimEnd)??Ge(o.trim_end);s!==null&&s>0&&s<=1&&(o.trimEnd=n);const l=Wt(o.trim);if(l!==null){const c=Ge(l.end);c!==null&&c>0&&c<=1&&(l.end=n,o.trim=l)}},D_=(o,n)=>{if(!o)return!1;const t=Wt(o);if(t===null)return!1;const a=Wt(t.trim),i=Wt(t.source),s=Ge(i==null?void 0:i.duration)??n,l=Array.isArray(o.filters)&&o.filters.length>0;let c=!1;if(Array.isArray(o.timeline)&&o.timeline.length===1){const p=o.timeline[0];p&&Array.isArray(p.filters)&&p.filters.length>0&&(c=!0)}let d=!1;const u=Ge(t.trimStart)??Ge(t.trim_start)??Ge(a==null?void 0:a.start),m=Ge(t.trimEnd)??Ge(t.trim_end)??Ge(a==null?void 0:a.end);if(u!==null&&u>0&&(d=!0),m!==null&&s!==void 0&&m<s&&(d=!0),!d&&Array.isArray(o.timeline)&&o.timeline.length===1){const p=o.timeline[0];if(p){const v=Ge(p.sourceIn),g=Ge(p.sourceOut);v!==null&&v>0&&(d=!0),g!==null&&s!==void 0&&g<s&&(d=!0)}}let h=!1;if(Array.isArray(o.timeline)&&o.timeline.length===1){const p=o.timeline[0];if(p){const v=Ge(p.speed);h=v!==null&&v!==1}}return l||c||d||h},Dd=o=>{if(!o)return!1;const n=Wt(o);return n===null?!1:!!(Array.isArray(n.textOverlays)&&n.textOverlays.length>0||Array.isArray(n.transitions)&&n.transitions.length>0||Array.isArray(o.timeline)&&o.timeline.length>1)},A_=(o,n={})=>{var h,p;const t=JSON.parse(JSON.stringify(o)),a=Array.isArray(t.timeline)?t.timeline:[],i=a.length>0?Wt(a[0]):null,r=Array.isArray(i==null?void 0:i.filters)?i.filters:[],s=Array.isArray(t.filters)?t.filters:[];if(s.length>0?t.filters=s:t.filters=r,a.length===1&&i!==null){const v=Ge(i.sourceIn),g=Ge(i.sourceOut);v!==null&&t.trimStart===void 0&&(t.trimStart=v),g!==null&&t.trimEnd===void 0&&(t.trimEnd=g)}const l=Wt(t.trim);if(t.trimStart===void 0){const v=Ge(l==null?void 0:l.start);v!==null&&(t.trimStart=v)}if(t.trimEnd===void 0){const v=Ge(l==null?void 0:l.end);v!==null&&(t.trimEnd=v)}const c=Wt(t.source),d=Ge(t.width)??Ge(c==null?void 0:c.original_width)??Ge((h=n.exportMeta)==null?void 0:h.width);d!==null&&(t.width=d);const u=Ge(t.height)??Ge(c==null?void 0:c.original_height)??Ge((p=n.exportMeta)==null?void 0:p.height);u!==null&&(t.height=u);const m=Wt(t.output);return t.fps=Ge(t.fps)??Ge(m==null?void 0:m.fps)??30,R_(t,n.mediaDuration??null),t},L_={key:0},U_=["data-testid"],O_={class:"ve-mobile-header"},P_=["data-testid"],z_={class:"ve-mobile-title"},j_=["data-testid","disabled"],W_={key:1,class:"ve-mobile-spacer","aria-hidden":"true"},Z_={class:"ve-body"},H_=["data-testid"],X_=["aria-label"],G_={class:"ve-header"},J_={class:"ve-title"},Y_=["data-testid"],q_={class:"ve-body"},K_={class:"ve-footer"},Q_=["data-testid"],eE=["data-testid","disabled"],tE=e.defineComponent({__name:"VideoEditorDialog",props:{open:{type:Boolean,default:!0},mediaUuid:{},initialRecipe:{},media:{},showThumbnailPicker:{type:Boolean,default:!1},title:{default:"Edit Video"},workflowMode:{default:"full"},featureFlags:{},clientExportThreshold:{default:20},maxDuration:{default:300},serverRenderEndpoint:{default:null},saveImmediate:{type:Boolean,default:!0},confirmText:{default:"Save"},savingText:{default:"Rendering..."},closeText:{default:"Cancel"},dataTestId:{default:"video-editor-dialog"},editorVersion:{}},emits:["update:open","close","recipe-generated","export-started","draft-saved","thumbnail-selected","video-exported","save-recipe","save-started","save-complete","save-error"],setup(o,{expose:n,emit:t}){const a=o,i=t,r=e.computed(()=>a.dataTestId),s=e.computed(()=>a.open),l=e.computed(()=>a.saveImmediate===!1),c=e.computed(()=>a.closeText),d=e.computed(()=>m.value?a.savingText:a.confirmText),u=e.ref(typeof window<"u"?window.innerWidth<768:!1),m=e.ref(!1),h=e.ref(!1),p=e.ref(null),v=`temp-${Date.now()}`,g=e.computed(()=>{var k;const F=(k=a.featureFlags)==null?void 0:k.export;return typeof F=="boolean"?F:a.workflowMode==="full"}),w=e.computed(()=>{if(a.editorVersion==="v1"||a.editorVersion==="v2")return a.editorVersion;if(typeof window>"u")return"v1";try{const F=new URLSearchParams(window.location.search),k=F.get("editor")??F.get("video-editor");if(k==="v2")return"v2";if(k==="v1")return"v1"}catch{}return"v1"}),M=e.computed(()=>w.value==="v2"?$_:Rd),V=e.computed(()=>typeof a.mediaUuid=="string"&&a.mediaUuid.trim()!==""?a.mediaUuid.trim():a.media&&a.media.uuid.trim()!==""?a.media.uuid.trim():v),b=e.computed(()=>{const F={showThumbnailPicker:a.showThumbnailPicker,workflowMode:a.workflowMode,clientExportThreshold:a.clientExportThreshold,maxDuration:a.maxDuration,serverRenderEndpoint:a.serverRenderEndpoint};return a.featureFlags!==void 0&&(F.featureFlags=a.featureFlags),a.initialRecipe!==void 0&&(F.initialRecipe=a.initialRecipe),a.media!==void 0&&(F.media=a.media),F}),f=()=>{u.value=window.innerWidth<768};e.onMounted(()=>{window.addEventListener("resize",f)}),e.onUnmounted(()=>{window.removeEventListener("resize",f)}),e.onErrorCaptured(()=>(h.value=!0,!1));const _=F=>{const k=Array.isArray(F.timeline)?F.timeline:[];if(k.length===0)return 0;let $=0;for(const j of k){const Z=Number(j.sourceIn),K=Number(j.sourceOut),ge=Number(j.speed??1),we=Number.isFinite(ge)&&ge>0?ge:1;if(Number.isFinite(Z)&&Number.isFinite(K)&&K>Z){$+=(K-Z)/we;continue}const ne=Number(j.timelineStart),N=Number(j.timelineEnd);Number.isFinite(ne)&&Number.isFinite(N)&&N>ne&&($+=N-ne)}return $},D=(F,k,$)=>{let j=null;const Z=new Promise((K,ge)=>{j=setTimeout(()=>ge(new Error(`${$} timed out after ${k}ms`)),k)});return Promise.race([F,Z]).finally(()=>{j!==null&&clearTimeout(j)})},B=()=>{var Z;const $=(Z=a.media)==null?void 0:Z.duration;if(typeof $!="number"||!Number.isFinite($)||$<=0)return 12e3;const j=Math.round($*1e3);return Math.min(45e3,Math.max(12e3,j))},E=()=>{i("close"),i("update:open",!1)},S=()=>{m.value=!1,E()},P=F=>{i("recipe-generated",F)},C=F=>{i("export-started",F),i("save-started",F)},A=F=>{i("video-exported",F)},R=F=>{i("thumbnail-selected",F)},W=(F,k,$)=>{i("save-recipe",F);const j={recipe:F,exportPayload:k};$!==void 0&&(j.toastDescription=$),i("save-complete",j),E()},O=F=>{m.value||(i("draft-saved",F),W(F,null))},I=async()=>{var F;if(!m.value){if(h.value||p.value===null){i("save-error",{code:"save-failed",message:"Unable to save video edits. Please try again."}),E();return}m.value=!0;try{const k=await D(p.value.saveDraft(),B(),"saveDraft");let $=null,j=!1,Z;const K=_(k),ge=K>0?K:((F=a.media)==null?void 0:F.duration)??0;if(g.value&&ge>0&&ge<=a.clientExportThreshold&&typeof p.value.exportForUpload=="function"){j=!0;const ne=Math.min(9e4,Math.max(15e3,a.clientExportThreshold*2e3));try{$=await D(p.value.exportForUpload(k),ne,"exportForUpload")}catch{$=null}}if(Dd(k)&&$===null){i("save-error",{code:"unsupported-client-export-required",message:"These edits require in-browser export. Shorten the clip or remove text overlays, transitions, or extra clips and try again."});return}j&&$===null&&(Z="Video edits saved. Final render will happen when you share."),W(k,$,Z)}catch{i("save-error",{code:"save-failed",message:"Unable to save video edits. Please try again."}),E()}finally{m.value=!1}}};return n({saveDraft:I}),(F,k)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[s.value?(e.openBlock(),e.createElementBlock("div",L_,[u.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"ve-fullscreen","data-testid":r.value},[e.createElementVNode("header",O_,[e.createElementVNode("button",{class:"ve-mobile-action",type:"button","data-testid":`${r.value}-close-button`,onClick:S},e.toDisplayString(c.value),9,P_),e.createElementVNode("h2",z_,e.toDisplayString(F.title),1),l.value?(e.openBlock(),e.createElementBlock("button",{key:0,class:"ve-mobile-action ve-mobile-action--primary",type:"button","data-testid":`${r.value}-confirm-button`,disabled:m.value,onClick:I},e.toDisplayString(d.value),9,j_)):(e.openBlock(),e.createElementBlock("span",W_))]),e.createElementVNode("section",Z_,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(M.value),e.mergeProps({ref_key:"videoEditorRef",ref:p,"media-uuid":V.value,"data-editor-version":w.value},b.value,{onClose:S,onDraftSaved:O,onExportStarted:C,onRecipeGenerated:P,onThumbnailSelected:R,onVideoExported:A}),null,16,["media-uuid","data-editor-version"]))])],8,U_)):(e.openBlock(),e.createElementBlock("div",{key:1,class:"ve-overlay","data-testid":r.value,onClick:e.withModifiers(S,["self"])},[e.createElementVNode("div",{class:"ve-dialog",role:"dialog","aria-label":F.title,"aria-modal":"true"},[e.createElementVNode("header",G_,[e.createElementVNode("h2",J_,e.toDisplayString(F.title),1),e.createElementVNode("button",{class:"ve-close",type:"button","data-testid":`${r.value}-close-button`,"aria-label":"Close",onClick:S}," ✕ ",8,Y_)]),e.createElementVNode("section",q_,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(M.value),e.mergeProps({ref_key:"videoEditorRef",ref:p,"media-uuid":V.value,"data-editor-version":w.value},b.value,{onClose:S,onDraftSaved:O,onExportStarted:C,onRecipeGenerated:P,onThumbnailSelected:R,onVideoExported:A}),null,16,["media-uuid","data-editor-version"]))]),e.createElementVNode("footer",K_,[e.renderSlot(F.$slots,"footer",{close:S,isSaving:m.value,save:I},()=>[e.createElementVNode("button",{class:"ve-btn",type:"button","data-testid":`${r.value}-cancel-button`,onClick:S},e.toDisplayString(c.value),9,Q_),l.value?(e.openBlock(),e.createElementBlock("button",{key:0,class:"ve-btn ve-btn--primary",type:"button","data-testid":`${r.value}-confirm-button`,disabled:m.value,onClick:I},e.toDisplayString(d.value),9,eE)):e.createCommentVNode("",!0)],!0)])],8,X_)],8,H_))])):e.createCommentVNode("",!0)]))}}),nE=Me(tE,[["__scopeId","data-v-0590b48e"]]),aE={class:"video-editor-modal"},oE={class:"video-preview-container"},iE=["src"],rE={class:"video-overlay-controls"},sE=["aria-label"],lE={class:"time-display"},cE={class:"timeline-container"},dE={class:"clip-name"},uE={class:"timeline-time-labels"},mE={class:"tool-tabs"},pE=["onClick"],fE={class:"tool-panel"},hE={key:0,class:"trim-panel"},vE={class:"trim-controls"},gE={key:1,class:"filters-panel"},yE={class:"filter-grid"},bE=["onClick"],wE={key:2,class:"text-panel"},kE={key:3,class:"transitions-panel"},_E={class:"transition-grid"},EE=["onClick"],xE={class:"action-buttons"},CE=e.defineComponent({__name:"VideoEditorSimple",props:{media:{}},emits:["save","cancel"],setup(o,{emit:n}){const t=o,a=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),h=e.ref(null),p=e.ref("trim"),v=e.ref(null),g=e.ref(""),w=[{id:"trim",label:"Trim",icon:yc},{id:"filters",label:"Filters",icon:op},{id:"text",label:"Text",icon:kc},{id:"transitions",label:"Transitions",icon:mp}],M=[{id:"none",name:"None"},{id:"grayscale",name:"Grayscale"},{id:"sepia",name:"Sepia"},{id:"blur",name:"Blur"},{id:"brightness",name:"Brightness"},{id:"contrast",name:"Contrast"}],V=[{id:"fade",name:"Fade"},{id:"slide",name:"Slide"},{id:"zoom",name:"Zoom"},{id:"wipe",name:"Wipe"}],b=e.ref();e.onMounted(()=>{var k,$;(k=t.media)!=null&&k.url?r.value=t.media.url:($=t.media)!=null&&$.file&&(r.value=URL.createObjectURL(t.media.file))}),e.onUnmounted(()=>{var k;(k=t.media)!=null&&k.file&&r.value&&URL.revokeObjectURL(r.value)});function f(){i.value&&(c.value=i.value.duration,m.value=c.value)}function _(){i.value&&(l.value=i.value.currentTime)}function D(){s.value=!1}function B(){i.value&&(s.value?(i.value.pause(),s.value=!1):(i.value.play(),s.value=!0))}function E(k){if(!k||isNaN(k))return"00:00";const $=Math.floor(k/60),j=Math.floor(k%60);return`${$.toString().padStart(2,"0")}:${j.toString().padStart(2,"0")}`}function S(k){if(!i.value||!b.value)return;const $=b.value.getBoundingClientRect(),K=(k.clientX-$.left)/$.width*c.value;i.value.currentTime=Math.max(0,Math.min(K,c.value))}function P(){u.value=l.value}function C(){m.value=l.value}function A(){u.value=0,m.value=c.value}function R(k){h.value=k;const $=Z=>{if(!h.value||!b.value)return;const K=b.value.getBoundingClientRect(),ne=(Z.clientX-K.left)/K.width*c.value;h.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))},j=()=>{h.value=null,document.removeEventListener("mousemove",$),document.removeEventListener("mouseup",j)};document.addEventListener("mousemove",$),document.addEventListener("mouseup",j)}function W(k){if(v.value=k,!i.value)return;const $={none:"none",grayscale:"grayscale(100%)",sepia:"sepia(100%)",blur:"blur(5px)",brightness:"brightness(150%)",contrast:"contrast(150%)"};i.value.style.filter=$[k]||"none"}function O(){}function I(k){}function F(){const k={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:g.value?[{content:g.value}]:[],duration:m.value-u.value};a("save",k)}return(k,$)=>(e.openBlock(),e.createElementBlock("div",aE,[e.createElementVNode("div",oE,[e.createElementVNode("video",{ref_key:"videoElement",ref:i,class:"video-preview",src:r.value,onLoadedmetadata:f,onTimeupdate:_,onEnded:D,controls:""},null,40,iE),e.createElementVNode("div",rE,[e.createElementVNode("button",{class:"play-pause-btn",onClick:B,"aria-label":s.value?"Pause":"Play"},[e.createVNode(e.unref(U.IonIcon),{icon:s.value?e.unref(vp):e.unref(wp)},null,8,["icon"])],8,sE),e.createElementVNode("div",lE,e.toDisplayString(E(l.value))+" / "+e.toDisplayString(E(c.value)),1)])]),e.createElementVNode("div",cE,[e.createElementVNode("div",{class:"timeline-track",onClick:S,ref_key:"timelineTrack",ref:b},[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",dE,e.toDisplayString(d.value),1)],4),e.createElementVNode("div",{class:"timeline-playhead",style:e.normalizeStyle({left:`${l.value/c.value*100}%`})},null,4),p.value==="trim"?(e.openBlock(),e.createElementBlock("div",{key:0,class:"trim-handle trim-start",style:e.normalizeStyle({left:`${u.value/c.value*100}%`}),onMousedown:$[0]||($[0]=j=>R("start"))},null,36)):e.createCommentVNode("",!0),p.value==="trim"?(e.openBlock(),e.createElementBlock("div",{key:1,class:"trim-handle trim-end",style:e.normalizeStyle({left:`${m.value/c.value*100}%`}),onMousedown:$[1]||($[1]=j=>R("end"))},null,36)):e.createCommentVNode("",!0)],512),e.createElementVNode("div",uE,[e.createElementVNode("span",null,e.toDisplayString(E(0)),1),e.createElementVNode("span",null,e.toDisplayString(E(c.value)),1)])]),e.createElementVNode("div",mE,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(w,j=>e.createElementVNode("button",{key:j.id,class:e.normalizeClass(["tool-tab",{active:p.value===j.id}]),onClick:Z=>p.value=j.id},[e.createVNode(e.unref(U.IonIcon),{icon:j.icon},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(j.label),1)],10,pE)),64))]),e.createElementVNode("div",fE,[p.value==="trim"?(e.openBlock(),e.createElementBlock("div",hE,[$[7]||($[7]=e.createElementVNode("h3",null,"Trim Video",-1)),$[8]||($[8]=e.createElementVNode("p",null,"Click and drag on the timeline to set trim points",-1)),e.createElementVNode("div",vE,[e.createElementVNode("button",{class:"btn-trim",onClick:P},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(ll)},null,8,["icon"]),$[4]||($[4]=e.createTextVNode(" Set Start ",-1))]),e.createElementVNode("button",{class:"btn-trim",onClick:C},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(ll)},null,8,["icon"]),$[5]||($[5]=e.createTextVNode(" Set End ",-1))]),e.createElementVNode("button",{class:"btn-trim",onClick:A},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Rn)},null,8,["icon"]),$[6]||($[6]=e.createTextVNode(" Clear ",-1))])])])):p.value==="filters"?(e.openBlock(),e.createElementBlock("div",gE,[$[9]||($[9]=e.createElementVNode("h3",null,"Filters",-1)),e.createElementVNode("div",yE,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(M,j=>e.createElementVNode("button",{key:j.id,class:e.normalizeClass(["filter-option",{active:v.value===j.id}]),onClick:Z=>W(j.id)},e.toDisplayString(j.name),11,bE)),64))])])):p.value==="text"?(e.openBlock(),e.createElementBlock("div",wE,[$[10]||($[10]=e.createElementVNode("h3",null,"Text Overlay",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":$[2]||($[2]=j=>g.value=j),type:"text",placeholder:"Enter text...",class:"text-input"},null,512),[[e.vModelText,g.value]]),e.createElementVNode("button",{class:"btn-add-text",onClick:O},"Add Text")])):p.value==="transitions"?(e.openBlock(),e.createElementBlock("div",kE,[$[11]||($[11]=e.createElementVNode("h3",null,"Transitions",-1)),e.createElementVNode("div",_E,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(V,j=>e.createElementVNode("button",{key:j.id,class:"transition-option",onClick:Z=>(j.id,void 0)},e.toDisplayString(j.name),9,EE)),64))])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",xE,[e.createElementVNode("button",{class:"btn-cancel",onClick:$[3]||($[3]=j=>k.$emit("cancel"))},"CANCEL"),e.createElementVNode("button",{class:"btn-save",onClick:F},"SAVE")])]))}}),SE=Me(CE,[["__scopeId","data-v-b933f33b"]]),VE={class:"time-label"},NE=e.defineComponent({__name:"TimeRuler",props:{duration:{},zoom:{}},setup(o){const n=o,t=e.computed(()=>({width:`${n.duration*n.zoom*100}px`})),a=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(a.value,c=>(e.openBlock(),e.createElementBlock("div",{key:c.time,class:"time-mark",style:e.normalizeStyle({left:c.position})},[e.createElementVNode("span",VE,e.toDisplayString(c.label),1),e.createElementVNode("div",{class:e.normalizeClass(["time-tick",{major:c.major}])},null,2)],4))),128))],4))}}),TE=Me(NE,[["__scopeId","data-v-0ef9c910"]]),ME=["data-track-index"],BE={class:"track-header"},FE={class:"track-label"},IE={class:"track-controls"},$E=["data-testid","aria-label"],RE=["data-testid","onMousedown","onClick"],DE={class:"clip-content"},AE={class:"clip-name"},LE={key:0,class:"clip-thumbnail"},UE=["src","alt"],OE=["onMousedown","aria-label"],PE=["onMousedown","aria-label"],zE=e.defineComponent({__name:"VideoTrack",props:{clips:{},trackIndex:{},zoom:{},duration:{}},emits:["clip-move","clip-trim","clip-select"],setup(o,{emit:n}){const t=o,a=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(w){const M=w.timelineEnd-w.timelineStart,V=w.timelineStart/t.duration*100,b=M/t.duration*100;return{left:`${V}%`,width:`${b}%`,backgroundColor:u(w)}}function u(w){const M=["#4A90E2","#7ED321","#F5A623","#BD10E0","#9013FE","#50E3C2","#B8E986","#F8E71C"],V=parseInt(w.id.replace(/\D/g,""))%M.length;return M[V]}function m(w){return w.label?w.label:w.url?(w.url.split("/").pop()||"Clip").split(".")[0]:`Clip ${w.id.slice(-4)}`}function h(w){i.value=w.id,a("clip-select",w.id)}function p(){r.value=!r.value}function v(w,M){if(l.value)return;s.value=!0;const V=M.clientX,b=w.timelineStart,f=D=>{if(!s.value)return;const B=D.clientX-V,E=parseFloat(c.value.width),S=B/(t.zoom*100)*(t.duration/E),P=Math.max(0,b+S);a("clip-move",w.id,P)},_=()=>{s.value=!1,document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",_)};document.addEventListener("mousemove",f),document.addEventListener("mouseup",_)}function g(w,M,V){l.value=M;const b=V.clientX,f=w.sourceIn,_=w.sourceOut,D=E=>{if(!l.value)return;const S=E.clientX-b,P=parseFloat(c.value.width),C=S/(t.zoom*100)*(t.duration/P);if(l.value==="start"){const A=Math.max(0,f+C);a("clip-trim",w.id,A,_)}else{const A=Math.max(f+1,_+C);a("clip-trim",w.id,f,A)}},B=()=>{l.value=null,document.removeEventListener("mousemove",D),document.removeEventListener("mouseup",B)};document.addEventListener("mousemove",D),document.addEventListener("mouseup",B)}return(w,M)=>(e.openBlock(),e.createElementBlock("div",{class:"video-track","data-track-index":w.trackIndex},[e.createElementVNode("div",BE,[e.createElementVNode("span",FE,"Track "+e.toDisplayString(w.trackIndex+1),1),e.createElementVNode("div",IE,[w.clips.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,class:"track-btn","data-testid":`btn-mute-track-${w.trackIndex}`,"aria-label":`${r.value?"Unmute":"Mute"} track ${w.trackIndex+1}`,onClick:p},[e.createVNode(e.unref(U.IonIcon),{icon:r.value?e.unref(Rp):e.unref(Ip)},null,8,["icon"])],8,$E)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:"track-timeline",style:e.normalizeStyle(c.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(w.clips,V=>(e.openBlock(),e.createElementBlock("div",{key:V.id,class:e.normalizeClass(["timeline-clip",{selected:V.id===i.value}]),style:e.normalizeStyle(d(V)),"data-testid":`clip-${V.id}`,onMousedown:b=>v(V,b),onClick:b=>h(V)},[e.createElementVNode("div",DE,[e.createElementVNode("span",AE,e.toDisplayString(m(V)),1),V.thumbnail?(e.openBlock(),e.createElementBlock("div",LE,[e.createElementVNode("img",{src:V.thumbnail,alt:m(V)},null,8,UE)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",{class:"trim-handle trim-start",onMousedown:e.withModifiers(b=>g(V,"start",b),["stop"]),"aria-label":`Trim start of ${m(V)}`},null,40,OE),e.createElementVNode("div",{class:"trim-handle trim-end",onMousedown:e.withModifiers(b=>g(V,"end",b),["stop"]),"aria-label":`Trim end of ${m(V)}`},null,40,PE)],46,RE))),128))],4)],8,ME))}}),jE=Me(zE,[["__scopeId","data-v-48e480d2"]]),WE={class:"video-timeline"},ZE={class:"timeline-tracks"},HE=["aria-label","aria-valuenow","aria-valuemax"],XE={class:"timeline-controls"},GE={class:"zoom-level"},JE=e.defineComponent({__name:"VideoTimeline",props:{clips:{},duration:{},currentTime:{}},emits:["update:clips","seek","clip-move","clip-trim"],setup(o,{emit:n}){const t=o,a=n,i=e.ref(1),r=e.ref(null),s=e.ref(!1),l=e.ref(),c=e.computed(()=>{const b=Math.max(0,...t.clips.map(f=>f.track||0));return Array(b+1).fill(null)}),d=e.computed(()=>`${t.currentTime/t.duration*100}%`);function u(b){return t.clips.filter(f=>(f.track||0)===b)}function m(b){const f=Math.floor(b/60),_=Math.floor(b%60);return`${f}:${_.toString().padStart(2,"0")}`}function h(b,f){a("clip-move",b,f)}function p(b,f,_){a("clip-trim",b,f,_)}function v(b){r.value=b}function g(){i.value=Math.min(i.value*1.2,5)}function w(){i.value=Math.max(i.value/1.2,.5)}function M(){s.value=!0;const b=_=>{if(!s.value||!l.value)return;const D=l.value.getBoundingClientRect(),S=Math.max(0,Math.min(_.clientX-D.left,D.width))/D.width*t.duration;a("seek",S)},f=()=>{s.value=!1,document.removeEventListener("mousemove",b),document.removeEventListener("mouseup",f)};document.addEventListener("mousemove",b),document.addEventListener("mouseup",f)}function V(b){let f=t.currentTime;switch(b.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}b.preventDefault(),a("seek",f)}return e.onMounted(()=>{l.value=document.querySelector(".video-timeline")}),e.onUnmounted(()=>{}),(b,f)=>(e.openBlock(),e.createElementBlock("div",WE,[e.createVNode(TE,{duration:b.duration,zoom:i.value},null,8,["duration","zoom"]),e.createElementVNode("div",ZE,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(_,D)=>(e.openBlock(),e.createBlock(jE,{key:`track-${D}`,"data-testid":`track-${D}`,clips:u(D),"track-index":D,zoom:i.value,duration:b.duration,onClipMove:h,onClipTrim:p,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:M,"data-testid":"playhead","aria-label":`Playhead at ${m(b.currentTime)}`,role:"slider","aria-valuenow":b.currentTime,"aria-valuemax":b.duration,tabindex:"0",onKeydown:V},null,44,HE),e.createElementVNode("div",XE,[e.createElementVNode("button",{"data-testid":"btn-zoom-in","aria-label":"Zoom in",onClick:g},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Hr)},null,8,["icon"])]),e.createElementVNode("span",GE,e.toDisplayString(Math.round(i.value*100))+"%",1),e.createElementVNode("button",{"data-testid":"btn-zoom-out","aria-label":"Zoom out",onClick:w},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Sp)},null,8,["icon"])])])]))}}),YE=Me(JE,[["__scopeId","data-v-001df415"]]),qE={class:"video-filters-panel"},KE={class:"filter-controls"},QE=["for"],ex={class:"filter-slider-group"},tx=["id","onUpdate:modelValue","min","max","step","data-testid","aria-label","aria-valuenow","aria-valuemin","aria-valuemax","onInput"],nx={class:"filter-value"},ax={class:"filter-actions"},ox={key:0,class:"filter-presets"},ix={class:"preset-list"},rx=["data-testid","aria-label","onClick"],sx=e.defineComponent({__name:"VideoFiltersPanel",emits:["filter-change"],setup(o,{emit:n}){const t=n,a=[{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(a.reduce((h,p)=>(h[p.type]=p.default,h),{})),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(h,p){switch(h){case"brightness":case"contrast":case"saturation":case"sepia":case"grayscale":return`${p}%`;case"hue":return`${p}°`;case"blur":case"sharpen":return p.toFixed(1);default:return p.toString()}}function l(h){return["brightness","contrast","saturation","hue","blur","sharpen","sepia","grayscale"].includes(h)}function c(h){if(!l(h))return;const p={id:`filter-${h}`,filterId:h,params:{value:i[h]},intensity:1};t("filter-change",p)}function d(){a.forEach(h=>{i[h.type]=h.default,c(h.type)})}function u(){const h=prompt("Enter preset name:");if(!h)return;const p={id:`custom-${Date.now()}`,name:h,values:{...i}};r.value.push(p)}function m(h){Object.entries(h.values).forEach(([p,v])=>{i[p]=v,c(p)})}return(h,p)=>(e.openBlock(),e.createElementBlock("div",qE,[p[3]||(p[3]=e.createElementVNode("h3",null,"Video Filters",-1)),e.createElementVNode("div",KE,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,v=>e.createElementVNode("div",{key:v.type,class:"filter-control"},[e.createElementVNode("label",{for:`filter-${v.type}`},e.toDisplayString(v.label),9,QE),e.createElementVNode("div",ex,[e.withDirectives(e.createElementVNode("input",{id:`filter-${v.type}`,"onUpdate:modelValue":g=>i[v.type]=g,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:g=>c(v.type)},null,40,tx),[[e.vModelText,i[v.type],void 0,{number:!0}]]),e.createElementVNode("span",nx,e.toDisplayString(s(v.type,i[v.type])),1)])])),64))]),e.createElementVNode("div",ax,[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(U.IonIcon),{icon:e.unref(Un)},null,8,["icon"]),p[0]||(p[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(U.IonIcon),{icon:e.unref(Xo)},null,8,["icon"]),p[1]||(p[1]=e.createTextVNode(" Save as Preset ",-1))])]),r.value.length>0?(e.openBlock(),e.createElementBlock("div",ox,[p[2]||(p[2]=e.createElementVNode("h4",null,"Presets",-1)),e.createElementVNode("div",ix,[(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:g=>m(v)},e.toDisplayString(v.name),9,rx))),128))])])):e.createCommentVNode("",!0)]))}}),lx=Me(sx,[["__scopeId","data-v-5ad2ac63"]]),cx={class:"video-text-panel"},dx={class:"text-input-group"},ux={class:"text-options"},mx={class:"option-row"},px={class:"option-row"},fx={class:"option-row"},hx={class:"option-row"},vx={class:"checkbox-label"},gx={class:"option-row"},yx={class:"text-overlay-list"},bx={key:0,class:"empty-state"},wx=["data-testid"],kx={class:"overlay-preview"},_x={class:"overlay-controls"},Ex=["data-testid","aria-label","onClick"],xx=["data-testid","aria-label","onClick"],Cx=["data-testid","aria-label","onClick"],Sx=e.defineComponent({__name:"VideoTextPanel",emits:["text-add","text-remove","text-update"],setup(o,{emit:n}){const t=n,a=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),a.value.push(d),t("text-add",d),i.text=""}function s(d){const u=a.value.findIndex(m=>m.id===d);u!==-1&&(a.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};a.value.push(u),t("text-add",u)}return(d,u)=>(e.openBlock(),e.createElementBlock("div",cx,[u[17]||(u[17]=e.createElementVNode("h3",null,"Text Overlays",-1)),e.createElementVNode("div",dx,[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(U.IonIcon),{icon:e.unref(Hr)},null,8,["icon"]),u[7]||(u[7]=e.createTextVNode(" Add ",-1))])]),e.createElementVNode("div",ux,[e.createElementVNode("div",mx,[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",px,[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",fx,[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",hx,[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",vx,[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",gx,[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",yx,[u[16]||(u[16]=e.createElementVNode("h4",null,"Active Overlays",-1)),a.value.length===0?(e.openBlock(),e.createElementBlock("div",bx," No text overlays added yet ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,(m,h)=>(e.openBlock(),e.createElementBlock("div",{key:m.id,class:"text-overlay-item","data-testid":`overlay-${h}`},[e.createElementVNode("div",kx,[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",_x,[e.createElementVNode("button",{class:"edit-btn","data-testid":`btn-edit-${h}`,"aria-label":`Edit overlay: ${m.text}`,onClick:p=>l(m)},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(sp)},null,8,["icon"])],8,Ex),e.createElementVNode("button",{class:"duplicate-btn","data-testid":`btn-duplicate-${h}`,"aria-label":`Duplicate overlay: ${m.text}`,onClick:p=>c(m)},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(rp)},null,8,["icon"])],8,xx),e.createElementVNode("button",{class:"remove-btn","data-testid":`btn-remove-${h}`,"aria-label":`Remove overlay: ${m.text}`,onClick:p=>s(m.id)},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Tp)},null,8,["icon"])],8,Cx)])],8,wx))),128))])]))}}),Vx=Me(Sx,[["__scopeId","data-v-4d240e1e"]]),Nx={class:"video-tools-panel"},Tx={class:"tool-tabs"},Mx=["data-testid","aria-label","aria-selected","onClick"],Bx={class:"tool-content"},Fx={key:0,class:"trim-panel",role:"tabpanel","aria-label":"Trim controls"},Ix={class:"trim-actions"},$x={key:3,class:"transitions-panel",role:"tabpanel","aria-label":"Transition controls"},Rx={class:"transition-types"},Dx=["data-testid","aria-label","onClick"],Ax={class:"transition-preview"},Lx=e.defineComponent({__name:"VideoToolsPanel",props:{activeTool:{}},emits:["tool-change","filter-change","text-add","transition-add","trim-set-start","trim-set-end","trim-clear"],setup(o){const n=[{id:"trim",name:"Trim",icon:yc},{id:"filters",name:"Filters",icon:yn},{id:"text",name:"Text",icon:kc},{id:"transitions",name:"Transitions",icon:ul}],t=[{id:"fade",name:"Fade",icon:Yi},{id:"slide-left",name:"Slide Left",icon:Qm},{id:"slide-right",name:"Slide Right",icon:ep},{id:"dissolve",name:"Dissolve",icon:Yi},{id:"wipe",name:"Wipe",icon:ul},{id:"zoom",name:"Zoom",icon:Yi}];return(a,i)=>(e.openBlock(),e.createElementBlock("div",Nx,[e.createElementVNode("div",Tx,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(n,r=>e.createElementVNode("button",{key:r.id,class:e.normalizeClass(["tool-tab",{active:a.activeTool===r.id}]),"data-testid":`tab-${r.id}`,"aria-label":`${r.name} tool`,"aria-selected":a.activeTool===r.id,role:"tab",onClick:s=>a.$emit("tool-change",r.id)},[e.createVNode(e.unref(U.IonIcon),{icon:r.icon},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(r.name),1)],10,Mx)),64))]),e.createElementVNode("div",Bx,[a.activeTool==="trim"?(e.openBlock(),e.createElementBlock("div",Fx,[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",Ix,[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=>a.$emit("trim-set-start"))},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(cl)},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=>a.$emit("trim-set-end"))},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(cl)},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=>a.$emit("trim-clear"))},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Rn)},null,8,["icon"]),i[7]||(i[7]=e.createTextVNode(" Clear ",-1))])])])):e.createCommentVNode("",!0),a.activeTool==="filters"?(e.openBlock(),e.createBlock(lx,{key:1,onFilterChange:i[3]||(i[3]=r=>a.$emit("filter-change",r))})):e.createCommentVNode("",!0),a.activeTool==="text"?(e.openBlock(),e.createBlock(Vx,{key:2,onTextAdd:i[4]||(i[4]=r=>a.$emit("text-add",r))})):e.createCommentVNode("",!0),a.activeTool==="transitions"?(e.openBlock(),e.createElementBlock("div",$x,[i[10]||(i[10]=e.createElementVNode("h3",null,"Transitions",-1)),e.createElementVNode("div",Rx,[(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=>a.$emit("transition-add",r.id)},[e.createElementVNode("div",Ax,[e.createVNode(e.unref(U.IonIcon),{icon:r.icon},null,8,["icon"])]),e.createElementVNode("span",null,e.toDisplayString(r.name),1)],8,Dx)),64))])])):e.createCommentVNode("",!0)])]))}}),Ux=Me(Lx,[["__scopeId","data-v-fc135306"]]),Ox={class:"video-export-panel"},Px={class:"export-presets"},zx=["value"],jx={key:0,class:"preset-details"},Wx={class:"detail-row"},Zx={class:"detail-row"},Hx={class:"detail-row"},Xx={class:"advanced-options"},Gx={class:"options-content"},Jx={class:"option-group"},Yx={class:"option-group"},qx={class:"option-group"},Kx=["disabled"],Qx={key:1,class:"export-progress"},eC={class:"progress-message"},tC={class:"progress-bar"},nC=["aria-valuenow"],aC={class:"progress-percentage"},oC=e.defineComponent({__name:"VideoExportPanel",props:{presets:{},isExporting:{type:Boolean},exportProgress:{}},emits:["export"],setup(o,{emit:n}){const t=o,a=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&&a("export",{...s.value,options:{...r}})}return(d,u)=>(e.openBlock(),e.createElementBlock("div",Ox,[u[14]||(u[14]=e.createElementVNode("h3",null,"Export Video",-1)),e.createElementVNode("div",Px,[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,zx))),128))],512),[[e.vModelSelect,i.value]])]),s.value?(e.openBlock(),e.createElementBlock("div",jx,[e.createElementVNode("div",Wx,[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",Zx,[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",Hx,[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",Xx,[u[12]||(u[12]=e.createElementVNode("summary",null,"Advanced Options",-1)),e.createElementVNode("div",Gx,[e.createElementVNode("div",Jx,[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",Yx,[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",qx,[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(U.IonSpinner),{key:0,name:"crescent"})):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(aa)},null,8,["icon"]),u[13]||(u[13]=e.createTextVNode(" Export Video ",-1))],64))],8,Kx),d.isExporting?(e.openBlock(),e.createElementBlock("div",Qx,[e.createElementVNode("div",eC,e.toDisplayString(l.value),1),e.createElementVNode("div",tC,[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,nC)]),e.createElementVNode("div",aC,e.toDisplayString(d.exportProgress)+"% ",1)])):e.createCommentVNode("",!0)]))}}),iC=Me(oC,[["__scopeId","data-v-5caf8fe6"]]),rC=["data-testid"],sC={class:"progress-header"},lC={class:"file-info"},cC={class:"file-details"},dC={class:"file-name"},uC={class:"file-meta"},mC={class:"file-size"},pC={key:0,class:"separator"},fC={key:1,class:"upload-speed"},hC={key:2,class:"separator"},vC={key:3,class:"time-remaining"},gC={class:"progress-actions"},yC={key:0,class:"status-icon completed","data-testid":"video-upload-status-completed"},bC={key:1,class:"status-icon error","data-testid":"video-upload-status-error"},wC={key:2,class:"status-icon processing","data-testid":"video-upload-status-processing",role:"status","aria-label":"Processing video"},kC=["aria-valuenow","aria-label"],_C={class:"progress-bar"},EC={class:"progress-percent"},xC={key:1,class:"error-message","data-testid":"video-upload-error"},CC={key:2,class:"thumbnail-preview","data-testid":"video-upload-thumbnail"},SC=["src","alt"],VC={key:0,class:"video-duration"},NC=e.defineComponent({__name:"VideoUploadProgress",props:{upload:{}},emits:["cancel","retry","remove"],setup(o){const n=o,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"})),a=e.computed(()=>_c),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 h=n.upload.timeRemaining;if(h<60)return`${Math.round(h)}s`;const p=Math.floor(h/60);return p<60?`${p}m ${Math.round(h%60)}s`:`${Math.floor(p/60)}h ${p%60}m`}),l=e.computed(()=>{var h;return n.upload.status==="completed"&&((h=n.upload.media)!=null&&h.thumbnail_url)?n.upload.media.thumbnail_url:null}),c=e.computed(()=>{var h;return(h=n.upload.media)==null?void 0:h.duration});function d(h){if(h===0)return"0 B";const p=["B","KB","MB","GB","TB"],v=1024,g=Math.floor(Math.log(h)/Math.log(v));return`${(h/Math.pow(v,g)).toFixed(1)} ${p[g]}`}function u(h){if(h===0)return"0 B/s";const p=["B/s","KB/s","MB/s","GB/s"],v=1024,g=Math.floor(Math.log(h)/Math.log(v));return`${(h/Math.pow(v,g)).toFixed(1)} ${p[g]}`}function m(h){const p=Math.floor(h/3600),v=Math.floor(h%3600/60),g=Math.floor(h%60);return p>0?`${p}:${v.toString().padStart(2,"0")}:${g.toString().padStart(2,"0")}`:`${v}:${g.toString().padStart(2,"0")}`}return(h,p)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["upload-progress-item",t.value]),"data-testid":`video-upload-progress-${h.upload.id}`},[e.createElementVNode("div",sC,[e.createElementVNode("div",lC,[e.createVNode(e.unref(U.IonIcon),{icon:a.value,class:"file-icon","aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("div",cC,[e.createElementVNode("h4",dC,e.toDisplayString(h.upload.filename),1),e.createElementVNode("p",uC,[e.createElementVNode("span",mC,e.toDisplayString(d(h.upload.bytesTotal||0)),1),h.upload.status==="uploading"?(e.openBlock(),e.createElementBlock("span",pC,"•")):e.createCommentVNode("",!0),h.upload.status==="uploading"?(e.openBlock(),e.createElementBlock("span",fC,e.toDisplayString(u(h.upload.uploadSpeed||0)),1)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("span",hC,"•")):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("span",vC,e.toDisplayString(s.value)+" remaining ",1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",gC,[h.upload.status==="completed"?(e.openBlock(),e.createElementBlock("div",yC,[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(vc)},null,8,["icon"])])):h.upload.status==="error"?(e.openBlock(),e.createElementBlock("div",bC,[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Km),"aria-hidden":"true"},null,8,["icon"])])):h.upload.status==="processing"?(e.openBlock(),e.createElementBlock("div",wC,[e.createVNode(e.unref(U.IonSpinner),{name:"crescent"})])):e.createCommentVNode("",!0),h.upload.status==="uploading"?(e.openBlock(),e.createBlock(e.unref(U.IonButton),{key:3,fill:"clear",size:"small",onClick:p[0]||(p[0]=v=>h.$emit("cancel")),"data-testid":"btn-cancel-video-upload","aria-label":"Cancel upload"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Rn),slot:"icon-only"},null,8,["icon"])]),_:1})):h.upload.status==="error"?(e.openBlock(),e.createBlock(e.unref(U.IonButton),{key:4,fill:"clear",size:"small",onClick:p[1]||(p[1]=v=>h.$emit("retry")),"data-testid":"btn-retry-video-upload","aria-label":"Retry upload"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Un),slot:"icon-only"},null,8,["icon"])]),_:1})):h.upload.status==="completed"?(e.openBlock(),e.createBlock(e.unref(U.IonButton),{key:5,fill:"clear",size:"small",onClick:p[2]||(p[2]=v=>h.$emit("remove")),"data-testid":"btn-remove-video-upload","aria-label":"Remove from list"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Rn),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":h.upload.status==="processing"?"Processing progress":"Upload progress"},[e.createElementVNode("div",_C,[e.createElementVNode("div",{class:e.normalizeClass(["progress-fill",{indeterminate:h.upload.status==="processing"}]),style:e.normalizeStyle({width:r.value+"%"})},null,6)]),e.createElementVNode("span",EC,e.toDisplayString(Math.round(r.value))+"%",1)],8,kC)):e.createCommentVNode("",!0),h.upload.error?(e.openBlock(),e.createElementBlock("div",xC,[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Dp)},null,8,["icon"]),e.createElementVNode("span",null,e.toDisplayString(h.upload.error),1)])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",CC,[e.createElementVNode("img",{src:l.value,alt:h.upload.filename},null,8,SC),c.value?(e.openBlock(),e.createElementBlock("div",VC,e.toDisplayString(m(c.value)),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],10,rC))}}),TC=Me(NC,[["__scopeId","data-v-9eacbf91"]]),sr=4,MC=500,BC=new Set([408,425,429,500,502,503,504,520,521,522,523,524,525]);function gi(o){return typeof o=="object"&&o!==null}function Gl(o){return gi(o)?typeof o.upload_url=="string"&&typeof o.upload_id=="string"&&typeof o.media_uuid=="string"&&typeof o.expires_at=="string":!1}function FC(o){if(Gl(o))return o;if(gi(o)&&Gl(o.data))return o.data;throw new Error("Invalid upload response from backend")}function Jl(o){return gi(o)?typeof o.uuid=="string"&&typeof o.processing_status=="string":!1}function IC(o){if(Jl(o))return o;if(gi(o)&&Jl(o.data))return o.data;throw new Error("Invalid media response from backend")}function vo(o){return o?{...o}:{}}function Yl(o,n="PUT"){return typeof o.method=="string"&&o.method.trim()!==""?o.method.trim().toUpperCase():n}function $C(o){return o.resumable===!0?!0:/tusupload/i.test(o.upload_url)}function RC(o){if(typeof btoa=="function")try{return btoa(unescape(encodeURIComponent(o)))}catch{return btoa(o)}throw new Error("Base64 encoder is unavailable for TUS metadata")}function DC(o,n){return[["filename",o.filename],["filetype",o.file.type||"application/octet-stream"],["uploadid",n.upload_id],["mediauuid",n.media_uuid]].map(([a,i])=>`${a} ${RC(i)}`).join(",")}function go(o,n){const t=Math.max(o.bytesTotal,1);o.bytesUploaded=n,o.progress=Math.min(100,n/t*100);const a=Math.max((Date.now()-o.startedAt.getTime())/1e3,.001);o.uploadSpeed=n/a;const i=Math.max(t-n,0);o.timeRemaining=i/Math.max(o.uploadSpeed,1)}function AC(o,n){return o instanceof Error?o:new Error(n)}function LC(o){if(!(o instanceof Error))return!1;const n=o.message.toLowerCase();return n.includes("failed to fetch")||n.includes("networkerror")||n.includes("network request failed")||n.includes("err_ssl_")}function ql(o){const n=Math.max(0,o-1),t=MC*Math.pow(2,n);return Math.min(5e3,t)}function Kl(o){return new Promise(n=>{window.setTimeout(n,o)})}async function Ql(o,n){for(let t=1;t<=sr;t+=1)try{const a=await n();if(a.ok||!BC.has(a.status)||t>=sr)return a;await Kl(ql(t))}catch(a){if(!LC(a)||t>=sr)throw a;await Kl(ql(t))}throw new Error(`${o} failed after retry attempts`)}function UC(o={}){const n=e.ref(new Map),t=e.ref(new Set),a=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 C=Array.from(n.value.values());return C.length===0?0:C.reduce((R,W)=>R+W.progress,0)/C.length});function d(C){a.value=C}function u(){}async function m(C){var R;const A=C.filter(W=>h(W));if(A.length!==0&&((R=o.onFilesSelected)==null||R.call(o,A),o.autoUpload!==!1))for(const W of A)await p(W)}function h(C){return!(o.maxFileSize&&C.size>o.maxFileSize||o.allowedFormats&&o.allowedFormats.length>0&&!o.allowedFormats.includes(C.type))}async function p(C){var W,O,I;const A=P(C);if(n.value.has(A)){const F=n.value.get(A);if((F==null?void 0:F.status)==="uploading")return}const R={id:A,file:C,filename:C.name,progress:0,status:"pending",startedAt:new Date,bytesTotal:C.size,bytesUploaded:0};n.value.set(R.id,R),t.value.add(R.id);try{R.status="uploading",(W=o.onUploadStart)==null||W.call(o,R);const F=await v(C);o.resumable===!0||F.resumable===!0?await w(R,F):await g(R,F),R.status="processing",R.progress=100;const $=await _(F.media_uuid);R.status="completed",R.media=$,(O=o.onUploadComplete)==null||O.call(o,$)}catch(F){if(R.status!=="cancelled"){const k=AC(F,"Upload failed");R.status="error",R.error=k.message,(I=o.onUploadError)==null||I.call(o,k,R)}}finally{t.value.delete(R.id),i.delete(R.id),r.delete(R.id)}}async function v(C){if(!a.value)throw new Error("API client not configured");const A={collection:o.collection||"videos",filename:C.name,size:C.size,mime_type:C.type,...o.ownerUuid!==void 0?{ownerUuid:o.ownerUuid}:{},...o.ownerType!==void 0?{ownerType:o.ownerType}:{}},R=await a.value.post("/api/v1/video/upload",A);return FC(R)}async function g(C,A){const R=new XMLHttpRequest,W=Yl(A),O=vo(A.headers);return new Promise((I,F)=>{R.upload.addEventListener("progress",k=>{var $;k.lengthComputable&&(go(C,k.loaded),($=o.onUploadProgress)==null||$.call(o,C))}),R.addEventListener("load",()=>{i.delete(C.id),R.status>=200&&R.status<300?I():F(new Error(`Upload failed with status ${R.status}`))}),R.addEventListener("error",()=>{i.delete(C.id),F(new Error("Upload failed"))}),R.addEventListener("abort",()=>{i.delete(C.id),F(new Error("Upload cancelled"))}),R.open(W,A.upload_url),Object.entries(O).forEach(([k,$])=>{R.setRequestHeader(k,$)}),!Object.keys(O).some(k=>k.toLowerCase()==="content-type")&&C.file.type&&R.setRequestHeader("Content-Type",C.file.type),i.set(C.id,R),R.send(C.file)})}async function w(C,A){var F;if($C(A)){await M(C,A);return}const R=o.chunkSize||5*1024*1024,W=V(C.file,R),O=new AbortController;r.set(C.id,O);const I=await f(A.upload_id);I&&(W.forEach(k=>{k.end<=I.bytesUploaded&&(k.uploaded=!0)}),go(C,I.bytesUploaded));for(const k of W)k.uploaded||(await b(C,A,k,O),go(C,k.end),(F=o.onUploadProgress)==null||F.call(o,C))}async function M(C,A){var j;const R=new AbortController;r.set(C.id,R);const W={...vo(A.headers),"Tus-Resumable":"1.0.0","Upload-Length":String(C.file.size),"Upload-Metadata":DC(C,A)},O=await Ql("Resumable upload initialization",()=>fetch(A.upload_url,{method:"POST",headers:W,signal:R.signal}));if(!O.ok)throw new Error(`Failed to initialize resumable upload: ${O.status}`);const I=O.headers.get("Location");if(!I)throw new Error("Resumable upload endpoint did not return upload location");const F=new URL(I,A.upload_url).toString(),k=o.chunkSize||5*1024*1024;let $=0;for(;$<C.file.size;){const Z=Math.min($+k,C.file.size),K=C.file.slice($,Z),ge={...vo(A.headers),"Tus-Resumable":"1.0.0","Upload-Offset":String($),"Content-Type":"application/offset+octet-stream"},we=await Ql("Resumable chunk upload",()=>fetch(F,{method:"PATCH",headers:ge,body:K,signal:R.signal}));if(we.status===409){const N=Number(we.headers.get("Upload-Offset")??"-1");if(Number.isFinite(N)&&N>=0){$=N;continue}}if(!we.ok)throw new Error(`Resumable chunk upload failed: ${we.status}`);const ne=Number(we.headers.get("Upload-Offset")??String(Z));$=Number.isFinite(ne)&&ne>$?ne:Z,go(C,$),(j=o.onUploadProgress)==null||j.call(o,C)}}function V(C,A){const R=[];let W=0,O=0;for(;W<C.size;){const I=Math.min(W+A,C.size);R.push({start:W,end:I,blob:C.slice(W,I),index:O,uploaded:!1}),W=I,O++}return R}async function b(C,A,R,W){const O={...vo(A.headers),"Content-Range":`bytes ${R.start}-${R.end-1}/${C.file.size}`,"Content-Type":C.file.type||"application/octet-stream"},I=await fetch(A.upload_url,{method:Yl(A),headers:O,body:R.blob,signal:W.signal});if(!I.ok)throw new Error(`Chunk upload failed: ${I.status}`);R.uploaded=!0}async function f(C){return null}async function _(C){if(!a.value)throw new Error("API client not configured");const A=60;let R=0;for(;R<A;){const W=await a.value.get(`/api/v1/video/${C}`),O=IC(W),I=String(O.processing_status);if(I==="ready")return O;if(I==="failed"||I==="error")throw new Error("Video processing failed");await new Promise(F=>{window.setTimeout(F,5e3)}),R++}throw new Error("Video processing timeout")}function D(C){const A=n.value.get(C);if(!A)return;const R=i.get(C);R&&(R.abort(),i.delete(C));const W=r.get(C);W&&(W.abort(),r.delete(C)),A.status="cancelled",A.error="Upload cancelled",t.value.delete(C)}async function B(C){const A=n.value.get(C);A&&(A.status="pending",A.error="",A.progress=0,A.bytesUploaded=0,await p(A.file))}function E(C){n.value.delete(C),t.value.delete(C),i.delete(C),r.delete(C)}function S(){Array.from(n.value.entries()).forEach(([C,A])=>{A.status==="completed"&&n.value.delete(C)})}function P(C){return`${C.name}-${C.size}-${Date.now()}`}return{uploads:l,isUploading:s,totalProgress:c,openFilePicker:u,handleFileSelect:m,validateFile:h,startUpload:p,cancelUpload:D,retryUpload:B,removeUpload:E,clearCompleted:S,setApiClient:d}}const OC=["accept","multiple"],PC={key:0,class:"upload-trigger","data-testid":"video-uploader-trigger"},zC=["onKeydown"],jC={key:1,class:"upload-list","data-testid":"video-upload-list"},WC={class:"drag-content"},ZC=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(o,{emit:n}){const t=o,a=n,i=e.ref(),r=e.ref(!1),{uploads:s,isUploading:l,handleFileSelect:c,cancelUpload:d,retryUpload:u,removeUpload:m,setApiClient:h}=UC({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=>a("upload-start",f),onUploadProgress:f=>a("upload-progress",f),onUploadComplete:f=>a("upload-complete",f),onUploadError:(f,_)=>a("upload-error",f,_),onFilesSelected:f=>a("files-selected",f)});t.apiClient&&h(t.apiClient);const p=e.computed(()=>t.allowedFormats.join(",")),v=e.computed(()=>t.multiple||s.value.length===0);function g(){i.value&&i.value.click()}function w(f){const _=f.target,D=Array.from(_.files||[]);D.length>0&&(c(D),_.value="")}function M(f){var B;f.preventDefault(),r.value=!1;const D=Array.from(((B=f.dataTransfer)==null?void 0:B.files)||[]).filter(E=>E.type.startsWith("video/"));D.length>0&&c(D)}function V(f){var _;f.preventDefault(),(_=f.dataTransfer)!=null&&_.types.includes("Files")&&(r.value=!0)}function b(f){f.target.closest(".video-uploader")||(r.value=!1)}return e.onMounted(()=>{document.addEventListener("dragover",V),document.addEventListener("dragleave",b),document.addEventListener("drop",f=>f.preventDefault())}),e.onUnmounted(()=>{document.removeEventListener("dragover",V),document.removeEventListener("dragleave",b),document.removeEventListener("drop",f=>f.preventDefault())}),(f,_)=>(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:p.value,multiple:f.multiple,onChange:w,"data-testid":"video-uploader-input","aria-label":"Select video files to upload",hidden:""},null,40,OC),!e.unref(l)||v.value?(e.openBlock(),e.createElementBlock("div",PC,[e.renderSlot(f.$slots,"trigger",{open:g},()=>[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:g,onKeydown:[e.withKeys(g,["enter"]),e.withKeys(e.withModifiers(g,["prevent"]),["space"])]},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(_c),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(U.IonButton),{size:"small","data-testid":"btn-select-video","aria-label":"Select video file"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Hr),slot:"start","aria-hidden":"true"},null,8,["icon"]),_[2]||(_[2]=e.createTextVNode(" Select Video ",-1))]),_:1})],40,zC)],!0)])):e.createCommentVNode("",!0),e.unref(s).length>0?(e.openBlock(),e.createElementBlock("div",jC,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s),D=>(e.openBlock(),e.createBlock(TC,{key:D.id,upload:D,onCancel:B=>e.unref(d)(D.id),onRetry:B=>e.unref(u)(D.id),onRemove:B=>e.unref(m)(D.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:M,onDragover:_[0]||(_[0]=e.withModifiers(()=>{},["prevent"])),onDragleave:_[1]||(_[1]=D=>r.value=!1)},[e.createElementVNode("div",WC,[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(aa),"aria-hidden":"true"},null,8,["icon"]),_[3]||(_[3]=e.createElementVNode("p",null,"Drop video files here",-1))])],32)):e.createCommentVNode("",!0)],2))}}),HC=Me(ZC,[["__scopeId","data-v-ea7587f7"]]),XC=["aria-valuenow","aria-valuemax","aria-label"],GC={class:"progress-bar"},JC={class:"time-display","data-testid":"video-time-display"},YC={class:"current-time"},qC={class:"duration"},KC={class:"control-buttons"},QC={class:"controls-left"},eS=["aria-label"],tS={class:"controls-center"},nS={key:0,class:"volume-controls"},aS=["aria-label"],oS=["value"],iS={class:"controls-right"},rS={key:0,class:"quality-selector"},sS=["aria-expanded"],lS={class:"quality-label"},cS={key:0,class:"quality-menu","data-testid":"video-quality-menu",role:"menu"},dS=["data-testid","aria-label","onClick"],uS=["aria-label"],mS=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(o,{emit:n}){const t=o,a=n,i=e.ref(!0),r=e.ref(!1),s=e.ref(),l=U.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 _=t.buffered.start(f),D=t.buffered.end(f);if(t.currentTime>=_&&t.currentTime<=D)return{width:`${D/t.duration*100}%`}}return t.buffered.length>0?{width:`${t.buffered.end(0)/t.duration*100}%`}:{width:"0%"}}),h=e.computed(()=>t.muted||t.volume===0?$p:t.volume<33?Bp:t.volume<66?Fp:Mp);let p=null;function v(){i.value=!0,g()}function g(){p&&clearTimeout(p),t.playing&&!l&&(p=setTimeout(()=>{i.value=!1},3e3))}function w(f){if(!s.value||t.isLive)return;const _=s.value.getBoundingClientRect(),B=(f.clientX-_.left)/_.width*t.duration;a("seek",Math.max(0,Math.min(B,t.duration)))}function M(f){const _=f.target;a("setVolume",parseInt(_.value))}function V(f){a("selectQuality",f),r.value=!1}function b(f){if(!isFinite(f))return"0:00";const _=Math.floor(f/3600),D=Math.floor(f%3600/60),B=Math.floor(f%60);return _>0?`${_}:${D.toString().padStart(2,"0")}:${B.toString().padStart(2,"0")}`:`${D}:${B.toString().padStart(2,"0")}`}return e.onMounted(()=>{document.addEventListener("mousemove",v),g()}),e.onUnmounted(()=>{document.removeEventListener("mousemove",v),p&&clearTimeout(p)}),(f,_)=>(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:w},[e.createElementVNode("div",GC,[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",JC,[e.createElementVNode("span",YC,e.toDisplayString(b(f.currentTime)),1),_[7]||(_[7]=e.createElementVNode("span",{class:"separator"},"/",-1)),e.createElementVNode("span",qC,e.toDisplayString(f.isLive?"LIVE":b(f.duration)),1)])],8,XC),e.createElementVNode("div",KC,[e.createElementVNode("div",QC,[e.createElementVNode("button",{class:"control-btn play-pause","data-testid":"btn-video-play-pause",onClick:_[0]||(_[0]=D=>f.$emit("play-pause")),"aria-label":f.playing?"Pause":"Play"},[e.createVNode(e.unref(U.IonIcon),{icon:f.playing?e.unref(hp):e.unref(gp),"aria-hidden":"true"},null,8,["icon"])],8,eS),f.isLive?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,class:"control-btn skip-backward","data-testid":"btn-video-skip-backward",onClick:_[1]||(_[1]=D=>f.$emit("skip-backward")),"aria-label":"Skip backward 10 seconds"},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(yp),"aria-hidden":"true"},null,8,["icon"]),_[8]||(_[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:_[2]||(_[2]=D=>f.$emit("skip-forward")),"aria-label":"Skip forward 10 seconds"},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(kp),"aria-hidden":"true"},null,8,["icon"]),_[9]||(_[9]=e.createElementVNode("span",{class:"skip-label"},"10",-1))]))]),e.createElementVNode("div",tS,[e.unref(l)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",nS,[e.createElementVNode("button",{class:"control-btn mute-btn","data-testid":"btn-video-mute",onClick:_[3]||(_[3]=D=>f.$emit("toggleMute")),"aria-label":f.muted?"Unmute":"Mute"},[e.createVNode(e.unref(U.IonIcon),{icon:h.value,"aria-hidden":"true"},null,8,["icon"])],8,aS),e.createElementVNode("input",{type:"range",class:"volume-slider","data-testid":"slider-video-volume",min:"0",max:"100",value:f.muted?0:f.volume,onInput:M,"aria-label":"Volume"},null,40,oS)]))]),e.createElementVNode("div",iS,[f.qualityLevels.length>1?(e.openBlock(),e.createElementBlock("div",rS,[e.createElementVNode("button",{class:"control-btn quality-btn","data-testid":"btn-video-quality",onClick:_[4]||(_[4]=D=>r.value=!r.value),"aria-label":"Quality settings","aria-expanded":r.value},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Vp),"aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("span",lS,e.toDisplayString(f.currentQuality),1)],8,sS),r.value?(e.openBlock(),e.createElementBlock("div",cS,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.qualityLevels,D=>(e.openBlock(),e.createElementBlock("button",{key:D.label,class:e.normalizeClass(["quality-option",{active:D.label===f.currentQuality}]),"data-testid":`btn-video-quality-${D.label}`,"aria-label":`Set quality to ${D.label}`,role:"menuitem",onClick:B=>V(D)},e.toDisplayString(D.label),11,dS))),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:_[5]||(_[5]=D=>f.$emit("togglePiP")),"aria-label":"Picture in Picture"},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Np),"aria-hidden":"true"},null,8,["icon"])])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"control-btn fullscreen-btn","data-testid":"btn-video-fullscreen",onClick:_[6]||(_[6]=D=>f.$emit("toggleFullscreen")),"aria-label":f.fullscreen?"Exit fullscreen":"Enter fullscreen"},[e.createVNode(e.unref(U.IonIcon),{icon:f.fullscreen?e.unref(ip):e.unref(lp),"aria-hidden":"true"},null,8,["icon"])],8,uS)])])],2))}}),pS=Me(mS,[["__scopeId","data-v-2ae77c13"]]);function fS(o={}){var K,ge,we;const n=e.ref(),t=e.ref(),a=e.ref(!1),i=e.ref(0),r=e.ref(0),s=e.ref(100),l=e.ref(o.muted||!1),c=e.ref(!1),d=e.ref(),u=e.ref(1),m=e.ref(!1),h=e.ref(null),p=e.ref("idle"),v=e.ref(o.playbackUrl||((K=o.media)==null?void 0:K.playback_url)||((ge=o.media)==null?void 0:ge.url)||""),g=e.ref(null),w=e.ref(o.isLive||!1),M=e.ref(null),V=e.ref(null);function b(ne){V.value=ne}if((we=o.media)!=null&&we.token_expires_at){const ne=new Date(o.media.token_expires_at);g.value=Number.isNaN(ne.getTime())?null:ne}async function f(){var N;const ne=w.value?t.value:n.value;if(ne)try{await ne.play(),a.value=!0,p.value=w.value?"live":"playing",(N=o.onPlay)==null||N.call(o)}catch{h.value="Failed to play video",p.value="error"}}function _(){var N;const ne=w.value?t.value:n.value;ne&&(ne.pause(),a.value=!1,p.value="paused",(N=o.onPause)==null||N.call(o))}function D(){a.value?_():f()}function B(ne){const N=w.value?t.value:n.value;if(!N||w.value)return;const L=Number.isFinite(N.duration)?N.duration:ne;N.currentTime=Math.max(0,Math.min(ne,L)),i.value=N.currentTime}function E(ne=10){const N=n.value;!N||w.value||B(N.currentTime+ne)}function S(ne=10){const N=n.value;!N||w.value||B(N.currentTime-ne)}function P(){const ne=w.value?t.value:n.value;ne&&(ne.muted=!ne.muted,l.value=ne.muted)}function C(ne){const N=w.value?t.value:n.value;if(!N)return;const L=Math.max(0,Math.min(100,ne));N.volume=L/100,s.value=L,L>0&&N.muted&&(N.muted=!1,l.value=!1)}function A(ne){const N=n.value;!N||w.value||(N.playbackRate=ne,u.value=ne)}async function R(){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 W(){const ne=w.value?t.value:n.value;if(ne)try{document.pictureInPictureElement?await document.exitPictureInPicture():document.pictureInPictureEnabled&&await ne.requestPictureInPicture()}catch{}}async function O(){var N;h.value=null,p.value="loading",(N=o.media)!=null&&N.provider&&o.media.provider!=="local"&&await I();const ne=w.value?t.value:n.value;ne&&(ne.load(),await f())}async function I(){if(!(!V.value||!o.media))try{m.value=!0;const ne=await V.value.get(`/api/v1/video/${o.media.uuid}/playback`);v.value=ne.playback_url,g.value=new Date(ne.token_expires_at);const N=w.value?t.value:n.value;if(N&&N.src!==v.value){const L=!N.paused,te=N.currentTime;N.src=v.value,w.value||(N.currentTime=te),L&&await f()}}catch{h.value="Failed to refresh playback token",p.value="error"}finally{m.value=!1}}async function F(ne){if(t.value){if(t.value.canPlayType("application/vnd.apple.mpegurl")){t.value.src=ne;return}try{t.value.src=ne}catch{h.value="Live streaming not supported in this browser",p.value="error"}}}function k(){M.value&&(M.value.destroy(),M.value=null)}function $(){var N;const ne=w.value?t.value:n.value;ne&&(i.value=ne.currentTime,r.value=ne.duration,(N=o.onTimeUpdate)==null||N.call(o,ne.currentTime))}const j=e.computed(()=>{if(!d.value||d.value.length===0||!r.value)return 0;for(let ne=0;ne<d.value.length;ne++){const N=d.value.start(ne),L=d.value.end(ne);if(i.value>=N&&i.value<=L)return L/r.value*100}return 0});function Z(){if(!g.value)return!1;const ne=new Date;return g.value.getTime()-ne.getTime()<5*60*1e3}return e.watch([n,t],([ne,N])=>{const L=w.value?N:ne;L&&(L.addEventListener("timeupdate",$),L.addEventListener("loadedmetadata",()=>{r.value=L.duration,p.value="ready"}),L.addEventListener("progress",()=>{d.value=L.buffered}),L.addEventListener("ended",()=>{var te;a.value=!1,p.value="ended",(te=o.onEnded)==null||te.call(o)}),L.addEventListener("error",te=>{var ae;p.value="error",(ae=o.onError)==null||ae.call(o,"Video playback error")}),L.volume=s.value/100,L.muted=l.value)}),e.onUnmounted(()=>{k();const ne=w.value?t.value:n.value;ne&&ne.removeEventListener("timeupdate",$)}),{videoEl:n,liveVideoEl:t,playing:a,currentTime:i,duration:r,volume:s,muted:l,isFullscreen:c,bufferedRanges:d,bufferedPercent:j,playbackRate:u,isLoading:m,error:h,status:p,currentPlaybackUrl:v,tokenExpiresAt:g,play:f,pause:_,togglePlayPause:D,seek:B,skipForward:E,skipBackward:S,toggleMute:P,setVolume:C,setPlaybackRate:A,toggleFullscreen:R,togglePiP:W,retry:O,refreshToken:I,setupLiveStream:F,setApiClient:b,shouldRefreshToken:Z}}const hS=["src","poster","controls","autoplay","muted","loop","preload"],vS={key:1,ref:"livePlayerEl",class:"live-player"},gS=["controls","muted"],yS={key:0,class:"live-indicator","data-testid":"video-live-indicator","aria-label":"Live stream"},bS={key:2,class:"video-loading","data-testid":"video-loading",role:"status","aria-label":"Loading video"},wS={key:3,class:"video-error","data-testid":"video-error",role:"alert"},kS={key:5,class:"gesture-zones","data-testid":"video-gesture-zones"},_S=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(o,{emit:n}){const t=o,a=n,{videoEl:i,liveVideoEl:r,playing:s,currentTime:l,duration:c,volume:d,muted:u,isFullscreen:m,bufferedRanges:h,isLoading:p,error:v,status:g,currentPlaybackUrl:w,tokenExpiresAt:M,play:V,pause:b,seek:f,toggleMute:_,setVolume:D,toggleFullscreen:B,togglePlayPause:E,skipForward:S,skipBackward:P,retry:C,refreshToken:A,setApiClient:R,shouldRefreshToken:W,setupLiveStream:O}=fS({...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 I(){await A()}const F=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"),p.value&&ae.push("is-loading"),ae}),k=e.computed(()=>{var ae,ie;if(t.poster)return t.poster;if((ae=t.media)!=null&&ae.poster_url)return t.media.poster_url;if((ie=t.media)!=null&&ie.thumbnail_url)return t.media.thumbnail_url});function $(ae){const ie=ae.target;a("loadedmetadata",{duration:ie.duration,width:ie.videoWidth,height:ie.videoHeight})}function j(ae){const ie=ae.target;l.value=ie.currentTime,a("timeupdate",ie.currentTime)}function Z(){s.value=!0,a("play")}function K(){s.value=!1,a("pause")}function ge(){s.value=!1,a("ended")}function we(ae){const ie=ae.target;let he="Failed to load video";if(ie.error)switch(ie.error.code){case ie.error.MEDIA_ERR_ABORTED:he="Video playback aborted";break;case ie.error.MEDIA_ERR_NETWORK:he="Network error while loading video";break;case ie.error.MEDIA_ERR_DECODE:he="Video decoding error";break;case ie.error.MEDIA_ERR_SRC_NOT_SUPPORTED:he="Video format not supported";break}v.value=he,a("error",he)}function ne(ae){const ie=ae.target;h.value=ie.buffered,a("progress",ie.buffered)}function N(){p.value=!0}function L(){p.value=!1}e.watch(()=>t.apiClient,ae=>{ae&&R(ae)},{immediate:!0}),e.watch(()=>t.playbackUrl,ae=>{typeof ae=="string"&&ae.length>0&&(w.value=ae)},{immediate:!0}),e.watch(()=>{var ae;return(ae=t.media)==null?void 0:ae.token_expires_at},ae=>{if(!ae){M.value=null;return}const ie=new Date(ae);M.value=Number.isNaN(ie.getTime())?null:ie},{immediate:!0}),e.watch(()=>{var ae;return(ae=t.media)==null?void 0:ae.playback_url},async(ae,ie)=>{if(t.playbackUrl||!ae||ae===ie)return;const he=i.value;if(!he||t.isLive){w.value=ae;return}const se=!he.paused,fe=he.currentTime;w.value=ae,await e.nextTick();try{he.currentTime=fe}catch{}se&&await V()},{immediate:!0});let te=null;return e.watch(()=>t.isLive,async ae=>{var he;if(!ae)return;const ie=t.playbackUrl||((he=t.media)==null?void 0:he.playback_url)||"";ie&&await O(ie)},{immediate:!0}),e.onMounted(()=>{var ae;(ae=t.media)!=null&&ae.provider&&t.media.provider!=="local"&&(te=setInterval(()=>{W()&&I()},3e4)),U.isPlatform("mobile")&&t.showCustomControls}),e.onUnmounted(()=>{te&&clearInterval(te)}),(ae,ie)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-player-container",F.value]),"data-testid":"video-player"},[ae.isLive?(e.openBlock(),e.createElementBlock("div",vS,[e.createElementVNode("video",{ref_key:"liveVideoEl",ref:r,controls:ae.controls&&!ae.showCustomControls,autoplay:!0,muted:e.unref(u),onPlay:Z,onPause:K,onError:we,playsinline:"",class:"video-element","data-testid":"video-element"},null,40,gS),e.unref(g)==="live"?(e.openBlock(),e.createElementBlock("div",yS,[...ie[3]||(ie[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(w),poster:k.value,controls:ae.controls&&!ae.showCustomControls,autoplay:ae.autoplay,muted:e.unref(u),loop:ae.loop,preload:ae.preload,onLoadedmetadata:$,onTimeupdate:j,onPlay:Z,onPause:K,onEnded:ge,onError:we,onProgress:ne,onWaiting:N,onCanplay:L,playsinline:"",class:"video-element","data-testid":"video-element"},null,40,hS)),e.unref(p)?(e.openBlock(),e.createElementBlock("div",bS,[e.createVNode(e.unref(U.IonSpinner),{name:"crescent"})])):e.createCommentVNode("",!0),e.unref(v)?(e.openBlock(),e.createElementBlock("div",wS,[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Xr),"aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("p",null,e.toDisplayString(e.unref(v)),1),e.createVNode(e.unref(U.IonButton),{size:"small",onClick:e.unref(C),"data-testid":"btn-video-retry","aria-label":"Retry loading video"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Un),slot:"start","aria-hidden":"true"},null,8,["icon"]),ie[4]||(ie[4]=e.createTextVNode(" Retry ",-1))]),_:1},8,["onClick"])])):e.createCommentVNode("",!0),ae.showCustomControls&&!e.unref(v)?(e.openBlock(),e.createBlock(pS,{key:4,playing:e.unref(s),currentTime:e.unref(l),duration:e.unref(c),buffered:e.unref(h),volume:e.unref(d),muted:e.unref(u),fullscreen:e.unref(m),isLive:ae.isLive,onPlay:e.unref(V),onPause:e.unref(b),onSeek:e.unref(f),onToggleMute:e.unref(_),onSetVolume:e.unref(D),onToggleFullscreen:e.unref(B),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",kS,[e.createElementVNode("div",{class:"gesture-left","data-testid":"video-gesture-skip-back","aria-label":"Double tap to skip backward",onDblclick:ie[0]||(ie[0]=(...he)=>e.unref(P)&&e.unref(P)(...he))},null,32),e.createElementVNode("div",{class:"gesture-center","data-testid":"video-gesture-play-pause","aria-label":"Tap to play or pause",onClick:ie[1]||(ie[1]=(...he)=>e.unref(E)&&e.unref(E)(...he))}),e.createElementVNode("div",{class:"gesture-right","data-testid":"video-gesture-skip-forward","aria-label":"Double tap to skip forward",onDblclick:ie[2]||(ie[2]=(...he)=>e.unref(S)&&e.unref(S)(...he))},null,32)])):e.createCommentVNode("",!0)],2))}}),Ad=Me(_S,[["__scopeId","data-v-b8db4951"]]),ES=Ho.defineStore("video",()=>{const o=e.ref(new Map),n=e.ref(new Map),t=e.ref(new Map),a=e.ref(null),i=e.ref(!1),r=e.computed(()=>Array.from(o.value.values())),s=e.computed(()=>Array.from(n.value.values())),l=e.computed(()=>s.value.filter(O=>O.status==="live")),c=e.computed(()=>r.value.filter(O=>O.processing_status==="processing"));function d(O){o.value.set(O.uuid,O)}function u(O,I){const F=o.value.get(O);F&&o.value.set(O,{...F,...I})}function m(O){o.value.delete(O)}function h(O){return o.value.get(O)}function p(O){n.value.set(O.id,O)}function v(O,I){const F=n.value.get(O);F&&n.value.set(O,{...F,...I})}function g(O,I){const F=n.value.get(O);F&&n.value.set(O,{...F,status:I.status,viewer_count:I.viewer_count,peak_viewers:I.peak_viewers})}function w(O){n.value.delete(O)}function M(O){return n.value.get(O)}function V(O){return s.value.find(I=>I.media_uuid===O)}function b(O){t.value.set(O.id,O)}function f(O,I){const F=t.value.get(O);F&&t.value.set(O,{...F,...I})}function _(O){t.value.delete(O)}function D(O){return t.value.get(O)}function B(O){return Array.from(t.value.values()).filter(I=>I.media_uuid===O)}function E(O){a.value=O}function S(O){a.value&&(a.value={...a.value,...O})}function P(){a.value=null}function C(O){i.value=O}function A(){o.value.clear(),n.value.clear(),t.value.clear(),a.value=null,i.value=!1}function R(O){o.value.clear(),O.forEach(I=>{o.value.set(I.uuid,I)})}function W(O){n.value.clear(),O.forEach(I=>{n.value.set(I.id,I)})}return{videos:o,liveStreams:n,exportJobs:t,currentEditorState:a,isProcessing:i,allVideos:r,allLiveStreams:s,activeLiveStreams:l,processingVideos:c,setVideo:d,updateVideo:u,removeVideo:m,getVideo:h,setLiveStream:p,updateLiveStream:v,updateLiveStreamStats:g,removeLiveStream:w,getLiveStream:M,getLiveStreamByMedia:V,addExportJob:b,updateExportJob:f,removeExportJob:_,getExportJob:D,getExportJobsByMedia:B,setEditorState:E,updateEditorState:S,clearEditorState:P,setProcessing:C,clearAll:A,loadVideos:R,loadLiveStreams:W}});let Tn=null;function xS(o){Tn=o}const yo={post:async(o,n)=>{if(!Tn)throw new Error("HTTP client not configured");return await Tn(`/api/v1/video${o}`,{method:"POST",body:JSON.stringify(n),headers:{"Content-Type":"application/json"}})},get:async o=>{if(!Tn)throw new Error("HTTP client not configured");return await Tn(`/api/v1/video${o}`)},delete:async o=>{if(!Tn)throw new Error("HTTP client not configured");return await Tn(`/api/v1/video${o}`,{method:"DELETE"})}};function bo(o,n=null){const t=typeof o.id=="string"&&o.id!==""?o.id:typeof o.stream_id=="string"&&o.stream_id!==""?o.stream_id:n==null?void 0:n.id;if(!t)throw new Error("Invalid live stream response: missing stream id");const a={id:t,media_uuid:o.media_uuid??(n==null?void 0:n.media_uuid)??"",stream_key:o.stream_key??(n==null?void 0:n.stream_key)??"",rtmp_url:o.rtmp_url??(n==null?void 0:n.rtmp_url)??"",status:o.status??(n==null?void 0:n.status)??"idle",viewer_count:o.viewer_count??(n==null?void 0:n.viewer_count)??0,peak_viewers:o.peak_viewers??(n==null?void 0:n.peak_viewers)??0,auto_record:o.auto_record??(n==null?void 0:n.auto_record)??!0,low_latency:o.low_latency??(n==null?void 0:n.low_latency)??!1},i=o.playback_url??(n==null?void 0:n.playback_url);i!==void 0&&(a.playback_url=i);const r=o.started_at??(n==null?void 0:n.started_at);r!==void 0&&(a.started_at=r);const s=o.ended_at??(n==null?void 0:n.ended_at);return s!==void 0&&(a.ended_at=s),(n==null?void 0:n.metadata)!==void 0&&(a.metadata=n.metadata),(n==null?void 0:n.vod_media_uuid)!==void 0&&(a.vod_media_uuid=n.vod_media_uuid),a}function lr(o,n){return o instanceof Error&&o.message?o.message:n}function CS(o){const n=ES(),t=e.ref(null),a=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 h;const p=e.computed(()=>d.value?Math.floor((new Date().getTime()-d.value.getTime())/1e3):0),v=e.computed(()=>{var P;if(!((P=t.value)!=null&&P.playback_url))return null;const S=new URL(t.value.playback_url);return S.searchParams.set("live","true"),a.value&&S.searchParams.set("latency","low"),S.toString()}),g=e.computed(()=>{var S;return((S=t.value)==null?void 0:S.status)==="live"}),w=e.computed(()=>{var S;return((S=t.value)==null?void 0:S.status)==="idle"}),M=e.computed(()=>{var S;return((S=t.value)==null?void 0:S.status)==="ended"});async function V(S={}){s.value=!0,c.value=null;try{const P=await yo.post("/live",{title:r.value||S.title||"Live Stream",low_latency:S.low_latency??a.value,auto_record:S.auto_record??i.value,...S}),C=bo(P);return t.value=C,n.setLiveStream(C),D(),C}catch(P){throw c.value=lr(P,"Failed to create stream"),P instanceof Error?P:new Error(c.value)}finally{s.value=!1}}async function b(){if(!t.value)throw new Error("No active stream");l.value=!0,c.value=null;try{const S=await yo.post(`/live/${t.value.id}/end`),P=bo(S,t.value);return t.value=P,n.setLiveStream(P),B(),P}catch(S){throw c.value=lr(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 yo.get(`/live/${t.value.id}`),P=bo(S,t.value);u.value=P.viewer_count,m.value=P.peak_viewers,t.value=P;const C={status:P.status,viewer_count:P.viewer_count,peak_viewers:P.peak_viewers};P.started_at&&(C.started_at=P.started_at),P.ended_at&&(C.ended_at=P.ended_at),n.updateLiveStreamStats(P.id,C),P.status==="live"&&!d.value&&P.started_at&&(d.value=new Date(P.started_at)),P.status==="ended"&&B()}catch{}}async function _(S){try{const P=await yo.get(`/live/${S}`),C=bo(P,t.value);return{rtmp_url:C.rtmp_url,stream_key:C.stream_key,playback_url:C.playback_url||""}}catch(P){throw c.value=lr(P,"Failed to get stream credentials"),P instanceof Error?P:new Error(c.value)}}function D(S=5e3){B(),h=window.setInterval(()=>{f()},S)}function B(){h!==void 0&&(clearInterval(h),h=void 0)}async function E(){if(!o)return;const S=n.getLiveStreamByMedia(o);S&&(t.value=S,u.value=S.viewer_count,m.value=S.peak_viewers,S.status==="live"&&(D(),S.started_at&&(d.value=new Date(S.started_at))))}return o&&E(),e.onUnmounted(()=>{B()}),{stream:t,lowLatency:a,autoRecord:i,streamTitle:r,isCreating:s,isEnding:l,error:c,streamDuration:p,viewerCount:u,peakViewers:m,playbackUrl:v,isLive:g,isIdle:w,hasEnded:M,createStream:V,endStream:b,refreshStreamStatus:f,getStreamCredentials:_,startStatusPolling:D,stopStatusPolling:B}}const SS={class:"stream-status"},VS={class:"flex items-center justify-between"},NS={class:"flex items-center gap-3"},TS={key:0,class:"flex items-center"},MS={key:2,class:"text-sm text-gray-600"},BS={key:0,class:"flex items-center gap-2"},FS={class:"text-sm font-medium text-gray-700"},IS={key:0,class:"text-xs text-gray-500"},$S=e.defineComponent({__name:"StreamStatus",props:{status:{},viewers:{},peakViewers:{},duration:{}},setup(o){const n=o,t=e.computed(()=>({idle:"Ready to Stream",live:"Live",ended:"Stream Ended",error:"Error"})[n.status]||n.status),a=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",SS,[e.createElementVNode("div",VS,[e.createElementVNode("div",NS,[r.status==="live"?(e.openBlock(),e.createElementBlock("div",TS,[...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(a.value)},e.toDisplayString(t.value),3)),i.value?(e.openBlock(),e.createElementBlock("div",MS,e.toDisplayString(i.value),1)):e.createCommentVNode("",!0)]),r.viewers!==void 0?(e.openBlock(),e.createElementBlock("div",BS,[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",FS,e.toDisplayString(r.viewers)+" "+e.toDisplayString(r.viewers===1?"viewer":"viewers"),1),r.peakViewers>r.viewers?(e.openBlock(),e.createElementBlock("span",IS," (Peak: "+e.toDisplayString(r.peakViewers)+") ",1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])]))}}),RS=Me($S,[["__scopeId","data-v-1d09c19f"]]),DS={class:"stream-credentials"},AS={class:"space-y-3"},LS={class:"credential-field"},US={class:"flex gap-2"},OS=["value"],PS={class:"credential-field"},zS={class:"flex gap-2"},jS=["value","type"],WS=["aria-label"],ZS={key:0,class:"w-4 h-4 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},HS={key:1,class:"w-4 h-4 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},XS={key:0,class:"mt-2 text-sm text-green-600"},GS=e.defineComponent({__name:"StreamCredentials",props:{rtmpUrl:{},streamKey:{}},emits:["copy"],setup(o,{emit:n}){const t=o,a=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,a("copy",d,u),setTimeout(()=>{r.value=""},2e3)}catch{}}return(d,u)=>(e.openBlock(),e.createElementBlock("div",DS,[u[8]||(u[8]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 mb-3"},"Stream Settings",-1)),e.createElementVNode("div",AS,[e.createElementVNode("div",LS,[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",US,[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,OS),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",PS,[u[7]||(u[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 mb-1"},"Stream Key",-1)),e.createElementVNode("div",zS,[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,jS),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",HS,[...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",ZS,[...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,WS),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",XS,e.toDisplayString(r.value)+" copied to clipboard! ",1)):e.createCommentVNode("",!0)]),_:1})]))}}),JS=Me(GS,[["__scopeId","data-v-306d92f6"]]),YS={class:"live-stream-manager","data-testid":"live-stream-manager"},qS={key:0,class:"stream-setup"},KS={class:"space-y-4"},QS={class:"flex items-center justify-between p-4 bg-gray-50 rounded-lg"},eV={class:"flex items-center justify-between p-4 bg-gray-50 rounded-lg"},tV=["disabled"],nV={key:0},aV={key:1,class:"flex items-center justify-center"},oV={key:1,class:"stream-active space-y-6"},iV={key:1,class:"video-preview"},rV={key:2,class:"analytics-panel"},sV={class:"grid grid-cols-2 gap-4"},lV={class:"bg-gray-50 p-3 rounded"},cV={class:"text-2xl font-bold text-gray-900"},dV={class:"bg-gray-50 p-3 rounded"},uV={class:"text-2xl font-bold text-gray-900"},mV={class:"stream-controls flex gap-3"},pV=["disabled"],fV={key:0},hV={key:1},vV={key:2,class:"mt-4 p-4 bg-red-50 border border-red-200 rounded-lg"},gV={class:"text-red-600 text-sm"},yV=e.defineComponent({__name:"LiveStreamManager",props:{mediaUuid:{},onStreamCreated:{type:Function},onStreamEnded:{type:Function},httpClient:{type:Function}},emits:["stream-created","stream-ended","error"],setup(o,{emit:n}){const t=o,a=n;t.httpClient&&xS(t.httpClient);const{stream:i,lowLatency:r,autoRecord:s,streamTitle:l,isCreating:c,isEnding:d,error:u,createStream:m,endStream:h,streamDuration:p,playbackUrl:v,refreshStreamStatus:g}=CS(t.mediaUuid),w=e.ref(!1);async function M(){var D;try{const B=await m({title:l.value,low_latency:r.value,auto_record:s.value});a("stream-created",B),(D=t.onStreamCreated)==null||D.call(t,B)}catch(B){a("error",B)}}async function V(){var D;try{const B=await h();a("stream-ended",B),(D=t.onStreamEnded)==null||D.call(t,B)}catch(B){a("error",B)}}function b(){i.value=null,l.value="",w.value=!1,u.value=null}async function f(D,B){try{await navigator.clipboard.writeText(D)}catch{}}let _;return e.onMounted(()=>{var D;((D=i.value)==null?void 0:D.status)==="live"&&(_=window.setInterval(()=>{g()},5e3))}),e.onUnmounted(()=>{_&&clearInterval(_)}),(D,B)=>(e.openBlock(),e.createElementBlock("div",YS,[e.unref(i)?(e.openBlock(),e.createElementBlock("div",oV,[e.createVNode(RS,{status:e.unref(i).status,viewers:e.unref(i).viewer_count,duration:e.unref(p),"peak-viewers":e.unref(i).peak_viewers},null,8,["status","viewers","duration","peak-viewers"]),e.unref(i).status==="idle"?(e.openBlock(),e.createBlock(JS,{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",iV,[B[9]||(B[9]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 mb-2"},"Live Preview",-1)),e.createVNode(Ad,{"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",rV,[B[12]||(B[12]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 mb-3"},"Live Analytics",-1)),e.createElementVNode("div",sV,[e.createElementVNode("div",lV,[e.createElementVNode("div",cV,e.toDisplayString(e.unref(i).viewer_count),1),B[10]||(B[10]=e.createElementVNode("div",{class:"text-xs text-gray-500"},"Current Viewers",-1))]),e.createElementVNode("div",dV,[e.createElementVNode("div",uV,e.toDisplayString(e.unref(i).peak_viewers),1),B[11]||(B[11]=e.createElementVNode("div",{class:"text-xs text-gray-500"},"Peak Viewers",-1))])])])):e.createCommentVNode("",!0),e.createElementVNode("div",mV,[e.unref(i).status==="idle"?(e.openBlock(),e.createElementBlock("button",{key:0,onClick:B[3]||(B[3]=E=>w.value=!w.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(w.value?"Hide":"Show")+" Credentials ",1)):e.createCommentVNode("",!0),e.unref(i).status==="live"?(e.openBlock(),e.createElementBlock("button",{key:1,onClick:V,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",hV,"Ending...")):(e.openBlock(),e.createElementBlock("span",fV,"End Stream"))],8,pV)):e.createCommentVNode("",!0),e.unref(i).status==="ended"?(e.openBlock(),e.createElementBlock("button",{key:2,onClick:b,class:"flex-1 py-2 px-4 bg-blue-600 text-white font-medium rounded-lg hover:bg-blue-700 transition-colors"}," Start New Stream ")):e.createCommentVNode("",!0)])])):(e.openBlock(),e.createElementBlock("div",qS,[B[8]||(B[8]=e.createElementVNode("h3",{class:"text-lg font-semibold mb-4"},"Start Live Stream",-1)),e.createElementVNode("div",KS,[e.createElementVNode("div",QS,[B[4]||(B[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":B[0]||(B[0]=E=>e.isRef(r)?r.value=E: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",eV,[B[5]||(B[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":B[1]||(B[1]=E=>e.isRef(s)?s.value=E: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,[B[6]||(B[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":B[2]||(B[2]=E=>e.isRef(l)?l.value=E: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:M,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",aV,[...B[7]||(B[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",nV,"Create Stream"))],8,tV)])])),e.unref(u)?(e.openBlock(),e.createElementBlock("div",vV,[e.createElementVNode("p",gV,e.toDisplayString(e.unref(u)),1)])):e.createCommentVNode("",!0)]))}}),bV=Me(yV,[["__scopeId","data-v-26291f6f"]]),wV={class:"album-tree-node"},kV=["data-album-id","draggable","aria-selected","aria-expanded"],_V={key:1,class:"album-node__chevron-placeholder"},EV={key:2,"data-testid":"media-count",class:"album-node__count"},xV={key:0,class:"album-tree-node__children",role:"group"},CV=16,SV=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(o,{emit:n}){const t=o,a=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*CV}px`),d=e.computed(()=>{var b;return((b=t.dragState)==null?void 0:b.draggedAlbumId)===t.album.id}),u=e.computed(()=>{var b;return((b=t.dragState)==null?void 0:b.dropTargetId)===t.album.id}),m=e.computed(()=>{var b;return(b=t.dragState)!=null&&b.draggedAlbumId?t.dragState.draggedAlbumId===t.album.id:!1}),h=e.computed(()=>{const b=["album-node"];return r.value&&b.push("album-node--selected"),s.value&&b.push("album-node--focused"),t.compact&&b.push("album-node--compact"),d.value&&b.push("album-node--dragging"),u.value&&b.push("album-node--drop-target"),m.value&&b.push("album-node--invalid-drop"),b});function p(){a("select",t.album)}function v(b){b.stopPropagation(),a("toggle-expand",t.album.id)}function g(b){t.draggable&&(b.dataTransfer&&(b.dataTransfer.setData("text/plain",t.album.id),b.dataTransfer.effectAllowed="move"),a("drag-start",t.album.id))}function w(b){t.draggable&&(b.preventDefault(),b.dataTransfer&&(b.dataTransfer.dropEffect="move"),a("drag-over",t.album.id))}function M(){a("drag-leave",t.album.id)}function V(b){t.draggable&&(b.preventDefault(),a("drop",t.album.id))}return(b,f)=>{var D;const _=e.resolveComponent("AlbumTreeNode",!0);return e.openBlock(),e.createElementBlock("div",wV,[e.createElementVNode("div",{"data-testid":"album-node","data-album-id":b.album.id,class:e.normalizeClass(h.value),style:e.normalizeStyle({paddingLeft:c.value}),draggable:b.draggable,role:"treeitem","aria-selected":r.value,"aria-expanded":l.value?i.value:void 0,onDragstart:g,onDragover:w,onDragleave:M,onDrop:V},[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(U.IonIcon),{icon:i.value?e.unref(np):e.unref(ap)},null,8,["icon"])])):(e.openBlock(),e.createElementBlock("span",_V)),e.createVNode(e.unref(U.IonIcon),{icon:e.unref(up),class:"album-node__icon"},null,8,["icon"]),e.createElementVNode("span",{"data-testid":"album-name",class:"album-node__name",onClick:p},e.toDisplayString(b.album.name),1),b.showMediaCount?(e.openBlock(),e.createElementBlock("span",EV,e.toDisplayString(b.album.media_count),1)):e.createCommentVNode("",!0)],46,kV),i.value&&((D=b.album.children)!=null&&D.length)?(e.openBlock(),e.createElementBlock("div",xV,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.album.children,B=>(e.openBlock(),e.createBlock(_,{key:B.id,album:B,depth:b.depth+1,"selected-id":b.selectedId,"expanded-ids":b.expandedIds,"focused-id":b.focusedId,draggable:b.draggable,"show-media-count":b.showMediaCount,compact:b.compact,onSelect:f[0]||(f[0]=E=>a("select",E)),onToggleExpand:f[1]||(f[1]=E=>a("toggle-expand",E))},null,8,["album","depth","selected-id","expanded-ids","focused-id","draggable","show-media-count","compact"]))),128))])):e.createCommentVNode("",!0)])}}}),VV=Me(SV,[["__scopeId","data-v-76be65a6"]]),yi=Ho.defineStore("albums",()=>{const o=e.ref([]),n=e.ref(new Map),t=e.ref(!1),a=e.ref(null),i=e.ref(new Set),r=e.computed(()=>{const f=new Map;return o.value.forEach(_=>f.set(_.id,_)),f}),s=e.computed(()=>o.value.filter(f=>f.parent_id===null));async function l(f){t.value=!0,a.value=null;try{const _=(f==null?void 0:f.parent_id)??null,D=_?`/api/v1/albums?parent_id=${_}`:"/api/v1/albums?parent_id=null",B=await fetch(D);if(!B.ok)throw new Error("Failed to fetch albums");((await B.json()).data||[]).forEach(P=>{const C=o.value.findIndex(A=>A.id===P.id);C>=0?o.value[C]=P:o.value.push(P)}),_!==null&&i.value.add(_)}catch(_){a.value=_ instanceof Error?_.message:"Unknown error"}finally{t.value=!1}}async function c(f){t.value=!0,a.value=null;try{const _=await fetch(`/api/v1/albums/${f}`);if(!_.ok)throw new Error("Failed to fetch album");const B=(await _.json()).data,E=o.value.findIndex(S=>S.id===B.id);return E>=0?o.value[E]=B:o.value.push(B),B}catch(_){throw a.value=_ instanceof Error?_.message:"Unknown error",_}finally{t.value=!1}}async function d(f){t.value=!0,a.value=null;try{const _=await fetch(`/api/v1/albums/${f}/media`);if(!_.ok)throw new Error("Failed to fetch album media");const B=(await _.json()).data||[];return n.value.set(f,B),B}catch(_){throw a.value=_ instanceof Error?_.message:"Unknown error",_}finally{t.value=!1}}async function u(f,_){t.value=!0,a.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:_})})).ok)throw new Error("Failed to reorder album media");const B=n.value.get(f)||[],E=_.map(S=>B.find(P=>P.uuid===S)).filter(S=>S!==void 0);n.value.set(f,E)}catch(D){throw a.value=D instanceof Error?D.message:"Unknown error",D}finally{t.value=!1}}async function m(f){t.value=!0,a.value=null;try{const _=await fetch("/api/v1/albums",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(f)});if(!_.ok)throw new Error("Failed to create album");const B=(await _.json()).data;return o.value.push(B),B}catch(_){throw a.value=_ instanceof Error?_.message:"Unknown error",_}finally{t.value=!1}}async function h(f,_){t.value=!0,a.value=null;try{const D=await fetch(`/api/v1/albums/${f}`,{method:"PATCH",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(_)});if(!D.ok)throw new Error("Failed to update album");const E=(await D.json()).data,S=o.value.findIndex(P=>P.id===E.id);return S>=0&&(o.value[S]=E),E}catch(D){throw a.value=D instanceof Error?D.message:"Unknown error",D}finally{t.value=!1}}async function p(f){t.value=!0,a.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 D=o.value.findIndex(B=>B.id===f);D>=0&&o.value.splice(D,1),n.value.delete(f)}catch(_){throw a.value=_ instanceof Error?_.message:"Unknown error",_}finally{t.value=!1}}function v(f){return o.value.filter(_=>_.parent_id===f)}function g(f){return i.value.has(f)}function w(f){return n.value.get(f)||[]}async function M(f,_){const D=o.value.findIndex(E=>E.id===f);if(D<0)return;const B=o.value[D];o.value[D]={...B,parent_id:_};try{if(!(await fetch(`/api/v1/albums/${f}/move`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({parent_id:_})})).ok)throw new Error("Failed to move album")}catch(E){throw o.value[D]=B,a.value=E instanceof Error?E.message:"Unknown error",E instanceof Error?E:new Error("Failed to move album")}}function V(f){o.value=f}function b(){o.value=[],n.value.clear(),t.value=!1,a.value=null,i.value.clear()}return{albums:o,albumMedia:n,loading:t,error:a,childrenLoadedById:i,albumsById:r,rootAlbums:s,fetchAlbums:l,fetchAlbum:c,fetchAlbumMedia:d,reorderAlbumMedia:u,createAlbum:m,updateAlbum:h,deleteAlbum:p,getChildrenOf:v,childrenLoaded:g,getAlbumMedia:w,moveAlbum:M,setAlbums:V,reset:b}});function Ld(){const o=yi(),{albums:n,albumsById:t,rootAlbums:a,loading:i,error:r}=Ho.storeToRefs(o);async function s(u){await o.fetchAlbums(u)}function l(u){return o.getChildrenOf(u)}function c(u){return o.childrenLoaded(u)}async function d(u,m){await o.moveAlbum(u,m)}return{albums:n,albumsById:t,rootAlbums:a,loading:i,error:r,fetchAlbums:s,getChildrenOf:l,childrenLoaded:c,moveAlbum:d}}function Ud(o){const{childrenByParentId:n,onMove:t}=o,a=e.ref({isDragging:!1,draggedAlbumId:null,dropTargetId:null,dropPosition:null});function i(m,h){if(m===h)return!0;const p=new Set,v=[m];for(;v.length>0;){const g=v.shift();if(!g||p.has(g))continue;p.add(g);const w=n.get(g)||[];for(const M of w){if(M===h)return!0;v.push(M)}}return!1}function r(m,h){return m===h?!1:h===null?!0:!i(m,h)}function s(m){a.value={isDragging:!0,draggedAlbumId:m,dropTargetId:null,dropPosition:null}}function l(){a.value={isDragging:!1,draggedAlbumId:null,dropTargetId:null,dropPosition:null}}function c(m){a.value.dropTargetId=m}function d(){a.value.dropTargetId=null,a.value.dropPosition=null}async function u(){const{draggedAlbumId:m,dropTargetId:h}=a.value;if(!m){l();return}if(!r(m,h)){l();return}try{await t(m,h)}finally{l()}}return{dragState:a,isDescendant:i,canDropOn:r,startDrag:s,endDrag:l,setDropTarget:c,clearDropTarget:d,executeDrop:u}}const NV={key:0,"data-testid":"loading-spinner",class:"album-tree__loading"},TV={key:1,"data-testid":"error-state",class:"album-tree__error"},MV={key:2,"data-testid":"empty-state",class:"album-tree__empty"},BV={key:3,class:"album-tree__content",role:"group"},FV=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(o,{expose:n,emit:t}){const a=o,i=t,r=e.computed(()=>a.draggable===!0),s=e.computed(()=>a.showMediaCount===!0),l=e.computed(()=>a.compact===!0),{albums:c,rootAlbums:d,loading:u,error:m,fetchAlbums:h,getChildrenOf:p,childrenLoaded:v,moveAlbum:g}=Ld(),w=e.shallowRef(new Set(a.expandedIds)),M=e.ref(a.modelValue??null),V=e.ref(null),b=new Map,f=new Map;function _(N){b.clear(),f.clear();for(const L of N){b.set(L.id,L);const te=L.parent_id??null,ae=f.get(te)??[];ae.push(L.id),f.set(te,ae)}}e.watch(c,N=>{_(N)},{immediate:!0});const{dragState:D,canDropOn:B,startDrag:E,endDrag:S,setDropTarget:P,clearDropTarget:C,executeDrop:A}=Ud({childrenByParentId:f,onMove:async(N,L)=>{await g(N,L),i("album-moved",{albumId:N,newParentId:L})}});e.watch(()=>a.modelValue,N=>{M.value=N??null}),e.watch(()=>a.expandedIds,N=>{w.value=new Set(N)}),e.onMounted(async()=>{await h({parent_id:null})});const R=e.computed(()=>d.value.map(N=>W(N)));function W(N){if(!w.value.has(N.id))return N;const L=p(N.id);return{...N,children:L.map(te=>W(te))}}const O=e.computed(()=>{const N=[];function L(te){var ae;for(const ie of te)N.push(ie),w.value.has(ie.id)&&((ae=ie.children)!=null&&ae.length)&&L(ie.children)}return L(R.value),N});function I(N){var ae;if(!O.value.length)return;const L=V.value?O.value.findIndex(ie=>ie.id===V.value):-1,te=L>=0?O.value[L]:null;switch(N.key){case"ArrowDown":N.preventDefault(),L<O.value.length-1?V.value=O.value[L+1].id:L===-1&&O.value.length>0&&(V.value=O.value[0].id);break;case"ArrowUp":N.preventDefault(),L>0&&(V.value=O.value[L-1].id);break;case"ArrowRight":N.preventDefault(),te&&(te.children_count>0&&!w.value.has(te.id)?F(te.id):w.value.has(te.id)&&((ae=te.children)!=null&&ae.length)&&(V.value=te.children[0].id));break;case"ArrowLeft":N.preventDefault(),te&&(w.value.has(te.id)&&te.children_count>0?F(te.id):te.parent_id&&(V.value=te.parent_id));break;case"Enter":case" ":N.preventDefault(),te&&k(te);break;case"Home":N.preventDefault(),O.value.length>0&&(V.value=O.value[0].id);break;case"End":N.preventDefault(),O.value.length>0&&(V.value=O.value[O.value.length-1].id);break}}async function F(N){w.value.has(N)?(w.value.delete(N),i("album-collapsed",N)):(v(N)||await h({parent_id:N}),w.value.add(N),i("album-expanded",N))}function k(N){M.value=N.id,i("update:modelValue",N.id),i("album-selected",N)}function $(N){a.draggable&&E(N)}function j(N){var te;if(!a.draggable)return;const L=(te=D.value)==null?void 0:te.draggedAlbumId;L&&(P(N),B(L,N))}function Z(){a.draggable&&C()}async function K(N){a.draggable&&(P(N),await A())}function ge(N){a.draggable&&(N.preventDefault(),P(null))}async function we(N){a.draggable&&(N.preventDefault(),P(null),await A())}function ne(){S()}return n({focusedId:V}),(N,L)=>(e.openBlock(),e.createElementBlock("div",{class:"album-tree","data-testid":"album-tree",tabindex:"0",role:"tree","aria-label":"Album tree",onKeydown:I,onDragover:ge,onDrop:we,onDragend:ne},[e.unref(u)?(e.openBlock(),e.createElementBlock("div",NV,[e.createVNode(e.unref(U.IonSpinner),{name:"crescent"})])):e.unref(m)?(e.openBlock(),e.createElementBlock("div",TV,[e.createElementVNode("p",null,e.toDisplayString(e.unref(m)),1)])):e.unref(d).length?(e.openBlock(),e.createElementBlock("div",BV,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(R.value,te=>(e.openBlock(),e.createBlock(VV,{key:te.id,album:te,depth:0,"selected-id":M.value,"expanded-ids":w.value,"focused-id":V.value,draggable:r.value,"drag-state":r.value?e.unref(D):null,"show-media-count":s.value,compact:l.value,onSelect:k,onToggleExpand:F,onDragStart:$,onDragOver:j,onDragLeave:Z,onDrop:K},null,8,["album","selected-id","expanded-ids","focused-id","draggable","drag-state","show-media-count","compact"]))),128))])):(e.openBlock(),e.createElementBlock("div",MV,[L[0]||(L[0]=e.createElementVNode("p",null,"No albums yet",-1)),e.renderSlot(N.$slots,"empty-action",{},void 0,!0)]))],32))}}),Od=Me(FV,[["__scopeId","data-v-ae3dea7a"]]),IV=300,$V=e.defineComponent({__name:"AlbumBrowser",props:{isOpen:{type:Boolean},selectedAlbumId:{default:null},title:{default:"Select Album"},confirmText:{default:"Select"}},emits:["close","confirm"],setup(o,{emit:n}){const t=o,a=n,i=e.ref(t.selectedAlbumId??null),r=e.ref(null),s=e.ref(0),l=e.ref(null);e.watch(()=>t.selectedAlbumId,p=>{i.value=p??null});const c=e.computed(()=>r.value!==null);function d(p){const v=Date.now();if(l.value===p.id&&v-s.value<IV){a("confirm",p);return}s.value=v,l.value=p.id,i.value=p.id,r.value=p}function u(){r.value&&a("confirm",r.value)}function m(){a("close")}function h(){a("close")}return(p,v)=>(e.openBlock(),e.createBlock(e.unref(U.IonModal),{"is-open":p.isOpen,class:"album-browser-modal",onDidDismiss:h},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonTitle),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p.title),1)]),_:1}),e.createVNode(e.unref(U.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.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(U.IonContent),{class:"album-browser-content"},{default:e.withCtx(()=>[e.createVNode(Od,{modelValue:i.value,"onUpdate:modelValue":v[0]||(v[0]=g=>i.value=g),draggable:!1,"show-media-count":!0,compact:!1,onAlbumSelected:d},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(U.IonFooter),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonButton),{fill:"clear",onClick:m},{default:e.withCtx(()=>[...v[2]||(v[2]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),e.createVNode(e.unref(U.IonButton),{"data-testid":"confirm-button",fill:"solid",color:"primary",disabled:!c.value,onClick:u},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p.confirmText),1)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1})]),_:1},8,["is-open"]))}}),Pd=Me($V,[["__scopeId","data-v-21676ec1"]]),RV={class:"ion-padding-start text-sm"},DV={class:"ion-padding-start text-sm"},AV={key:1},LV={key:1,class:"album-manager-inline rounded-lg border border-gray-200 bg-white p-4"},UV={class:"flex items-center justify-between gap-3 pb-3"},OV={class:"text-base font-semibold text-gray-900"},PV={class:"ion-padding-start text-sm"},zV={class:"ion-padding-start text-sm"},jV={class:"flex justify-between pt-2"},WV={key:1},_a=255,Ea=1e3,ZV=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(o,{emit:n}){const t=o,a=n,i=yi(),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),h=e.ref(null),p=e.ref(!1),v=e.ref(!1),g=e.computed(()=>d.value.name?c.value.name.trim()?c.value.name.length>_a?`Name must be ${_a} characters or less`:null:"Name is required":null),w=e.computed(()=>d.value.description&&c.value.description.length>Ea?`Description must be ${Ea} characters or less`:null),M=e.computed(()=>{const I=c.value.name.trim().length>0,F=c.value.name.length<=_a,k=c.value.description.length<=Ea;return I&&F&&k&&!p.value}),V=e.computed(()=>{var I;return((I=u.value)==null?void 0:I.name)??"None (Root)"}),b=e.computed(()=>h.value?h.value.children_count===0&&h.value.media_count===0:!1),f=e.computed(()=>h.value?h.value.children_count>0?"Cannot delete album with child albums. Move or delete children first.":h.value.media_count>0?"Cannot delete album with media. Remove media first.":`Are you sure you want to delete "${h.value.name}"? This action cannot be undone.`:"");e.onMounted(async()=>{t.albumId&&await _()});async function _(){if(t.albumId)try{const I=await i.fetchAlbum(t.albumId);h.value=I,c.value={name:I.name,description:I.description??"",parent_id:I.parent_id},I.parent_id&&(u.value={id:I.parent_id,name:"Parent Album"})}catch(I){a("error",I)}}function D(){d.value.name=!0}function B(){d.value.description=!0}function E(){m.value=!0}function S(I){u.value={id:I.id,name:I.name},c.value.parent_id=I.id,m.value=!1}function P(){m.value=!1}function C(){a("close")}function A(){a("close")}async function R(){if(d.value.name=!0,d.value.description=!0,!(!M.value||p.value)){p.value=!0;try{const I={name:c.value.name.trim(),description:c.value.description.trim(),parent_id:c.value.parent_id};if(r.value&&t.albumId){const F=await i.updateAlbum(t.albumId,I);a("updated",F)}else{const F=await i.createAlbum(I);a("created",F)}a("close")}catch(I){a("error",I)}finally{p.value=!1}}}function W(){b.value&&(v.value=!0)}async function O(I){var k;if((((k=I.detail)==null?void 0:k.role)??"")!=="confirm"){v.value=!1;return}if(t.albumId){p.value=!0;try{await i.deleteAlbum(t.albumId),a("deleted",t.albumId),a("close")}catch($){a("error",$)}finally{p.value=!1,v.value=!1}}}return(I,F)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[I.mode==="modal"?(e.openBlock(),e.createBlock(e.unref(U.IonModal),{key:0,"is-open":I.isOpen,class:"album-manager-modal",onDidDismiss:A},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonTitle),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value),1)]),_:1}),e.createVNode(e.unref(U.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonButton),{"data-testid":"cancel-btn",fill:"clear",onClick:C},{default:e.withCtx(()=>[...F[4]||(F[4]=[e.createTextVNode(" Cancel ",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),e.createVNode(e.unref(U.IonContent),{class:"album-manager-content"},{default:e.withCtx(()=>[e.createElementVNode("form",{"data-testid":"album-form",class:"p-4 space-y-3",onSubmit:e.withModifiers(R,["prevent"])},[e.createVNode(e.unref(U.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...F[5]||(F[5]=[e.createTextVNode("Name *",-1)])]),_:1}),e.createVNode(e.unref(U.IonInput),{modelValue:c.value.name,"onUpdate:modelValue":F[0]||(F[0]=k=>c.value.name=k),"data-testid":"name-input",maxlength:_a,onIonBlur:D},null,8,["modelValue"])]),_:1}),g.value?(e.openBlock(),e.createBlock(e.unref(U.IonText),{key:0,color:"danger","data-testid":"name-error"},{default:e.withCtx(()=>[e.createElementVNode("p",RV,e.toDisplayString(g.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(U.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...F[6]||(F[6]=[e.createTextVNode("Description",-1)])]),_:1}),e.createVNode(e.unref(U.IonTextarea),{modelValue:c.value.description,"onUpdate:modelValue":F[1]||(F[1]=k=>c.value.description=k),"data-testid":"description-input",maxlength:Ea,onIonBlur:B},null,8,["modelValue"])]),_:1}),w.value?(e.openBlock(),e.createBlock(e.unref(U.IonText),{key:1,color:"danger","data-testid":"description-error"},{default:e.withCtx(()=>[e.createElementVNode("p",DV,e.toDisplayString(w.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(U.IonItem),{button:"","data-testid":"parent-selector",onClick:E},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonLabel),null,{default:e.withCtx(()=>[...F[7]||(F[7]=[e.createTextVNode("Parent Album",-1)])]),_:1}),e.createVNode(e.unref(U.IonNote),{slot:"end","data-testid":"parent-name"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(V.value),1)]),_:1})]),_:1})],32)]),_:1}),e.createVNode(e.unref(U.IonFooter),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonButtons),{slot:"start"},{default:e.withCtx(()=>[r.value?(e.openBlock(),e.createBlock(e.unref(U.IonButton),{key:0,"data-testid":"delete-btn",color:"danger",disabled:!b.value,title:b.value?void 0:f.value,onClick:W},{default:e.withCtx(()=>[...F[8]||(F[8]=[e.createTextVNode(" Delete ",-1)])]),_:1},8,["disabled","title"])):e.createCommentVNode("",!0)]),_:1}),e.createVNode(e.unref(U.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonButton),{"data-testid":"submit-btn",type:"submit",color:"primary",disabled:!M.value,onClick:R},{default:e.withCtx(()=>[p.value?(e.openBlock(),e.createBlock(e.unref(U.IonSpinner),{key:0,"data-testid":"loading-spinner",name:"crescent"})):(e.openBlock(),e.createElementBlock("span",AV,e.toDisplayString(l.value),1))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1})]),_:1},8,["is-open"])):(e.openBlock(),e.createElementBlock("div",LV,[e.createElementVNode("div",UV,[e.createElementVNode("h2",OV,e.toDisplayString(s.value),1),e.createVNode(e.unref(U.IonButton),{"data-testid":"cancel-btn",fill:"clear",onClick:C},{default:e.withCtx(()=>[...F[9]||(F[9]=[e.createTextVNode(" Cancel ",-1)])]),_:1})]),e.createElementVNode("form",{"data-testid":"album-form",class:"space-y-3",onSubmit:e.withModifiers(R,["prevent"])},[e.createVNode(e.unref(U.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...F[10]||(F[10]=[e.createTextVNode("Name *",-1)])]),_:1}),e.createVNode(e.unref(U.IonInput),{modelValue:c.value.name,"onUpdate:modelValue":F[2]||(F[2]=k=>c.value.name=k),"data-testid":"name-input",maxlength:_a,onIonBlur:D},null,8,["modelValue"])]),_:1}),g.value?(e.openBlock(),e.createBlock(e.unref(U.IonText),{key:0,color:"danger","data-testid":"name-error"},{default:e.withCtx(()=>[e.createElementVNode("p",PV,e.toDisplayString(g.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(U.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...F[11]||(F[11]=[e.createTextVNode("Description",-1)])]),_:1}),e.createVNode(e.unref(U.IonTextarea),{modelValue:c.value.description,"onUpdate:modelValue":F[3]||(F[3]=k=>c.value.description=k),"data-testid":"description-input",maxlength:Ea,onIonBlur:B},null,8,["modelValue"])]),_:1}),w.value?(e.openBlock(),e.createBlock(e.unref(U.IonText),{key:1,color:"danger","data-testid":"description-error"},{default:e.withCtx(()=>[e.createElementVNode("p",zV,e.toDisplayString(w.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(U.IonItem),{button:"","data-testid":"parent-selector",onClick:E},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonLabel),null,{default:e.withCtx(()=>[...F[12]||(F[12]=[e.createTextVNode("Parent Album",-1)])]),_:1}),e.createVNode(e.unref(U.IonNote),{slot:"end","data-testid":"parent-name"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(V.value),1)]),_:1})]),_:1}),e.createElementVNode("div",jV,[e.createElementVNode("div",null,[r.value?(e.openBlock(),e.createBlock(e.unref(U.IonButton),{key:0,"data-testid":"delete-btn",color:"danger",fill:"outline",disabled:!b.value,title:b.value?void 0:f.value,onClick:W},{default:e.withCtx(()=>[...F[13]||(F[13]=[e.createTextVNode(" Delete ",-1)])]),_:1},8,["disabled","title"])):e.createCommentVNode("",!0)]),e.createVNode(e.unref(U.IonButton),{"data-testid":"submit-btn",type:"submit",color:"primary",disabled:!M.value,onClick:R},{default:e.withCtx(()=>[p.value?(e.openBlock(),e.createBlock(e.unref(U.IonSpinner),{key:0,"data-testid":"loading-spinner",name:"crescent"})):(e.openBlock(),e.createElementBlock("span",WV,e.toDisplayString(l.value),1))]),_:1},8,["disabled"])])],32)])),e.createVNode(Pd,{"is-open":m.value,"selected-album-id":c.value.parent_id,title:"Select Parent Album",onClose:P,onConfirm:S},null,8,["is-open","selected-album-id"]),e.createVNode(e.unref(U.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:O},null,8,["is-open","message"])],64))}}),HV=Me(ZV,[["__scopeId","data-v-22083f3a"]]),XV={class:"album-media-grid"},GV={class:"aspect-square"},JV={key:1,"data-testid":"empty-state",class:"flex flex-col items-center justify-center py-12 gap-4"},YV={class:"text-gray-500"},qV=["data-media-id","draggable","onDragstart","onDragover","onDrop","onMouseenter"],KV={key:0,"data-testid":"drop-indicator",class:"absolute inset-0 border-2 border-primary rounded-lg pointer-events-none z-30"},QV={key:1,class:"absolute top-2 right-2 z-20 opacity-0 group-hover:opacity-100 transition-opacity cursor-grab"},e4={class:"aspect-square relative"},t4=["src","alt"],n4={key:0,class:"absolute inset-0 bg-black/50 flex items-center justify-center gap-2 transition-opacity"},a4=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(o,{emit:n}){const t=o,a=n,i=yi(),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),h=e.computed(()=>{const A=t.columns;return["grid","gap-4",`grid-cols-${A.mobile??2}`,`sm:grid-cols-${A.sm??3}`,`md:grid-cols-${A.md??4}`,`lg:grid-cols-${A.lg??5}`,`xl:grid-cols-${A.xl??6}`]}),p=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 A=await i.fetchAlbumMedia(t.albumId);r.value=A}catch{r.value=[]}finally{s.value=!1}}function g(A){return t.selectedItems.includes(A)}function w(A){a("toggle-select",A);const R=g(A.uuid)?t.selectedItems.filter(W=>W!==A.uuid):[...t.selectedItems,A.uuid];a("selection-change",R)}function M(A){if(A.conversions&&typeof A.conversions=="object"){const R=A.conversions.thumb;if(typeof R=="string")return R}return A.original_url}function V(A){l.value=A}function b(){l.value=null}function f(A){a("preview",A)}function _(A){a("edit",A)}function D(A){a("detach",A.uuid)}function B(){a("add")}function E(A,R){t.reorderable&&(c.value=R,A.dataTransfer&&(A.dataTransfer.effectAllowed="move",A.dataTransfer.setData("text/plain",String(R))))}function S(A,R){!t.reorderable||c.value===null||(A.preventDefault(),d.value=R)}function P(A,R){if(!t.reorderable||c.value===null)return;A.preventDefault();const W=c.value;if(W!==R){const O=[...r.value],[I]=O.splice(W,1);O.splice(R,0,I),r.value=O;const F=O.map(k=>k.uuid);a("reorder",F),i.reorderAlbumMedia(t.albumId,F).catch(()=>{v()})}c.value=null,d.value=null}function C(){c.value=null,d.value=null}return(A,R)=>(e.openBlock(),e.createElementBlock("div",XV,[u.value?(e.openBlock(),e.createElementBlock("div",{key:0,"data-testid":"loading-grid",class:e.normalizeClass(h.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,W=>(e.openBlock(),e.createBlock(e.unref(U.IonCard),{key:W,class:"m-0"},{default:e.withCtx(()=>[e.createElementVNode("div",GV,[e.createVNode(e.unref(U.IonSkeletonText),{animated:"",class:"w-full h-full skeleton"})])]),_:1}))),128))],2)):m.value?(e.openBlock(),e.createElementBlock("div",JV,[e.createVNode(e.unref(U.IonIcon),{name:"images-outline",class:"text-6xl text-gray-400"}),e.createElementVNode("p",YV,e.toDisplayString(A.emptyText),1),e.createVNode(e.unref(U.IonButton),{"data-testid":"add-media-btn",onClick:B},{default:e.withCtx(()=>[...R[0]||(R[0]=[e.createTextVNode(" Add Media ",-1)])]),_:1})])):(e.openBlock(),e.createElementBlock("div",{key:2,"data-testid":"media-grid",class:e.normalizeClass(h.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,(W,O)=>(e.openBlock(),e.createElementBlock("div",{key:W.uuid,"data-media-id":W.uuid,class:e.normalizeClass(["media-item relative group",{"opacity-50":c.value===O,"ring-2 ring-primary":d.value===O&&c.value!==O}]),draggable:A.reorderable,onDragstart:I=>E(I,O),onDragover:I=>S(I,O),onDrop:I=>P(I,O),onDragend:C,onMouseenter:I=>V(W.uuid),onMouseleave:b},[d.value===O&&c.value!==O&&A.reorderable?(e.openBlock(),e.createElementBlock("div",KV)):e.createCommentVNode("",!0),A.reorderable?(e.openBlock(),e.createElementBlock("div",QV,[e.createVNode(e.unref(U.IonIcon),{name:"reorder-three-outline",class:"text-white drop-shadow-md"})])):e.createCommentVNode("",!0),A.selectionMode?(e.openBlock(),e.createBlock(e.unref(U.IonCheckbox),{key:2,"data-testid":"media-checkbox",checked:g(W.uuid),class:"absolute top-2 left-2 z-20",onIonChange:I=>w(W)},null,8,["checked","onIonChange"])):e.createCommentVNode("",!0),e.createVNode(e.unref(U.IonCard),{class:"m-0 overflow-hidden"},{default:e.withCtx(()=>[e.createElementVNode("div",e4,[e.createElementVNode("img",{src:M(W),alt:W.file_name,class:"w-full h-full object-cover"},null,8,t4),A.showActions&&l.value===W.uuid?(e.openBlock(),e.createElementBlock("div",n4,[e.createVNode(e.unref(U.IonButton),{"data-testid":"action-preview",fill:"clear",size:"small",color:"light",onClick:I=>f(W)},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{slot:"icon-only",name:"eye-outline"})]),_:1},8,["onClick"]),e.createVNode(e.unref(U.IonButton),{"data-testid":"action-edit",fill:"clear",size:"small",color:"light",onClick:I=>_(W)},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{slot:"icon-only",name:"create-outline"})]),_:1},8,["onClick"]),e.createVNode(e.unref(U.IonButton),{"data-testid":"action-detach",fill:"clear",size:"small",color:"danger",onClick:I=>D(W)},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{slot:"icon-only",name:"close-circle-outline"})]),_:1},8,["onClick"])])):e.createCommentVNode("",!0)])]),_:2},1024)],42,qV))),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:B},[e.createVNode(e.unref(U.IonIcon),{name:"add-circle-outline",class:"text-4xl text-gray-400"}),R[1]||(R[1]=e.createElementVNode("span",{class:"text-sm text-gray-500"},"Add Media",-1))])],2))]))}}),o4=Me(a4,[["__scopeId","data-v-d84b796a"]]),i4={key:0,class:"media-album-inline-create","data-testid":"media-album-inline-create"},r4={class:"media-album-inline-create__field"},s4={class:"media-album-inline-create__field"},l4=["value"],c4={key:1,class:"media-album-inline-create__autocomplete"},d4={class:"media-album-inline-create__autocomplete-input-wrap"},u4={key:0,class:"media-album-inline-create__autocomplete-list"},m4=["onMousedown"],p4={key:1,class:"media-album-inline-create__autocomplete-empty"},f4={class:"media-album-inline-create__actions"},h4=e.defineComponent({__name:"MediaAlbumInlineCreate",props:{open:{type:Boolean,default:!1},nameLabel:{default:"Album name"},albums:{default:()=>[]}},emits:["cancel","create"],setup(o,{emit:n}){const t=o,a=n,i=e.ref(""),r=e.ref(""),s=e.ref(""),l=e.ref(!1),c=e.computed(()=>t.albums.length>5),d=e.computed(()=>{if(s.value.trim()==="")return t.albums;const w=s.value.toLowerCase();return t.albums.filter(M=>M.name.toLowerCase().includes(w))}),u=e.computed(()=>{if(r.value==="")return"";const w=t.albums.find(M=>M.id===r.value);return(w==null?void 0:w.name)??""}),m=w=>{r.value=w.id,s.value=w.name,l.value=!1},h=()=>{r.value="",s.value="",l.value=!1},p=()=>{l.value=!0,r.value!==""&&(s.value=u.value)},v=()=>{setTimeout(()=>{l.value=!1,r.value!==""?s.value=u.value:s.value=""},150)},g=()=>{i.value.trim()!==""&&(a("create",i.value.trim(),r.value!==""?r.value:void 0),i.value="",r.value="",s.value="")};return(w,M)=>w.open?(e.openBlock(),e.createElementBlock("section",i4,[M[7]||(M[7]=e.createElementVNode("h4",{class:"media-album-inline-create__heading"}," New album ",-1)),e.createElementVNode("label",r4,[e.createElementVNode("span",null,e.toDisplayString(w.nameLabel),1),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":M[0]||(M[0]=V=>i.value=V),type:"text",class:"media-album-inline-create__input",placeholder:"e.g. Marbles, Pendants","data-testid":"input-media-album-name"},null,512),[[e.vModelText,i.value]])]),e.createElementVNode("label",s4,[M[6]||(M[6]=e.createElementVNode("span",null,"Parent album (optional)",-1)),c.value?(e.openBlock(),e.createElementBlock("div",c4,[e.createElementVNode("div",d4,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":M[2]||(M[2]=V=>s.value=V),type:"text",class:"media-album-inline-create__input",placeholder:"Search albums...","data-testid":"input-media-album-parent-search",onFocus:p,onBlur:v},null,544),[[e.vModelText,s.value]]),r.value!==""?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"media-album-inline-create__autocomplete-clear","aria-label":"Clear parent album",onMousedown:e.withModifiers(h,["prevent"])},[...M[5]||(M[5]=[e.createElementVNode("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round"},[e.createElementVNode("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElementVNode("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])],32)):e.createCommentVNode("",!0)]),l.value?(e.openBlock(),e.createElementBlock("ul",u4,[r.value!==""?(e.openBlock(),e.createElementBlock("li",{key:0,class:"media-album-inline-create__autocomplete-option media-album-inline-create__autocomplete-option--none",onMousedown:e.withModifiers(h,["prevent"])}," None ",32)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,V=>(e.openBlock(),e.createElementBlock("li",{key:V.id,class:e.normalizeClass(["media-album-inline-create__autocomplete-option",{"is-selected":V.id===r.value}]),onMousedown:e.withModifiers(b=>m(V),["prevent"])},e.toDisplayString(V.name),43,m4))),128)),d.value.length===0?(e.openBlock(),e.createElementBlock("li",p4," No albums match ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])):e.withDirectives((e.openBlock(),e.createElementBlock("select",{key:0,"onUpdate:modelValue":M[1]||(M[1]=V=>r.value=V),class:"media-album-inline-create__input","data-testid":"select-media-album-parent"},[M[4]||(M[4]=e.createElementVNode("option",{value:""}," None ",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(w.albums,V=>(e.openBlock(),e.createElementBlock("option",{key:V.id,value:V.id},e.toDisplayString(V.name),9,l4))),128))],512)),[[e.vModelSelect,r.value]])]),e.createElementVNode("div",f4,[e.createElementVNode("button",{type:"button",class:"media-album-inline-create__button","data-testid":"btn-media-album-cancel",onClick:M[3]||(M[3]=V=>a("cancel"))}," Cancel "),e.createElementVNode("button",{type:"button",class:"media-album-inline-create__button media-album-inline-create__button--primary","data-testid":"btn-media-album-create",onClick:g}," Create ")])])):e.createCommentVNode("",!0)}}),zd=Me(h4,[["__scopeId","data-v-a85162fe"]]),v4={class:"media-album-unavailable-state","data-testid":"media-album-unavailable-state"},g4=e.defineComponent({__name:"MediaAlbumUnavailableState",props:{title:{default:"Album unavailable"},body:{default:"You no longer have access to this album."},actionLabel:{default:"Go to library"}},emits:["goToLibrary"],setup(o,{emit:n}){const t=n;return(a,i)=>(e.openBlock(),e.createElementBlock("section",v4,[e.createElementVNode("h3",null,e.toDisplayString(a.title),1),e.createElementVNode("p",null,e.toDisplayString(a.body),1),e.createElementVNode("button",{type:"button",class:"media-album-unavailable-state__button",onClick:i[0]||(i[0]=r=>t("goToLibrary"))},e.toDisplayString(a.actionLabel),1)]))}}),jd=Me(g4,[["__scopeId","data-v-04620e64"]]),y4={key:0,class:"media-preview-sheet","data-testid":"media-preview-sheet"},b4={class:"media-preview-sheet__header"},w4=["src","alt"],k4=["src"],_4={class:"media-preview-sheet__actions"},E4=["disabled"],x4=["disabled"],C4=e.defineComponent({__name:"MediaPreviewSheet",props:{open:{type:Boolean,default:!1},media:{default:null},canGoPrevious:{type:Boolean,default:!1},canGoNext:{type:Boolean,default:!1},selected:{type:Boolean,default:!1}},emits:["close","previous","next","toggleSelect"],setup(o,{emit:n}){const t=o,a=n,i=e.computed(()=>{var l;return((l=t.media)==null?void 0:l.mime_type.startsWith("image/"))===!0}),r=e.computed(()=>t.media?t.media.preview_url??t.media.original_url:""),s=()=>{t.media&&a("toggleSelect",t.media)};return(l,c)=>l.open&&l.media?(e.openBlock(),e.createElementBlock("section",y4,[e.createElementVNode("header",b4,[e.createElementVNode("strong",null,e.toDisplayString(l.media.file_name),1),e.createElementVNode("button",{type:"button",class:"media-preview-sheet__close","aria-label":"Close preview",onClick:c[0]||(c[0]=d=>a("close"))}," Close ")]),i.value?(e.openBlock(),e.createElementBlock("img",{key:0,class:"media-preview-sheet__image",src:r.value,alt:l.media.file_name},null,8,w4)):(e.openBlock(),e.createElementBlock("video",{key:1,class:"media-preview-sheet__video",src:r.value,controls:""},null,8,k4)),e.createElementVNode("div",_4,[e.createElementVNode("button",{type:"button",class:"media-preview-sheet__nav",disabled:!l.canGoPrevious,onClick:c[1]||(c[1]=d=>a("previous"))}," Previous ",8,E4),e.createElementVNode("button",{type:"button",class:"media-preview-sheet__select",onClick:s},e.toDisplayString(l.selected?"Deselect":"Select"),1),e.createElementVNode("button",{type:"button",class:"media-preview-sheet__nav",disabled:!l.canGoNext,onClick:c[2]||(c[2]=d=>a("next"))}," Next ",8,x4)])])):e.createCommentVNode("",!0)}}),Wd=Me(C4,[["__scopeId","data-v-9a05f74e"]]),S4={key:0,class:"media-album-grid","data-testid":"media-source-sheet"},V4={class:"media-album-grid__items"},N4={class:"media-album-grid__card-name"},T4={class:"media-album-grid__card-name"},M4=["data-testid","onClick"],B4={class:"media-album-grid__card-name"},F4={key:0,class:"media-album-grid__card-meta"},I4={key:0,class:"media-album-grid__empty"},$4=e.defineComponent({__name:"MediaSourceSheet",props:{open:{type:Boolean,default:!1},currentView:{},albums:{},viewLibraryLabel:{default:"Library"},browseAlbumsLabel:{default:"Albums"},createAlbumLabel:{default:"Create album"},enableAlbumCreation:{type:Boolean,default:!1}},emits:["close","selectLibrary","selectAlbum","createAlbum"],setup(o,{emit:n}){const t=n;return(a,i)=>a.open?(e.openBlock(),e.createElementBlock("section",S4,[e.createElementVNode("div",V4,[a.enableAlbumCreation?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"media-album-grid__card media-album-grid__card--create","data-testid":"btn-media-source-create-album",onClick:i[0]||(i[0]=r=>t("createAlbum"))},[i[2]||(i[2]=e.createElementVNode("div",{class:"media-album-grid__card-icon"},[e.createElementVNode("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),e.createElementVNode("line",{x1:"5",y1:"12",x2:"19",y2:"12"})])],-1)),e.createElementVNode("span",N4,e.toDisplayString(a.createAlbumLabel),1)])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["media-album-grid__card",{"is-active":a.currentView.scope==="library"}]),"data-testid":"btn-media-source-library",onClick:i[1]||(i[1]=r=>t("selectLibrary"))},[i[3]||(i[3]=e.createStaticVNode('<div class="media-album-grid__card-icon" data-v-129f67b1><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-v-129f67b1><rect x="3" y="3" width="7" height="7" data-v-129f67b1></rect><rect x="14" y="3" width="7" height="7" data-v-129f67b1></rect><rect x="14" y="14" width="7" height="7" data-v-129f67b1></rect><rect x="3" y="14" width="7" height="7" data-v-129f67b1></rect></svg></div>',1)),e.createElementVNode("span",T4,e.toDisplayString(a.viewLibraryLabel),1),i[4]||(i[4]=e.createElementVNode("span",{class:"media-album-grid__card-meta"},"All media",-1))],2),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.albums,r=>(e.openBlock(),e.createElementBlock("button",{key:r.id,type:"button",class:e.normalizeClass(["media-album-grid__card",{"is-active":a.currentView.scope==="album"&&a.currentView.albumId===r.id}]),"data-testid":`btn-media-source-album-${r.id}`,onClick:s=>t("selectAlbum",r)},[i[5]||(i[5]=e.createElementVNode("div",{class:"media-album-grid__card-icon"},[e.createElementVNode("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"})])],-1)),e.createElementVNode("span",B4,e.toDisplayString(r.name),1),r.mediaCount!==void 0?(e.openBlock(),e.createElementBlock("span",F4,e.toDisplayString(r.mediaCount)+" item"+e.toDisplayString(r.mediaCount===1?"":"s"),1)):e.createCommentVNode("",!0)],10,M4))),128))]),a.albums.length===0?(e.openBlock(),e.createElementBlock("p",I4," No albums yet. ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)}}),Zd=Me($4,[["__scopeId","data-v-129f67b1"]]),R4={key:0,class:"media-upload-sheet","data-testid":"media-upload-sheet"},D4=["accept"],A4={key:0,class:"media-upload-sheet__queue"},L4={class:"media-upload-sheet__queue-info"},U4={class:"media-upload-sheet__queue-status"},O4={class:"media-upload-sheet__progress-bar"},P4=e.defineComponent({__name:"MediaUploadSheet",props:{open:{type:Boolean,default:!1},queue:{},accept:{default:""},uploadLabel:{default:"Upload"}},emits:["close","filesSelected"],setup(o,{emit:n}){const t=n,a=e.ref(!1),i=c=>{const d=c.target;!(d instanceof HTMLInputElement)||d.files===null||(t("filesSelected",Array.from(d.files)),d.value="")},r=c=>{c.preventDefault(),a.value=!0},s=()=>{a.value=!1},l=c=>{var d;c.preventDefault(),a.value=!1,(d=c.dataTransfer)!=null&&d.files&&c.dataTransfer.files.length>0&&t("filesSelected",Array.from(c.dataTransfer.files))};return(c,d)=>c.open?(e.openBlock(),e.createElementBlock("section",R4,[e.createElementVNode("label",{class:e.normalizeClass(["media-upload-sheet__dropzone",{"is-drag-over":a.value}]),onDragover:r,onDragleave:s,onDrop:l},[d[1]||(d[1]=e.createStaticVNode('<div class="media-upload-sheet__dropzone-icon" data-v-e238d615><svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-v-e238d615><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" data-v-e238d615></path><polyline points="17 8 12 3 7 8" data-v-e238d615></polyline><line x1="12" y1="3" x2="12" y2="15" data-v-e238d615></line></svg></div><span class="media-upload-sheet__dropzone-text" data-v-e238d615> Drop files here or <strong data-v-e238d615>browse</strong></span>',2)),e.createElementVNode("input",{type:"file",accept:c.accept,multiple:"",class:"media-upload-sheet__file-input","data-testid":"input-media-upload-sheet",onChange:i},null,40,D4)],34),c.queue.length>0?(e.openBlock(),e.createElementBlock("ul",A4,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.queue,u=>(e.openBlock(),e.createElementBlock("li",{key:u.id,class:"media-upload-sheet__queue-item"},[e.createElementVNode("div",L4,[e.createElementVNode("strong",null,e.toDisplayString(u.file.name),1),e.createElementVNode("span",U4,e.toDisplayString(u.status),1)]),e.createElementVNode("div",O4,[e.createElementVNode("div",{class:"media-upload-sheet__progress-fill",style:e.normalizeStyle({width:`${u.progress}%`})},null,4)])]))),128))])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"media-upload-sheet__close-btn","aria-label":"Close upload panel","data-testid":"btn-close-upload-sheet",onClick:d[0]||(d[0]=u=>t("close"))}," Done ")])):e.createCommentVNode("",!0)}}),Hd=Me(P4,[["__scopeId","data-v-e238d615"]]),z4=["aria-label","aria-pressed","data-testid"],j4=["src","alt"],W4={key:1,class:"media-thumbnail-cell__video"},Z4={class:"media-thumbnail-cell__video-name"},H4={key:2,class:"media-thumbnail-cell__selected-badge"},X4={key:3,class:"media-thumbnail-cell__status-badge"},G4=["aria-label"],J4=e.defineComponent({__name:"MediaThumbnailCell",props:{media:{},selected:{type:Boolean,default:!1},status:{},testId:{default:"media-library-thumbnail"}},emits:["toggle","preview"],setup(o,{emit:n}){const t=o,a=n,i=e.computed(()=>t.media.thumbnail_url??t.media.preview_url??t.media.original_url),r=e.computed(()=>t.media.mime_type.startsWith("image/")),s=e.computed(()=>{switch(t.status){case"missing":return"Unavailable";case"forbidden":return"Restricted";case"uploading":return"Uploading";case"failed":return"Failed";case"file_lost":return"Needs file";default:return null}}),l=e.computed(()=>{const u=t.media.file_name;return t.selected?`Deselect ${u}`:`Select ${u}`}),c=()=>{a("toggle",t.media)},d=()=>{a("preview",t.media)};return(u,m)=>(e.openBlock(),e.createElementBlock("article",{class:e.normalizeClass(["media-thumbnail-cell",{"is-selected":u.selected,"has-status":s.value!==null}])},[e.createElementVNode("button",{type:"button",class:"media-thumbnail-cell__button","aria-label":l.value,"aria-pressed":u.selected?"true":"false","data-testid":u.testId,onClick:c},[r.value?(e.openBlock(),e.createElementBlock("img",{key:0,class:"media-thumbnail-cell__image",src:i.value,alt:u.media.file_name},null,8,j4)):(e.openBlock(),e.createElementBlock("div",W4,[m[0]||(m[0]=e.createElementVNode("span",{class:"media-thumbnail-cell__video-label"},"Video",-1)),e.createElementVNode("span",Z4,e.toDisplayString(u.media.file_name),1)])),u.selected?(e.openBlock(),e.createElementBlock("span",H4," Selected ")):e.createCommentVNode("",!0),s.value!==null?(e.openBlock(),e.createElementBlock("span",X4,e.toDisplayString(s.value),1)):e.createCommentVNode("",!0)],8,z4),e.createElementVNode("button",{type:"button",class:"media-thumbnail-cell__preview-button","aria-label":`Preview ${u.media.file_name}`,onClick:d}," Preview ",8,G4)],2))}}),Xd=Me(J4,[["__scopeId","data-v-edd4f0ad"]]),Y4={class:"virtual-media-grid"},q4={key:0,class:"virtual-media-grid__state","data-testid":"media-grid-loading"},K4={key:1,class:"virtual-media-grid__state","data-testid":"media-grid-empty"},Q4={key:2,class:"virtual-media-grid__items"},e3=["disabled"],t3=e.defineComponent({__name:"VirtualMediaGrid",props:{items:{},selectedItems:{},loading:{type:Boolean,default:!1},loadingMore:{type:Boolean,default:!1},hasMore:{type:Boolean,default:!1},emptyMessage:{default:"No media found."},testIdPrefix:{default:"media-grid-item"}},emits:["toggle","preview","loadMore"],setup(o,{emit:n}){const t=o,a=n;function i(r){return t.selectedItems.find(s=>s.id===r)}return(r,s)=>(e.openBlock(),e.createElementBlock("div",Y4,[r.loading&&r.items.length===0?(e.openBlock(),e.createElementBlock("div",q4," Loading media... ")):r.items.length===0?(e.openBlock(),e.createElementBlock("div",K4,e.toDisplayString(r.emptyMessage),1)):(e.openBlock(),e.createElementBlock("div",Q4,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.items,l=>{var c,d;return e.openBlock(),e.createBlock(Xd,{key:l.uuid,media:l,selected:((c=i(l.uuid))==null?void 0:c.status)==="ready",status:(d=i(l.uuid))==null?void 0:d.status,"test-id":`${r.testIdPrefix}-${l.uuid}`,onToggle:s[0]||(s[0]=u=>a("toggle",u)),onPreview:s[1]||(s[1]=u=>a("preview",u))},null,8,["media","selected","status","test-id"])}),128))])),r.hasMore?(e.openBlock(),e.createElementBlock("button",{key:3,type:"button",class:"virtual-media-grid__load-more",disabled:r.loadingMore,"data-testid":"btn-media-grid-load-more",onClick:s[2]||(s[2]=l=>a("loadMore"))},e.toDisplayString(r.loadingMore?"Loading…":"Load more"),9,e3)):e.createCommentVNode("",!0)]))}}),Gd=Me(t3,[["__scopeId","data-v-820b9a4f"]]);function Zo(o){if(o===0)return"0 Bytes";const n=1024,t=["Bytes","KB","MB","GB"],a=Math.floor(Math.log(o)/Math.log(n));return parseFloat((o/Math.pow(n,a)).toFixed(2))+" "+t[a]}function Jd(o){var t;const n=o.split(".");return n.length>1?`.${(t=n.pop())==null?void 0:t.toLowerCase()}`:""}function vs(o){return o.type.startsWith("image/")}async function Yd(o){return vs(o)?new Promise(n=>{const t=new Image,a=URL.createObjectURL(o);t.onload=()=>{URL.revokeObjectURL(a),n({width:t.naturalWidth,height:t.naturalHeight})},t.onerror=()=>{URL.revokeObjectURL(a),n(null)},t.src=a}):null}async function qd(o,n){const t=[];if(n.maxFileSize&&o.size>n.maxFileSize&&t.push({field:"size",message:`File exceeds maximum size of ${Zo(n.maxFileSize)}`,code:"MAX_FILE_SIZE"}),n.minFileSize&&o.size<n.minFileSize&&t.push({field:"size",message:`File is smaller than minimum size of ${Zo(n.minFileSize)}`,code:"MIN_FILE_SIZE"}),n.acceptedMimeTypes&&n.acceptedMimeTypes.length>0&&(n.acceptedMimeTypes.some(i=>i.endsWith("/*")?o.type.startsWith(i.slice(0,-1)):o.type===i)||t.push({field:"type",message:`File type "${o.type}" is not allowed`,code:"INVALID_MIME_TYPE"})),n.acceptedExtensions&&n.acceptedExtensions.length>0){const a=Jd(o.name);n.acceptedExtensions.some(r=>r.toLowerCase()===a.toLowerCase())||t.push({field:"extension",message:`File extension "${a}" is not allowed`,code:"INVALID_EXTENSION"})}if(vs(o)&&(n.maxDimensions||n.minDimensions)){const a=await Yd(o);a&&(n.maxDimensions&&(a.width>n.maxDimensions.width&&t.push({field:"dimensions",message:`Image width (${a.width}px) exceeds maximum (${n.maxDimensions.width}px)`,code:"MAX_WIDTH"}),a.height>n.maxDimensions.height&&t.push({field:"dimensions",message:`Image height (${a.height}px) exceeds maximum (${n.maxDimensions.height}px)`,code:"MAX_HEIGHT"})),n.minDimensions&&(a.width<n.minDimensions.width&&t.push({field:"dimensions",message:`Image width (${a.width}px) is smaller than minimum (${n.minDimensions.width}px)`,code:"MIN_WIDTH"}),a.height<n.minDimensions.height&&t.push({field:"dimensions",message:`Image height (${a.height}px) is smaller than minimum (${n.minDimensions.height}px)`,code:"MIN_HEIGHT"})))}if(n.customValidator){const a=await n.customValidator(o);t.push(...a)}return{valid:t.length===0,errors:t}}function gs(o={}){const n=e.ref(o.rules||{});function t(c){n.value=c}async function a(c){return qd(c,n.value)}async function i(c){const d=new Map;return await Promise.all(c.map(async u=>{const m=await a(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:a,validateFiles:i,canAddFiles:r,acceptString:s,isMimeTypeAllowed:l}}function n3(){return`upload-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}function a3(o){if(o.type.startsWith("image/"))return URL.createObjectURL(o)}function ys(o){const{adapter:n,maxConcurrent:t=3,rules:a,collection:i,onUploadStart:r,onUploadProgress:s,onUploadComplete:l,onUploadError:c,onQueueComplete:d,postUpload:u}=o,m=e.ref(new Map),h=e.ref(new Set),p=a?{rules:a}:{},{validateFile:v}=gs(p);async function g(){if(h.value.size>=t)return;const A=Array.from(m.value.entries()).find(([O,I])=>I.status==="pending"&&!h.value.has(O));if(!A){Array.from(m.value.values()).every(I=>I.status==="completed"||I.status==="error")&&m.value.size>0&&(d==null||d());return}const[R,W]=A;await w(R,W)}async function w(A,R){h.value.add(A),R.status="uploading",R.abortController=new AbortController,m.value.set(A,{...R}),r==null||r(R);try{const W={onProgress:I=>{R.progress=I,m.value.set(A,{...R}),s==null||s(R)},signal:R.abortController.signal};i&&(W.collection=i);const O=await n.upload(R.file,W);u&&(R.status="attaching",m.value.set(A,{...R}),s==null||s(R),await u(R,O.media,n)),R.status="completed",R.progress=100,R.media=O.media,m.value.set(A,{...R}),l==null||l(R,O.media)}catch(W){W.name==="AbortError"?m.value.delete(A):(R.status="error",R.error=W.message,m.value.set(A,{...R}),c==null||c(R,W))}finally{h.value.delete(A),delete R.abortController,g()}}async function M(A){var O;const R=Array.from(A),W=[];for(const I of R){const F=await v(I),k=n3(),$=a3(I),j={id:k,file:I,progress:0,status:F.valid?"pending":"error"};!F.valid&&((O=F.errors[0])!=null&&O.message)&&(j.error=F.errors[0].message),$&&(j.previewUrl=$),m.value.set(k,j);const Z={media:null,clientId:k,name:I.name,order:0,upload:j,errors:F.errors};W.push(Z)}for(let I=0;I<t;I++)g();return W}function V(A){const R=m.value.get(A);R&&(R.abortController&&R.abortController.abort(),R.previewUrl&&URL.revokeObjectURL(R.previewUrl),m.value.delete(A),h.value.delete(A),g())}async function b(A){const R=m.value.get(A);!R||R.status!=="error"||(R.status="pending",R.progress=0,delete R.error,m.value.set(A,{...R}),g())}function f(){for(const[A,R]of m.value.entries())(R.status==="completed"||R.status==="error")&&(R.previewUrl&&URL.revokeObjectURL(R.previewUrl),m.value.delete(A))}function _(){for(const A of m.value.values())A.abortController&&A.abortController.abort(),A.previewUrl&&URL.revokeObjectURL(A.previewUrl);m.value.clear(),h.value.clear()}function D(A){return m.value.get(A)}const B=e.computed(()=>h.value.size>0),E=e.computed(()=>h.value.size),S=e.computed(()=>Array.from(m.value.values()).filter(A=>A.status==="pending").length),P=e.computed(()=>m.value.size===0?!0:Array.from(m.value.values()).every(A=>A.status==="completed"||A.status==="error")),C=e.computed(()=>Array.from(m.value.values()));return{uploads:m,isUploading:B,activeCount:E,pendingCount:S,isComplete:P,addFiles:M,cancelUpload:V,retryUpload:b,clearCompleted:f,clearAll:_,getUpload:D,uploadsArray:C}}function Ln(o){return typeof o=="object"&&o!==null&&!Array.isArray(o)}function Oa(o){return typeof o=="string"?o:null}function ec(o){return typeof o=="number"?o:null}function o3(o){return typeof o=="boolean"?o:null}function Kd(o){return Ln(o)&&typeof o.uuid=="string"&&typeof o.file_name=="string"&&typeof o.mime_type=="string"&&(typeof o.original_url=="string"||o.original_url===null)&&typeof o.size=="number"&&typeof o.disk=="string"&&typeof o.created_at=="string"&&typeof o.updated_at=="string"}function i3(o){return!Ln(o)||typeof o.id!="string"||typeof o.status!="string"?null:o.status==="ready"?Kd(o.media)?{id:o.id,status:"ready",media:o.media}:null:o.status==="missing"||o.status==="forbidden"?{id:o.id,status:o.status}:null}function r3(o){return Ln(o)?{next_cursor:Oa(o.next_cursor),previous_cursor:Oa(o.previous_cursor),has_more:o3(o.has_more)??!1,per_page:ec(o.per_page),count:ec(o.count)}:null}function tc(o){const n=Ln(o)?o:{},t=Array.isArray(n.data)?n.data.filter(Kd):[],a=Ln(n.meta)?n.meta:{},i=r3(a.pagination),r=(i==null?void 0:i.next_cursor)??Oa(a.next_cursor)??Oa(a.cursor),s=(i==null?void 0:i.has_more)??a.has_more===!0,l=Array.isArray(n.hydrated)?n.hydrated.map(i3).filter(d=>d!==null):[],c={cursor:r,has_more:s};return i!==null&&(c.pagination=i),{data:t,meta:c,hydrated:l}}function nc(o,n,t,a,i){const r={view:o.scope==="album"?{scope:"album",album_id:o.albumId}:{scope:"library"},per_page:t,sort:n.sort??"newest"};return n.query&&n.query.trim()!==""&&(r.query=n.query.trim()),n.kinds&&n.kinds.length>0&&(r.kinds=n.kinds),a!==null&&(r.cursor=a),i&&i.length>0&&(r.hydrate_ids=i),r}function ac(o){const n=new Set,t=[];for(const a of o)n.has(a.uuid)||(n.add(a.uuid),t.push(a));return t}function s3(o){var t;if(!(o instanceof Error))return null;const n=(t=o.response)==null?void 0:t.status;return typeof n=="number"?n:null}function l3(o){var n;return o instanceof Error?((n=o.response)==null?void 0:n.data)??null:null}function c3(o){if(!Ln(o))return[];const n=[];for(const t of Object.values(o)){if(typeof t=="string"&&t.trim()!==""){n.push(t.trim());continue}if(Array.isArray(t))for(const a of t){if(typeof a!="string")continue;const i=a.trim();i!==""&&n.push(i)}}return Array.from(new Set(n))}function d3(o){var r;const n=l3(o),t=Ln(n)?n:null,a=((r=Oa(t==null?void 0:t.message))==null?void 0:r.trim())??null,i=c3(t==null?void 0:t.errors);return a!==null&&i.length>0?a==="Validation failed"?i.join(" "):i.every(l=>a.includes(l))?a:`${a} ${i.join(" ")}`:a!==null?a:i.length>0?i.join(" "):o instanceof Error?o.message:"Failed to load media."}function oc(o,n){const t=d3(n),a=s3(n);return{code:a===403?"permission_denied":o,message:t,retriable:a!==403,cause:n}}function bs(o){const n=o.perPage??40,t=e.ref([]),a=e.ref([]),i=e.ref(null),r=e.ref(!1),s=e.ref(!1),l=e.ref(!1),c=e.ref(!1),d=e.ref(null);let u=null,m=0;const h=async g=>{m+=1;const w=m;u==null||u.abort();const M=new AbortController;u=M,g?l.value=!0:s.value=!0,d.value=null,c.value=!1;try{const V=await o.httpClient.get("/v1/media/library",{params:nc(o.view.value,o.filters.value,n,g?i.value:null),signal:M.signal});if(w!==m)return;const b=tc(V);t.value=g?ac([...t.value,...b.data]):b.data,a.value=b.hydrated,i.value=b.meta.cursor,r.value=b.meta.has_more}catch(V){if(M.signal.aborted||w!==m)return;const b=oc(g?"load_more_failed":"query_failed",V);d.value=b,c.value=b.code==="permission_denied",g||(t.value=[],i.value=null,r.value=!1)}finally{w===m&&(s.value=!1,l.value=!1)}};return{items:t,hydrated:a,cursor:i,hasMore:r,loading:s,loadingMore:l,permissionDenied:c,error:d,loadInitial:async()=>{i.value=null,await h(!1)},loadMore:async()=>{!r.value||l.value||await h(!0)},refresh:async()=>{i.value=null,await h(!1)},hydrateSelection:async g=>{if(g.length===0)return a.value=[],[];try{const w=await o.httpClient.get("/v1/media/library",{params:nc(o.view.value,o.filters.value,1,null,g)}),M=tc(w);return a.value=M.hydrated,M.hydrated}catch(w){return d.value=oc("hydration_failed",w),[]}},prepend:g=>{t.value=ac([g,...t.value])}}}const u3="mediables.media-library.";function m3(o){return!o||o.key.trim()===""?null:`${u3}${o.key}`}function cr(){return typeof window>"u"||typeof window.sessionStorage>"u"?null:window.sessionStorage}function p3(o,n){const t=Date.parse(o);return Number.isFinite(t)?Date.now()-t>n*60*1e3:!0}function Qd(o){const n=m3(o),t=(o==null?void 0:o.ttlMinutes)??30,a=`${(o==null?void 0:o.key)??"media-library"}:${Date.now()}`;return{restore:()=>{if(n===null)return null;const l=cr();if(l===null)return null;const c=l.getItem(n);if(c===null)return null;let d;try{d=JSON.parse(c)}catch{return l.removeItem(n),null}if(typeof d!="object"||d===null||Array.isArray(d))return l.removeItem(n),null;const u=d;if(u.version!==1||typeof u.savedAt!="string"||p3(u.savedAt,t))return l.removeItem(n),null;const m={selectedIds:Array.isArray(u.selectedIds)?u.selectedIds.filter(h=>typeof h=="string"&&h.trim()!==""):[]};return((o==null?void 0:o.restoreView)??!0)&&u.view&&(m.view=u.view),u.filters&&(m.filters=u.filters),m},save:l=>{if(n===null)return;const c=cr();if(c===null)return;const d={version:1,savedAt:new Date().toISOString(),selectedIds:[...l.selectedIds]};((o==null?void 0:o.restoreView)??!0)&&l.view&&(d.view=l.view),l.filters&&(d.filters=l.filters),c.setItem(n,JSON.stringify(d))},clear:()=>{if(n===null)return;const l=cr();l==null||l.removeItem(n)},sessionId:a}}function eu(o){const n=e.ref(o);return{state:n,transition:a=>{n.value=a}}}function tu(o){return{emitMetric:(t,a)=>{const i={name:t,timestamp:new Date().toISOString()};a!==void 0&&(i.payload=a),o==null||o(i)}}}function ta(o){return typeof o=="object"&&o!==null&&!Array.isArray(o)}function f3(o){const n=ta(o)?o:{};return(Array.isArray(n.data)?n.data:ta(n.data)&&Array.isArray(n.data.data)?n.data.data:Array.isArray(o)?o:[]).map(a=>{if(!ta(a)||typeof a.id!="string"||typeof a.name!="string")return null;const i={id:a.id,name:a.name};return typeof a.description=="string"&&a.description.trim()!==""&&(i.description=a.description),typeof a.media_count=="number"&&(i.mediaCount=a.media_count),i}).filter(a=>a!==null)}function h3(o){const n=ta(o)?o:{},t=ta(n.data)?n.data:ta(o)?o:null;if(t===null||typeof t.id!="string"||typeof t.name!="string")return null;const a={id:t.id,name:t.name};return typeof t.description=="string"&&t.description.trim()!==""&&(a.description=t.description),a}function v3(o){return o==="ready"||o==="uploading"||o==="failed"}function wo(o,n="ready"){return{id:o.uuid,media:o,status:n,countsTowardMax:v3(n)}}function g3(o,n){return o.scope==="library"?!0:n.type==="album"&&n.albumId===o.albumId}function y3(o,n){return o.scope==="library"?n.type==="library"||n.type==="album":n.type==="album"&&n.albumId===o.albumId}function dr(o){return{code:"configuration_error",message:o,retriable:!1}}function nu(o){var ge,we,ne;const n=o.selectionMode??"multiple",t=o.maxSelection,a=o.uploadBehavior??"adapter",i=e.ref(o.initialView??{scope:"library"}),r=e.ref({sort:((ge=o.initialFilters)==null?void 0:ge.sort)??"newest",...(we=o.initialFilters)!=null&&we.query?{query:o.initialFilters.query}:{},...(ne=o.initialFilters)!=null&&ne.kinds?{kinds:o.initialFilters.kinds}:{}}),s=e.ref([]),l=e.ref([]),c=e.ref(null),d=e.ref(null),u=Qd(o.sessionPolicy),{emitMetric:m}=tu(o.telemetry),h=eu("idle"),p=bs({httpClient:o.deps.httpClient,view:i,filters:r}),v=e.computed(()=>l.value.map(N=>N.id)),g=e.computed(()=>{const N=c.value;return N===null?null:p.items.value[N]??null}),w=e.computed(()=>o.uploadTarget??{type:"library"}),M=ys({adapter:o.deps.uploadAdapter??{name:"missing-upload-adapter",upload:async()=>{throw new Error("Upload adapter is not configured.")},attach:async()=>{},attachMany:async()=>{},detach:async()=>{},reorder:async()=>{},fetchModelMedia:async()=>[],getUrl:N=>N.original_url,getThumbnailUrl:N=>N.thumbnail_url??N.preview_url??N.original_url},postUpload:async(N,L,te)=>{const ae=w.value;ae.type!=="album"||!ae.albumId||await te.attach(L.uuid,{modelType:"album",modelId:ae.albumId})},onUploadComplete:(N,L)=>{const te=w.value;g3(i.value,te)&&p.prepend(L),o.autoSelectUploaded&&y3(i.value,te)&&B(L),m("upload-complete",{mediaId:L.uuid,targetType:te.type,targetAlbumId:te.albumId})},onUploadError:(N,L)=>{d.value={code:"upload_failed",message:L.message,retriable:!0,cause:L}}}),V=e.computed(()=>M.isUploading.value),b=()=>{u.save({selectedIds:[...v.value],view:i.value,filters:r.value})},f=async N=>{const L=await p.hydrateSelection(N);l.value=L.map(te=>te.status==="ready"&&te.media?wo(te.media):{id:te.id,media:null,status:te.status,countsTowardMax:!1})},_=e.computed(()=>l.value.filter(N=>N.countsTowardMax).length),D=()=>n==="single"||t===void 0?!0:_.value<t,B=N=>{if(l.value.findIndex(te=>te.id===N.uuid)>=0){n==="multiple"?l.value=l.value.filter(te=>te.id!==N.uuid):l.value=[wo(N)],b();return}if(!D()){d.value={code:"selection_invalid",message:t!==void 0?`You can only select up to ${t} items.`:"You cannot select more items.",retriable:!0};return}n==="single"?l.value=[wo(N)]:l.value=[...l.value,wo(N)],d.value=null,b()},E=async()=>{var L;h.transition("restoring");const N=u.restore();if(N===null){h.transition("ready");return}N.view&&(i.value=N.view),N.filters&&(r.value={sort:N.filters.sort??"newest",...N.filters.query?{query:N.filters.query}:{},...N.filters.kinds?{kinds:N.filters.kinds}:{}}),await p.loadInitial(),(((L=o.sessionPolicy)==null?void 0:L.restoreSelection)??!0)&&await f(N.selectedIds),h.transition("ready")};e.watch(()=>p.error.value,N=>{N!==null&&(d.value=N,h.transition("error"))});const S=async()=>{d.value=null,h.transition("idle"),await E(),p.items.value.length===0&&!p.loading.value&&!p.permissionDenied.value&&await p.loadInitial();const N=o.defaultSelectedIds??[];l.value.length===0&&N.length>0&&await f(N),h.transition("ready")},P=async(N,L="user")=>{const te=i.value;i.value=N,L==="user"&&o.preserveSelectionOnViewChange===!1&&(l.value=[]),m("view-change",{from:te.scope,to:N.scope,reason:L}),await p.loadInitial(),b()},C=async()=>{const N=await o.deps.httpClient.get("/v1/albums");s.value=f3(N)},A=async(N,L)=>{try{const te={name:N,visibility:"private"};L&&L.trim()!==""&&(te.parent_id=L);const ae=await o.deps.httpClient.post("/v1/albums",te),ie=h3(ae);return ie===null?dr("Album creation response was invalid."):(s.value=[ie,...s.value.filter(he=>he.id!==ie.id)],await P({scope:"album",albumId:ie.id,albumName:ie.name},"inline-album-created"),ie)}catch(te){const ae={code:"album_create_failed",message:te instanceof Error?te.message:"Album creation failed.",retriable:!0,cause:te};return d.value=ae,ae}},R=async N=>{if(!o.enableUpload){d.value=dr("Uploads are not enabled for this picker.");return}if(a!=="delegate"){if(!o.deps.uploadAdapter){d.value=dr("Uploads require a configured upload adapter.");return}await M.addFiles(N)}},W=()=>{var te;const N=((te=o.validateSelection)==null?void 0:te.call(o,l.value))??null;if(N!==null){const ae={code:"selection_invalid",message:N,retriable:!0};return d.value=ae,ae}if(l.value.filter(ae=>ae.status==="ready"&&ae.media!==null).length===0){const ae={code:"selection_invalid",message:"Select at least one available media item.",retriable:!0};return d.value=ae,ae}return{orderedIds:v.value,items:[...l.value],view:i.value,filters:r.value,dirty:!0,sessionId:u.sessionId}},O=N=>{const L=p.items.value.findIndex(te=>te.uuid===N.uuid);c.value=L>=0?L:null},I=()=>{c.value=null},F=()=>{c.value===null||c.value<=0||(c.value-=1)},k=()=>{c.value===null||c.value>=p.items.value.length-1||(c.value+=1)},$=N=>{l.value=l.value.filter(L=>L.id!==N),b()},j=async()=>{await p.refresh()},Z=async N=>{r.value={...r.value,...N&&N.trim()!==""?{query:N.trim()}:{}},(!N||N.trim()==="")&&delete r.value.query,await p.loadInitial(),b()},K=async()=>{await P({scope:"library"},"permission-unavailable")};return{view:i,filters:r,albums:s,selectedItems:l,orderedIds:v,queryItems:p.items,cursor:p.cursor,hasMore:p.hasMore,loading:p.loading,loadingMore:p.loadingMore,permissionDenied:p.permissionDenied,error:d,uploadQueue:M.uploadsArray,isUploading:V,previewIndex:c,previewItem:g,initialize:S,refresh:j,loadMore:p.loadMore,setQuery:Z,setView:P,toggleSelection:B,removeSelected:$,confirmSelection:W,openPreview:O,closePreview:I,showPreviousPreview:F,showNextPreview:k,loadAlbums:C,createAlbum:A,addUploadFiles:R,goToLibrary:K,sessionId:u.sessionId}}const b3=["data-testid"],w3={class:"mlp-location-bar"},k3={class:"mlp-location-bar__left"},_3={class:"mlp-location-bar__label"},E3={class:"mlp-tabs","data-testid":"media-picker-tabs"},x3={key:0,class:"mlp-search-row"},C3=["placeholder"],S3={key:2,class:"mlp-overlay-panel"},V3={key:0,class:"mlp-error","data-testid":"media-picker-error"},N3={key:5,class:"mlp-bottom-bar"},T3={key:0,class:"mlp-bottom-bar__selection"},M3={class:"mlp-bottom-bar__count"},B3={class:"mlp-bottom-bar__thumbs"},F3=["src","alt"],I3={key:1,class:"mlp-bottom-bar__thumb-placeholder"},$3=["aria-label","onClick"],R3={class:"mlp-bottom-bar__actions"},D3=e.defineComponent({__name:"MediaLibraryPicker",props:{deps:{},modelValue:{default:()=>[]},defaultSelectedIds:{default:()=>[]},selectionMode:{default:"multiple"},maxSelection:{},preserveSelectionOnViewChange:{type:Boolean,default:!0},initialView:{default:()=>({scope:"library"})},initialFilters:{default:()=>({sort:"newest"})},enableUpload:{type:Boolean,default:!1},uploadBehavior:{default:"adapter"},enablePreview:{type:Boolean,default:!0},enableAlbumCreation:{type:Boolean,default:!1},allowedMediaKinds:{},accept:{},validateSelection:{},uploadTarget:{},autoSelectUploaded:{type:Boolean,default:!1},createAlbumDefaultVisibility:{default:"private"},sessionPolicy:{},labels:{default:()=>({})},showFooter:{type:Boolean,default:!0},testIdPrefix:{default:"media-picker"},telemetry:{}},emits:["update:modelValue","confirm","cancel","selection-change","view-change","error","metric","request-upload-files"],setup(o,{expose:n,emit:t}){const a=o,i=t,r=e.computed(()=>{var I,F,k,$,j,Z,K,ge,we,ne,N,L,te,ae,ie,he,se,fe;return{title:((I=a.labels)==null?void 0:I.title)??"Media library",searchPlaceholder:((F=a.labels)==null?void 0:F.searchPlaceholder)??"Search your media",viewLibrary:((k=a.labels)==null?void 0:k.viewLibrary)??"Library",browseAlbums:(($=a.labels)==null?void 0:$.browseAlbums)??"Albums",createAlbum:((j=a.labels)==null?void 0:j.createAlbum)??"Create album",createAlbumNameLabel:((Z=a.labels)==null?void 0:Z.createAlbumNameLabel)??"Album name",emptyLibrary:((K=a.labels)==null?void 0:K.emptyLibrary)??"No media found in your library.",emptyAlbum:((ge=a.labels)==null?void 0:ge.emptyAlbum)??"No media found in this album.",networkError:((we=a.labels)==null?void 0:we.networkError)??"Unable to load media right now.",retry:((ne=a.labels)==null?void 0:ne.retry)??"Retry",selectedCount:((N=a.labels)==null?void 0:N.selectedCount)??(xe=>`${xe} selected`),confirmAction:((L=a.labels)==null?void 0:L.confirmAction)??"Attach selected",cancel:((te=a.labels)==null?void 0:te.cancel)??"Cancel",dismiss:((ae=a.labels)==null?void 0:ae.dismiss)??"Remove",uploadLabel:((ie=a.labels)==null?void 0:ie.uploadLabel)??"Upload",albumUnavailableTitle:((he=a.labels)==null?void 0:he.albumUnavailableTitle)??"Album unavailable",albumUnavailableBody:((se=a.labels)==null?void 0:se.albumUnavailableBody)??"You no longer have access to this album.",goToLibrary:((fe=a.labels)==null?void 0:fe.goToLibrary)??"Go to library"}}),s={deps:a.deps,selectionMode:a.selectionMode,initialView:a.initialView,initialFilters:a.initialFilters,...a.maxSelection!==void 0?{maxSelection:a.maxSelection}:{},...a.modelValue.length>0||a.defaultSelectedIds.length>0?{defaultSelectedIds:a.modelValue.length>0?a.modelValue:a.defaultSelectedIds}:{},...a.sessionPolicy?{sessionPolicy:a.sessionPolicy}:{},...a.enableUpload?{enableUpload:!0}:{},uploadBehavior:a.uploadBehavior,...a.uploadTarget?{uploadTarget:a.uploadTarget}:{},...a.autoSelectUploaded?{autoSelectUploaded:!0}:{},...a.validateSelection?{validateSelection:a.validateSelection}:{},preserveSelectionOnViewChange:a.preserveSelectionOnViewChange,telemetry:I=>{var F;(F=a.telemetry)==null||F.call(a,I),i("metric",I)}},l=nu(s),c=e.ref(a.initialFilters.query??""),d=e.ref("upload"),u=e.ref(!1),m=JSON.stringify(a.modelValue.length>0?a.modelValue:a.defaultSelectedIds);let h=null;const p=e.computed(()=>JSON.stringify(l.orderedIds.value)!==m),v=e.computed(()=>l.view.value.scope==="album"?r.value.emptyAlbum:r.value.emptyLibrary),g=e.computed(()=>r.value.selectedCount(l.selectedItems.value.length)),w=e.computed(()=>l.view.value.scope==="album"?l.view.value.albumName??"Album":r.value.viewLibrary),M=e.computed(()=>l.view.value.scope==="album"),V=()=>{h!==null&&(window.clearTimeout(h),h=null)},b=()=>{i("update:modelValue",[...l.orderedIds.value]),i("selection-change",{orderedIds:[...l.orderedIds.value],items:[...l.selectedItems.value],dirty:p.value})},f=I=>{I!==null&&i("error",I)},_=I=>typeof I.code=="string",D=I=>typeof I=="object"&&I!==null&&"code"in I&&typeof I.code=="string",B=()=>{const I=l.confirmSelection();if(_(I)){f(I);return}i("confirm",{...I,dirty:p.value})},E=(I="user")=>{i("cancel",{dirty:p.value,reason:I,sessionId:l.sessionId})},S=async()=>{d.value="albums",await l.loadAlbums()},P=async()=>{await l.goToLibrary(),d.value="albums",await l.loadAlbums()},C=I=>{l.setView({scope:"album",albumId:I.id,albumName:I.name}),d.value="media"},A=async(I,F)=>{const k=l.view.value,$=await l.createAlbum(I,F);if(D($)){f($);return}u.value=!1,d.value="media",i("view-change",{from:k,to:{scope:"album",albumId:$.id,albumName:$.name},reason:"inline-album-created",restoredFromSession:!1})},R=async I=>{if(a.uploadBehavior==="delegate"){i("request-upload-files",{files:[...I],view:l.view.value,filters:l.filters.value,sessionId:l.sessionId});return}await l.addUploadFiles(I)};function W(I){var F;return I?I.thumbnail_url??((F=I.conversion_urls)==null?void 0:F.thumb)??I.preview_url??I.original_url??I.url??null:null}function O(I){return I!=null&&I.mime_type?I.mime_type.startsWith("image/"):!1}return e.watch(()=>c.value,I=>{V(),h=window.setTimeout(()=>{l.setQuery(I)},250)}),e.watch(()=>l.selectedItems.value,()=>{b()},{deep:!0}),e.watch(()=>l.error.value,I=>{f(I)}),e.onMounted(()=>{l.initialize()}),e.onBeforeUnmount(()=>{V()}),n({refresh:l.refresh}),(I,F)=>(e.openBlock(),e.createElementBlock("section",{class:"media-library-picker","data-testid":I.testIdPrefix},[e.createElementVNode("header",w3,[e.createElementVNode("div",k3,[M.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"mlp-location-bar__back","aria-label":"Back to library","data-testid":"btn-media-picker-back",onClick:P},[...F[8]||(F[8]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("polyline",{points:"15 18 9 12 15 6"})],-1)])])):e.createCommentVNode("",!0),e.createElementVNode("span",_3,e.toDisplayString(w.value),1)])]),e.createElementVNode("nav",E3,[I.enableUpload?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:e.normalizeClass(["mlp-tabs__tab",{"is-active":d.value==="upload"}]),"data-testid":"tab-media-picker-upload",onClick:F[0]||(F[0]=k=>d.value="upload")},e.toDisplayString(r.value.uploadLabel),3)):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["mlp-tabs__tab",{"is-active":d.value==="media"}]),"data-testid":"tab-media-picker-all",onClick:F[1]||(F[1]=k=>d.value="media")}," All Media ",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["mlp-tabs__tab",{"is-active":d.value==="albums"}]),"data-testid":"tab-media-picker-albums",onClick:S},e.toDisplayString(r.value.browseAlbums),3)]),d.value==="media"||d.value==="albums"?(e.openBlock(),e.createElementBlock("div",x3,[F[9]||(F[9]=e.createElementVNode("svg",{class:"mlp-search-row__icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"}),e.createElementVNode("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":F[2]||(F[2]=k=>c.value=k),class:"mlp-search-row__input",type:"search",placeholder:r.value.searchPlaceholder,"data-testid":"input-media-picker-search"},null,8,C3),[[e.vModelText,c.value]])])):e.createCommentVNode("",!0),I.enableUpload&&d.value==="upload"?(e.openBlock(),e.createBlock(Hd,{key:1,open:!0,queue:e.unref(l).uploadQueue.value,accept:I.accept,"upload-label":r.value.uploadLabel,onClose:F[3]||(F[3]=k=>d.value="media"),onFilesSelected:R},null,8,["queue","accept","upload-label"])):e.createCommentVNode("",!0),u.value?(e.openBlock(),e.createElementBlock("div",S3,[e.createVNode(zd,{open:u.value,"name-label":r.value.createAlbumNameLabel,albums:e.unref(l).albums.value,onCancel:F[4]||(F[4]=k=>u.value=!1),onCreate:A},null,8,["open","name-label","albums"])])):e.createCommentVNode("",!0),e.unref(l).permissionDenied.value&&e.unref(l).view.value.scope==="album"?(e.openBlock(),e.createBlock(jd,{key:3,title:r.value.albumUnavailableTitle,body:r.value.albumUnavailableBody,"action-label":r.value.goToLibrary,onGoToLibrary:e.unref(l).goToLibrary},null,8,["title","body","action-label","onGoToLibrary"])):e.createCommentVNode("",!0),!e.unref(l).permissionDenied.value||e.unref(l).view.value.scope!=="album"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:4},[e.unref(l).error.value?(e.openBlock(),e.createElementBlock("div",V3,[e.createElementVNode("p",null,e.toDisplayString(e.unref(l).error.value.message||r.value.networkError),1),e.createElementVNode("button",{type:"button",class:"mlp-error__retry",onClick:F[5]||(F[5]=(...k)=>e.unref(l).refresh&&e.unref(l).refresh(...k))},e.toDisplayString(r.value.retry),1)])):e.createCommentVNode("",!0),d.value==="media"?(e.openBlock(),e.createBlock(Gd,{key:1,items:e.unref(l).queryItems.value,"selected-items":e.unref(l).selectedItems.value,loading:e.unref(l).loading.value,"loading-more":e.unref(l).loadingMore.value,"has-more":e.unref(l).hasMore.value,"empty-message":v.value,"test-id-prefix":`${I.testIdPrefix}-item`,onToggle:e.unref(l).toggleSelection,onPreview:e.unref(l).openPreview,onLoadMore:e.unref(l).loadMore},null,8,["items","selected-items","loading","loading-more","has-more","empty-message","test-id-prefix","onToggle","onPreview","onLoadMore"])):d.value==="albums"?(e.openBlock(),e.createBlock(Zd,{key:2,open:!0,"current-view":e.unref(l).view.value,albums:e.unref(l).albums.value,"view-library-label":r.value.viewLibrary,"browse-albums-label":r.value.browseAlbums,"create-album-label":r.value.createAlbum,"enable-album-creation":I.enableAlbumCreation,onSelectLibrary:P,onSelectAlbum:C,onCreateAlbum:F[6]||(F[6]=k=>u.value=!0)},null,8,["current-view","albums","view-library-label","browse-albums-label","create-album-label","enable-album-creation"])):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0),I.showFooter?(e.openBlock(),e.createElementBlock("footer",N3,[e.unref(l).selectedItems.value.length>0?(e.openBlock(),e.createElementBlock("div",T3,[e.createElementVNode("span",M3,e.toDisplayString(g.value),1),e.createElementVNode("div",B3,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(l).selectedItems.value,k=>{var $,j,Z;return e.openBlock(),e.createElementBlock("div",{key:k.id,class:"mlp-bottom-bar__thumb-item"},[O(k.media)&&W(k.media)?(e.openBlock(),e.createElementBlock("img",{key:0,src:W(k.media),alt:(($=k.media)==null?void 0:$.alt_text)??((j=k.media)==null?void 0:j.file_name)??"Selected",class:"mlp-bottom-bar__thumb-img"},null,8,F3)):(e.openBlock(),e.createElementBlock("div",I3,[...F[10]||(F[10]=[e.createElementVNode("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},[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)])])),e.createElementVNode("button",{type:"button",class:"mlp-bottom-bar__thumb-remove","aria-label":`${r.value.dismiss} ${((Z=k.media)==null?void 0:Z.file_name)??k.id}`,"data-testid":"btn-media-picker-remove-selected",onClick:K=>e.unref(l).removeSelected(k.id)},[...F[11]||(F[11]=[e.createElementVNode("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round"},[e.createElementVNode("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElementVNode("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])],8,$3)])}),128))])])):e.createCommentVNode("",!0),e.createElementVNode("div",R3,[e.createElementVNode("button",{type:"button",class:"mlp-bottom-bar__cancel","data-testid":"btn-media-picker-cancel",onClick:F[7]||(F[7]=k=>E())},e.toDisplayString(r.value.cancel),1),e.createElementVNode("button",{type:"button",class:"mlp-bottom-bar__confirm","data-testid":"btn-media-picker-confirm",onClick:B},e.toDisplayString(r.value.confirmAction),1)])])):e.createCommentVNode("",!0),I.enablePreview?(e.openBlock(),e.createBlock(Wd,{key:6,open:e.unref(l).previewItem.value!==null,media:e.unref(l).previewItem.value,"can-go-previous":e.unref(l).previewIndex.value!==null&&e.unref(l).previewIndex.value>0,"can-go-next":e.unref(l).previewIndex.value!==null&&e.unref(l).previewIndex.value<e.unref(l).queryItems.value.length-1,selected:e.unref(l).previewItem.value!==null&&e.unref(l).orderedIds.value.includes(e.unref(l).previewItem.value.uuid),onClose:e.unref(l).closePreview,onPrevious:e.unref(l).showPreviousPreview,onNext:e.unref(l).showNextPreview,onToggleSelect:e.unref(l).toggleSelection},null,8,["open","media","can-go-previous","can-go-next","selected","onClose","onPrevious","onNext","onToggleSelect"])):e.createCommentVNode("",!0)],8,b3))}}),au=Me(D3,[["__scopeId","data-v-db2ced73"]]),A3={key:0,class:"media-library-picker-modal","data-testid":"media-library-picker-modal"},L3={class:"media-library-picker-modal__panel"},U3=e.defineComponent({__name:"MediaLibraryPickerModal",props:{deps:{},modelValue:{},defaultSelectedIds:{},selectionMode:{},maxSelection:{},preserveSelectionOnViewChange:{type:Boolean},initialView:{},initialFilters:{},enableUpload:{type:Boolean},uploadBehavior:{},enablePreview:{type:Boolean},enableAlbumCreation:{type:Boolean},allowedMediaKinds:{},accept:{},validateSelection:{},uploadTarget:{},autoSelectUploaded:{type:Boolean},createAlbumDefaultVisibility:{},sessionPolicy:{},labels:{},showFooter:{type:Boolean},testIdPrefix:{},telemetry:{},isOpen:{type:Boolean,default:!1},closeOnBackdrop:{type:Boolean,default:!0}},emits:["update:modelValue","confirm","cancel","close"],setup(o,{emit:n}){const t=o,a=n,i=()=>{t.closeOnBackdrop&&a("close")};return(r,s)=>r.isOpen?(e.openBlock(),e.createElementBlock("div",A3,[e.createElementVNode("button",{type:"button",class:"media-library-picker-modal__backdrop","aria-label":"Close media picker",onClick:i}),e.createElementVNode("div",L3,[e.createVNode(au,e.mergeProps(t,{"onUpdate:modelValue":s[0]||(s[0]=l=>a("update:modelValue",l)),onConfirm:s[1]||(s[1]=l=>a("confirm",l)),onCancel:s[2]||(s[2]=l=>a("cancel",l))}),null,16)])])):e.createCommentVNode("",!0)}}),O3=Me(U3,[["__scopeId","data-v-a92e8703"]]),P3={key:0,class:"media-selection-tray","data-testid":"media-selection-tray"},z3={class:"media-selection-tray__header"},j3={class:"media-selection-tray__title"},W3={class:"media-selection-tray__items"},Z3={class:"media-selection-tray__item-preview"},H3=["src","alt"],X3={key:1,class:"media-selection-tray__file-icon"},G3={class:"media-selection-tray__item-copy"},J3=["aria-label","onClick"],Y3=e.defineComponent({__name:"MediaSelectionTray",props:{items:{},selectedCountLabel:{default:"Selected items"},dismissLabel:{default:"Remove"}},emits:["remove"],setup(o,{emit:n}){const t=n;function a(r){var s;return r?r.thumbnail_url??((s=r.conversion_urls)==null?void 0:s.thumb)??r.preview_url??r.original_url??r.url??null:null}function i(r){return r!=null&&r.mime_type?r.mime_type.startsWith("image/"):!1}return(r,s)=>r.items.length>0?(e.openBlock(),e.createElementBlock("section",P3,[e.createElementVNode("header",z3,[e.createElementVNode("h3",j3,e.toDisplayString(r.selectedCountLabel),1)]),e.createElementVNode("div",W3,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.items,l=>{var c,d,u,m;return e.openBlock(),e.createElementBlock("article",{key:l.id,class:"media-selection-tray__item"},[e.createElementVNode("div",Z3,[i(l.media)&&a(l.media)?(e.openBlock(),e.createElementBlock("img",{key:0,src:a(l.media),alt:((c=l.media)==null?void 0:c.alt_text)??((d=l.media)==null?void 0:d.file_name)??"Selected media",class:"media-selection-tray__thumb"},null,8,H3)):(e.openBlock(),e.createElementBlock("div",X3,[...s[0]||(s[0]=[e.createElementVNode("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},[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)])]))]),e.createElementVNode("div",G3,[e.createElementVNode("strong",null,e.toDisplayString(((u=l.media)==null?void 0:u.file_name)??l.id),1),e.createElementVNode("span",null,e.toDisplayString(l.status),1)]),e.createElementVNode("button",{type:"button",class:"media-selection-tray__remove","aria-label":`${r.dismissLabel} ${((m=l.media)==null?void 0:m.file_name)??l.id}`,onClick:h=>t("remove",l.id)},e.toDisplayString(r.dismissLabel),9,J3)])}),128))])])):e.createCommentVNode("",!0)}}),q3=Me(Y3,[["__scopeId","data-v-f2a3d69d"]]);function ws(o={}){const n=e.ref(!1),t=e.ref(!1),a=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=M=>{if(r.value++,l.value=null,i.value=null,t.value=!1,M!=null&&typeof M=="object"&&!(M instanceof Blob)&&("image"in M||"state"in M||"sessionKey"in M)){const V=M;a.value=V.image??null,s.value=V.state??null}else a.value=M??null,s.value=null;n.value=!0},u=()=>{n.value=!1,a.value=null,i.value=null,l.value=null,t.value=!1,s.value=null},m=async M=>{try{return t.value=!0,i.value=M,o.onSave&&await o.onSave(M),u(),M}catch(V){const b=V;throw l.value=b,o.onError&&o.onError(b),b}finally{t.value=!1}},h=()=>{o.onCancel&&o.onCancel(),u()},p=M=>{l.value=M,o.onError&&o.onError(M)},v=()=>{l.value=null},g=()=>i.value,w=e.computed(()=>n.value&&i.value!==null&&!t.value);return{isOpen:n,isProcessing:t,uploadedImage:a,editedImage:i,sessionKey:r,initialState:s,error:l,hasError:c,hasUnsavedChanges:w,open:d,close:u,handleSave:m,handleCancel:h,handleError:p,clearError:v,getEditedImage:g}}let ur=null;function K3(o){return ur||(ur=ws(o)),ur}function Q3(o){return n=>new Promise((t,a)=>{ws({...o,onSave:async r=>{o!=null&&o.onSave&&await o.onSave(r),t(r)},onError:r=>{o!=null&&o.onError&&o.onError(r),a(r)},onCancel:()=>{o!=null&&o.onCancel&&o.onCancel(),a(new Error("User cancelled"))}}).open(n)})}function ks(o){return o.filter(n=>n.media&&!n.markedForRemoval).map((n,t)=>{const a={uuid:n.media.uuid,name:n.name,order:t};return n.customProperties&&(a.custom_properties=n.customProperties),a})}function Wr(o){return o.map((n,t)=>{const a={media:n,clientId:n.uuid,name:n.name||n.file_name,order:t};return n.custom_properties&&(a.customProperties=n.custom_properties),a})}function _s(o){if(o){const t={};o.apiBaseUrl!==void 0&&(t.apiBaseUrl=o.apiBaseUrl),o.isAdmin!==void 0&&(t.isAdmin=o.isAdmin),na(t)}return{name:"mediables",async upload(t,a){const r=await $t().uploadFile(t,{collection:(a==null?void 0:a.collection)||"default",customProperties:a==null?void 0:a.customProperties});if(!r)throw new Error("Upload failed: No media returned");return{media:r,uuid:r.uuid}},async attach(t,a){await $t().attachMedia(a.modelType,String(a.modelId),[t],a.collection||"images")},async attachMany(t,a){await $t().attachMedia(a.modelType,String(a.modelId),t,a.collection||"images")},async detach(t,a){await $t().detachMedia(a.modelType,String(a.modelId),t,a.collection||"images")},async reorder(t,a){await $t().reorderMedia(t.modelType,String(t.modelId),a,t.collection||"images")},async fetchModelMedia(t){return await $t().fetchModelMedia(t.modelType,String(t.modelId),t.collection||"images")},getUrl(t,a){return $t().getMediaUrl(t,a)},getThumbnailUrl(t){var a,i;return(a=t.conversion_urls)!=null&&a.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 $t().deleteMedia(t)},async update(t,a){const r=await $t().updateMedia(t,a);if(!r)throw new Error("Update failed: No media returned");return r},configure(t){const a={};t.apiBaseUrl!==void 0&&(a.apiBaseUrl=t.apiBaseUrl),t.isAdmin!==void 0&&(a.isAdmin=t.isAdmin),na(a)}}}let Io=null;function eN(){return Io||(Io=_s()),Io}function tN(){Io=null}const nN={apiBaseUrl:"/media-library-pro"};function ko(){var o;return typeof document>"u"?null:((o=document.querySelector('meta[name="csrf-token"]'))==null?void 0:o.getAttribute("content"))||null}function mr(o){const n={uuid:o.uuid,file_name:o.fileName||o.name,mime_type:`application/${o.extension}`,size:o.size,disk:"public",original_url:o.original_url||"",created_at:new Date().toISOString(),updated_at:new Date().toISOString()};return o.name&&(n.name=o.name),o.original_url&&(n.url=o.original_url),o.preview_url&&(n.thumbnail_url=o.preview_url,n.preview_url=o.preview_url),o.custom_properties&&(n.custom_properties=o.custom_properties),n}function Es(o){const n={...nN,...o};return{name:"spatie",async upload(a,i){const r=new FormData;r.append("file",a),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||ko();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 h=await d.json().catch(()=>({message:"Upload failed"}));throw new Error(h.message||`HTTP ${d.status}`)}const u=await d.json(),m=mr(u);return i!=null&&i.onProgress&&i.onProgress(100),{media:m,uuid:u.uuid}},async attach(a,i){},async attachMany(a,i){},async detach(a,i){},async reorder(a,i){},async fetchModelMedia(a){const i={Accept:"application/json",...n.headers},r=n.csrfToken||ko();r&&(i["X-CSRF-TOKEN"]=r);const s=new URLSearchParams;s.append("model_type",a.modelType),s.append("model_id",String(a.modelId)),a.collection&&s.append("collection",a.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(mr)}catch{return[]}},getUrl(a,i){var r;if(i){const s=(r=a.conversion_urls)==null?void 0:r[i];if(s)return s}return a.original_url||a.url||""},getThumbnailUrl(a){var i,r;return a.preview_url?a.preview_url:(i=a.conversion_urls)!=null&&i.preview?a.conversion_urls.preview:a.thumbnail_url?a.thumbnail_url:(r=a.conversion_urls)!=null&&r.thumb?a.conversion_urls.thumb:a.original_url||a.url||""},async delete(a){const i={Accept:"application/json",...n.headers},r=n.csrfToken||ko();r&&(i["X-CSRF-TOKEN"]=r);const s=await fetch(`${n.apiBaseUrl}/uploads/${a}`,{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(a,i){const r={Accept:"application/json","Content-Type":"application/json",...n.headers},s=n.csrfToken||ko();s&&(r["X-CSRF-TOKEN"]=s);const l=await fetch(`${n.apiBaseUrl}/uploads/${a}`,{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 mr(c)},configure(a){Object.assign(n,a)}}}let $o=null;function aN(){return $o||($o=Es()),$o}function oN(){$o=null}function ou(o,n){switch(o){case"mediables":return _s(n);case"spatie":return Es(n);default:throw new Error(`Unknown adapter: ${o}`)}}function iu(o={}){const{enabled:n=!0,onReorder:t,onDragStart:a,onDragEnd:i,draggingClass:r="is-dragging",dropTargetClass:s="is-drop-target"}=o,l=e.ref({isDragging:!1,dragIndex:null,dropIndex:null,draggedItem:null}),c=e.ref(!1);let d=null;function u(V,b,f){n&&("dataTransfer"in V&&V.dataTransfer&&(V.dataTransfer.effectAllowed="move",V.dataTransfer.setData("text/plain",String(f))),d=V.target,d&&d.classList.add(r),l.value={isDragging:!0,dragIndex:f,dropIndex:f,draggedItem:b},c.value=!0,a==null||a(b,f))}function m(V,b){var f;if(!(!n||!l.value.isDragging)&&(V.preventDefault(),l.value.dropIndex!==b)){const _=document.querySelector(`.${s}`);_==null||_.classList.remove(s);const D=(f=V.target)==null?void 0:f.closest("[data-index]");D==null||D.classList.add(s),l.value.dropIndex=b}}function h(){if(!l.value.isDragging)return;const{dragIndex:V,dropIndex:b,draggedItem:f}=l.value;d&&d.classList.remove(r);const _=document.querySelector(`.${s}`);_==null||_.classList.remove(s),V!==null&&b!==null&&V!==b&&f&&(t==null||t({fromIndex:V,toIndex:b,item:f})),v(),i==null||i()}function p(){d&&d.classList.remove(r);const V=document.querySelector(`.${s}`);V==null||V.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 g(V,b,f){const _=[...V],[D]=_.splice(b,1);return _.splice(f,0,D),_.map((B,E)=>({...B,order:E}))}function w(V,b){return{draggable:n,"data-index":b,onDragstart:f=>u(f,V,b),onDragover:f=>m(f,b),onDragend:()=>h(),onDrop:f=>{f.preventDefault(),h()}}}function M(V){V.key==="Escape"&&l.value.isDragging&&p()}return e.onMounted(()=>{document.addEventListener("keydown",M)}),e.onUnmounted(()=>{document.removeEventListener("keydown",M),p()}),{dragState:l,isDragging:c,startDrag:u,handleDragOver:m,endDrag:h,cancelDrag:p,reorderItems:g,getDragProps:w}}function bi(o={}){const{initialItems:n=[],modelType:t,modelId:a,collection:i="images",maxItems:r,maxFileSize:s,acceptedMimeTypes:l,sortable:c=!0,disabled:d=!1,rules:u={},adapterType:m="mediables",adapter:h,maxConcurrentUploads:p=3,onChange:v,onUpload:g,onUploadComplete:w,onUploadError:M,onRemove:V,onReorder:b,onError:f,onReadyToSubmitChange:_}=o,D={maxItems:r,maxFileSize:s,acceptedMimeTypes:l,...u},B=h||ou(m),E=e.ref([]),S=e.ref(!1),P=e.ref([]);function C(le){if(le.length===0)return[];const de=le[0];return"media"in de&&"clientId"in de?le:Wr(le)}E.value=C(n);const{acceptString:A,canAddFiles:R}=gs({rules:D}),W=ys({adapter:B,maxConcurrent:p,rules:D,collection:i,onUploadStart:le=>{g==null||g(le)},onUploadComplete:(le,de)=>{const Ve=E.value.findIndex(Be=>Be.clientId===le.id);Ve!==-1&&(E.value[Ve]={...E.value[Ve],media:de,name:de.name||de.file_name,upload:{...le,status:"completed"}}),w==null||w(de)},onUploadError:(le,de)=>{const Ve=E.value.findIndex(Be=>Be.clientId===le.id);Ve!==-1&&(E.value[Ve]={...E.value[Ve],upload:{...le,status:"error",error:de.message},errors:[{field:"upload",message:de.message,code:"UPLOAD_ERROR"}]}),M==null||M({file:le.file,message:de.message})},onQueueComplete:()=>{v==null||v(E.value)}}),{dragState:O,getDragProps:I,reorderItems:F}=iu({enabled:c&&!d,onReorder:le=>{E.value=F(E.value,le.fromIndex,le.toIndex),b==null||b(E.value),v==null||v(E.value)}}),k=e.computed(()=>W.isUploading.value),$=e.computed(()=>!W.isUploading.value&&W.pendingCount.value===0),j=e.computed(()=>r?E.value.length>=r:!1),Z=e.computed(()=>ks(E.value)),K=e.computed(()=>E.value.length),ge=e.computed(()=>r?Math.max(0,r-E.value.length):1/0);e.watch($,le=>{_==null||_(le)});function we(le){E.value=C(le),v==null||v(E.value)}async function ne(le){if(d)return;const de=Array.from(le);if(!R(de.length,E.value.length)){const Ke={field:"count",message:`Maximum ${r} files allowed`,code:"MAX_ITEMS"};P.value=[Ke],f==null||f([Ke]);return}const Ve=await W.addFiles(de),Be=E.value.length,dt=Ve.map((Ke,bt)=>({...Ke,order:Be+bt}));E.value=[...E.value,...dt],v==null||v(E.value)}function N(le){d||(le.upload&&(le.upload.status==="uploading"||le.upload.status==="pending")&&W.cancelUpload(le.clientId),E.value=E.value.filter(de=>de.clientId!==le.clientId),E.value=E.value.map((de,Ve)=>({...de,order:Ve})),V==null||V(le),v==null||v(E.value))}function L(le){const de=E.value.find(Ve=>Ve.clientId===le);de&&N(de)}function te(){d||(W.clearAll(),E.value=[],v==null||v(E.value))}function ae(le,de){d||!c||(E.value=F(E.value,le,de),b==null||b(E.value),v==null||v(E.value))}function ie(le,de){if(d)return;const Ve=E.value.findIndex(Be=>Be.clientId===le);Ve!==-1&&(E.value[Ve]={...E.value[Ve],...de},v==null||v(E.value))}function he(le){W.cancelUpload(le),L(le)}async function se(le){await W.retryUpload(le)}async function fe(){if(!t||!a)throw new Error("modelType and modelId are required for save()");const le={modelType:t,modelId:a,collection:i},de=E.value.filter(Ve=>Ve.media&&!Ve.markedForRemoval).map(Ve=>Ve.media.uuid);S.value=!0;try{await B.attachMany(de,le),await B.reorder(le,de)}finally{S.value=!1}}async function xe(){if(!t||!a)throw new Error("modelType and modelId are required for load()");const le={modelType:t,modelId:a,collection:i};S.value=!0;try{const de=await B.fetchModelMedia(le);E.value=Wr(de),v==null||v(E.value)}finally{S.value=!1}}return e.onMounted(()=>{t&&a&&n.length===0&&xe().catch(console.error)}),e.onUnmounted(()=>{W.clearAll()}),{items:E,setItems:we,addFiles:ne,removeItem:N,removeItemById:L,clearAll:te,reorderItems:ae,updateItem:ie,cancelUpload:he,retryUpload:se,save:fe,load:xe,isLoading:S,isUploading:k,isReadyToSubmit:$,isAtMaxItems:j,errors:P,dragState:O,getDragProps:I,adapter:B,formValues:Z,acceptString:A,count:K,remainingSlots:ge}}const iN=["aria-disabled"],rN=["accept","multiple","disabled"],sN={class:"media-dropzone__content"},lN={class:"media-dropzone__title"},cN={class:"media-dropzone__subtitle"},dN=["disabled"],uN={key:0,class:"media-dropzone__helper"},mN=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(o,{emit:n}){const t=o,a=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 g=[];return t.maxFileSize&&g.push(`Max size: ${Zo(t.maxFileSize)}`),t.maxItems&&t.maxItems>1&&g.push(`Max files: ${t.maxItems}`),g.join(" • ")});function c(g){g.preventDefault(),!t.disabled&&(i.value=!0)}function d(g){g.preventDefault(),i.value=!1}function u(g){g.preventDefault()}function m(g){var M;if(g.preventDefault(),i.value=!1,t.disabled)return;const w=(M=g.dataTransfer)==null?void 0:M.files;w&&w.length>0&&a("files",w)}function h(){var g;t.disabled||(g=r.value)==null||g.click()}function p(g){const w=g.target,M=w.files;M&&M.length>0&&a("files",M),w.value=""}function v(g){(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),h())}return(g,w)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(s.value),role:"button",tabindex:"0","aria-disabled":g.disabled,"aria-label":"Upload files",onClick:h,onKeydown:v,onDragenter:c,onDragleave:d,onDragover:u,onDrop:m},[e.createElementVNode("input",{ref_key:"fileInput",ref:r,type:"file",accept:g.accept,multiple:g.multiple,disabled:g.disabled,class:"media-dropzone__input",onChange:p},null,40,rN),e.createElementVNode("div",sN,[e.renderSlot(g.$slots,"icon",{},()=>[w[0]||(w[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",lN,[e.renderSlot(g.$slots,"title",{},()=>[e.createTextVNode(e.toDisplayString(g.title),1)],!0)]),e.createElementVNode("p",cN,[e.renderSlot(g.$slots,"subtitle",{},()=>[e.createTextVNode(e.toDisplayString(g.subtitle),1)],!0)]),e.createElementVNode("button",{type:"button",class:"media-dropzone__button",disabled:g.disabled,onClick:e.withModifiers(h,["stop"])},[e.renderSlot(g.$slots,"button",{},()=>[e.createTextVNode(e.toDisplayString(g.buttonText),1)],!0)],8,dN),l.value?(e.openBlock(),e.createElementBlock("p",uN,e.toDisplayString(l.value),1)):e.createCommentVNode("",!0)])],42,iN))}}),xs=Me(mN,[["__scopeId","data-v-b1366c1e"]]),pN=["data-index"],fN={key:0,class:"media-item__drag-handle","aria-label":"Drag to reorder",role:"button",tabindex:"0"},hN={class:"media-item__thumbnail"},vN=["src","alt"],gN={key:1,class:"media-item__file-icon"},yN={key:2,class:"media-item__progress-overlay"},bN={class:"media-item__progress-text"},wN={key:3,class:"media-item__processing-overlay"},kN={key:4,class:"media-item__error-overlay"},_N={class:"media-item__info"},EN=["title"],xN={key:0,class:"media-item__size"},CN={key:1,class:"media-item__error-message"},SN={class:"media-item__actions"},VN=["disabled"],NN=["disabled"],TN=["disabled"],MN=["disabled"],BN=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(o,{emit:n}){const t=o,a=n,i=e.ref(!1),r=e.computed(()=>{var b;return(b=t.item.upload)!=null&&b.previewUrl?t.item.upload.previewUrl:t.item.media?t.adapter.getThumbnailUrl(t.item.media):null}),s=e.computed(()=>{var b,f,_;return((b=t.item.upload)==null?void 0:b.status)==="uploading"||((f=t.item.upload)==null?void 0:f.status)==="pending"||((_=t.item.upload)==null?void 0:_.status)==="queued"}),l=e.computed(()=>{var b;return((b=t.item.upload)==null?void 0:b.status)==="processing"}),c=e.computed(()=>{var b;return((b=t.item.upload)==null?void 0:b.status)==="error"||t.item.errors&&t.item.errors.length>0}),d=e.computed(()=>{var b;return(b=t.item.upload)!=null&&b.error?t.item.upload.error:t.item.errors&&t.item.errors.length>0?t.item.errors[0].message:null}),u=e.computed(()=>{var b;return((b=t.item.upload)==null?void 0:b.progress)||0}),m=e.computed(()=>{var b;return t.item.name||((b=t.item.media)==null?void 0:b.file_name)||"Unknown file"}),h=e.computed(()=>{var B,E;const b=((B=t.item.media)==null?void 0:B.size)||((E=t.item.upload)==null?void 0:E.file.size);if(!b)return"";const f=1024,_=["Bytes","KB","MB","GB"],D=Math.floor(Math.log(b)/Math.log(f));return parseFloat((b/Math.pow(f,D)).toFixed(2))+" "+_[D]}),p=e.computed(()=>{var f,_;const b=((f=t.item.media)==null?void 0:f.mime_type)||((_=t.item.upload)==null?void 0:_.file.type);return b==null?void 0:b.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 g(){t.disabled||a("remove",t.item)}function w(){t.disabled||a("edit",t.item)}function M(){t.disabled||a("retry",t.item)}function V(){t.disabled||a("cancel",t.item)}return(b,f)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(v.value),"data-index":b.index,onMouseenter:f[0]||(f[0]=_=>i.value=!0),onMouseleave:f[1]||(f[1]=_=>i.value=!1)},[b.sortable&&!b.disabled?(e.openBlock(),e.createElementBlock("div",fN,[...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",hN,[r.value&&p.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:r.value,alt:m.value,class:"media-item__image"},null,8,vN)):(e.openBlock(),e.createElementBlock("div",gN,[...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",yN,[e.createElementVNode("div",{class:"media-item__progress-bar",style:e.normalizeStyle({width:`${u.value}%`})},null,4),e.createElementVNode("span",bN,e.toDisplayString(u.value)+"%",1)])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",wN,[...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",kN,[...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",_N,[e.createElementVNode("span",{class:"media-item__name",title:m.value},e.toDisplayString(m.value),9,EN),h.value?(e.openBlock(),e.createElementBlock("span",xN,e.toDisplayString(h.value),1)):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createElementBlock("span",CN,e.toDisplayString(d.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",SN,[s.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"media-item__action media-item__action--cancel",disabled:b.disabled,"aria-label":"Cancel upload",onClick:V},[...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,VN)):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"media-item__action media-item__action--retry",disabled:b.disabled,"aria-label":"Retry upload",onClick:M},[...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,NN)):e.createCommentVNode("",!0),b.showEdit&&b.item.media&&!s.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"media-item__action media-item__action--edit",disabled:b.disabled,"aria-label":"Edit",onClick:w},[...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,TN)):e.createCommentVNode("",!0),b.showRemove?(e.openBlock(),e.createElementBlock("button",{key:3,type:"button",class:"media-item__action media-item__action--remove",disabled:b.disabled,"aria-label":"Remove",onClick:g},[...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,MN)):e.createCommentVNode("",!0)])],42,pN))}}),Cs=Me(BN,[["__scopeId","data-v-ff81c9ec"]]),FN=["aria-label"],IN=["draggable","data-index","onDragstart","onDragover","onDragend","onDrop"],$N={key:0,class:"media-collection__footer"},RN={class:"media-collection__count"},DN={key:0},AN={key:0,class:"media-collection__uploading"},LN=["name","value"],UN=["name","value"],ON=["name","value"],PN=["name","value"],zN={key:3,class:"media-collection__errors",role:"alert","aria-live":"polite"},jN=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(o,{emit:n}){const t=o,a=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:k=>{a("update:modelValue",k),a("change",k)},onUpload:k=>{a("upload",k)},onUploadComplete:k=>{a("upload-complete",k)},onUploadError:k=>{a("upload-error",k)},onRemove:k=>{a("remove",k)},onReorder:k=>{a("reorder",k)},onError:k=>{a("validation-error",k)},onReadyToSubmitChange:k=>{a("is-ready-to-submit-change",k)}},{items:r,setItems:s,addFiles:l,removeItem:c,reorderItems:d,cancelUpload:u,retryUpload:m,isLoading:h,isUploading:p,isAtMaxItems:v,errors:g,dragState:w,getDragProps:M,adapter:V,formValues:b,acceptString:f,count:_,remainingSlots:D}=bi(i);e.provide("mediaAdapter",V),e.provide("mediaCollection",{items:r,addFiles:l,removeItem:c,reorderItems:d}),e.watch(()=>t.modelValue,k=>{k!==r.value&&s(k)},{deep:!0});const B=e.computed(()=>t.showUploadZone&&!t.disabled&&!t.readonly&&!v.value),E=e.computed(()=>({"media-collection":!0,"media-collection--disabled":t.disabled,"media-collection--readonly":t.readonly,"media-collection--loading":h.value,"media-collection--has-items":r.value.length>0,"media-collection--dragging":w.value.isDragging}));function S(k){l(k)}function P(k){c(k)}function C(k){m(k.clientId)}function A(k){u(k.clientId)}function R(k){}function W(k,$,j){if(!t.sortable||t.disabled)return;const Z=M($,j);Z.onDragstart&&Z.onDragstart(k)}function O(k,$){if(!t.sortable||t.disabled)return;k.preventDefault();const j=r.value[$],Z=M(j,$);Z.onDragover&&Z.onDragover(k)}function I(k,$){const j=M(k,$);j.onDragend&&j.onDragend()}function F(k,$){k.preventDefault();const j=r.value[$],Z=M(j,$);Z.onDrop&&Z.onDrop(k)}return(k,$)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(E.value)},[e.renderSlot(k.$slots,"dropzone",{addFiles:e.unref(l)},()=>[B.value?(e.openBlock(),e.createBlock(xs,{key:0,accept:e.unref(f),multiple:k.maxItems!==1,disabled:k.disabled,"max-file-size":k.maxFileSize,"max-items":e.unref(D),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(_)} media items`},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(r),(j,Z)=>e.renderSlot(k.$slots,"item",{key:j.clientId,item:j,index:Z,remove:()=>P(j)},()=>[e.createElementVNode("div",{class:e.normalizeClass(["media-collection__item-wrapper",{"media-collection__item-wrapper--drag-over":e.unref(w).dropIndex===Z}]),draggable:k.sortable&&!k.disabled,"data-index":Z,onDragstart:K=>W(K,j,Z),onDragover:K=>O(K,Z),onDragend:K=>I(j,Z),onDrop:K=>F(K,Z)},[e.createVNode(Cs,{item:j,adapter:e.unref(V),disabled:k.disabled,sortable:k.sortable,"show-remove":!k.readonly,"show-edit":!1,index:Z,onRemove:P,onRetry:C,onCancel:A,onEdit:R},null,8,["item","adapter","disabled","sortable","show-remove","index"])],42,IN)],!0)),128))],8,FN)):B.value?e.createCommentVNode("",!0):e.renderSlot(k.$slots,"empty",{key:1},()=>[$[0]||($[0]=e.createElementVNode("div",{class:"media-collection__empty"},[e.createElementVNode("p",null,"No files uploaded")],-1))],!0),e.renderSlot(k.$slots,"footer",{count:e.unref(_),isUploading:e.unref(p)},()=>[e.unref(r).length>0?(e.openBlock(),e.createElementBlock("div",$N,[e.createElementVNode("span",RN,[e.createTextVNode(e.toDisplayString(e.unref(_))+" "+e.toDisplayString(e.unref(_)===1?"file":"files")+" ",1),k.maxItems?(e.openBlock(),e.createElementBlock("span",DN," / "+e.toDisplayString(k.maxItems)+" max",1)):e.createCommentVNode("",!0)]),e.unref(p)?(e.openBlock(),e.createElementBlock("span",AN," Uploading... ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],!0),k.generateFormFields?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),(j,Z)=>(e.openBlock(),e.createElementBlock("input",{key:`${k.name}-${j.uuid}`,type:"hidden",name:`${k.name}[${Z}][uuid]`,value:j.uuid},null,8,LN))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),(j,Z)=>(e.openBlock(),e.createElementBlock("input",{key:`${k.name}-${j.uuid}-name`,type:"hidden",name:`${k.name}[${Z}][name]`,value:j.name},null,8,UN))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),(j,Z)=>(e.openBlock(),e.createElementBlock("input",{key:`${k.name}-${j.uuid}-order`,type:"hidden",name:`${k.name}[${Z}][order]`,value:j.order},null,8,ON))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),(j,Z)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:`${k.name}-${j.uuid}-props`},[j.custom_properties?(e.openBlock(),e.createElementBlock("input",{key:0,type:"hidden",name:`${k.name}[${Z}][custom_properties]`,value:JSON.stringify(j.custom_properties)},null,8,PN)):e.createCommentVNode("",!0)],64))),128))],64)):e.createCommentVNode("",!0),e.unref(g).length>0?(e.openBlock(),e.createElementBlock("div",zN,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(g),j=>(e.openBlock(),e.createElementBlock("p",{key:j.code||j.message,class:"media-collection__error"},e.toDisplayString(j.message),1))),128))])):e.createCommentVNode("",!0)],2))}}),WN=Me(jN,[["__scopeId","data-v-10a5bfff"]]);function Ss(o={}){const{initialItem:n,onChange:t,onReplace:a,onUpload:i,onUploadComplete:r,onUploadError:s,onRemove:l,onError:c,onReadyToSubmitChange:d,...u}=o,h={...u,initialItems:n?[n]:[],maxItems:1,sortable:!1,onChange:B=>{t==null||t(B[0]||null)},onUpload:i,onUploadComplete:r,onUploadError:s,onRemove:l,onError:c,onReadyToSubmitChange:d},p=bi(h),v=e.computed(()=>p.items.value[0]||null),g=e.computed(()=>v.value!==null),w=e.computed(()=>p.formValues.value[0]||null);function M(B){B===null?p.clearAll():p.setItems([B])}async function V(B){const E=v.value;E&&p.removeItem(E),await p.addFiles([B])}function b(){v.value&&p.removeItem(v.value)}async function f(B){const E=v.value;E&&p.removeItem(E),await p.addFiles([B]);const S=p.items.value[0];S&&(a==null||a(E,S))}function _(){var B;(B=v.value)!=null&&B.upload&&p.cancelUpload(v.value.clientId)}async function D(){var B,E;((E=(B=v.value)==null?void 0:B.upload)==null?void 0:E.status)==="error"&&await p.retryUpload(v.value.clientId)}return{item:v,setItem:M,addFile:V,removeItem:b,replaceItem:f,cancelUpload:_,retryUpload:D,save:p.save,load:p.load,isLoading:p.isLoading,isUploading:p.isUploading,isReadyToSubmit:p.isReadyToSubmit,hasItem:g,errors:p.errors,adapter:p.adapter,formValue:w,acceptString:p.acceptString}}const ZN=["accept","disabled"],HN={class:"media-attachment__preview"},XN=["name","value"],GN=["name","value"],JN=["name","value"],YN=["name","value"],qN={key:4,class:"media-attachment__errors",role:"alert","aria-live":"polite"},KN=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(o,{emit:n}){const t=o,a=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:C=>{a("update:modelValue",C),a("change",C)},onUpload:C=>{a("upload",C)},onUploadComplete:C=>{a("upload-complete",C)},onUploadError:C=>{a("upload-error",C)},onRemove:C=>{a("remove",C)},onReplace:(C,A)=>{a("replace",A)},onError:C=>{a("validation-error",C)},onReadyToSubmitChange:C=>{a("is-ready-to-submit-change",C)}},{item:s,setItem:l,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:h,isLoading:p,hasItem:v,errors:g,adapter:w,formValue:M,acceptString:V}=Ss(r);e.provide("mediaAdapter",w),e.watch(()=>t.modelValue,C=>{C!==s.value&&l(C)},{deep:!0});const b=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":p.value,"media-attachment--has-item":v.value}));function _(C){C.length>0&&c(C[0])}function D(){var C;(C=i.value)==null||C.click()}function B(C){const A=C.target,R=A.files;R&&R.length>0&&u(R[0]),A.value=""}function E(C){d()}function S(C){h()}function P(C){m()}return(C,A)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(f.value)},[e.createElementVNode("input",{ref_key:"fileInputRef",ref:i,type:"file",accept:e.unref(V),disabled:C.disabled,class:"media-attachment__hidden-input",onChange:B},null,40,ZN),b.value?e.renderSlot(C.$slots,"dropzone",{key:0,addFile:e.unref(c)},()=>[e.createVNode(xs,{accept:e.unref(V),multiple:!1,disabled:C.disabled,"max-file-size":C.maxFileSize,onFiles:_},null,8,["accept","disabled","max-file-size"])],!0):e.unref(v)&&e.unref(s)?e.renderSlot(C.$slots,"preview",{key:1,item:e.unref(s),remove:e.unref(d),replace:D},()=>[e.createElementVNode("div",HN,[e.createVNode(Cs,{item:e.unref(s),adapter:e.unref(w),disabled:C.disabled,sortable:!1,"show-remove":!C.readonly,"show-edit":!1,onRemove:E,onRetry:S,onCancel:P},null,8,["item","adapter","disabled","show-remove"]),C.showReplaceButton&&!C.readonly&&!C.disabled&&e.unref(s).media?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"media-attachment__replace-button",onClick:D},[...A[0]||(A[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(C.$slots,"empty",{key:2},()=>[A[1]||(A[1]=e.createElementVNode("div",{class:"media-attachment__empty"},[e.createElementVNode("p",null,"No file selected")],-1))],!0),C.generateFormFields&&e.unref(M)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("input",{type:"hidden",name:`${C.name}[uuid]`,value:e.unref(M).uuid},null,8,XN),e.createElementVNode("input",{type:"hidden",name:`${C.name}[name]`,value:e.unref(M).name},null,8,GN),e.createElementVNode("input",{type:"hidden",name:`${C.name}[order]`,value:e.unref(M).order},null,8,JN),e.unref(M).custom_properties?(e.openBlock(),e.createElementBlock("input",{key:0,type:"hidden",name:`${C.name}[custom_properties]`,value:JSON.stringify(e.unref(M).custom_properties)},null,8,YN)):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0),e.unref(g).length>0?(e.openBlock(),e.createElementBlock("div",qN,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(g),R=>(e.openBlock(),e.createElementBlock("p",{key:R.code||R.message,class:"media-attachment__error"},e.toDisplayString(R.message),1))),128))])):e.createCommentVNode("",!0)],2))}}),QN=Me(KN,[["__scopeId","data-v-26911174"]]),ru={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"}},e5=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(o,{expose:n,emit:t}){const a=o,i=t,r={initialItems:a.modelValue,modelType:a.modelType,modelId:a.modelId,collection:a.collection,maxItems:a.maxItems,maxFileSize:a.maxFileSize,acceptedMimeTypes:a.acceptedMimeTypes,sortable:a.sortable,disabled:a.disabled,rules:a.rules,adapterType:a.adapter,onChange:C=>{i("update:modelValue",C),i("change",C)},onUpload:C=>{i("upload",C)},onUploadComplete:C=>{i("upload-complete",C)},onUploadError:C=>{i("upload-error",C)},onRemove:C=>{i("remove",C)},onReorder:C=>{i("reorder",C)},onError:C=>{i("validation-error",C)},onReadyToSubmitChange:C=>{i("is-ready-to-submit-change",C)}},{items:s,setItems:l,addFiles:c,removeItem:d,reorderItems:u,updateItem:m,cancelUpload:h,retryUpload:p,isLoading:v,isUploading:g,isReadyToSubmit:w,isAtMaxItems:M,errors:V,dragState:b,getDragProps:f,adapter:_,formValues:D,acceptString:B}=bi(r);e.provide("mediaAdapter",_),e.provide("mediaCollection",{items:s,addFiles:c,removeItem:d,reorderItems:u}),e.watch(()=>a.modelValue,C=>{C!==s.value&&l(C)},{deep:!0});const E=e.computed(()=>({...ru,...a.labels})),S=e.computed(()=>({accept:B.value,multiple:a.maxItems!==1,disabled:a.disabled||a.readonly||M.value})),P=e.computed(()=>({items:s.value,isLoading:v.value,isUploading:g.value,isReadyToSubmit:w.value,isAtMaxItems:M.value,errors:V.value,addFiles:c,removeItem:d,reorderItems:u,clearAll:()=>{s.value.forEach(C=>d(C))},cancelUpload:h,retryUpload:p,labels:E.value,dropzoneProps:S.value}));return n({items:s,addFiles:c,removeItem:d,reorderItems:u,updateItem:m,cancelUpload:h,retryUpload:p,isLoading:v,isUploading:g,isReadyToSubmit:w,isAtMaxItems:M,errors:V,dragState:b,getDragProps:f,adapter:_,formValues:D,acceptString:B}),(C,A)=>e.renderSlot(C.$slots,"default",e.normalizeProps(e.guardReactiveProps(P.value)))}}),t5=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(o,{expose:n,emit:t}){const a=o,i=t,r={initialItem:a.modelValue,modelType:a.modelType,modelId:a.modelId,collection:a.collection,maxFileSize:a.maxFileSize,acceptedMimeTypes:a.acceptedMimeTypes,disabled:a.disabled,rules:a.rules,adapterType:a.adapter,onChange:E=>{i("update:modelValue",E),i("change",E)},onUpload:E=>{i("upload",E)},onUploadComplete:E=>{i("upload-complete",E)},onUploadError:E=>{i("upload-error",E)},onRemove:E=>{i("remove",E)},onReplace:(E,S)=>{i("replace",S)},onError:E=>{i("validation-error",E)},onReadyToSubmitChange:E=>{i("is-ready-to-submit-change",E)}},{item:s,setItem:l,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:h,isLoading:p,isUploading:v,isReadyToSubmit:g,hasItem:w,errors:M,adapter:V,formValue:b,acceptString:f}=Ss(r);e.provide("mediaAdapter",V),e.watch(()=>a.modelValue,E=>{E!==s.value&&l(E)},{deep:!0});const _=e.computed(()=>({...ru,...a.labels})),D=e.computed(()=>({accept:f.value,multiple:!1,disabled:a.disabled||a.readonly||w.value})),B=e.computed(()=>({item:s.value,hasItem:w.value,isLoading:p.value,isUploading:v.value,isReadyToSubmit:g.value,errors:M.value,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:h,labels:_.value,dropzoneProps:D.value}));return n({item:s,setItem:l,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:h,isLoading:p,isUploading:v,isReadyToSubmit:g,hasItem:w,errors:M,adapter:V,formValue:b,acceptString:f}),(E,S)=>e.renderSlot(E.$slots,"default",e.normalizeProps(e.guardReactiveProps(B.value)))}}),n5=["name","value"],a5=["name","value"],o5=["name","value"],i5=["name","value"],r5=e.defineComponent({__name:"MediaHiddenFields",props:{items:{default:()=>[]},item:{default:null},name:{default:"media"},format:{default:"mediables"}},setup(o){const n=o,t=e.computed(()=>n.item?[n.item]:n.items),a=e.computed(()=>ks(t.value));function i(l,c){var u;const d=((u=a.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(a.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,n5),e.createElementVNode("input",{type:"hidden",name:s(u,"name"),value:d.name},null,8,a5),e.createElementVNode("input",{type:"hidden",name:s(u,"order"),value:d.order},null,8,o5),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,i5)):e.createCommentVNode("",!0)],64))),128))}}),s5=["data-testid"],l5=["data-testid"],c5=["id"],d5=["value","maxlength","disabled","aria-labelledby","placeholder","data-testid","onInput"],u5=e.defineComponent({__name:"MediaAttachmentMetadataFields",props:{items:{},disabled:{type:Boolean,default:!1},label:{default:"Caption"},placeholder:{default:"Add an optional caption"},maxLength:{default:500},testIdPrefix:{default:"media-attachment-metadata"},getItemLabel:{type:Function,default:(o,n)=>`${o.type==="video"?"video":"photo"} ${n+1}`}},emits:["update:items"],setup(o,{emit:n}){const t=o,a=n;function i(r,s){const l=s.target;l instanceof HTMLInputElement&&a("update:items",t.items.map((c,d)=>d!==r?c:{...c,caption:l.value===""?null:l.value}))}return(r,s)=>r.items.length>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"media-attachment-metadata-fields","data-testid":r.testIdPrefix},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.items,(l,c)=>(e.openBlock(),e.createElementBlock("div",{key:l._key??l.id??`${l.url}:${c}`,class:"media-attachment-metadata-fields__row","data-testid":`${r.testIdPrefix}-${c}`},[e.createElementVNode("p",{id:`${r.testIdPrefix}-label-${c}`,class:"media-attachment-metadata-fields__label"},e.toDisplayString(r.label)+" for "+e.toDisplayString(r.getItemLabel(l,c)),9,c5),e.createElementVNode("input",{value:l.caption??"",type:"text",class:"media-attachment-metadata-fields__input",maxlength:r.maxLength,disabled:r.disabled,"aria-labelledby":`${r.testIdPrefix}-label-${c}`,placeholder:r.placeholder,"data-testid":`input-${r.testIdPrefix}-${c}`,onInput:d=>i(c,d)},null,40,d5)],8,l5))),128))],8,s5)):e.createCommentVNode("",!0)}}),m5=Me(u5,[["__scopeId","data-v-a153768a"]]),p5="/v1/media/deletion/check",f5="/v1/media/deletion/delete",_o=100;function ic(o){const n=new Set,t=[];for(const a of o){const i=a.trim().toLowerCase();i===""||n.has(i)||(n.add(i),t.push(i))}return t.sort()}function su(o){const n=o.checkEndpoint??p5,t=o.deleteEndpoint??f5,a=e.ref(!1),i=e.ref(!1),r=e.ref(null),s=e.ref(null),l=e.ref(null);async function c(m){l.value=null;const h=ic(m);if(h.length===0)return r.value=[],[];if(h.length>_o){const p=new Error(`Cannot check more than ${_o} media items at once.`);throw l.value=p,p}a.value=!0;try{const p=await o.httpClient.post(n,{uuids:h}),v=((p==null?void 0:p.data)??[]).map(g=>{var w,M,V,b;return{uuid:g.uuid,canDelete:((w=g.report)==null?void 0:w.canDelete)??!1,blocks:Array.isArray((M=g.report)==null?void 0:M.blocks)?g.report.blocks:[],cascade:Array.isArray((V=g.report)==null?void 0:V.cascade)?g.report.cascade:[],variantCount:typeof((b=g.report)==null?void 0:b.variantCount)=="number"?g.report.variantCount:0}});return r.value=v,v}catch(p){throw l.value=p instanceof Error?p:new Error(String(p)),l.value}finally{a.value=!1}}async function d(m,h={}){l.value=null;const p=ic(m);if(p.length===0){const v={results:[],summary:{}};return s.value=v,v}if(p.length>_o){const v=new Error(`Cannot delete more than ${_o} media items at once.`);throw l.value=v,v}i.value=!0;try{const v=await o.httpClient.post(t,{uuids:p,force:h.force===!0}),g={results:Array.isArray(v==null?void 0:v.results)?v.results:[],summary:(v==null?void 0:v.summary)??{}};return s.value=g,g}catch(v){throw l.value=v instanceof Error?v:new Error(String(v)),l.value}finally{i.value=!1}}function u(){r.value=null,s.value=null,l.value=null}return{isChecking:a,isDeleting:i,lastReport:r,lastResponse:s,error:l,checkDependencies:c,deleteMany:d,reset:u}}const h5="/v1/user/media/trash";function v5(o){return`/v1/user/media/${encodeURIComponent(o)}/restore`}function lu(o){const n=o.listEndpoint??h5,t=o.buildRestoreEndpoint??v5,a=o.perPage??50,i=e.ref([]),r=e.ref(0),s=e.ref(1),l=e.ref(!1),c=e.ref(!1),d=e.ref(null);async function u(p=1){var v,g;d.value=null,l.value=!0;try{const w=await o.httpClient.get(n,{params:{page:p,per_page:a}});i.value=Array.isArray(w==null?void 0:w.data)?w.data:[],r.value=typeof((v=w==null?void 0:w.meta)==null?void 0:v.total)=="number"?w.meta.total:0,s.value=typeof((g=w==null?void 0:w.meta)==null?void 0:g.current_page)=="number"?w.meta.current_page:p}catch(w){throw d.value=w instanceof Error?w:new Error(String(w)),d.value}finally{l.value=!1}}async function m(p){d.value=null,c.value=!0;try{const v=await o.httpClient.post(t(p)),g={status:(v==null?void 0:v.status)??"failed",data:(v==null?void 0:v.data)??null,duplicate_uuid:(v==null?void 0:v.duplicate_uuid)??null};return typeof(v==null?void 0:v.message)=="string"&&(g.message=v.message),g.status==="restored"&&(i.value=i.value.filter(w=>w.uuid!==p),r.value=Math.max(0,r.value-1)),g}catch(v){const g=g5(v);if(g&&typeof g.status=="string"){const w={status:g.status,duplicate_uuid:typeof g.duplicate_uuid=="string"?g.duplicate_uuid:null};return typeof g.message=="string"&&(w.message=g.message),w}throw d.value=v instanceof Error?v:new Error(String(v)),d.value}finally{c.value=!1}}function h(){i.value=[],r.value=0,s.value=1,d.value=null}return{items:i,total:r,currentPage:s,isLoading:l,isRestoring:c,error:d,fetch:u,restore:m,reset:h}}function g5(o){var t;if(typeof o!="object"||o===null)return null;const n=o;return(t=n.response)!=null&&t.data&&typeof n.response.data=="object"?n.response.data:null}const y5={class:"media-management-view","data-testid":"media-management-view"},b5={class:"media-management-view__header"},w5={class:"media-management-view__title"},k5={class:"media-management-view__actions"},_5={key:0,class:"media-management-view__badge"},E5={key:0,class:"media-management-view__panel","data-testid":"panel-library"},x5={key:0,class:"media-management-view__status","data-testid":"library-loading"},C5={key:1,class:"media-management-view__status media-management-view__status--error","data-testid":"library-error"},S5={key:2,class:"media-management-view__empty","data-testid":"library-empty"},V5={key:3,class:"media-management-view__grid","data-testid":"library-grid"},N5=["data-testid"],T5=["data-testid","aria-pressed","onClick"],M5=["src","alt"],B5={key:1,class:"media-management-view__item-placeholder"},F5={class:"media-management-view__item-meta"},I5={class:"media-management-view__item-name"},$5=["data-testid"],R5={key:1,class:"media-management-view__item-badge","data-testid":"badge-orphaned"},D5={key:4,class:"media-management-view__bulk-bar","data-testid":"bulk-bar"},A5={"data-testid":"bulk-count"},L5=["disabled"],U5={key:1,class:"media-management-view__panel","data-testid":"panel-trash"},O5={key:0,class:"media-management-view__status","data-testid":"trash-loading"},P5={key:1,class:"media-management-view__empty","data-testid":"trash-empty"},z5={key:2,class:"media-management-view__grid","data-testid":"trash-grid"},j5=["data-testid"],W5={class:"media-management-view__item-thumb"},Z5=["src","alt"],H5={class:"media-management-view__item-meta"},X5={class:"media-management-view__item-name"},G5={key:0,class:"media-management-view__item-meta-line"},J5=["data-testid","disabled","onClick"],Y5=e.defineComponent({__name:"MediaManagementView",props:{httpClient:{},capabilities:{default:()=>({})},labels:{default:()=>({})},confirmBulkDelete:{},onRestoreCollision:{}},emits:["deleted","restored","restore-conflict","error"],setup(o,{expose:n,emit:t}){const a=o,i=t,r=e.computed(()=>({showTrash:!0,allowBulkDelete:!0,showOwner:!1,...a.capabilities})),s=e.computed(()=>{var I,F,k,$,j,Z,K,ge,we,ne,N,L;return{title:((I=a.labels)==null?void 0:I.title)??"My Media",libraryTab:((F=a.labels)==null?void 0:F.libraryTab)??"Library",trashTab:((k=a.labels)==null?void 0:k.trashTab)??"Trash",loading:(($=a.labels)==null?void 0:$.loading)??"Loading…",emptyLibrary:((j=a.labels)==null?void 0:j.emptyLibrary)??"No media yet — upload your first creation.",emptyTrash:((Z=a.labels)==null?void 0:Z.emptyTrash)??"Trash is empty.",orphanedBadge:((K=a.labels)==null?void 0:K.orphanedBadge)??"Not in use",selectedCount:((ge=a.labels)==null?void 0:ge.selectedCount)??(te=>`${te} selected`),deleteButton:((we=a.labels)==null?void 0:we.deleteButton)??"Delete",restoreButton:((ne=a.labels)==null?void 0:ne.restoreButton)??"Restore",purgeAfter:((N=a.labels)==null?void 0:N.purgeAfter)??(te=>`Purges ${te}`),ownerLabel:((L=a.labels)==null?void 0:L.ownerLabel)??(te=>`User ${te.user_id??""}`)}}),l=e.computed(()=>s.value.title),c=e.computed(()=>s.value.libraryTab),d=e.computed(()=>s.value.trashTab),u=e.computed(()=>s.value.loading),m=e.computed(()=>s.value.emptyLibrary),h=e.computed(()=>s.value.emptyTrash),p=e.computed(()=>s.value.orphanedBadge),v=e.computed(()=>s.value.deleteButton),g=e.computed(()=>s.value.restoreButton),w=e.ref("library"),M=e.ref({scope:"library"}),V=e.ref({}),b=bs({httpClient:a.httpClient,view:M,filters:V,perPage:50}),f=e.computed(()=>b.items.value),_=e.computed(()=>b.loading.value),D=e.computed(()=>{var I;return((I=b.error.value)==null?void 0:I.message)??null}),B=xc(f),E=su({httpClient:a.httpClient}),S=lu({httpClient:a.httpClient});function P(I){return s.value.selectedCount(I)}function C(I){return s.value.purgeAfter(I)}function A(I){return s.value.ownerLabel(I)}async function R(){const I=B.selectedItems.value;if(I.length===0)return;const F=r.value.canDelete?I.filter(k=>r.value.canDelete(k)):I;if(F.length!==0&&!(a.confirmBulkDelete&&!await a.confirmBulkDelete(F)))try{const k=F.map(Z=>Z.uuid),j=(await E.deleteMany(k)).results.filter(Z=>Z.status==="trashed"||Z.status==="already_trashed").map(Z=>Z.uuid);if(j.length>0){for(const Z of j)B.deselect(Z);i("deleted",j),await b.refresh(),r.value.showTrash!==!1&&await S.fetch(S.currentPage.value).catch(()=>{})}}catch(k){i("error",k instanceof Error?k:new Error(String(k)))}}async function W(I){var F;try{const k=await S.restore(I);if(k.status==="restored"){i("restored",I),await b.refresh().catch(()=>{});return}if(k.status==="duplicate_conflict"){i("restore-conflict",{uuid:I,duplicateUuid:k.duplicate_uuid??null}),(F=a.onRestoreCollision)==null||F.call(a,I,k.duplicate_uuid??null);return}}catch(k){i("error",k instanceof Error?k:new Error(String(k)))}}async function O(){w.value="trash",S.items.value.length===0&&!S.isLoading.value&&await S.fetch().catch(I=>{i("error",I instanceof Error?I:new Error(String(I)))})}return e.watch(w,async I=>{I==="library"&&f.value.length===0&&!_.value&&await b.refresh().catch(()=>{})}),e.onMounted(async()=>{await b.refresh().catch(I=>{i("error",I instanceof Error?I:new Error(String(I)))}),r.value.showTrash!==!1&&S.fetch().catch(()=>{})}),n({refresh:()=>b.refresh(),refreshTrash:()=>S.fetch(),selection:B,deletion:E,trash:S}),(I,F)=>(e.openBlock(),e.createElementBlock("div",y5,[e.createElementVNode("header",b5,[e.createElementVNode("h2",w5,e.toDisplayString(l.value),1),e.createElementVNode("div",k5,[r.value.showTrash!==!1?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:e.normalizeClass(["media-management-view__tab-button",{"is-active":w.value==="library"}]),"data-testid":"tab-library",onClick:F[0]||(F[0]=k=>w.value="library")},e.toDisplayString(c.value),3)):e.createCommentVNode("",!0),r.value.showTrash!==!1?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:e.normalizeClass(["media-management-view__tab-button",{"is-active":w.value==="trash"}]),"data-testid":"tab-trash",onClick:O},[e.createTextVNode(e.toDisplayString(d.value)+" ",1),e.unref(S).total.value>0?(e.openBlock(),e.createElementBlock("span",_5,e.toDisplayString(e.unref(S).total.value),1)):e.createCommentVNode("",!0)],2)):e.createCommentVNode("",!0)])]),w.value==="library"?(e.openBlock(),e.createElementBlock("section",E5,[_.value?(e.openBlock(),e.createElementBlock("div",x5,e.toDisplayString(u.value),1)):D.value?(e.openBlock(),e.createElementBlock("div",C5,e.toDisplayString(D.value),1)):f.value.length===0?(e.openBlock(),e.createElementBlock("div",S5,e.toDisplayString(m.value),1)):(e.openBlock(),e.createElementBlock("ul",V5,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,k=>(e.openBlock(),e.createElementBlock("li",{key:k.uuid,class:e.normalizeClass(["media-management-view__item",{"is-selected":e.unref(B).isSelected(k.uuid)}]),"data-testid":`media-item-${k.uuid}`},[e.createElementVNode("button",{type:"button",class:"media-management-view__item-thumb","data-testid":`btn-select-${k.uuid}`,"aria-pressed":e.unref(B).isSelected(k.uuid),onClick:$=>e.unref(B).toggle(k.uuid)},[k.thumbnail_url||k.original_url?(e.openBlock(),e.createElementBlock("img",{key:0,src:k.thumbnail_url||k.original_url,alt:k.alt_text||k.file_name,loading:"lazy"},null,8,M5)):(e.openBlock(),e.createElementBlock("span",B5,e.toDisplayString(k.file_name),1))],8,T5),e.createElementVNode("div",F5,[e.createElementVNode("span",I5,e.toDisplayString(k.file_name),1),r.value.showOwner&&k.user_id?(e.openBlock(),e.createElementBlock("span",{key:0,class:"media-management-view__item-owner","data-testid":`owner-${k.uuid}`},e.toDisplayString(A(k)),9,$5)):e.createCommentVNode("",!0),k.is_orphaned?(e.openBlock(),e.createElementBlock("span",R5,e.toDisplayString(p.value),1)):e.createCommentVNode("",!0)])],10,N5))),128))])),e.unref(B).selectedCount.value>0&&r.value.allowBulkDelete!==!1?(e.openBlock(),e.createElementBlock("footer",D5,[e.createElementVNode("span",A5,e.toDisplayString(P(e.unref(B).selectedCount.value)),1),e.createElementVNode("button",{type:"button",class:"media-management-view__btn-delete","data-testid":"btn-bulk-delete",disabled:e.unref(E).isDeleting.value,onClick:R},e.toDisplayString(v.value),9,L5)])):e.createCommentVNode("",!0)])):w.value==="trash"?(e.openBlock(),e.createElementBlock("section",U5,[e.unref(S).isLoading.value?(e.openBlock(),e.createElementBlock("div",O5,e.toDisplayString(u.value),1)):e.unref(S).items.value.length===0?(e.openBlock(),e.createElementBlock("div",P5,e.toDisplayString(h.value),1)):(e.openBlock(),e.createElementBlock("ul",z5,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(S).items.value,k=>(e.openBlock(),e.createElementBlock("li",{key:k.uuid,class:"media-management-view__item is-trashed","data-testid":`trash-item-${k.uuid}`},[e.createElementVNode("div",W5,[k.thumbnail_url||k.original_url?(e.openBlock(),e.createElementBlock("img",{key:0,src:k.thumbnail_url||k.original_url,alt:k.alt_text||k.file_name,loading:"lazy"},null,8,Z5)):e.createCommentVNode("",!0)]),e.createElementVNode("div",H5,[e.createElementVNode("span",X5,e.toDisplayString(k.file_name),1),k.purge_after?(e.openBlock(),e.createElementBlock("span",G5,e.toDisplayString(C(k.purge_after)),1)):e.createCommentVNode("",!0)]),e.createElementVNode("button",{type:"button",class:"media-management-view__btn-restore","data-testid":`btn-restore-${k.uuid}`,disabled:e.unref(S).isRestoring.value,onClick:$=>W(k.uuid)},e.toDisplayString(g.value),9,J5)],8,j5))),128))]))])):e.createCommentVNode("",!0)]))}}),q5=Me(Y5,[["__scopeId","data-v-ec535782"]]);exports.AlbumBrowser=Pd;exports.AlbumManager=HV;exports.AlbumMediaGrid=o4;exports.AlbumTree=Od;exports.ArrayBufferTarget=Qr;exports.ExistingMediaSelector=_h;exports.ImageEditor=fc;exports.ImageEditorModal=hc;exports.LiveStreamManager=bV;exports.ManagedMediaGallery=Ym;exports.MediaAlbumInlineCreate=zd;exports.MediaAlbumUnavailableState=jd;exports.MediaAttachment=QN;exports.MediaAttachmentMetadataFields=m5;exports.MediaCollection=WN;exports.MediaCollectionDropzone=xs;exports.MediaCollectionItem=Cs;exports.MediaLibraryPicker=au;exports.MediaLibraryPickerModal=O3;exports.MediaManagementView=q5;exports.MediaPreviewSheet=Wd;exports.MediaSelectionTray=q3;exports.MediaSourceSheet=Zd;exports.MediaThumbnailCell=Xd;exports.MediaUploadSheet=Hd;exports.MediaWorkspace=Hm;exports.ModelMediaManager=Wf;exports.Muxer=Oc;exports.VideoEditor=Rd;exports.VideoEditorDialog=nE;exports.VideoEditorSimple=SE;exports.VideoExportPanel=iC;exports.VideoJobClient=vi;exports.VideoPlayer=Ad;exports.VideoTimeline=YE;exports.VideoToolsPanel=Ux;exports.VideoUploader=HC;exports.VirtualMediaGrid=Gd;exports._sfc_main=e5;exports._sfc_main$1=t5;exports._sfc_main$2=r5;exports.applyTemporaryMediaStoreConfig=cc;exports.configureMediaStore=na;exports.createAdapter=ou;exports.createEmptyEditorState=Sm;exports.createImageEditor=Q3;exports.createMediablesAdapter=_s;exports.createSpatieAdapter=Es;exports.deserializeEditorState=Cm;exports.formatFileSize=Zo;exports.fromMediaArray=Wr;exports.getFileExtension=Jd;exports.getImageDimensions=Yd;exports.getMediablesAdapter=eN;exports.getSpatieAdapter=aN;exports.isImageFile=vs;exports.normalizeEditorState=Zr;exports.normalizeRecipeForServerRender=A_;exports.recipeHasServerRenderableEdits=D_;exports.recipeHasUnsupportedServerEdits=Dd;exports.resetMediablesAdapter=tN;exports.resetSpatieAdapter=oN;exports.restoreMediaStoreConfig=lc;exports.serializeEditorState=rc;exports.snapshotMediaStoreConfig=sc;exports.toFormValues=ks;exports.useAdminMediaStore=dc;exports.useAlbumDragDrop=Ud;exports.useAlbumStore=yi;exports.useAlbums=Ld;exports.useGlobalImageEditor=K3;exports.useImageEditorModal=ws;exports.useMediaAttachment=Ss;exports.useMediaCollection=bi;exports.useMediaDeletion=su;exports.useMediaDragSort=iu;exports.useMediaLibraryPickerController=nu;exports.useMediaLibraryQuery=bs;exports.useMediaLibrarySession=Qd;exports.useMediaLibraryStateMachine=eu;exports.useMediaLibraryTelemetry=tu;exports.useMediaStore=$t;exports.useMediaTrash=lu;exports.useMediaUploadQueue=ys;exports.useMediaValidation=gs;exports.validateFile=qd;
|
|
342
|
-
//# sourceMappingURL=index-
|
|
341
|
+
`+r):a.stack=r}catch{}}throw a}}_request(n,t){typeof n=="string"?(t=t||{},t.url=n):t=n||{},t=An(this.defaults,t);const{transitional:a,paramsSerializer:i,headers:r}=t;a!==void 0&&Fo.assertOptions(a,{silentJSONParsing:Qt.transitional(Qt.boolean),forcedJSONParsing:Qt.transitional(Qt.boolean),clarifyTimeoutError:Qt.transitional(Qt.boolean)},!1),i!=null&&(q.isFunction(i)?t.paramsSerializer={serialize:i}:Fo.assertOptions(i,{encode:Qt.function,serialize:Qt.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),Fo.assertOptions(t,{baseUrl:Qt.spelling("baseURL"),withXsrfToken:Qt.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=r&&q.merge(r.common,r[t.method]);r&&q.forEach(["delete","get","head","post","put","patch","common"],v=>{delete r[v]}),t.headers=Ft.concat(s,r);const l=[];let c=!0;this.interceptors.request.forEach(function(g){typeof g.runWhen=="function"&&g.runWhen(t)===!1||(c=c&&g.synchronous,l.unshift(g.fulfilled,g.rejected))});const d=[];this.interceptors.response.forEach(function(g){d.push(g.fulfilled,g.rejected)});let u,m=0,h;if(!c){const v=[Zl.bind(this),void 0];for(v.unshift(...l),v.push(...d),h=v.length,u=Promise.resolve(t);m<h;)u=u.then(v[m++],v[m++]);return u}h=l.length;let p=t;for(m=0;m<h;){const v=l[m++],g=l[m++];try{p=v(p)}catch(w){g.call(this,w);break}}try{u=Zl.call(this,p)}catch(v){return Promise.reject(v)}for(m=0,h=d.length;m<h;)u=u.then(d[m++],d[m++]);return u}getUri(n){n=An(this.defaults,n);const t=Vd(n.baseURL,n.url,n.allowAbsoluteUrls);return _d(t,n.params,n.paramsSerializer)}};q.forEach(["delete","get","head","options"],function(n){$n.prototype[n]=function(t,a){return this.request(An(a||{},{method:n,url:t,data:(a||{}).data}))}});q.forEach(["post","put","patch"],function(n){function t(a){return function(r,s,l){return this.request(An(l||{},{method:n,headers:a?{"Content-Type":"multipart/form-data"}:{},url:r,data:s}))}}$n.prototype[n]=t(),$n.prototype[n+"Form"]=t(!0)});let b2=class Id{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 a=this;this.promise.then(i=>{if(!a._listeners)return;let r=a._listeners.length;for(;r-- >0;)a._listeners[r](i);a._listeners=null}),this.promise.then=i=>{let r;const s=new Promise(l=>{a.subscribe(l),r=l}).then(i);return s.cancel=function(){a.unsubscribe(r)},s},n(function(r,s,l){a.reason||(a.reason=new ma(r,s,l),t(a.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=a=>{n.abort(a)};return this.subscribe(t),n.signal.unsubscribe=()=>this.unsubscribe(t),n.signal}static source(){let n;return{token:new Id(function(i){n=i}),cancel:n}}};function w2(o){return function(t){return o.apply(null,t)}}function k2(o){return q.isObject(o)&&o.isAxiosError===!0}const jr={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(jr).forEach(([o,n])=>{jr[n]=o});function $d(o){const n=new $n(o),t=dd($n.prototype.request,n);return q.extend(t,$n.prototype,n,{allOwnKeys:!0}),q.extend(t,n,null,{allOwnKeys:!0}),t.create=function(i){return $d(An(o,i))},t}const it=$d(Ka);it.Axios=$n;it.CanceledError=ma;it.CancelToken=b2;it.isCancel=Cd;it.VERSION=Fd;it.toFormData=pi;it.AxiosError=Oe;it.Cancel=it.CanceledError;it.all=function(n){return Promise.all(n)};it.spread=w2;it.isAxiosError=k2;it.mergeConfig=An;it.AxiosHeaders=Ft;it.formToJSON=o=>xd(q.isHTMLForm(o)?new FormData(o):o);it.getAdapter=Bd.getAdapter;it.HttpStatusCode=jr;it.default=it;const{Axios:aT,AxiosError:oT,CanceledError:iT,isCancel:rT,CancelToken:sT,VERSION:lT,all:cT,Cancel:dT,isAxiosError:uT,spread:mT,toFormData:pT,AxiosHeaders:fT,HttpStatusCode:hT,formToJSON:vT,getAdapter:gT,mergeConfig:yT}=it;class vi{constructor(n="/api/v1"){this.eventSource=null,this.progressCallbacks=new Map,this.api=it.create({baseURL:n,headers:{"Content-Type":"application/json",Accept:"application/json"}}),this.api.interceptors.request.use(t=>{const a=this.getAuthToken();return a&&(t.headers.Authorization=`Bearer ${a}`),t}),this.api.interceptors.response.use(t=>t,t=>{var a;return(a=t.response)==null||a.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,a=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)}},a)})}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",a=>{const i=JSON.parse(a.data),r=this.progressCallbacks.get(i.jobId);r&&r(i.progress)}),this.eventSource.addEventListener("complete",a=>{const i=JSON.parse(a.data),r=this.progressCallbacks.get(i.jobId);r&&(r(100),this.unsubscribeFromProgress(i.jobId))}),this.eventSource.addEventListener("error",a=>{this.progressCallbacks.forEach((i,r)=>{this.pollProgress(r)})})}catch{}}async pollProgress(n){const t=setInterval(async()=>{try{const a=await this.getJob(n),i=this.progressCallbacks.get(n);i&&i(a.progress),(a.status==="completed"||a.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 a of t){const[i,r]=a.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 a=await this.api.get(`/video/jobs/${n}/thumbnail`,{params:{time:t},responseType:"blob"});return URL.createObjectURL(a.data)}catch(a){throw a}}normalizeJob(n){const t=n,a={...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!==""&&(a.output_media_id=i);const r=t.error_message??t.errorMessage;typeof r=="string"&&r!==""&&(a.error_message=r);const s=t.started_at??t.startedAt;typeof s=="string"&&s!==""&&(a.started_at=s);const l=t.completed_at??t.completedAt;return typeof l=="string"&&l!==""&&(a.completed_at=l),a}}new vi;const _2={key:0,class:"mobile-layout"},E2={class:"mobile-toolbar"},x2={class:"mobile-toolbar-left"},C2=["aria-label"],S2={class:"mobile-toolbar-right"},V2=["disabled"],N2=["disabled"],T2={class:"preview-section"},M2={key:0,class:"mobile-export-overlay"},B2={class:"mobile-export-progress"},F2={class:"mobile-export-bar"},I2={class:"mobile-timeline-zoom"},$2={class:"mobile-edit-strip"},R2={class:"mobile-selection-summary"},D2={class:"mobile-selection-title"},A2={class:"mobile-selection-meta"},L2={class:"mobile-readout-row"},U2=["disabled"],O2={class:"mobile-readout-grid"},P2={class:"mobile-readout-chip","data-testid":"mobile-playhead-readout"},z2={class:"mobile-readout-chip","data-testid":"mobile-clip-in-readout"},j2={class:"mobile-readout-chip","data-testid":"mobile-clip-out-readout"},W2={class:"mobile-readout-chip","data-testid":"mobile-duration-readout"},Z2=["disabled"],H2={class:"mobile-speed-strip"},X2={class:"mobile-speed-chips"},G2=["data-testid","onClick"],J2={class:"mobile-edit-actions"},Y2=["disabled"],q2=["disabled"],K2=["disabled"],Q2=["disabled"],ek=["disabled"],tk={class:"mobile-action-sheet-header"},nk={class:"mobile-action-sheet-title"},ak={class:"mobile-action-sheet-subtitle"},ok={class:"mobile-action-sheet-actions"},ik=["disabled"],rk=["disabled"],sk=["disabled"],lk=["disabled"],ck=["disabled"],dk={key:1,class:"desktop-layout"},uk={class:"desktop-main-row"},mk={class:"preview-panel"},pk={class:"fit-toggle"},fk={class:"editor-content"},hk={class:"editor-tabs"},vk={class:"tab-header"},gk=["onClick"],yk={class:"tab-content-area"},bk={class:"filter-controls"},wk={class:"text-controls"},kk={class:"transition-controls"},_k={class:"audio-controls"},Ek={class:"adjustments-controls"},xk={key:1,class:"no-filter-selected"},Ck={class:"export-controls"},Sk={key:0,"data-testid":"video-export-status-completed"},Vk={key:1,"data-testid":"video-export-status-message",class:"export-status-message"},Nk={class:"desktop-timeline-row"},Tk={class:"timeline-zoom"},Mk=["value"],Bk={class:"zoom-readout"},Fk={key:0,class:"dev-editor-controls","data-testid":"video-editor-dev-controls"},Ik={class:"dev-editor-row"},$k={class:"dev-editor-field"},Rk={class:"dev-editor-field"},Dk=["disabled"],Ak=["disabled"],Lk=["disabled"],Uk={class:"dev-editor-row"},Ok={class:"dev-editor-field dev-editor-field--wide"},Pk=["value"],zk=["disabled"],jk=["disabled"],Wk=["disabled"],Zk=["disabled"],Hk=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(o,{expose:n,emit:t}){const a=o,i=t,r=e.computed(()=>{if(!a.media||typeof a.media!="object")return;const y=a.media.uuid??a.media.id;return typeof y=="string"&&y.trim()!==""?y.trim():void 0}),s=e.computed(()=>{const y=typeof a.mediaUuid=="string"?a.mediaUuid.trim():"";return y!==""?y: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 y=a.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},x=a.featureFlags;return x?{filters:typeof x.filters=="boolean"?x.filters:y.filters,adjustments:typeof x.adjustments=="boolean"?x.adjustments:y.adjustments,text:typeof x.text=="boolean"?x.text:y.text,transitions:typeof x.transitions=="boolean"?x.transitions:y.transitions,audio:typeof x.audio=="boolean"?x.audio:y.audio,export:typeof x.export=="boolean"?x.export:y.export}:y}),m=e.computed(()=>l.value?c.value:d.value),h=e.computed(()=>m.value==="filters"||w.value),p=e.computed(()=>m.value!=="filters"&&!w.value),v=e.ref(null),g=e.ref(null),w=e.ref(!1),M=e.computed(()=>l.value?v.value:g.value);function V(y){return y==="contain"||y==="cover"||y==="none"}function b(y){if(!(y!=null&&y.metadata))return null;const x=y.metadata.fit_mode;return V(x)?x:null}const f=e.shallowRef(null),_=e.ref(null),D=e.ref(b(a.initialRecipe)??"contain"),B=e.ref(null),E=e.ref(null),S=e.ref(null),P=e.ref(!1),C=new Map,A=e.ref([]),R=e.ref([]),W=e.ref([]),O=e.ref([]),I=e.ref(1),F=()=>{l.value=window.innerWidth<768},k=[{id:"filters",label:"Filters",icon:yn},{id:"adjustments",label:"Adjust",icon:fp},{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:aa}],$=[{id:"filters",label:"Filters"},{id:"adjustments",label:"Adjustments"},{id:"text",label:"Text"},{id:"transitions",label:"Transitions"},{id:"audio",label:"Audio"},{id:"export",label:"Export"}],j=e.computed(()=>k.filter(y=>u.value[y.id])),Z=e.computed(()=>$.filter(y=>u.value[y.id])),K=e.computed(()=>{var y,x;return((y=Z.value[0])==null?void 0:y.id)??((x=j.value[0])==null?void 0:x.id)??"filters"});e.watch(u,y=>{y[c.value]||(c.value=K.value),y[d.value]||(d.value=K.value)},{immediate:!0,deep:!0}),e.watch(K,y=>{u.value[c.value]||(c.value=y),u.value[d.value]||(d.value=y)},{immediate:!0}),e.watch(u,y=>{y.export||(c.value==="export"&&(c.value=K.value),d.value==="export"&&(d.value=K.value))},{immediate:!0,deep:!0});const ge=e.computed(()=>typeof window>"u"?!1:window.__MEDIABLES_EDITOR_DEV__===!0),we=Ec(),{currentFrame:ne,playheadPosition:N,timelineClips:L,totalDuration:te,hasChanges:ae,isPlaying:ie,selectedClip:he,zoomLevel:se,playbackSpeed:fe,handleTrim:xe,handleSplit:le,handleClipSelect:de,splitAtPlayhead:Ve,deleteSelectedClip:Be,duplicateSelectedClip:dt,setZoomLevel:Ke,moveClip:bt,setFilters:et,setTextOverlays:at,setAudioTracks:wt,saveDraft:Vt,clearHasChanges:rt,resetChanges:vt,generateRecipe:ue,zoomIn:Se,zoomOut:Te,fitToWindow:je,togglePlayback:T,setPlaying:z,seekTo:G,frameForward:ee,frameBackward:pe,skipToStart:be,skipToEnd:$e,setPlaybackSpeed:Ae,updateSourceDuration:Re,undo:Pe,redo:Je,canUndo:tt,canRedo:xt}=od(s.value,a.initialRecipe,a.media),{videoCompatibleFilters:Ht,activeFilters:nt,selectedFilter:Xt,previewFilter:jn,previewFilterEffect:pa,applyFilter:Wn,updateFilterParams:Qa,removeFilter:fa,clearAllFilters:Zn,setActiveFilters:ha}=sd();function wn(y){var X,oe;const x=((X=he.value)==null?void 0:X.id)??((oe=L.value[0])==null?void 0:oe.id);x&&(P.value=!0,typeof y=="object"&&y.id?Wn(y.id):typeof y=="string"&&Wn(y),et(nt.value),f.value?f.value.setClipFilters(x,nt.value):C.set(x,[...nt.value]),de(x),P.value=!1,Yt())}function wi(){var x,X;const y=((x=he.value)==null?void 0:x.id)??((X=L.value[0])==null?void 0:X.id);y&&de(y)}function ki(y){const x=nt.value.find(X=>X.filterId===y);x&&fa(x.id)}const Hn=e.computed(()=>Ht.value.map(x=>{var oe;const X=[];if(x.controls&&x.controls.length>0)for(const ve of x.controls){const ce=ve.type;if(ce==="button"||ce==="text"||ce==="range")continue;const me={id:ve.property||ve.id,label:ve.label||ve.id,type:ce,default:ve.default??(ce==="toggle"?!1:ce==="color"?"#ffffff":0)};ce==="slider"&&(me.min=ve.min??0,me.max=ve.max??1,me.step=ve.step??.01),ce==="select"&&ve.options&&(me.options=ve.options),X.push(me)}else if(x.paramRanges){const ve=Object.entries(x.paramRanges);for(const[ce,me]of ve){const He=ce.replace(/[-_]/g," ").replace(/\b\w/g,qt=>qt.toUpperCase()),Ct=(oe=x.defaultParams)==null?void 0:oe[ce],sn=(me.min+me.max)/2;X.push({id:ce,label:He,min:me.min,max:me.max,step:me.step??.01,default:typeof Ct=="number"?Ct:sn})}}return{id:x.id,name:x.name,category:x.category,params:X}})),Y=e.ref("0.00"),Q=e.ref("0.00"),ye=e.ref("");e.watch(Hn,y=>{if(y.length===0){ye.value="";return}y.some(X=>X.id===ye.value)||(ye.value=y[0].id)},{immediate:!0});const Ee=e.ref(!1),Ne=e.ref(0),Ue=e.ref(!1),Le=e.ref(null),mt=e.ref(null);let kn=null,Nt=!1,Pt=null;const _i=e.computed(()=>{const y=new Map;return nt.value.forEach(x=>y.set(x.filterId,x)),y}),cu=e.computed(()=>{var y,x;return ne.value?ne.value:((y=a.media)==null?void 0:y.thumbnail_url)||((x=a.media)==null?void 0:x.url)}),Gt=e.ref("");e.watch(()=>{var y,x;return{file:(y=a.media)==null?void 0:y.file,url:(x=a.media)==null?void 0:x.url}},(y,x,X)=>{var ve,ce;const oe=Gt.value;X(()=>{oe&&oe.startsWith("blob:")&&URL.revokeObjectURL(oe)}),(ve=a.media)!=null&&ve.file?Gt.value=URL.createObjectURL(a.media.file):(ce=a.media)!=null&&ce.url?Gt.value=a.media.url:Gt.value=""},{immediate:!0}),e.onUnmounted(()=>{Gt.value&&Gt.value.startsWith("blob:")&&URL.revokeObjectURL(Gt.value)});const Ei=e.computed(()=>Gt.value),Vs=e.computed(()=>{if(!a.media)return null;const{file:y,...x}=a.media;return{...x,url:Gt.value}}),Ns=e.computed(()=>{var x;const y=(x=a.media)==null?void 0:x.url;return!!(y&&/^https?:/i.test(y))}),Ts=e.computed(()=>nt.value),Ms=e.computed(()=>N.value),xi=e.computed(()=>!!he.value&&N.value>0),Ci=e.computed(()=>!!he.value&&L.value.length>1),Bs=e.computed(()=>!!he.value),un=e.ref(!0),du=[.5,1,1.5,2],eo=e.computed(()=>{const y=new Set([0,Lt.value]);for(const x of L.value)y.add(x.timelineStart),y.add(x.timelineEnd);return Array.from(y).filter(x=>Number.isFinite(x)).sort((x,X)=>x-X)}),uu=e.computed(()=>eo.value.some(y=>y<N.value-.001)),mu=e.computed(()=>eo.value.some(y=>y>N.value+.001)),to=e.ref(!1),no=e.ref(null);function mn(y){if(!Number.isFinite(y)||y<0)return"0:00";const x=Math.floor(y/60),X=Math.floor(y%60);return`${x}:${X.toString().padStart(2,"0")}`}const pu=e.computed(()=>{var X;const y=he.value??L.value[0];if(!y)return"No clip selected";const x=(X=y.label)==null?void 0:X.trim();return x&&x.length>0?x:`Clip ${y.id.slice(-4)}`}),fu=e.computed(()=>{const y=he.value??L.value[0];if(!y)return"Tap a clip to start editing";const x=Math.max(0,y.timelineEnd-y.timelineStart);return`${mn(y.timelineStart)} - ${mn(y.timelineEnd)} • ${x.toFixed(1)}s`});function Fs(y){return!Number.isFinite(y)||y<0?"0.0s":y<60?`${y.toFixed(1)}s`:mn(y)}const hu=e.computed(()=>mn(N.value)),vu=e.computed(()=>{const y=he.value??L.value[0];return y?mn(y.sourceIn):"0:00"}),gu=e.computed(()=>{const y=he.value??L.value[0];return y?mn(y.sourceOut):"0:00"}),yu=e.computed(()=>{const y=he.value??L.value[0];return y?Fs(y.timelineEnd-y.timelineStart):"0.0s"}),Si=e.computed(()=>no.value===null?he.value??L.value[0]??null:L.value.find(y=>y.id===no.value)??null),bu=e.computed(()=>{var X;const y=Si.value;if(!y)return"Clip actions";const x=(X=y.label)==null?void 0:X.trim();return x&&x.length>0?x:`Clip ${y.id.slice(-4)}`}),wu=e.computed(()=>{const y=Si.value;return y?`${mn(y.timelineStart)} - ${mn(y.timelineEnd)} • ${Fs(y.timelineEnd-y.timelineStart)}`:"Choose an action"}),Vi=e.ref(0),Lt=e.computed(()=>{try{const y=te.value??te;return y&&typeof y=="number"&&y>0?y:Vi.value}catch{return Vi.value}}),Xn=e.ref(),Ni=e.ref(),Ti=e.ref(),Mi=e.ref(),ao=e.ref(0),_n=e.ref(!1);let Tt=null,Jt=null;e.watch(Lt,y=>{var X;if(_n.value||!y||y<=0)return;const x=ao.value||((X=Xn.value)==null?void 0:X.clientWidth)||0;x>0&&(_n.value=!0,je(x))}),e.watch(ao,y=>{if(_n.value||!y||y<=0)return;Lt.value>0&&(_n.value=!0,je(y))}),e.watch(l,y=>{y||En()}),e.watch(()=>{var y;return(y=Si.value)==null?void 0:y.id},y=>{to.value&&!y&&En()});function Gn(y){return Number.isFinite(y)?y.toFixed(2):"0.00"}function Is(y){const x=Number(y);return Number.isFinite(x)?x:null}function ku(y){y&&(Y.value=Gn(y.sourceIn),Q.value=Gn(y.sourceOut))}e.watch(()=>{var y,x,X;return[(y=he.value)==null?void 0:y.id,(x=he.value)==null?void 0:x.sourceIn,(X=he.value)==null?void 0:X.sourceOut]},()=>{ku(he.value)},{immediate:!0});function $s(y){const x=he.value;if(!x)return;const X=1/30,oe=x.sourceMinIn??0,ve=x.sourceMaxOut??Lt.value,ce=x.sourceIn+(N.value-x.timelineStart);if(y==="start"){const He=Math.max(oe,Math.min(ce,x.sourceOut-X));Y.value=Gn(He);return}const me=Math.max(x.sourceIn+X,Math.min(ce,ve));Q.value=Gn(me)}function _u(){const y=he.value;if(!y)return;const x=Is(Y.value),X=Is(Q.value);if(x===null||X===null)return;const oe=1/30,ve=y.sourceMinIn??0,ce=y.sourceMaxOut??Lt.value,me=Math.max(ve,Math.min(x,ce-oe)),He=Math.max(me+oe,Math.min(X,ce));xe(y.id,"start",me),xe(y.id,"end",He),Y.value=Gn(me),Q.value=Gn(He),he.value&&G(he.value.timelineStart)}function Eu(){ye.value.trim()!==""&&wn(ye.value)}function xu(){var y;Zn(),et(nt.value),(y=he.value)!=null&&y.id&&(f.value?f.value.setClipFilters(he.value.id,nt.value):C.set(he.value.id,[...nt.value])),Yt()}function Rs(y,x,X){var ve,ce;const oe=nt.value.find(me=>me.filterId===y);oe?(oe.params={...oe.params,[x]:X},et(nt.value),f.value&&((ve=he.value)!=null&&ve.id)?f.value.setClipFilters(he.value.id,nt.value):(ce=he.value)!=null&&ce.id&&C.set(he.value.id,[...nt.value]),Yt(),wi()):jn.value&&jn.value.filterId===y&&(jn.value.params={...jn.value.params||{},[x]:X})}function Ds(y){G(y)}function As(y){!y||!Number.isFinite(y.timestamp)||G(y.timestamp)}function Ls(y){z(y)}function oo(y){!Number.isFinite(y)||y<=0||(Vi.value=y,Re(y))}function En(){to.value=!1,no.value=null}function Cu(y){l.value&&(no.value=y,to.value=!0)}function Bi(y){var oe,ve,ce,me;const x=((oe=he.value)==null?void 0:oe.id)??((ve=L.value[0])==null?void 0:ve.id)??null;de(y),(((ce=he.value)==null?void 0:ce.id)??((me=L.value[0])==null?void 0:me.id)??null)!==x&&we.selection()}function Us(y){Bi(y),Cu(y)}function Os(y){y&&we.selection()}function Ps(){un.value=!un.value,we.selection()}function zs(){const y=eo.value.filter(X=>X<N.value-.001),x=y.length>0?y[y.length-1]:0;G(x)}function js(){const y=eo.value.find(x=>x>N.value+.001);G(y??Lt.value)}function Fi(){Pe()}function Ii(){Je()}function io(){const y=L.value.length;Ve(),L.value.length>y&&(we.success(),En())}function Ws(y){const x=L.value.length;le(y),L.value.length>x&&we.success()}function $i(){const y=L.value.length;dt(),L.value.length>y&&(we.selection(),En())}function Ri(){const y=L.value.length;Be(),L.value.length<y&&(we.error(),En())}function Su(y){const x=fe.value;Ae(y),fe.value!==x&&we.selection()}function Vu(y){return y instanceof HTMLElement?y.closest('input, textarea, select, button, [contenteditable="true"]')!==null:!1}function Zs(y){if(l.value||Vu(y.target))return;const x=y.key.toLowerCase(),X=y.metaKey||y.ctrlKey;if(y.code==="Space"){y.preventDefault(),T();return}if(!X&&x==="s"){y.preventDefault(),io();return}if(x==="arrowleft"){y.preventDefault(),pe();return}if(x==="arrowright"){y.preventDefault(),ee();return}if(x==="home"){y.preventDefault(),be();return}if(x==="end"){y.preventDefault(),$e();return}if(!X&&x==="["){y.preventDefault(),zs();return}if(!X&&x==="]"){y.preventDefault(),js();return}if(X&&x==="z"&&y.shiftKey){y.preventDefault(),Ii();return}X&&x==="z"&&(y.preventDefault(),Fi())}function Nu(){var x;const y=ao.value||((x=Xn.value)==null?void 0:x.clientWidth)||800;je(y)}function Di(y){_n.value=!0,Ke(y)}function Tu(){_n.value=!0,Se()}function Mu(){_n.value=!0,Te()}function Bu(y){const x=y.target,X=Number(x.value);Di(X)}function Hs(y){const x=Math.min(600,Math.max(10,se.value+y));Di(x)}function Ai(){Jt==null||Jt(),Jt=null;const y=Ti.value,x=Mi.value;if(!l.value||!y||!x)return;const X=()=>{Hs(-20)},oe=()=>{Hs(20)};y.addEventListener("click",X),x.addEventListener("click",oe),Jt=()=>{y.removeEventListener("click",X),x.removeEventListener("click",oe)}}e.watch([l,Ti,Mi],()=>{Ai()},{flush:"post"});function Xs(y){var x;f.value=y,(x=f.value)!=null&&x.composition&&(B.value=new ld(f.value.composition),E.value=new La(f.value.composition),S.value=new cd(f.value.composition));try{C.size&&(C.forEach((X,oe)=>{f.value.setClipFilters(oe,X)}),C.clear(),f.value.composition.computeFrame())}catch{}}function Fu(y){y!=null&&y.id&&pa(y.id)}function Iu(y){Qa(y),Yt()}async function $u(y){if(!B.value)return;const x=await B.value.addTextOverlay(y);A.value.push({id:x,...y})}async function Ru(y,x){if(!B.value)return;await B.value.updateTextOverlay(y,x);const X=A.value.findIndex(oe=>oe.id===y);X!==-1&&(A.value[X]={...A.value[X],...x})}async function Du(y){B.value&&(await B.value.removeTextOverlay(y),A.value=A.value.filter(x=>x.id!==y))}async function Au(y){if(!E.value||O.value.length<2)return;const[x,X]=O.value,oe=await E.value.applyTransition(x,X,y);R.value.push({id:oe,...y,name:y.type})}function Lu(y){if(!E.value)return;const x=R.value[y];x&&(E.value.removeTransition(x.id),R.value.splice(y,1))}function Uu(y){}async function Ou(y){if(!S.value)return;const x=await S.value.addAudioTrack(y);W.value.push({id:x,...y})}async function Pu(y,x){if(!S.value)return;const X=W.value.findIndex(oe=>oe.id===y);X!==-1&&(W.value[X]={...W.value[X],...x})}async function zu(y){S.value&&(await S.value.removeAudioTrack(y),W.value=W.value.filter(x=>x.id!==y))}async function ju(y,x){if(!S.value)return;await S.value.updateVolume(y,x);const X=W.value.find(oe=>oe.id===y);X&&(X.volume=x)}async function Wu(y,x){if(!S.value)return;await S.value.muteTrack(y,x);const X=W.value.find(oe=>oe.id===y);X&&(X.muted=x)}function Zu(y){S.value&&(S.value.setMasterVolume(y),I.value=y)}function Hu(y){i("thumbnail-selected",y)}function pn(){kn!==null&&(clearInterval(kn),kn=null)}function Xu(y,x){return x?{...y,output:{...y.output,format:x.format,quality:x.quality}}:y}function va(y){var x;return y.metadata||(y.metadata={created_at:new Date().toISOString(),editor_version:"2.0.0"}),y.metadata.fit_mode=D.value,(x=a.media)!=null&&x.url&&/^https?:/i.test(a.media.url)?y.metadata.source_url=a.media.url:delete y.metadata.source_url,y}function ot(y,x,X){return Math.min(X,Math.max(x,y))}function Li(y,x){if(typeof y=="number"&&Number.isFinite(y))return y;if(typeof y=="string"){const X=Number(y);if(Number.isFinite(X))return X}return x}function kt(y,x,X){for(const oe of x)if(oe in y)return Li(y[oe],X);return X}function Gu(y){const x=typeof y.params=="object"&&y.params!==null?y.params:{};switch(y.filterId.trim().toLowerCase()){case"brightness":return[{type:"brightness",value:ot(kt(x,["value","brightness"],0),-1,1)}];case"contrast":return[{type:"contrast",value:ot(kt(x,["value","contrast"],1),.1,3)}];case"saturation":return[{type:"saturation",value:ot(kt(x,["value","saturation"],1),0,3)}];case"blur":case"gaussian-blur":case"kawase-blur":case"radial-blur":return[{type:"blur",value:ot(kt(x,["value","blur","radius"],0),0,25)}];case"sharpen":return[{type:"sharpen",value:ot(kt(x,["value","amount"],1),0,5)}];case"sepia":return[{type:"sepia",value:1}];case"grayscale":return[{type:"grayscale",value:1}];case"adjustment":{const oe=ot(kt(x,["brightness"],1)-1,-1,1),ve=ot(kt(x,["contrast"],1),.1,3),ce=ot(kt(x,["saturation"],1),0,3);return[{type:"brightness",value:oe},{type:"contrast",value:ve},{type:"saturation",value:ce}]}default:return[]}}function Ju(y){const x=y.timeline[0],X=Array.isArray(x==null?void 0:x.filters)?x.filters:[],oe=[];for(const ce of X)if(oe.push(...Gu(ce)),oe.length>=12)break;const ve={...y,filters:oe.slice(0,12)};if(y.timeline.length===1&&x){const ce=Math.max(0,Li(x.sourceIn,0)),me=Li(x.sourceOut,ce);me>ce&&(ve.trim={start:ce,end:me})}return ve}function Yu(y){return{"360p":[640,360],"480p":[854,480],"720p":[1280,720],"1080p":[1920,1080],"1440p":[2560,1440],"2160p":[3840,2160]}[y??""]??[1920,1080]}function qu(y){if(!y||typeof y!="object")return null;const x=y.duration;if(typeof x=="number"&&Number.isFinite(x)&&x>0)return x;if(x&&typeof x=="object"&&"value"in x){const X=x.value;if(typeof X=="number"&&Number.isFinite(X)&&X>0)return X}return null}async function Gs(y,x,X){var sn,qt,Jn,hn;const oe=y.timeline[0],ve=oe?Math.max(0,oe.sourceIn):0,ce=oe?oe.sourceOut:void 0,[me,He]=Yu((x==null?void 0:x.quality)??((sn=y.output)==null?void 0:sn.quality)),Ct=((qt=y.output)==null?void 0:qt.fps)||30;z(!1),w.value=!0,await e.nextTick();try{const pt=[200,500,1e3];let gt=!1;for(const Hi of pt){await new Promise(gm=>setTimeout(gm,Hi));const lo=M.value;if(!(!lo||typeof lo.captureFrameAt!="function")&&typeof lo.ensureReadyForCapture=="function"&&(gt=await lo.ensureReadyForCapture(),gt))break}const Kt=M.value;if(!Kt||typeof Kt.captureFrameAt!="function")throw new Error("PIXI preview not available for export. Ensure the preview is mounted.");if(!gt)throw new Error("PIXI preview not ready for frame capture after retries. The video may still be loading.");const{exportWithPixiFrames:ga,isWebCodecsSupported:Wi}=await Promise.resolve().then(()=>require("./PixiFrameExporter-CqKXaoCX.cjs"));if(!Wi())throw new Error("WebCodecs is not supported in this browser. Export requires Chrome 94+ or equivalent.");Pt=new AbortController;const so={width:me,height:He,fps:Ct,trimStart:ve,signal:Pt.signal};ce!==void 0&&(so.trimEnd=ce),X&&(so.onProgress=X);const al=Gt.value;al!==""&&(so.sourceUrl=al);const mm=typeof Kt.duration=="number"&&Kt.duration>0?Kt.duration:((Jn=y.source)==null?void 0:Jn.duration)??ce??0,pm=await ga({captureFrameAt:Hi=>Kt.captureFrameAt(Hi),duration:{value:mm}},so),Zi=new File([pm],`edited-video-${Date.now()}.mp4`,{type:"video/mp4"}),fm=qu(Kt),hm=((hn=y.source)==null?void 0:hn.duration)??0,vm=Math.max(0,(ce??fm??hm)-ve);return{file:Zi,recipe:y,meta:{duration:vm,width:me,height:He,format:"mp4",sizeBytes:Zi.size,size_bytes:Zi.size}}}finally{w.value=!1,Pt=null}}async function Ku(y,x){var hn;pn(),Nt=!1,Pt=null,mt.value=null,Le.value=null,Ue.value=!1,Ne.value=0;const X=va(y??ue()),oe=tl(X),ve=Array.isArray(oe.filters)&&oe.filters.length>0,ce=Pi(oe);if(!(ae.value||ve||ce))return rt(),i("video-exported",null),null;const He=oe.timeline[0],Ct=He?Math.max(0,He.sourceIn):0,qt=((He==null?void 0:He.sourceOut)??((hn=oe.source)==null?void 0:hn.duration)??Lt.value)-Ct,Jn=a.serverRenderEndpoint!=null&&a.clientExportThreshold>0&&qt>a.clientExportThreshold;if(Jn){Ee.value=!0;try{return await Qu(oe),null}catch(pt){const gt=pt instanceof Error?pt.message:"Server render failed";throw Le.value=gt,i("server-render-failed",gt),pt}finally{Ee.value=!1}}if(a.maxDuration>0&&qt>a.maxDuration&&!Jn){const pt=`This video is too long for in-browser export (${Math.round(qt)}s). Server rendering is not available. Try a shorter clip.`;return Le.value=pt,i("video-exported",null),null}Ee.value=!0;try{const pt=await Gs(oe,x,gt=>{Nt||(Ne.value=gt)});return Nt?(Le.value="Export canceled.",Ne.value=0,i("video-exported",null),null):(rt(),i("recipe-generated",oe),i("video-exported",pt),Ne.value=100,Ue.value=!0,pt)}catch(pt){if(Nt)return Le.value="Export canceled.",Ne.value=0,i("video-exported",null),null;const gt=pt instanceof Error?pt.message:"Local WebGL export failed.";throw Le.value=gt,new Error(`Video export failed: ${gt}`)}finally{Ee.value=!1}}function ro(){return new vi(a.serverRenderEndpoint??"/api/v1")}async function Qu(y){const x=ro();Le.value="Starting server render...",Ne.value=0;const X=await x.createRenderJob({source_media_uuid:s.value,recipe:y});mt.value=X.id,i("server-render-started",X.id),i("export-started",X.id),Le.value="Rendering on server...";const oe=await x.pollRenderJob(X.id,(ce,me)=>{Ne.value=ce,me==="processing"&&(Le.value=`Server rendering: ${ce}%`)},3e3,(a.maxDuration>0?a.maxDuration*3:1800)*1e3);Ne.value=100,Ue.value=!0,Le.value="Server render complete!",rt(),i("recipe-generated",y);const ve={id:oe.id};typeof oe.output_media_id=="string"&&oe.output_media_id!==""&&(ve.output_media_id=oe.output_media_id),i("server-render-completed",ve)}async function Js(){if(!Ee.value)return;Nt=!0,w.value=!1,Pt&&(Pt.abort(),Pt=null),pn();const y=mt.value;if(y)try{await ro().cancelJob(y)}catch(x){const X=x instanceof Error?x.message:"Failed to cancel export";Le.value=X,Ee.value=!1,mt.value=null;return}Ee.value=!1,Ne.value=0,Ue.value=!1,mt.value=null,Le.value="Export canceled."}async function Ys(y){pn(),Nt=!1,Pt=null,mt.value=null,Le.value=null,Ue.value=!1,Ee.value=!0,Ne.value=0;try{const x=va(Xu(ue(),y));i("recipe-generated",x);const X=s.value.startsWith("temp-"),oe=x.timeline[0],ve=Array.isArray(oe==null?void 0:oe.filters)?oe.filters:[],ce=!0,me=typeof window<"u"&&window.MEDIABLES_ALLOW_SERVER_EXPORT_FALLBACK===1||typeof localStorage<"u"&&localStorage.getItem("mediables.export.allowServerFallback")==="1";if(ce)try{const gt=await Gs(x,y,Wi=>{Nt||(Ne.value=Wi)});if(Nt){Le.value="Export canceled.",Ee.value=!1,Ne.value=0;return}i("video-exported",gt);const Kt=URL.createObjectURL(gt.file),ga=document.createElement("a");ga.href=Kt,ga.download=`edited-video-${Date.now()}.mp4`,ga.click(),setTimeout(()=>URL.revokeObjectURL(Kt),100),Ee.value=!1,Ne.value=100,Ue.value=!0;return}catch(gt){if(Nt){Le.value="Export canceled.",Ee.value=!1,Ne.value=0;return}if(X||!me)throw gt;Ne.value=0,Le.value="Local filter export failed, falling back to server render."}const He={"360p":"low","480p":"low","720p":"medium","1080p":"high","1440p":"ultra","2160p":"ultra"},Ct=(y==null?void 0:y.quality)??x.output.quality,sn=He[Ct]??"high",qt={...Ju(x),export:{format:(y==null?void 0:y.format)??x.output.format,quality:sn,resolution:Ct,framerate:x.output.fps}},hn=await ro().createJob({source_media_id:s.value,recipe:qt}),pt=typeof hn.id=="string"?hn.id:null;if(!pt)throw new Error("Export failed: missing job id");mt.value=pt,i("export-started",pt),dm(pt)}catch(x){if(w.value=!1,Pt=null,Nt){Le.value="Export canceled.",Ee.value=!1,Ne.value=0,mt.value=null;return}try{const X=va(ue()),oe=new Blob([JSON.stringify(X,null,2)],{type:"application/json"}),ve=URL.createObjectURL(oe),ce=document.createElement("a");ce.href=ve,ce.download=`video-recipe-${Date.now()}.json`,ce.click(),setTimeout(()=>URL.revokeObjectURL(ve),100)}finally{Ee.value=!1,Ne.value=0,mt.value=null,Le.value=x instanceof Error?x.message:"Export failed"}}}const Ui=async y=>{await new Promise(x=>{window.setTimeout(x,y)})},Oi=y=>{if(!y||y.width<=0||y.height<=0)return null;try{return y.toDataURL("image/jpeg",.85)}catch{return null}},em=y=>{if(!y||typeof y!="object")return null;const X=y.pixiCanvas;if(X&&typeof X=="object"&&"value"in X){const oe=X.value;return oe instanceof HTMLCanvasElement?oe:null}return X instanceof HTMLCanvasElement?X:null},tm=y=>{if(!y||typeof y!="object")return null;const x=y.duration;if(typeof x=="number"&&Number.isFinite(x))return x;if(x&&typeof x=="object"&&"value"in x){const X=x.value;if(typeof X=="number"&&Number.isFinite(X))return X}return null},nm=y=>{if(!y||typeof y!="object")return null;const X=y.videoElement;if(X&&typeof X=="object"&&"value"in X){const oe=X.value;return oe instanceof HTMLVideoElement?oe:null}return X instanceof HTMLVideoElement?X:null},qs=y=>typeof y.params=="object"&&y.params!==null?y.params:{},am=y=>{const x=[];for(const X of y){const oe=qs(X),ve=X.filterId.trim().toLowerCase();if(ve==="brightness"){const me=(ot(kt(oe,["value","brightness"],0),-1,1)+1)*100;x.push(`brightness(${me.toFixed(2)}%)`);continue}if(ve==="contrast"){const ce=ot(kt(oe,["value","contrast"],1),.1,4);x.push(`contrast(${(ce*100).toFixed(2)}%)`);continue}if(ve==="saturation"||ve==="saturate"){const ce=ot(kt(oe,["value","saturation"],1),0,4);x.push(`saturate(${(ce*100).toFixed(2)}%)`);continue}if(ve==="grayscale"){x.push("grayscale(100%)");continue}if(ve==="sepia"){x.push("sepia(100%)");continue}if(ve==="blur"||ve==="gaussian-blur"||ve==="kawase-blur"){const ce=ot(kt(oe,["value","blur","radius"],0),0,30);ce>.01&&x.push(`blur(${ce.toFixed(2)}px)`);continue}if(ve==="adjustment"){const ce=kt(oe,["brightness"],1),me=kt(oe,["contrast"],1),He=kt(oe,["saturation"],1);Math.abs(ce-1)>.01&&x.push(`brightness(${(ot(ce,0,5)*100).toFixed(2)}%)`),Math.abs(me-1)>.01&&x.push(`contrast(${(ot(me,.1,5)*100).toFixed(2)}%)`),Math.abs(He-1)>.01&&x.push(`saturate(${(ot(He,0,5)*100).toFixed(2)}%)`);continue}if(ve==="cinematic"){x.push("contrast(120%) brightness(95%) saturate(85%)");continue}if(ve==="dramatic"){x.push("contrast(140%) brightness(90%) saturate(110%) sepia(10%)");continue}if(ve==="dreamy"){x.push("blur(0.5px) brightness(105%) saturate(90%) contrast(95%)");continue}}return x.join(" ")},om=y=>{const x=y.find(ve=>ve.filterId.trim().toLowerCase()==="noise");if(!x)return 0;const X=qs(x),oe=kt(X,["noise","value","amount","intensity"],.2);return oe<=1?ot(oe,0,1):ot(oe/100,0,1)},im=(y,x,X,oe)=>{if(oe<=0)return;const ve=y.getImageData(0,0,x,X),ce=255*oe;for(let me=0;me<ve.data.length;me+=4){const He=(Math.random()*2-1)*ce;ve.data[me]=ot(ve.data[me]+He,0,255),ve.data[me+1]=ot(ve.data[me+1]+He,0,255),ve.data[me+2]=ot(ve.data[me+2]+He,0,255)}y.putImageData(ve,0,0)},Ks=async y=>{y.readyState>=2&&y.videoWidth>0&&y.videoHeight>0||await new Promise(x=>{let X=!1,oe=0;const ve=()=>{X||(X=!0,y.removeEventListener("loadedmetadata",ce),y.removeEventListener("loadeddata",ce),y.removeEventListener("canplay",ce),window.clearTimeout(oe),x())},ce=()=>{ve()};y.addEventListener("loadedmetadata",ce),y.addEventListener("loadeddata",ce),y.addEventListener("canplay",ce),oe=window.setTimeout(()=>ve(),800),y.play().catch(()=>{})})},rm=async(y,x)=>{await new Promise(X=>{let oe=!1,ve=0;const ce=()=>{oe||(oe=!0,y.removeEventListener("seeked",me),window.clearTimeout(ve),X())},me=()=>{ce()};if(Math.abs(y.currentTime-x)<.016){requestAnimationFrame(()=>ce());return}y.addEventListener("seeked",me),ve=window.setTimeout(()=>ce(),700),y.currentTime=x})},Qs=async(y,x)=>{await Ks(y);const X=Math.floor(y.videoWidth),oe=Math.floor(y.videoHeight);if(X<=0||oe<=0)return null;const ve=Number.isFinite(y.duration)&&y.duration>0?y.duration:0,ce=ve>0?ot(x,0,ve):0;await rm(y,ce);const me=document.createElement("canvas");me.width=X,me.height=oe;const He=me.getContext("2d");if(!He)return null;const Ct=am(nt.value);Ct!==""&&(He.filter=Ct);try{He.drawImage(y,0,0,X,oe)}catch{return null}const sn=om(nt.value);return im(He,X,oe,sn),Oi(me)},sm=async(y,x)=>{const X=document.createElement("video");X.src=y,X.muted=!0,X.playsInline=!0,X.preload="auto",y.startsWith("blob:")||(X.crossOrigin="anonymous");try{return await Ks(X),await Qs(X,x)}catch{return null}finally{X.pause(),X.removeAttribute("src"),X.load()}},lm=async y=>{const x=M.value,X=Oi(em(x));if(X)return X;if(x!=null&&x.captureFrameAt)for(let ce=0;ce<4;ce+=1){const me=tm(x);if(me!==null&&me<=0&&ce<2){await Ui(80);continue}const He=await Promise.race([x.captureFrameAt(y),Ui(450).then(()=>null)]),Ct=Oi(He);if(Ct)return Ct;await Ui(80)}const oe=nm(x);if(oe){const ce=await Qs(oe,y);if(ce)return ce}const ve=Ei.value.trim();if(ve!==""){const ce=await sm(ve,y);if(ce)return ce}return null},el=y=>y.map(x=>({...x,params:x.params&&typeof x.params=="object"?{...x.params}:x.params}));function tl(y){const x=el(nt.value);if(!Pi(y)&&x.length>0&&Array.isArray(y.timeline)&&y.timeline.length>0){const oe=y.timeline[0];oe&&(y.timeline=[{...oe,filters:x},...y.timeline.slice(1)])}return y}const Pi=y=>Array.isArray(y.timeline)?y.timeline.some(x=>Array.isArray(x.filters)&&x.filters.length>0):!1,cm=y=>{if(!y||typeof y!="object")return null;const x=y.posterFrame;if(typeof x!="string")return null;const X=x.trim();return X!==""?X:null};async function zi(){const y=va(tl(Vt())),x=el(nt.value),X=Pi(y)||x.length>0,oe=cm(a.initialRecipe);if(X){const ve=N.value>0?N.value:.1;try{const ce=await lm(ve);ce?y.posterFrame=ce:oe&&(y.posterFrame=oe)}catch{oe&&(y.posterFrame=oe)}}else delete y.posterFrame;return rt(),i("draft-saved",y),y}function nl(){vt()&&(Zn(),Yt())}async function dm(y){pn();const x=ro();kn=window.setInterval(async()=>{try{if(Nt){pn();return}const X=await x.getJob(y),oe=Number(X.progress??0);if(Ne.value=Number.isFinite(oe)?oe:0,X.status==="completed"||X.status==="failed"||X.status==="cancelled")if(pn(),Ee.value=!1,mt.value=null,X.status==="completed")Ne.value=100,Ue.value=!0,Le.value=null;else{const ve=X.status==="cancelled"||typeof X.error_message=="string"&&/cancel/i.test(X.error_message);Le.value=ve?"Export canceled.":typeof X.error_message=="string"&&X.error_message.trim()!==""?X.error_message:"Export failed"}}catch(X){pn(),Ee.value=!1,mt.value=null,Le.value=X instanceof Error?X.message:"Failed to check export progress"}},2e3)}function ji(){const y=va(ue());try{const x=y.timeline??[]}catch{}_.value=y}let xn=null;function Yt(){xn&&clearTimeout(xn),xn=setTimeout(()=>{ji(),xn=null},200)}e.watch(()=>L.value,Yt,{deep:!0}),e.watch(()=>he.value,y=>{if(P.value||!y)return;const x=(y==null?void 0:y.filters)??[];ha(x)},{immediate:!0}),e.watch(()=>nt.value,y=>{et(y),Yt()},{deep:!0}),e.watch(()=>A.value,y=>{at(y),Yt()},{deep:!0}),e.watch(()=>W.value,y=>{const x=y.map(X=>({...X,source:typeof X.source=="string"?X.source:void 0}));wt(x),Yt()},{deep:!0}),e.watch(()=>N.value,Yt),n({saveDraft:zi,exportForUpload:Ku}),ji(),e.onUnmounted(()=>{pn(),Nt=!0,xn&&(clearTimeout(xn),xn=null),f.value&&(f.value.destroy(),f.value=null),B.value=null,E.value=null,S.value=null});function um(){Tt||!Ni.value||(Tt=new Fb({filters:Hn.value,callbacks:{onApplyFilter:y=>{wn(y.id)},onRemoveFilter:y=>{ki(y)},onUpdateParam:(y,x,X)=>{Rs(y,x,X)},onPreviewFilter:y=>{pa(y.id)}}}),Tt.mount(Ni.value),Tt.setActiveFilters(_i.value))}e.watch(_i,y=>{Tt==null||Tt.setActiveFilters(y)},{deep:!0}),e.watch(Hn,y=>{Tt==null||Tt.setFilters(y)});let fn=null;return e.onMounted(()=>{window.addEventListener("resize",F),window.addEventListener("keydown",Zs);const y=()=>{!Xn.value||fn||(fn=new ResizeObserver(x=>{x[0]&&(ao.value=Math.round(x[0].contentRect.width))}),fn.observe(Xn.value))};y(),fn||e.nextTick(y),l.value&&(Ai(),Jt||e.nextTick(Ai)),a.media&&ji(),l.value&&e.nextTick(()=>{um()}),e.nextTick(()=>{const x=document.querySelector(".video-editor");x&&x.getBoundingClientRect();const X=document.querySelector(".mobile-layout");X&&X.getBoundingClientRect()})}),e.onUnmounted(()=>{window.removeEventListener("resize",F),window.removeEventListener("keydown",Zs),fn==null||fn.disconnect(),fn=null,Jt==null||Jt(),Jt=null,Tt==null||Tt.destroy(),Tt=null}),(y,x)=>{var X,oe,ve,ce;return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-editor",{mobile:l.value}])},[l.value?(e.openBlock(),e.createElementBlock("div",_2,[e.createElementVNode("div",E2,[e.createElementVNode("div",x2,[e.createElementVNode("button",{class:e.normalizeClass(["mobile-toolbar-btn",{active:e.unref(ie)}]),onClick:x[0]||(x[0]=(...me)=>e.unref(T)&&e.unref(T)(...me)),"aria-label":e.unref(ie)?"Pause":"Play","data-testid":"btn-mobile-play"},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(ie)?e.unref(Gr):e.unref(Jr)},null,8,["icon"])],10,C2),e.createElementVNode("button",{class:"mobile-toolbar-btn",onClick:nl,"aria-label":"Reset all changes","data-testid":"btn-mobile-reset"},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Un)},null,8,["icon"])])]),e.createElementVNode("div",S2,[e.createElementVNode("button",{class:"mobile-toolbar-btn mobile-toolbar-save",onClick:zi,"aria-label":"Save","data-testid":"btn-mobile-save",disabled:!e.unref(ae)},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Xo)},null,8,["icon"]),x[13]||(x[13]=e.createElementVNode("span",null,"Save",-1))],8,V2),e.createElementVNode("button",{class:"mobile-toolbar-btn",onClick:x[1]||(x[1]=me=>Ys()),"aria-label":"Export","data-testid":"btn-mobile-export",disabled:Ee.value||!e.unref(ae)},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(aa)},null,8,["icon"])],8,N2),e.createElementVNode("button",{class:"mobile-toolbar-btn",onClick:x[2]||(x[2]=me=>i("close")),"aria-label":"Close","data-testid":"btn-mobile-close"},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Rn)},null,8,["icon"])])])]),e.createElementVNode("div",T2,[e.withDirectives(e.createVNode(fr,{ref_key:"pixiPreviewMobileRef",ref:v,"aria-hidden":!h.value,class:"preview-host-child",source:Ei.value,"fallback-duration":Lt.value,filters:Ts.value,playhead:Ms.value,"is-playing":e.unref(ie),"fit-mode":D.value,active:h.value,onPlayPause:e.unref(T),onFrameUpdate:As,onDurationChange:oo},null,8,["aria-hidden","source","fallback-duration","filters","playhead","is-playing","fit-mode","active","onPlayPause"]),[[e.vShow,h.value]]),e.withDirectives(e.createVNode(Mr,{"aria-hidden":!p.value,class:"preview-host-child","media-uuid":s.value,recipe:_.value,media:Vs.value,"enable-engine":p.value&&Ns.value,"fit-mode":D.value,onTimeUpdate:Ds,onPlayStateChange:Ls,onDurationChange:oo,onEngineReady:Xs},null,8,["aria-hidden","media-uuid","recipe","media","enable-engine","fit-mode"]),[[e.vShow,p.value]]),Ee.value?(e.openBlock(),e.createElementBlock("div",M2,[e.createElementVNode("div",B2,[e.createElementVNode("span",null,"Exporting "+e.toDisplayString(Ne.value)+"%",1),e.createElementVNode("div",F2,[e.createElementVNode("div",{class:"mobile-export-bar-fill",style:e.normalizeStyle({width:Ne.value+"%"})},null,4)]),e.createElementVNode("button",{class:"mobile-export-cancel",onClick:Js},"Cancel")])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",{ref_key:"timelineContainerRef",ref:Xn,class:"timeline-section"},[e.createElementVNode("div",I2,[e.createElementVNode("button",{ref_key:"mobileZoomOutButtonRef",ref:Ti,type:"button",class:"mobile-zoom-btn","aria-label":"Zoom out timeline","data-testid":"btn-timeline-zoom-out"},[...x[14]||(x[14]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 16 16"},[e.createElementVNode("path",{d:"M4 8h8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})],-1)])],512),e.createElementVNode("button",{ref_key:"mobileZoomInButtonRef",ref:Mi,type:"button",class:"mobile-zoom-btn","aria-label":"Zoom in timeline","data-testid":"btn-timeline-zoom-in"},[...x[15]||(x[15]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 16 16"},[e.createElementVNode("path",{d:"M4 8h8M8 4v8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})],-1)])],512)]),e.createVNode(Br,{playhead:e.unref(N),clips:e.unref(L),"selected-clip-id":((X=e.unref(he))==null?void 0:X.id)??((oe=e.unref(L)[0])==null?void 0:oe.id)??null,duration:Lt.value,"zoom-level":e.unref(se),"snap-enabled":un.value,sensitivity:.25,"is-mobile":!0,"onUpdate:playhead":e.unref(G),onTrim:e.unref(xe),onSplit:Ws,onClipSelect:Bi,onClipMove:e.unref(bt),onClipLongPress:Us,onSnapStateChange:Os},null,8,["playhead","clips","selected-clip-id","duration","zoom-level","snap-enabled","onUpdate:playhead","onTrim","onClipMove"])],512),e.createElementVNode("div",$2,[e.createElementVNode("div",R2,[e.createElementVNode("span",D2,e.toDisplayString(pu.value),1),e.createElementVNode("span",A2,e.toDisplayString(fu.value),1)]),e.createElementVNode("div",L2,[e.createElementVNode("button",{type:"button",class:"mobile-cut-nav-btn","data-testid":"btn-mobile-prev-cut","aria-label":"Jump to previous cut",disabled:!uu.value,onClick:zs}," Prev Cut ",8,U2),e.createElementVNode("div",O2,[e.createElementVNode("span",P2,"Playhead "+e.toDisplayString(hu.value),1),e.createElementVNode("span",z2,"In "+e.toDisplayString(vu.value),1),e.createElementVNode("span",j2,"Out "+e.toDisplayString(gu.value),1),e.createElementVNode("span",W2,"Duration "+e.toDisplayString(yu.value),1)]),e.createElementVNode("button",{type:"button",class:"mobile-cut-nav-btn","data-testid":"btn-mobile-next-cut","aria-label":"Jump to next cut",disabled:!mu.value,onClick:js}," Next Cut ",8,Z2)]),e.createElementVNode("div",H2,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["mobile-snap-toggle",{active:un.value}]),"data-testid":"btn-mobile-snap-toggle",onClick:Ps},e.toDisplayString(un.value?"Snap On":"Snap Off"),3),e.createElementVNode("div",X2,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(du,me=>e.createElementVNode("button",{key:me,type:"button",class:e.normalizeClass(["mobile-speed-chip",{active:e.unref(fe)===me}]),"data-testid":`btn-mobile-speed-${String(me).replace(".","-")}`,onClick:He=>Su(me)},e.toDisplayString(me)+"x ",11,G2)),64))])]),e.createElementVNode("div",J2,[e.createElementVNode("button",{type:"button",class:"mobile-edit-btn","data-testid":"btn-mobile-undo","aria-label":"Undo",disabled:!e.unref(tt),onClick:Fi}," Undo ",8,Y2),e.createElementVNode("button",{type:"button",class:"mobile-edit-btn","data-testid":"btn-mobile-redo","aria-label":"Redo",disabled:!e.unref(xt),onClick:Ii}," Redo ",8,q2),e.createElementVNode("button",{type:"button",class:"mobile-edit-btn","data-testid":"btn-mobile-split","aria-label":"Split at playhead",disabled:!xi.value,onClick:io}," Split ",8,K2),e.createElementVNode("button",{type:"button",class:"mobile-edit-btn","data-testid":"btn-mobile-duplicate","aria-label":"Duplicate selected clip",disabled:!Bs.value,onClick:$i}," Duplicate ",8,Q2),e.createElementVNode("button",{type:"button",class:"mobile-edit-btn mobile-edit-btn--danger","data-testid":"btn-mobile-delete","aria-label":"Delete selected clip",disabled:!Ci.value,onClick:Ri}," Delete ",8,ek)])]),e.createElementVNode("div",{ref_key:"mobileControlsRef",ref:Ni,class:"controls-section mobile-controls"},null,512),to.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mobile-action-sheet-backdrop","data-testid":"video-mobile-action-sheet",onClick:En},[e.createElementVNode("div",{class:"mobile-action-sheet",onClick:x[3]||(x[3]=e.withModifiers(()=>{},["stop"]))},[x[16]||(x[16]=e.createElementVNode("div",{class:"mobile-action-sheet-handle"},null,-1)),e.createElementVNode("div",tk,[e.createElementVNode("span",nk,e.toDisplayString(bu.value),1),e.createElementVNode("span",ak,e.toDisplayString(wu.value),1)]),e.createElementVNode("div",ok,[e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn","data-testid":"btn-mobile-sheet-undo",disabled:!e.unref(tt),onClick:Fi},"Undo",8,ik),e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn","data-testid":"btn-mobile-sheet-redo",disabled:!e.unref(xt),onClick:Ii},"Redo",8,rk),e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn","data-testid":"btn-mobile-sheet-split",disabled:!xi.value,onClick:io},"Split",8,sk),e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn","data-testid":"btn-mobile-sheet-duplicate",disabled:!Bs.value,onClick:$i},"Duplicate",8,lk),e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn mobile-action-sheet-btn--danger","data-testid":"btn-mobile-sheet-delete",disabled:!Ci.value,onClick:Ri},"Delete",8,ck),e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn","data-testid":"btn-mobile-sheet-close",onClick:En},"Close")])])])):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",dk,[e.createElementVNode("div",uk,[e.createElementVNode("div",mk,[e.createElementVNode("div",pk,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":x[4]||(x[4]=me=>D.value=me),"aria-label":"Fit mode","data-testid":"select-video-fit-mode"},[...x[17]||(x[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,D.value]])])]),e.withDirectives(e.createVNode(fr,{ref_key:"pixiPreviewDesktopRef",ref:g,"aria-hidden":!h.value,class:"preview-host-child",source:Ei.value,"fallback-duration":Lt.value,filters:Ts.value,playhead:Ms.value,"is-playing":e.unref(ie),"fit-mode":D.value,active:h.value,onPlayPause:e.unref(T),onFrameUpdate:As,onDurationChange:oo},null,8,["aria-hidden","source","fallback-duration","filters","playhead","is-playing","fit-mode","active","onPlayPause"]),[[e.vShow,h.value]]),e.withDirectives(e.createVNode(Mr,{"aria-hidden":!p.value,class:"preview-host-child","media-uuid":s.value,recipe:_.value,media:Vs.value,"enable-engine":p.value&&Ns.value,"fit-mode":D.value,onTimeUpdate:Ds,onPlayStateChange:Ls,onDurationChange:oo,onEngineReady:Xs},null,8,["aria-hidden","media-uuid","recipe","media","enable-engine","fit-mode"]),[[e.vShow,p.value]]),y.showThumbnailPicker?(e.openBlock(),e.createBlock(cy,{key:0,"media-uuid":s.value,duration:Lt.value,onSelect:Hu},null,8,["media-uuid","duration"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",fk,[e.createElementVNode("div",hk,[e.createElementVNode("div",vk,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Z.value,me=>(e.openBlock(),e.createElementBlock("button",{key:me.id,class:e.normalizeClass(["tab-btn",{active:d.value===me.id}]),onClick:He=>d.value=me.id},e.toDisplayString(me.label),11,gk))),128))]),e.createElementVNode("div",yk,[e.withDirectives(e.createElementVNode("div",bk,[e.createVNode(Fr,{filters:Hn.value,"active-filters":_i.value,"thumbnail-url":cu.value,onApplyFilter:wn,onRemoveFilter:ki,onUpdateParam:Rs,onPreviewFilter:Fu},null,8,["filters","active-filters","thumbnail-url"])],512),[[e.vShow,d.value==="filters"]]),e.withDirectives(e.createElementVNode("div",wk,[e.createVNode(Rr,{overlays:A.value,onAddOverlay:$u,onUpdateOverlay:Ru,onRemoveOverlay:Du},null,8,["overlays"])],512),[[e.vShow,d.value==="text"]]),e.withDirectives(e.createElementVNode("div",kk,[e.createVNode(Dr,{"selected-clips":O.value,"applied-transitions":R.value,onApplyTransition:Au,onRemoveTransition:Lu,onPreviewTransition:Uu},null,8,["selected-clips","applied-transitions"])],512),[[e.vShow,d.value==="transitions"]]),e.withDirectives(e.createElementVNode("div",_k,[e.createVNode(Ar,{"audio-layers":W.value,"master-volume":I.value,onAddTrack:Ou,onUpdateTrack:Pu,onRemoveTrack:zu,onUpdateVolume:ju,onToggleMute:Wu,onUpdateMasterVolume:Zu},null,8,["audio-layers","master-volume"])],512),[[e.vShow,d.value==="audio"]]),e.withDirectives(e.createElementVNode("div",Ek,[e.unref(Xt)?(e.openBlock(),e.createBlock(Ir,{key:0,filter:e.unref(Xt),"current-frame":e.unref(ne),onUpdateParams:Iu},null,8,["filter","current-frame"])):(e.openBlock(),e.createElementBlock("div",xk,[...x[18]||(x[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",Ck,[e.createVNode($r,{"can-export":e.unref(ae),"is-exporting":Ee.value,"export-progress":Ne.value,onExport:Ys,onCancelExport:Js,onSaveDraft:zi,onReset:nl},null,8,["can-export","is-exporting","export-progress"]),Ue.value?(e.openBlock(),e.createElementBlock("div",Sk," Export complete ")):e.createCommentVNode("",!0),Le.value&&!Ue.value?(e.openBlock(),e.createElementBlock("div",Vk,e.toDisplayString(Le.value),1)):e.createCommentVNode("",!0)],512),[[e.vShow,d.value==="export"]])])])])]),e.createElementVNode("div",Nk,[e.createElementVNode("div",{ref_key:"timelineContainerRef",ref:Xn,class:"timeline-container"},[e.createElementVNode("div",Tk,[e.createElementVNode("label",null,[x[19]||(x[19]=e.createTextVNode(" Zoom ",-1)),e.createElementVNode("input",{type:"range",min:"10",max:"600",value:e.unref(se),onInput:x[5]||(x[5]=me=>Bu(me))},null,40,Mk)]),e.createElementVNode("span",Bk,e.toDisplayString(Math.round(e.unref(se)))+" px/s",1),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["desktop-snap-toggle",{active:un.value}]),"data-testid":"btn-desktop-snap-toggle",onClick:Ps},e.toDisplayString(un.value?"Snap On":"Snap Off"),3)]),e.createVNode(Br,{playhead:e.unref(N),clips:e.unref(L),"selected-clip-id":((ve=e.unref(he))==null?void 0:ve.id)??((ce=e.unref(L)[0])==null?void 0:ce.id)??null,duration:Lt.value,"zoom-level":e.unref(se),"snap-enabled":un.value,sensitivity:.25,"onUpdate:playhead":e.unref(G),onTrim:e.unref(xe),onSplit:Ws,onClipSelect:Bi,onClipMove:e.unref(bt),onClipLongPress:Us,onSnapStateChange:Os},null,8,["playhead","clips","selected-clip-id","duration","zoom-level","snap-enabled","onUpdate:playhead","onTrim","onClipMove"]),e.createVNode(ad,{"selected-clip":e.unref(he),"can-split":xi.value,"can-delete":Ci.value,"is-playing":e.unref(ie),"zoom-level":e.unref(se),"playback-speed":e.unref(fe),onSplit:io,onDelete:Ri,onDuplicate:$i,onZoomIn:Tu,onZoomOut:Mu,onZoomChange:Di,onFitToWindow:Nu,onPlayPause:e.unref(T),onFrameForward:e.unref(ee),onFrameBackward:e.unref(pe),onSkipToStart:e.unref(be),onSkipToEnd:e.unref($e),onSpeedChange:e.unref(Ae)},null,8,["selected-clip","can-split","can-delete","is-playing","zoom-level","playback-speed","onPlayPause","onFrameForward","onFrameBackward","onSkipToStart","onSkipToEnd","onSpeedChange"]),ge.value?(e.openBlock(),e.createElementBlock("div",Fk,[e.createElementVNode("div",Ik,[e.createElementVNode("label",$k,[x[20]||(x[20]=e.createElementVNode("span",null,"Trim start (s)",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":x[6]||(x[6]=me=>Y.value=me),type:"number",step:"0.01",min:"0",inputmode:"decimal","data-testid":"video-dev-trim-start"},null,512),[[e.vModelText,Y.value]])]),e.createElementVNode("label",Rk,[x[21]||(x[21]=e.createElementVNode("span",null,"Trim end (s)",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":x[7]||(x[7]=me=>Q.value=me),type:"number",step:"0.01",min:"0",inputmode:"decimal","data-testid":"video-dev-trim-end"},null,512),[[e.vModelText,Q.value]])]),e.createElementVNode("button",{class:"dev-editor-button",type:"button","data-testid":"video-dev-trim-start-playhead",disabled:!e.unref(he),onClick:x[8]||(x[8]=me=>$s("start"))}," Start = Playhead ",8,Dk),e.createElementVNode("button",{class:"dev-editor-button",type:"button","data-testid":"video-dev-trim-end-playhead",disabled:!e.unref(he),onClick:x[9]||(x[9]=me=>$s("end"))}," End = Playhead ",8,Ak),e.createElementVNode("button",{class:"dev-editor-button dev-editor-button--primary",type:"button","data-testid":"video-dev-apply-trim",disabled:!e.unref(he),onClick:_u}," Apply Trim ",8,Lk)]),e.createElementVNode("div",Uk,[e.createElementVNode("label",Ok,[x[22]||(x[22]=e.createElementVNode("span",null,"Quick filter",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":x[10]||(x[10]=me=>ye.value=me),"data-testid":"video-dev-filter-select"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Hn.value,me=>(e.openBlock(),e.createElementBlock("option",{key:me.id,value:me.id},e.toDisplayString(me.name),9,Pk))),128))],512),[[e.vModelSelect,ye.value]])]),e.createElementVNode("button",{class:"dev-editor-button dev-editor-button--primary",type:"button","data-testid":"video-dev-apply-filter",disabled:!e.unref(he)||ye.value==="",onClick:Eu}," Apply Filter ",8,zk),e.createElementVNode("button",{class:"dev-editor-button",type:"button","data-testid":"video-dev-clear-filters",disabled:e.unref(nt).length===0,onClick:xu}," Clear Filters ",8,jk),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(he),onClick:x[11]||(x[11]=me=>wn("noise"))}," QA: Noise ",8,Wk),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(he),onClick:x[12]||(x[12]=me=>wn("grayscale"))}," QA: Grayscale ",8,Zk)])])):e.createCommentVNode("",!0)],512)])]))],2)}}}),Rd=Me(Hk,[["__scopeId","data-v-f427827a"]]),Xk={key:0,class:"video-editor-v2-toolbar"},Gk={class:"video-editor-v2-body"},Jk={class:"video-editor-v2-main"},Yk={class:"video-editor-v2-canvas"},qk={key:0,class:"video-editor-v2-timeline"},Kk={class:"video-editor-v2-side","data-testid":"v2-side-panel"},Qk="(max-width: 900px)",e_=e.defineComponent({__name:"SplitPanelLayout",setup(o,{expose:n}){const t=e.ref(!1);let a=null,i=null;const r=s=>{t.value=s};return e.onMounted(()=>{typeof window>"u"||!window.matchMedia||(a=window.matchMedia(Qk),r(a.matches),i=s=>r(s.matches),a.addEventListener?a.addEventListener("change",i):"addListener"in a&&a.addListener(i))}),e.onBeforeUnmount(()=>{!a||!i||(a.removeEventListener?a.removeEventListener("change",i):"removeListener"in a&&a.removeListener(i),a=null,i=null)}),n({isMobile:t}),(s,l)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-editor-v2",{"is-mobile":t.value,"is-desktop":!t.value}]),"data-testid":"video-editor-v2-shell"},[s.$slots.toolbar?(e.openBlock(),e.createElementBlock("div",Xk,[e.renderSlot(s.$slots,"toolbar",{},void 0,!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Gk,[e.createElementVNode("div",Jk,[e.createElementVNode("div",Yk,[e.renderSlot(s.$slots,"canvas",{},void 0,!0)]),s.$slots.timeline?(e.openBlock(),e.createElementBlock("div",qk,[e.renderSlot(s.$slots,"timeline",{},void 0,!0)])):e.createCommentVNode("",!0)]),e.withDirectives(e.createElementVNode("aside",Kk,[e.renderSlot(s.$slots,"inspector",{},void 0,!0)],512),[[e.vShow,!t.value]])]),t.value?e.renderSlot(s.$slots,"drawer",{key:1},void 0,!0):e.createCommentVNode("",!0)],2))}}),t_=Me(e_,[["__scopeId","data-v-a0d79157"]]),n_={class:"inspector-tabs",role:"tablist","aria-label":"Editor tools"},a_=["aria-selected","data-testid","onClick"],o_=["aria-labelledby"],i_={class:"inspector-placeholder","data-testid":"v2-inspector-placeholder"},r_=e.defineComponent({__name:"InspectorPanel",props:{activeTab:{},tabs:{},compact:{type:Boolean,default:!1}},emits:["update:activeTab"],setup(o,{emit:n}){const t=o,a=n,i=e.computed(()=>t.tabs.filter(s=>s.enabled)),r=s=>{s!==t.activeTab&&a("update:activeTab",s)};return(s,l)=>(e.openBlock(),e.createElementBlock("section",{class:e.normalizeClass(["inspector-panel",{"inspector-panel--compact":s.compact}]),"data-testid":"v2-inspector-panel"},[e.createElementVNode("nav",n_,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,c=>(e.openBlock(),e.createElementBlock("button",{key:c.id,type:"button",role:"tab",class:e.normalizeClass(["inspector-tab",{"is-active":s.activeTab===c.id}]),"aria-selected":s.activeTab===c.id?"true":"false","data-testid":`v2-inspector-tab-${c.id}`,onClick:d=>r(c.id)},e.toDisplayString(c.label),11,a_))),128))]),e.createElementVNode("div",{class:"inspector-body",role:"tabpanel","aria-labelledby":`v2-inspector-tab-${s.activeTab}`},[e.renderSlot(s.$slots,s.activeTab,{},()=>[e.createElementVNode("div",i_,[e.createElementVNode("p",null,e.toDisplayString(s.activeTab)+" controls — coming soon",1)])],!0)],8,o_)],2))}}),Xl=Me(r_,[["__scopeId","data-v-7f5b0e50"]]),s_=["aria-label","data-snap"],l_=["aria-expanded"],c_={class:"drawer-header"},d_={class:"drawer-body"},u_=e.defineComponent({__name:"VideoBottomDrawer",props:{initialSnap:{default:"half"},ariaLabel:{default:"Editor controls drawer"},containerHeight:{default:0}},emits:["snap-change"],setup(o,{expose:n,emit:t}){const a=["collapsed","half","full"],i=o,r=t,s=e.ref(null),l=e.ref(null),c=e.ref(i.initialSnap);let d=!1,u=!1,m=null,h=0,p=0,v=0;const g=S=>{const P=v||(typeof window<"u"?window.innerHeight:600);switch(S){case"collapsed":return 80;case"half":return Math.round(P*.45);case"full":return Math.round(P*.85)}},w=(S,{animate:P=!0}={})=>{var R;if(!s.value)return;const C=c.value;c.value=S;const A=typeof window<"u"&&((R=window.matchMedia)==null?void 0:R.call(window,"(prefers-reduced-motion: reduce)").matches);s.value.style.transition=P&&!A?"height 0.25s cubic-bezier(0.33, 1, 0.68, 1)":"none",s.value.style.height=`${g(S)}px`,S!==C&&r("snap-change",S,C)},M=S=>{let P=a[0],C=1/0;for(const A of a){const R=Math.abs(g(A)-S);R<C&&(C=R,P=A)}return P},V=()=>{const S=a.indexOf(c.value);w(a[(S+1)%a.length])},b=S=>{if(u){u=!1,S.preventDefault();return}V()},f=S=>{var P,C,A;if(S.button===0){d=!0,u=!1,m=S.pointerId,h=S.clientY,p=((P=s.value)==null?void 0:P.offsetHeight)??0;try{(A=(C=l.value)==null?void 0:C.setPointerCapture)==null||A.call(C,S.pointerId)}catch{}s.value&&(s.value.style.transition="none")}},_=S=>{if(!d||S.pointerId!==m)return;const P=S.clientY-h,C=p-P,A=g("collapsed"),R=g("full"),W=Math.max(A,Math.min(R,C));s.value&&(s.value.style.height=`${W}px`),Math.abs(P)>4&&(u=!0),S.preventDefault()},D=S=>{var C,A,R;if(!d)return;d=!1;try{(A=(C=l.value)==null?void 0:C.releasePointerCapture)==null||A.call(C,S.pointerId)}catch{}m=null;const P=((R=s.value)==null?void 0:R.offsetHeight)??0;w(M(P))},B=(S,P={})=>{a.includes(S)&&w(S,{animate:P.animate!==!1})},E=S=>{v=Math.max(0,Number(S)||0),w(c.value,{animate:!1})};return e.watch(()=>i.containerHeight,S=>{S>0&&E(S)}),e.onMounted(()=>{i.containerHeight>0&&(v=i.containerHeight),w(c.value,{animate:!1})}),e.onBeforeUnmount(()=>{d=!1,m=null}),n({snapTo:B,updateContainerHeight:E,snap:c}),(S,P)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"rootEl",ref:s,class:"video-editor-v2-drawer",role:"dialog","aria-label":S.ariaLabel,"data-snap":c.value,"data-testid":"v2-video-bottom-drawer"},[e.createElementVNode("button",{ref_key:"handleEl",ref:l,type:"button",class:"drawer-handle","aria-label":"Drag to resize editor drawer","aria-expanded":c.value==="full"?"true":"false","data-testid":"v2-video-drawer-handle",onClick:b,onPointerdown:f,onPointermove:_,onPointerup:D,onPointercancel:D},[...P[0]||(P[0]=[e.createElementVNode("span",{class:"drawer-handle-grip","aria-hidden":"true"},null,-1)])],40,l_),e.createElementVNode("div",c_,[e.renderSlot(S.$slots,"header",{},void 0,!0)]),e.createElementVNode("div",d_,[e.renderSlot(S.$slots,"default",{},void 0,!0)])],8,s_))}}),m_=Me(u_,[["__scopeId","data-v-4ebedbf7"]]),p_={class:"v2-toolbar-group"},f_=["aria-label"],h_=["disabled"],v_={class:"v2-toolbar-group"},g_={class:"v2-toolbar-fit"},y_=["disabled"],b_=["disabled"],w_={class:"v2-preview-host"},k_={class:"v2-timeline"},__={class:"v2-timeline-topbar"},E_={class:"v2-timeline-zoom"},x_=["value"],C_={class:"v2-timeline-zoom-readout"},S_=["aria-pressed"],V_={key:1,class:"v2-empty-state"},N_={key:0,"data-testid":"v2-export-status-completed",class:"v2-export-status"},T_={key:1,class:"v2-export-status","data-testid":"v2-export-status-message"},M_={key:1,class:"v2-empty-state"},B_={key:0,class:"v2-export-status"},F_={key:1,class:"v2-export-status"},I_=e.defineComponent({__name:"VideoEditorV2",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(o,{expose:n,emit:t}){const a=o,i=t,r=e.computed(()=>{var ye;const Y=typeof a.mediaUuid=="string"?a.mediaUuid.trim():"";if(Y!=="")return Y;const Q=(ye=a.media)==null?void 0:ye.uuid;return typeof Q=="string"&&Q.trim()!==""?Q.trim():`temp-${Date.now()}`}),s=od(r.value,a.initialRecipe,a.media),l=sd(),c=e.ref("filters"),d=e.computed(()=>a.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}),u=e.computed(()=>{const Y=a.featureFlags??{},Q=["filters","adjustments","text","transitions","audio","export"],ye={filters:"Filters",adjustments:"Adjust",text:"Text",transitions:"Transitions",audio:"Audio",export:"Export"};return Q.map(Ee=>({id:Ee,label:ye[Ee],enabled:typeof Y[Ee]=="boolean"?Y[Ee]:d.value[Ee]}))}),m=e.ref(!1),h=e.computed(()=>c.value),p=e.computed(()=>h.value==="filters"||m.value),v=e.computed(()=>h.value!=="filters"&&!m.value),g=["contain","cover","none"],w=Y=>typeof Y=="string"&&g.includes(Y),M=Y=>{const Q=Y==null?void 0:Y.editor;return w(Q==null?void 0:Q.fitMode)?Q.fitMode:null},V=e.ref(M(a.initialRecipe)??"contain"),b=e.ref("");e.watch(()=>{var Y,Q;return{file:(Y=a.media)==null?void 0:Y.file,url:(Q=a.media)==null?void 0:Q.url}},(Y,Q,ye)=>{var Ne,Ue;const Ee=b.value;ye(()=>{Ee&&Ee.startsWith("blob:")&&URL.revokeObjectURL(Ee)}),(Ne=a.media)!=null&&Ne.file?b.value=URL.createObjectURL(a.media.file):(Ue=a.media)!=null&&Ue.url?b.value=a.media.url:b.value=""},{immediate:!0});const f=e.computed(()=>b.value),_=e.computed(()=>l.activeFilters.value),D=e.computed(()=>s.playheadPosition.value),B=e.computed(()=>{if(!a.media)return null;const{file:Y,...Q}=a.media;return{...Q,url:b.value}}),E=e.computed(()=>{var Q;const Y=(Q=a.media)==null?void 0:Q.url;return!!(Y&&/^https?:/i.test(Y))}),S=e.ref(0),P=e.computed(()=>{var Q;if(s.totalDuration.value>0)return s.totalDuration.value;if(S.value>0)return S.value;const Y=Number((Q=a.media)==null?void 0:Q.duration);return Number.isFinite(Y)&&Y>0?Y:0}),C=Y=>{!Number.isFinite(Y)||Y<=0||(S.value=Y,s.updateSourceDuration(Y))},A=Y=>{Y&&typeof Y.time=="number"&&Number.isFinite(Y.time)&&s.seekTo(Y.time)},R=Y=>{Number.isFinite(Y)&&s.seekTo(Y)},W=Y=>{s.setPlaying(Y)},O=e.computed(()=>l.videoCompatibleFilters.value.map(Q=>{var Ee;const ye=[];if(Q.controls&&Q.controls.length>0)for(const Ne of Q.controls){const Ue=Ne.type;if(Ue==="button"||Ue==="text"||Ue==="range")continue;const Le={id:Ne.property||Ne.id,label:Ne.label||Ne.id,type:Ue,default:Ne.default??(Ue==="toggle"?!1:Ue==="color"?"#ffffff":0)};Ue==="slider"&&(Le.min=Ne.min??0,Le.max=Ne.max??1,Le.step=Ne.step??.01),Ue==="select"&&Ne.options&&(Le.options=Ne.options),ye.push(Le)}else if(Q.paramRanges){const Ne=Object.entries(Q.paramRanges);for(const[Ue,Le]of Ne){const mt=Ue.replace(/[-_]/g," ").replace(/\b\w/g,Pt=>Pt.toUpperCase()),kn=(Ee=Q.defaultParams)==null?void 0:Ee[Ue],Nt=(Le.min+Le.max)/2;ye.push({id:Ue,label:mt,min:Le.min,max:Le.max,step:Le.step??.01,default:typeof kn=="number"?kn:Nt})}}return{id:Q.id,name:Q.name,category:Q.category,params:ye}})),I=e.computed(()=>{const Y=new Map;return l.activeFilters.value.forEach(Q=>Y.set(Q.filterId,Q)),Y}),F=e.computed(()=>{if(s.currentFrame.value)return s.currentFrame.value;const Y=a.media;return(Y==null?void 0:Y.thumbnail_url)??(Y==null?void 0:Y.url)}),k=e.shallowRef(null),$=e.ref(null),j=e.ref(null),Z=e.ref(null),K=e.ref(null),ge=e.ref(!1),we=new Map,ne=e.ref([]),N=e.ref([]),L=e.ref([]),te=e.ref(1),ae=e.ref([]),ie=Y=>{k.value=Y,Y!=null&&Y.composition&&(j.value=new ld(Y.composition),Z.value=new La(Y.composition),K.value=new cd(Y.composition));try{we.size&&k.value&&(we.forEach((Q,ye)=>{k.value.setClipFilters(ye,Q)}),we.clear(),k.value.composition.computeFrame())}catch{}},he=Y=>{k.value?k.value.setClipFilters(Y,l.activeFilters.value):we.set(Y,[...l.activeFilters.value])},se=Y=>{var ye,Ee;const Q=((ye=s.selectedClip.value)==null?void 0:ye.id)??((Ee=s.timelineClips.value[0])==null?void 0:Ee.id);Q&&(ge.value=!0,typeof Y=="object"&&Y!==null&&"id"in Y?l.applyFilter(Y.id):typeof Y=="string"&&l.applyFilter(Y),s.setFilters(l.activeFilters.value),he(Q),s.handleClipSelect(Q),ge.value=!1,T())},fe=Y=>{var Ee,Ne;const Q=l.activeFilters.value.find(Ue=>Ue.filterId===Y);Q&&l.removeFilter(Q.id),s.setFilters(l.activeFilters.value);const ye=((Ee=s.selectedClip.value)==null?void 0:Ee.id)??((Ne=s.timelineClips.value[0])==null?void 0:Ne.id);ye&&he(ye),T()},xe=(Y,Q,ye)=>{var Ue,Le;const Ee=l.activeFilters.value.find(mt=>mt.filterId===Y);if(Ee){Ee.params={...Ee.params??{},[Q]:ye},s.setFilters(l.activeFilters.value);const mt=((Ue=s.selectedClip.value)==null?void 0:Ue.id)??((Le=s.timelineClips.value[0])==null?void 0:Le.id);mt&&he(mt),T();return}const Ne=l.previewFilter.value;Ne&&Ne.filterId===Y&&(Ne.params={...Ne.params??{},[Q]:ye})},le=Y=>{Y&&typeof Y.id=="string"&&Y.id!==""&&l.previewFilterEffect(Y.id)},de=Y=>{l.updateFilterParams(Y),s.setFilters(l.activeFilters.value),T()},Ve=async Y=>{if(!j.value)return;const Q=await j.value.addTextOverlay(Y);ne.value.push({id:Q,...Y})},Be=async(Y,Q)=>{if(!j.value)return;await j.value.updateTextOverlay(Y,Q);const ye=ne.value.findIndex(Ee=>Ee.id===Y);ye!==-1&&(ne.value[ye]={...ne.value[ye],...Q})},dt=async Y=>{j.value&&(await j.value.removeTextOverlay(Y),ne.value=ne.value.filter(Q=>Q.id!==Y))},Ke=async Y=>{if(!Z.value||ae.value.length<2)return;const[Q,ye]=ae.value,Ee=await Z.value.applyTransition(Q,ye,Y);N.value.push({id:Ee,...Y,name:Y.type})},bt=Y=>{if(!Z.value)return;const Q=N.value[Y];Q&&(Z.value.removeTransition(Q.id),N.value.splice(Y,1))},et=Y=>{},at=async Y=>{if(!K.value)return;const Q=await K.value.addAudioTrack(Y);L.value.push({id:Q,...Y})},wt=async(Y,Q)=>{if(!K.value)return;const ye=L.value.findIndex(Ee=>Ee.id===Y);ye!==-1&&(L.value[ye]={...L.value[ye],...Q})},Vt=async Y=>{K.value&&(await K.value.removeAudioTrack(Y),L.value=L.value.filter(Q=>Q.id!==Y))},rt=async(Y,Q)=>{if(!K.value)return;await K.value.updateVolume(Y,Q);const ye=L.value.find(Ee=>Ee.id===Y);ye&&(ye.volume=Q)},vt=async(Y,Q)=>{if(!K.value)return;await K.value.muteTrack(Y,Q);const ye=L.value.find(Ee=>Ee.id===Y);ye&&(ye.muted=Q)},ue=Y=>{K.value&&(K.value.setMasterVolume(Y),te.value=Y)},Se=Y=>{var Q;return Y.metadata||(Y.metadata={created_at:new Date().toISOString(),editor_version:"2.0.0"}),Y.metadata.fit_mode=V.value,(Q=a.media)!=null&&Q.url&&/^https?:/i.test(a.media.url)?Y.metadata.source_url=a.media.url:delete Y.metadata.source_url,Y},Te=()=>{$.value=Se(s.generateRecipe())};let je=null;const T=()=>{je&&clearTimeout(je),je=setTimeout(()=>{Te(),je=null},200)};e.watch(()=>s.timelineClips.value,T,{deep:!0}),e.watch(()=>s.selectedClip.value,Y=>{if(ge.value||!Y)return;const Q=(Y==null?void 0:Y.filters)??[];l.setActiveFilters(Q)},{immediate:!0}),e.watch(()=>l.activeFilters.value,Y=>{s.setFilters(Y),T()},{deep:!0}),e.watch(()=>ne.value,Y=>{s.setTextOverlays(Y),T()},{deep:!0}),e.watch(()=>L.value,Y=>{const Q=Y.map(ye=>({...ye,source:typeof ye.source=="string"?ye.source:void 0}));s.setAudioTracks(Q),T()},{deep:!0}),e.watch(()=>s.playheadPosition.value,T),Te();const z=e.ref(!0),G=e.computed(()=>!!s.selectedClip.value&&s.playheadPosition.value>0),ee=e.computed(()=>!!s.selectedClip.value&&s.timelineClips.value.length>1),pe=Y=>{z.value=Y},be=()=>{z.value=!z.value},$e=Y=>{const Q=Y.target;if(!Q)return;const ye=Number(Q.value);Number.isFinite(ye)&&s.setZoomLevel(ye)},Ae=e.ref(!1),Re=e.ref(0),Pe=e.ref(!1),Je=e.ref(null),tt=e.ref(null);let xt=null,Ht=!1;const nt=()=>new vi(a.serverRenderEndpoint??"/api/v1"),Xt=()=>{xt!==null&&(clearInterval(xt),xt=null)},jn=Y=>{Xt();const Q=nt();xt=setInterval(async()=>{if(Ht){Xt();return}try{const ye=await Q.getJob(Y),Ee=Number(ye.progress??0);if(Re.value=Number.isFinite(Ee)?Ee:0,i("server-render-progress",Re.value),ye.status==="completed"||ye.status==="failed"||ye.status==="cancelled")if(Xt(),Ae.value=!1,tt.value=null,ye.status==="completed"){Re.value=100,Pe.value=!0,Je.value=null;const Ne=typeof ye.output_media_id=="string"?ye.output_media_id:void 0,Ue={id:Y};Ne!==void 0&&(Ue.output_media_id=Ne),i("server-render-completed",Ue)}else{const Ne=ye.status==="cancelled"||typeof ye.error_message=="string"&&/cancel/i.test(ye.error_message),Ue=Ne?"Export canceled.":typeof ye.error_message=="string"&&ye.error_message.trim()!==""?ye.error_message:"Export failed";Je.value=Ue,Ne||i("server-render-failed",Ue)}}catch(ye){Xt(),Ae.value=!1,tt.value=null;const Ee=ye instanceof Error?ye.message:"Failed to check export progress";Je.value=Ee,i("server-render-failed",Ee)}},2e3)},pa=Y=>{const Q=new Blob([JSON.stringify(Y,null,2)],{type:"application/json"}),ye=URL.createObjectURL(Q),Ee=document.createElement("a");Ee.href=ye,Ee.download=`video-recipe-${Date.now()}.json`,Ee.click(),setTimeout(()=>URL.revokeObjectURL(ye),100)},Wn=async Y=>{Xt(),Ht=!1,tt.value=null,Je.value=null,Pe.value=!1,Ae.value=!0,Re.value=0;try{const Q=Se(s.generateRecipe());i("recipe-generated",Q);const ye=!!a.serverRenderEndpoint,Ee=r.value.startsWith("temp-");if(!ye||Ee){pa(Q),Ae.value=!1,Re.value=100,Pe.value=!0,Je.value=Ee?"Local media — downloaded recipe.json. Switch to V1 for PIXI-based client export.":"No server render endpoint configured — downloaded recipe.json.";return}const Ue=await nt().createJob({source_media_id:r.value,recipe:Q}),Le=typeof Ue.id=="string"?Ue.id:null;if(!Le)throw new Error("Export failed: missing job id");tt.value=Le,i("export-started",Le),i("server-render-started",Le),jn(Le)}catch(Q){const ye=Se(s.generateRecipe());pa(ye);const Ee=Q instanceof Error?Q.message:"Export failed";Ae.value=!1,Re.value=0,tt.value=null,Je.value=Ee,i("server-render-failed",Ee)}},Qa=async()=>{Ht=!0;const Y=tt.value;if(Xt(),Ae.value=!1,Re.value=0,Je.value="Export canceled.",tt.value=null,Y&&a.serverRenderEndpoint)try{await nt().cancelJob(Y)}catch{}},fa=()=>{s.togglePlayback()},Zn=()=>{s.resetChanges()},ha=()=>{const Y=s.saveDraft();i("draft-saved",Y)},wn=()=>{Wn()},wi=()=>{i("close")};return n({saveDraft:async()=>{const Y=s.saveDraft();return i("draft-saved",Y),Y},exportForUpload:async Y=>null}),e.onMounted(()=>{document.documentElement.setAttribute("data-video-editor-version","v2")}),e.onBeforeUnmount(()=>{document.documentElement.getAttribute("data-video-editor-version")==="v2"&&document.documentElement.removeAttribute("data-video-editor-version")}),e.onUnmounted(()=>{Xt(),Ht=!0,je&&(clearTimeout(je),je=null),k.value&&(k.value.destroy(),k.value=null),j.value=null,Z.value=null,K.value=null}),(Y,Q)=>(e.openBlock(),e.createBlock(t_,{"data-testid":"video-editor-v2"},{toolbar:e.withCtx(()=>[e.createElementVNode("div",p_,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["v2-toolbar-btn",{"is-active":e.unref(s).isPlaying.value}]),"data-testid":"v2-btn-play","aria-label":e.unref(s).isPlaying.value?"Pause":"Play",onClick:fa},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(s).isPlaying.value?e.unref(Gr):e.unref(Jr),"aria-hidden":"true"},null,8,["icon"])],10,f_),e.createElementVNode("button",{type:"button",class:"v2-toolbar-btn","data-testid":"v2-btn-reset","aria-label":"Reset all changes",disabled:!e.unref(s).hasChanges.value,onClick:Zn},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Un),"aria-hidden":"true"},null,8,["icon"])],8,h_)]),Q[11]||(Q[11]=e.createElementVNode("div",{class:"v2-toolbar-title","aria-live":"polite"},[e.createElementVNode("span",{class:"v2-toolbar-badge"},"V2"),e.createTextVNode(" Video Editor ")],-1)),e.createElementVNode("div",v_,[e.createElementVNode("label",g_,[Q[9]||(Q[9]=e.createElementVNode("span",{class:"sr-only"},"Fit mode",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":Q[0]||(Q[0]=ye=>V.value=ye),"aria-label":"Fit mode","data-testid":"v2-select-fit-mode"},[...Q[8]||(Q[8]=[e.createElementVNode("option",{value:"contain"},"Contain",-1),e.createElementVNode("option",{value:"cover"},"Cover",-1),e.createElementVNode("option",{value:"none"},"None",-1)])],512),[[e.vModelSelect,V.value]])]),e.createElementVNode("button",{type:"button",class:"v2-toolbar-btn","data-testid":"v2-btn-save","aria-label":"Save draft",disabled:!e.unref(s).hasChanges.value,onClick:ha},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Xo),"aria-hidden":"true"},null,8,["icon"]),Q[10]||(Q[10]=e.createElementVNode("span",{class:"v2-toolbar-btn-label"},"Save",-1))],8,y_),e.createElementVNode("button",{type:"button",class:"v2-toolbar-btn","data-testid":"v2-btn-export","aria-label":"Export",disabled:Ae.value,onClick:wn},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(aa),"aria-hidden":"true"},null,8,["icon"])],8,b_),e.createElementVNode("button",{type:"button",class:"v2-toolbar-btn","data-testid":"v2-btn-close","aria-label":"Close editor",onClick:wi},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Rn),"aria-hidden":"true"},null,8,["icon"])])])]),canvas:e.withCtx(()=>[e.createElementVNode("div",w_,[e.withDirectives(e.createVNode(fr,{class:"v2-preview-child","aria-hidden":!p.value,source:f.value,"fallback-duration":P.value,filters:_.value,playhead:D.value,"is-playing":e.unref(s).isPlaying.value,"fit-mode":V.value,active:p.value,onPlayPause:fa,onFrameUpdate:A,onDurationChange:C},null,8,["aria-hidden","source","fallback-duration","filters","playhead","is-playing","fit-mode","active"]),[[e.vShow,p.value]]),e.withDirectives(e.createVNode(Mr,{class:"v2-preview-child","aria-hidden":!v.value,"media-uuid":r.value,recipe:$.value,media:B.value,"enable-engine":v.value&&E.value,"fit-mode":V.value,onTimeUpdate:R,onPlayStateChange:W,onDurationChange:C,onEngineReady:ie},null,8,["aria-hidden","media-uuid","recipe","media","enable-engine","fit-mode"]),[[e.vShow,v.value]])])]),timeline:e.withCtx(()=>{var ye,Ee;return[e.createElementVNode("div",k_,[e.createElementVNode("div",__,[e.createElementVNode("label",E_,[Q[12]||(Q[12]=e.createElementVNode("span",null,"Zoom",-1)),e.createElementVNode("input",{type:"range",min:"10",max:"600",value:e.unref(s).zoomLevel.value,"aria-label":"Timeline zoom","data-testid":"v2-timeline-zoom",onInput:$e},null,40,x_),e.createElementVNode("span",C_,e.toDisplayString(Math.round(e.unref(s).zoomLevel.value))+" px/s",1)]),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["v2-toolbar-btn v2-toolbar-btn--ghost",{"is-active":z.value}]),"data-testid":"v2-btn-snap-toggle","aria-pressed":z.value?"true":"false",onClick:be},e.toDisplayString(z.value?"Snap On":"Snap Off"),11,S_)]),e.createVNode(Br,{playhead:e.unref(s).playheadPosition.value,clips:e.unref(s).timelineClips.value,"selected-clip-id":((ye=e.unref(s).selectedClip.value)==null?void 0:ye.id)??((Ee=e.unref(s).timelineClips.value[0])==null?void 0:Ee.id)??null,duration:P.value,"zoom-level":e.unref(s).zoomLevel.value,"snap-enabled":z.value,sensitivity:.25,"onUpdate:playhead":Q[1]||(Q[1]=Ne=>e.unref(s).seekTo(Ne)),onTrim:Q[2]||(Q[2]=(Ne,Ue,Le)=>e.unref(s).handleTrim(Ne,Ue,Le)),onSplit:Q[3]||(Q[3]=Ne=>e.unref(s).handleSplit(Ne)),onClipSelect:Q[4]||(Q[4]=Ne=>e.unref(s).handleClipSelect(Ne)),onClipMove:Q[5]||(Q[5]=(Ne,Ue)=>e.unref(s).moveClip(Ne,Ue)),onSnapStateChange:pe},null,8,["playhead","clips","selected-clip-id","duration","zoom-level","snap-enabled"]),e.createVNode(ad,{"selected-clip":e.unref(s).selectedClip.value,"can-split":G.value,"can-delete":ee.value,"is-playing":e.unref(s).isPlaying.value,"zoom-level":e.unref(s).zoomLevel.value,"playback-speed":e.unref(s).playbackSpeed.value,onSplit:e.unref(s).splitAtPlayhead,onDelete:e.unref(s).deleteSelectedClip,onDuplicate:e.unref(s).duplicateSelectedClip,onZoomIn:e.unref(s).zoomIn,onZoomOut:e.unref(s).zoomOut,onZoomChange:e.unref(s).setZoomLevel,onFitToWindow:e.unref(s).fitToWindow,onPlayPause:fa,onFrameForward:e.unref(s).frameForward,onFrameBackward:e.unref(s).frameBackward,onSkipToStart:e.unref(s).skipToStart,onSkipToEnd:e.unref(s).skipToEnd,onSpeedChange:e.unref(s).setPlaybackSpeed},null,8,["selected-clip","can-split","can-delete","is-playing","zoom-level","playback-speed","onSplit","onDelete","onDuplicate","onZoomIn","onZoomOut","onZoomChange","onFitToWindow","onFrameForward","onFrameBackward","onSkipToStart","onSkipToEnd","onSpeedChange"])])]}),inspector:e.withCtx(()=>[e.createVNode(Xl,{"active-tab":c.value,"onUpdate:activeTab":Q[6]||(Q[6]=ye=>c.value=ye),tabs:u.value},{filters:e.withCtx(()=>[e.createVNode(Fr,{filters:O.value,"active-filters":I.value,"thumbnail-url":F.value,onApplyFilter:se,onRemoveFilter:fe,onUpdateParam:xe,onPreviewFilter:le},null,8,["filters","active-filters","thumbnail-url"])]),adjustments:e.withCtx(()=>[e.unref(l).selectedFilter.value?(e.openBlock(),e.createBlock(Ir,{key:0,filter:e.unref(l).selectedFilter.value,"current-frame":e.unref(s).currentFrame.value,onUpdateParams:de},null,8,["filter","current-frame"])):(e.openBlock(),e.createElementBlock("div",V_,[...Q[13]||(Q[13]=[e.createElementVNode("p",null,"Select a filter from the Filters tab to adjust its parameters.",-1)])]))]),text:e.withCtx(()=>[e.createVNode(Rr,{overlays:ne.value,onAddOverlay:Ve,onUpdateOverlay:Be,onRemoveOverlay:dt},null,8,["overlays"])]),transitions:e.withCtx(()=>[e.createVNode(Dr,{"selected-clips":ae.value,"applied-transitions":N.value,onApplyTransition:Ke,onRemoveTransition:bt,onPreviewTransition:et},null,8,["selected-clips","applied-transitions"])]),audio:e.withCtx(()=>[e.createVNode(Ar,{"audio-layers":L.value,"master-volume":te.value,onAddTrack:at,onUpdateTrack:wt,onRemoveTrack:Vt,onUpdateVolume:rt,onToggleMute:vt,onUpdateMasterVolume:ue},null,8,["audio-layers","master-volume"])]),export:e.withCtx(()=>[e.createVNode($r,{"can-export":e.unref(s).hasChanges.value,"is-exporting":Ae.value,"export-progress":Re.value,onExport:Wn,onCancelExport:Qa,onSaveDraft:ha,onReset:Zn},null,8,["can-export","is-exporting","export-progress"]),Pe.value?(e.openBlock(),e.createElementBlock("div",N_," Export complete ")):e.createCommentVNode("",!0),Je.value&&!Pe.value?(e.openBlock(),e.createElementBlock("div",T_,e.toDisplayString(Je.value),1)):e.createCommentVNode("",!0)]),_:1},8,["active-tab","tabs"])]),drawer:e.withCtx(()=>[e.createVNode(m_,{"initial-snap":"half","aria-label":"Video editor controls"},{default:e.withCtx(()=>[e.createVNode(Xl,{"active-tab":c.value,"onUpdate:activeTab":Q[7]||(Q[7]=ye=>c.value=ye),tabs:u.value,compact:""},{filters:e.withCtx(()=>[e.createVNode(Fr,{filters:O.value,"active-filters":I.value,"thumbnail-url":F.value,onApplyFilter:se,onRemoveFilter:fe,onUpdateParam:xe,onPreviewFilter:le},null,8,["filters","active-filters","thumbnail-url"])]),adjustments:e.withCtx(()=>[e.unref(l).selectedFilter.value?(e.openBlock(),e.createBlock(Ir,{key:0,filter:e.unref(l).selectedFilter.value,"current-frame":e.unref(s).currentFrame.value,onUpdateParams:de},null,8,["filter","current-frame"])):(e.openBlock(),e.createElementBlock("div",M_,[...Q[14]||(Q[14]=[e.createElementVNode("p",null,"Select a filter from the Filters tab to adjust its parameters.",-1)])]))]),text:e.withCtx(()=>[e.createVNode(Rr,{overlays:ne.value,onAddOverlay:Ve,onUpdateOverlay:Be,onRemoveOverlay:dt},null,8,["overlays"])]),transitions:e.withCtx(()=>[e.createVNode(Dr,{"selected-clips":ae.value,"applied-transitions":N.value,onApplyTransition:Ke,onRemoveTransition:bt,onPreviewTransition:et},null,8,["selected-clips","applied-transitions"])]),audio:e.withCtx(()=>[e.createVNode(Ar,{"audio-layers":L.value,"master-volume":te.value,onAddTrack:at,onUpdateTrack:wt,onRemoveTrack:Vt,onUpdateVolume:rt,onToggleMute:vt,onUpdateMasterVolume:ue},null,8,["audio-layers","master-volume"])]),export:e.withCtx(()=>[e.createVNode($r,{"can-export":e.unref(s).hasChanges.value,"is-exporting":Ae.value,"export-progress":Re.value,onExport:Wn,onCancelExport:Qa,onSaveDraft:ha,onReset:Zn},null,8,["can-export","is-exporting","export-progress"]),Pe.value?(e.openBlock(),e.createElementBlock("div",B_,"Export complete")):e.createCommentVNode("",!0),Je.value&&!Pe.value?(e.openBlock(),e.createElementBlock("div",F_,e.toDisplayString(Je.value),1)):e.createCommentVNode("",!0)]),_:1},8,["active-tab","tabs"])]),_:1})]),_:1}))}}),$_=Me(I_,[["__scopeId","data-v-be70d186"]]),Wt=o=>o===null||typeof o!="object"||Array.isArray(o)?null:o,Ge=o=>{if(typeof o=="number"&&Number.isFinite(o))return o;if(typeof o=="string"){const n=Number(o);return Number.isFinite(n)?n:null}return null},R_=(o,n)=>{if(n===null)return;const t=Wt(o.source)??{},a=Ge(t.duration);if(!(a!==null&&a>0&&a<=1&&n>a))return;t.duration=n,o.source=t;const r=Array.isArray(o.timeline)?o.timeline:[];if(r.length===1){const c=Wt(r[0]);if(c!==null){const d=Ge(c.sourceIn)??0,u=Ge(c.sourceOut)??Ge(c.end)??Ge(c.timelineEnd);if(d===0&&u!==null&&u>0&&u<=1){c.sourceOut=n;const h=Ge(c.end);h!==null&&h>0&&h<=1&&(c.end=n);const p=Ge(c.timelineEnd);p!==null&&p>0&&p<=1&&(c.timelineEnd=n)}}}const s=Ge(o.trimEnd)??Ge(o.trim_end);s!==null&&s>0&&s<=1&&(o.trimEnd=n);const l=Wt(o.trim);if(l!==null){const c=Ge(l.end);c!==null&&c>0&&c<=1&&(l.end=n,o.trim=l)}},D_=(o,n)=>{if(!o)return!1;const t=Wt(o);if(t===null)return!1;const a=Wt(t.trim),i=Wt(t.source),s=Ge(i==null?void 0:i.duration)??n,l=Array.isArray(o.filters)&&o.filters.length>0;let c=!1;if(Array.isArray(o.timeline)&&o.timeline.length===1){const p=o.timeline[0];p&&Array.isArray(p.filters)&&p.filters.length>0&&(c=!0)}let d=!1;const u=Ge(t.trimStart)??Ge(t.trim_start)??Ge(a==null?void 0:a.start),m=Ge(t.trimEnd)??Ge(t.trim_end)??Ge(a==null?void 0:a.end);if(u!==null&&u>0&&(d=!0),m!==null&&s!==void 0&&m<s&&(d=!0),!d&&Array.isArray(o.timeline)&&o.timeline.length===1){const p=o.timeline[0];if(p){const v=Ge(p.sourceIn),g=Ge(p.sourceOut);v!==null&&v>0&&(d=!0),g!==null&&s!==void 0&&g<s&&(d=!0)}}let h=!1;if(Array.isArray(o.timeline)&&o.timeline.length===1){const p=o.timeline[0];if(p){const v=Ge(p.speed);h=v!==null&&v!==1}}return l||c||d||h},Dd=o=>{if(!o)return!1;const n=Wt(o);return n===null?!1:!!(Array.isArray(n.textOverlays)&&n.textOverlays.length>0||Array.isArray(n.transitions)&&n.transitions.length>0||Array.isArray(o.timeline)&&o.timeline.length>1)},A_=(o,n={})=>{var h,p;const t=JSON.parse(JSON.stringify(o)),a=Array.isArray(t.timeline)?t.timeline:[],i=a.length>0?Wt(a[0]):null,r=Array.isArray(i==null?void 0:i.filters)?i.filters:[],s=Array.isArray(t.filters)?t.filters:[];if(s.length>0?t.filters=s:t.filters=r,a.length===1&&i!==null){const v=Ge(i.sourceIn),g=Ge(i.sourceOut);v!==null&&t.trimStart===void 0&&(t.trimStart=v),g!==null&&t.trimEnd===void 0&&(t.trimEnd=g)}const l=Wt(t.trim);if(t.trimStart===void 0){const v=Ge(l==null?void 0:l.start);v!==null&&(t.trimStart=v)}if(t.trimEnd===void 0){const v=Ge(l==null?void 0:l.end);v!==null&&(t.trimEnd=v)}const c=Wt(t.source),d=Ge(t.width)??Ge(c==null?void 0:c.original_width)??Ge((h=n.exportMeta)==null?void 0:h.width);d!==null&&(t.width=d);const u=Ge(t.height)??Ge(c==null?void 0:c.original_height)??Ge((p=n.exportMeta)==null?void 0:p.height);u!==null&&(t.height=u);const m=Wt(t.output);return t.fps=Ge(t.fps)??Ge(m==null?void 0:m.fps)??30,R_(t,n.mediaDuration??null),t},L_={key:0},U_=["data-testid"],O_={class:"ve-mobile-header"},P_=["data-testid"],z_={class:"ve-mobile-title"},j_=["data-testid","disabled"],W_={key:1,class:"ve-mobile-spacer","aria-hidden":"true"},Z_={class:"ve-body"},H_=["data-testid"],X_=["aria-label"],G_={class:"ve-header"},J_={class:"ve-title"},Y_=["data-testid"],q_={class:"ve-body"},K_={class:"ve-footer"},Q_=["data-testid"],eE=["data-testid","disabled"],tE=e.defineComponent({__name:"VideoEditorDialog",props:{open:{type:Boolean,default:!0},mediaUuid:{},initialRecipe:{},media:{},showThumbnailPicker:{type:Boolean,default:!1},title:{default:"Edit Video"},workflowMode:{default:"full"},featureFlags:{},clientExportThreshold:{default:20},maxDuration:{default:300},serverRenderEndpoint:{default:null},saveImmediate:{type:Boolean,default:!0},confirmText:{default:"Save"},savingText:{default:"Rendering..."},closeText:{default:"Cancel"},dataTestId:{default:"video-editor-dialog"},editorVersion:{}},emits:["update:open","close","recipe-generated","export-started","draft-saved","thumbnail-selected","video-exported","save-recipe","save-started","save-complete","save-error"],setup(o,{expose:n,emit:t}){const a=o,i=t,r=e.computed(()=>a.dataTestId),s=e.computed(()=>a.open),l=e.computed(()=>a.saveImmediate===!1),c=e.computed(()=>a.closeText),d=e.computed(()=>m.value?a.savingText:a.confirmText),u=e.ref(typeof window<"u"?window.innerWidth<768:!1),m=e.ref(!1),h=e.ref(!1),p=e.ref(null),v=`temp-${Date.now()}`,g=e.computed(()=>{var k;const F=(k=a.featureFlags)==null?void 0:k.export;return typeof F=="boolean"?F:a.workflowMode==="full"}),w=e.computed(()=>{if(a.editorVersion==="v1"||a.editorVersion==="v2")return a.editorVersion;if(typeof window>"u")return"v2";try{const F=new URLSearchParams(window.location.search),k=F.get("editor")??F.get("video-editor");if(k==="v1")return"v1";if(k==="v2")return"v2"}catch{}return"v2"}),M=e.computed(()=>w.value==="v2"?$_:Rd),V=e.computed(()=>typeof a.mediaUuid=="string"&&a.mediaUuid.trim()!==""?a.mediaUuid.trim():a.media&&a.media.uuid.trim()!==""?a.media.uuid.trim():v),b=e.computed(()=>{const F={showThumbnailPicker:a.showThumbnailPicker,workflowMode:a.workflowMode,clientExportThreshold:a.clientExportThreshold,maxDuration:a.maxDuration,serverRenderEndpoint:a.serverRenderEndpoint};return a.featureFlags!==void 0&&(F.featureFlags=a.featureFlags),a.initialRecipe!==void 0&&(F.initialRecipe=a.initialRecipe),a.media!==void 0&&(F.media=a.media),F}),f=()=>{u.value=window.innerWidth<768};e.onMounted(()=>{window.addEventListener("resize",f)}),e.onUnmounted(()=>{window.removeEventListener("resize",f)}),e.onErrorCaptured(()=>(h.value=!0,!1));const _=F=>{const k=Array.isArray(F.timeline)?F.timeline:[];if(k.length===0)return 0;let $=0;for(const j of k){const Z=Number(j.sourceIn),K=Number(j.sourceOut),ge=Number(j.speed??1),we=Number.isFinite(ge)&&ge>0?ge:1;if(Number.isFinite(Z)&&Number.isFinite(K)&&K>Z){$+=(K-Z)/we;continue}const ne=Number(j.timelineStart),N=Number(j.timelineEnd);Number.isFinite(ne)&&Number.isFinite(N)&&N>ne&&($+=N-ne)}return $},D=(F,k,$)=>{let j=null;const Z=new Promise((K,ge)=>{j=setTimeout(()=>ge(new Error(`${$} timed out after ${k}ms`)),k)});return Promise.race([F,Z]).finally(()=>{j!==null&&clearTimeout(j)})},B=()=>{var Z;const $=(Z=a.media)==null?void 0:Z.duration;if(typeof $!="number"||!Number.isFinite($)||$<=0)return 12e3;const j=Math.round($*1e3);return Math.min(45e3,Math.max(12e3,j))},E=()=>{i("close"),i("update:open",!1)},S=()=>{m.value=!1,E()},P=F=>{i("recipe-generated",F)},C=F=>{i("export-started",F),i("save-started",F)},A=F=>{i("video-exported",F)},R=F=>{i("thumbnail-selected",F)},W=(F,k,$)=>{i("save-recipe",F);const j={recipe:F,exportPayload:k};$!==void 0&&(j.toastDescription=$),i("save-complete",j),E()},O=F=>{m.value||(i("draft-saved",F),W(F,null))},I=async()=>{var F;if(!m.value){if(h.value||p.value===null){i("save-error",{code:"save-failed",message:"Unable to save video edits. Please try again."}),E();return}m.value=!0;try{const k=await D(p.value.saveDraft(),B(),"saveDraft");let $=null,j=!1,Z;const K=_(k),ge=K>0?K:((F=a.media)==null?void 0:F.duration)??0;if(g.value&&ge>0&&ge<=a.clientExportThreshold&&typeof p.value.exportForUpload=="function"){j=!0;const ne=Math.min(9e4,Math.max(15e3,a.clientExportThreshold*2e3));try{$=await D(p.value.exportForUpload(k),ne,"exportForUpload")}catch{$=null}}if(Dd(k)&&$===null){i("save-error",{code:"unsupported-client-export-required",message:"These edits require in-browser export. Shorten the clip or remove text overlays, transitions, or extra clips and try again."});return}j&&$===null&&(Z="Video edits saved. Final render will happen when you share."),W(k,$,Z)}catch{i("save-error",{code:"save-failed",message:"Unable to save video edits. Please try again."}),E()}finally{m.value=!1}}};return n({saveDraft:I}),(F,k)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[s.value?(e.openBlock(),e.createElementBlock("div",L_,[u.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"ve-fullscreen","data-testid":r.value},[e.createElementVNode("header",O_,[e.createElementVNode("button",{class:"ve-mobile-action",type:"button","data-testid":`${r.value}-close-button`,onClick:S},e.toDisplayString(c.value),9,P_),e.createElementVNode("h2",z_,e.toDisplayString(F.title),1),l.value?(e.openBlock(),e.createElementBlock("button",{key:0,class:"ve-mobile-action ve-mobile-action--primary",type:"button","data-testid":`${r.value}-confirm-button`,disabled:m.value,onClick:I},e.toDisplayString(d.value),9,j_)):(e.openBlock(),e.createElementBlock("span",W_))]),e.createElementVNode("section",Z_,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(M.value),e.mergeProps({ref_key:"videoEditorRef",ref:p,"media-uuid":V.value,"data-editor-version":w.value},b.value,{onClose:S,onDraftSaved:O,onExportStarted:C,onRecipeGenerated:P,onThumbnailSelected:R,onVideoExported:A}),null,16,["media-uuid","data-editor-version"]))])],8,U_)):(e.openBlock(),e.createElementBlock("div",{key:1,class:"ve-overlay","data-testid":r.value,onClick:e.withModifiers(S,["self"])},[e.createElementVNode("div",{class:"ve-dialog",role:"dialog","aria-label":F.title,"aria-modal":"true"},[e.createElementVNode("header",G_,[e.createElementVNode("h2",J_,e.toDisplayString(F.title),1),e.createElementVNode("button",{class:"ve-close",type:"button","data-testid":`${r.value}-close-button`,"aria-label":"Close",onClick:S}," ✕ ",8,Y_)]),e.createElementVNode("section",q_,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(M.value),e.mergeProps({ref_key:"videoEditorRef",ref:p,"media-uuid":V.value,"data-editor-version":w.value},b.value,{onClose:S,onDraftSaved:O,onExportStarted:C,onRecipeGenerated:P,onThumbnailSelected:R,onVideoExported:A}),null,16,["media-uuid","data-editor-version"]))]),e.createElementVNode("footer",K_,[e.renderSlot(F.$slots,"footer",{close:S,isSaving:m.value,save:I},()=>[e.createElementVNode("button",{class:"ve-btn",type:"button","data-testid":`${r.value}-cancel-button`,onClick:S},e.toDisplayString(c.value),9,Q_),l.value?(e.openBlock(),e.createElementBlock("button",{key:0,class:"ve-btn ve-btn--primary",type:"button","data-testid":`${r.value}-confirm-button`,disabled:m.value,onClick:I},e.toDisplayString(d.value),9,eE)):e.createCommentVNode("",!0)],!0)])],8,X_)],8,H_))])):e.createCommentVNode("",!0)]))}}),nE=Me(tE,[["__scopeId","data-v-7fb767d8"]]),aE={class:"video-editor-modal"},oE={class:"video-preview-container"},iE=["src"],rE={class:"video-overlay-controls"},sE=["aria-label"],lE={class:"time-display"},cE={class:"timeline-container"},dE={class:"clip-name"},uE={class:"timeline-time-labels"},mE={class:"tool-tabs"},pE=["onClick"],fE={class:"tool-panel"},hE={key:0,class:"trim-panel"},vE={class:"trim-controls"},gE={key:1,class:"filters-panel"},yE={class:"filter-grid"},bE=["onClick"],wE={key:2,class:"text-panel"},kE={key:3,class:"transitions-panel"},_E={class:"transition-grid"},EE=["onClick"],xE={class:"action-buttons"},CE=e.defineComponent({__name:"VideoEditorSimple",props:{media:{}},emits:["save","cancel"],setup(o,{emit:n}){const t=o,a=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),h=e.ref(null),p=e.ref("trim"),v=e.ref(null),g=e.ref(""),w=[{id:"trim",label:"Trim",icon:yc},{id:"filters",label:"Filters",icon:op},{id:"text",label:"Text",icon:kc},{id:"transitions",label:"Transitions",icon:mp}],M=[{id:"none",name:"None"},{id:"grayscale",name:"Grayscale"},{id:"sepia",name:"Sepia"},{id:"blur",name:"Blur"},{id:"brightness",name:"Brightness"},{id:"contrast",name:"Contrast"}],V=[{id:"fade",name:"Fade"},{id:"slide",name:"Slide"},{id:"zoom",name:"Zoom"},{id:"wipe",name:"Wipe"}],b=e.ref();e.onMounted(()=>{var k,$;(k=t.media)!=null&&k.url?r.value=t.media.url:($=t.media)!=null&&$.file&&(r.value=URL.createObjectURL(t.media.file))}),e.onUnmounted(()=>{var k;(k=t.media)!=null&&k.file&&r.value&&URL.revokeObjectURL(r.value)});function f(){i.value&&(c.value=i.value.duration,m.value=c.value)}function _(){i.value&&(l.value=i.value.currentTime)}function D(){s.value=!1}function B(){i.value&&(s.value?(i.value.pause(),s.value=!1):(i.value.play(),s.value=!0))}function E(k){if(!k||isNaN(k))return"00:00";const $=Math.floor(k/60),j=Math.floor(k%60);return`${$.toString().padStart(2,"0")}:${j.toString().padStart(2,"0")}`}function S(k){if(!i.value||!b.value)return;const $=b.value.getBoundingClientRect(),K=(k.clientX-$.left)/$.width*c.value;i.value.currentTime=Math.max(0,Math.min(K,c.value))}function P(){u.value=l.value}function C(){m.value=l.value}function A(){u.value=0,m.value=c.value}function R(k){h.value=k;const $=Z=>{if(!h.value||!b.value)return;const K=b.value.getBoundingClientRect(),ne=(Z.clientX-K.left)/K.width*c.value;h.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))},j=()=>{h.value=null,document.removeEventListener("mousemove",$),document.removeEventListener("mouseup",j)};document.addEventListener("mousemove",$),document.addEventListener("mouseup",j)}function W(k){if(v.value=k,!i.value)return;const $={none:"none",grayscale:"grayscale(100%)",sepia:"sepia(100%)",blur:"blur(5px)",brightness:"brightness(150%)",contrast:"contrast(150%)"};i.value.style.filter=$[k]||"none"}function O(){}function I(k){}function F(){const k={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:g.value?[{content:g.value}]:[],duration:m.value-u.value};a("save",k)}return(k,$)=>(e.openBlock(),e.createElementBlock("div",aE,[e.createElementVNode("div",oE,[e.createElementVNode("video",{ref_key:"videoElement",ref:i,class:"video-preview",src:r.value,onLoadedmetadata:f,onTimeupdate:_,onEnded:D,controls:""},null,40,iE),e.createElementVNode("div",rE,[e.createElementVNode("button",{class:"play-pause-btn",onClick:B,"aria-label":s.value?"Pause":"Play"},[e.createVNode(e.unref(U.IonIcon),{icon:s.value?e.unref(vp):e.unref(wp)},null,8,["icon"])],8,sE),e.createElementVNode("div",lE,e.toDisplayString(E(l.value))+" / "+e.toDisplayString(E(c.value)),1)])]),e.createElementVNode("div",cE,[e.createElementVNode("div",{class:"timeline-track",onClick:S,ref_key:"timelineTrack",ref:b},[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",dE,e.toDisplayString(d.value),1)],4),e.createElementVNode("div",{class:"timeline-playhead",style:e.normalizeStyle({left:`${l.value/c.value*100}%`})},null,4),p.value==="trim"?(e.openBlock(),e.createElementBlock("div",{key:0,class:"trim-handle trim-start",style:e.normalizeStyle({left:`${u.value/c.value*100}%`}),onMousedown:$[0]||($[0]=j=>R("start"))},null,36)):e.createCommentVNode("",!0),p.value==="trim"?(e.openBlock(),e.createElementBlock("div",{key:1,class:"trim-handle trim-end",style:e.normalizeStyle({left:`${m.value/c.value*100}%`}),onMousedown:$[1]||($[1]=j=>R("end"))},null,36)):e.createCommentVNode("",!0)],512),e.createElementVNode("div",uE,[e.createElementVNode("span",null,e.toDisplayString(E(0)),1),e.createElementVNode("span",null,e.toDisplayString(E(c.value)),1)])]),e.createElementVNode("div",mE,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(w,j=>e.createElementVNode("button",{key:j.id,class:e.normalizeClass(["tool-tab",{active:p.value===j.id}]),onClick:Z=>p.value=j.id},[e.createVNode(e.unref(U.IonIcon),{icon:j.icon},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(j.label),1)],10,pE)),64))]),e.createElementVNode("div",fE,[p.value==="trim"?(e.openBlock(),e.createElementBlock("div",hE,[$[7]||($[7]=e.createElementVNode("h3",null,"Trim Video",-1)),$[8]||($[8]=e.createElementVNode("p",null,"Click and drag on the timeline to set trim points",-1)),e.createElementVNode("div",vE,[e.createElementVNode("button",{class:"btn-trim",onClick:P},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(ll)},null,8,["icon"]),$[4]||($[4]=e.createTextVNode(" Set Start ",-1))]),e.createElementVNode("button",{class:"btn-trim",onClick:C},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(ll)},null,8,["icon"]),$[5]||($[5]=e.createTextVNode(" Set End ",-1))]),e.createElementVNode("button",{class:"btn-trim",onClick:A},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Rn)},null,8,["icon"]),$[6]||($[6]=e.createTextVNode(" Clear ",-1))])])])):p.value==="filters"?(e.openBlock(),e.createElementBlock("div",gE,[$[9]||($[9]=e.createElementVNode("h3",null,"Filters",-1)),e.createElementVNode("div",yE,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(M,j=>e.createElementVNode("button",{key:j.id,class:e.normalizeClass(["filter-option",{active:v.value===j.id}]),onClick:Z=>W(j.id)},e.toDisplayString(j.name),11,bE)),64))])])):p.value==="text"?(e.openBlock(),e.createElementBlock("div",wE,[$[10]||($[10]=e.createElementVNode("h3",null,"Text Overlay",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":$[2]||($[2]=j=>g.value=j),type:"text",placeholder:"Enter text...",class:"text-input"},null,512),[[e.vModelText,g.value]]),e.createElementVNode("button",{class:"btn-add-text",onClick:O},"Add Text")])):p.value==="transitions"?(e.openBlock(),e.createElementBlock("div",kE,[$[11]||($[11]=e.createElementVNode("h3",null,"Transitions",-1)),e.createElementVNode("div",_E,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(V,j=>e.createElementVNode("button",{key:j.id,class:"transition-option",onClick:Z=>(j.id,void 0)},e.toDisplayString(j.name),9,EE)),64))])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",xE,[e.createElementVNode("button",{class:"btn-cancel",onClick:$[3]||($[3]=j=>k.$emit("cancel"))},"CANCEL"),e.createElementVNode("button",{class:"btn-save",onClick:F},"SAVE")])]))}}),SE=Me(CE,[["__scopeId","data-v-b933f33b"]]),VE={class:"time-label"},NE=e.defineComponent({__name:"TimeRuler",props:{duration:{},zoom:{}},setup(o){const n=o,t=e.computed(()=>({width:`${n.duration*n.zoom*100}px`})),a=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(a.value,c=>(e.openBlock(),e.createElementBlock("div",{key:c.time,class:"time-mark",style:e.normalizeStyle({left:c.position})},[e.createElementVNode("span",VE,e.toDisplayString(c.label),1),e.createElementVNode("div",{class:e.normalizeClass(["time-tick",{major:c.major}])},null,2)],4))),128))],4))}}),TE=Me(NE,[["__scopeId","data-v-0ef9c910"]]),ME=["data-track-index"],BE={class:"track-header"},FE={class:"track-label"},IE={class:"track-controls"},$E=["data-testid","aria-label"],RE=["data-testid","onMousedown","onClick"],DE={class:"clip-content"},AE={class:"clip-name"},LE={key:0,class:"clip-thumbnail"},UE=["src","alt"],OE=["onMousedown","aria-label"],PE=["onMousedown","aria-label"],zE=e.defineComponent({__name:"VideoTrack",props:{clips:{},trackIndex:{},zoom:{},duration:{}},emits:["clip-move","clip-trim","clip-select"],setup(o,{emit:n}){const t=o,a=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(w){const M=w.timelineEnd-w.timelineStart,V=w.timelineStart/t.duration*100,b=M/t.duration*100;return{left:`${V}%`,width:`${b}%`,backgroundColor:u(w)}}function u(w){const M=["#4A90E2","#7ED321","#F5A623","#BD10E0","#9013FE","#50E3C2","#B8E986","#F8E71C"],V=parseInt(w.id.replace(/\D/g,""))%M.length;return M[V]}function m(w){return w.label?w.label:w.url?(w.url.split("/").pop()||"Clip").split(".")[0]:`Clip ${w.id.slice(-4)}`}function h(w){i.value=w.id,a("clip-select",w.id)}function p(){r.value=!r.value}function v(w,M){if(l.value)return;s.value=!0;const V=M.clientX,b=w.timelineStart,f=D=>{if(!s.value)return;const B=D.clientX-V,E=parseFloat(c.value.width),S=B/(t.zoom*100)*(t.duration/E),P=Math.max(0,b+S);a("clip-move",w.id,P)},_=()=>{s.value=!1,document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",_)};document.addEventListener("mousemove",f),document.addEventListener("mouseup",_)}function g(w,M,V){l.value=M;const b=V.clientX,f=w.sourceIn,_=w.sourceOut,D=E=>{if(!l.value)return;const S=E.clientX-b,P=parseFloat(c.value.width),C=S/(t.zoom*100)*(t.duration/P);if(l.value==="start"){const A=Math.max(0,f+C);a("clip-trim",w.id,A,_)}else{const A=Math.max(f+1,_+C);a("clip-trim",w.id,f,A)}},B=()=>{l.value=null,document.removeEventListener("mousemove",D),document.removeEventListener("mouseup",B)};document.addEventListener("mousemove",D),document.addEventListener("mouseup",B)}return(w,M)=>(e.openBlock(),e.createElementBlock("div",{class:"video-track","data-track-index":w.trackIndex},[e.createElementVNode("div",BE,[e.createElementVNode("span",FE,"Track "+e.toDisplayString(w.trackIndex+1),1),e.createElementVNode("div",IE,[w.clips.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,class:"track-btn","data-testid":`btn-mute-track-${w.trackIndex}`,"aria-label":`${r.value?"Unmute":"Mute"} track ${w.trackIndex+1}`,onClick:p},[e.createVNode(e.unref(U.IonIcon),{icon:r.value?e.unref(Rp):e.unref(Ip)},null,8,["icon"])],8,$E)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:"track-timeline",style:e.normalizeStyle(c.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(w.clips,V=>(e.openBlock(),e.createElementBlock("div",{key:V.id,class:e.normalizeClass(["timeline-clip",{selected:V.id===i.value}]),style:e.normalizeStyle(d(V)),"data-testid":`clip-${V.id}`,onMousedown:b=>v(V,b),onClick:b=>h(V)},[e.createElementVNode("div",DE,[e.createElementVNode("span",AE,e.toDisplayString(m(V)),1),V.thumbnail?(e.openBlock(),e.createElementBlock("div",LE,[e.createElementVNode("img",{src:V.thumbnail,alt:m(V)},null,8,UE)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",{class:"trim-handle trim-start",onMousedown:e.withModifiers(b=>g(V,"start",b),["stop"]),"aria-label":`Trim start of ${m(V)}`},null,40,OE),e.createElementVNode("div",{class:"trim-handle trim-end",onMousedown:e.withModifiers(b=>g(V,"end",b),["stop"]),"aria-label":`Trim end of ${m(V)}`},null,40,PE)],46,RE))),128))],4)],8,ME))}}),jE=Me(zE,[["__scopeId","data-v-48e480d2"]]),WE={class:"video-timeline"},ZE={class:"timeline-tracks"},HE=["aria-label","aria-valuenow","aria-valuemax"],XE={class:"timeline-controls"},GE={class:"zoom-level"},JE=e.defineComponent({__name:"VideoTimeline",props:{clips:{},duration:{},currentTime:{}},emits:["update:clips","seek","clip-move","clip-trim"],setup(o,{emit:n}){const t=o,a=n,i=e.ref(1),r=e.ref(null),s=e.ref(!1),l=e.ref(),c=e.computed(()=>{const b=Math.max(0,...t.clips.map(f=>f.track||0));return Array(b+1).fill(null)}),d=e.computed(()=>`${t.currentTime/t.duration*100}%`);function u(b){return t.clips.filter(f=>(f.track||0)===b)}function m(b){const f=Math.floor(b/60),_=Math.floor(b%60);return`${f}:${_.toString().padStart(2,"0")}`}function h(b,f){a("clip-move",b,f)}function p(b,f,_){a("clip-trim",b,f,_)}function v(b){r.value=b}function g(){i.value=Math.min(i.value*1.2,5)}function w(){i.value=Math.max(i.value/1.2,.5)}function M(){s.value=!0;const b=_=>{if(!s.value||!l.value)return;const D=l.value.getBoundingClientRect(),S=Math.max(0,Math.min(_.clientX-D.left,D.width))/D.width*t.duration;a("seek",S)},f=()=>{s.value=!1,document.removeEventListener("mousemove",b),document.removeEventListener("mouseup",f)};document.addEventListener("mousemove",b),document.addEventListener("mouseup",f)}function V(b){let f=t.currentTime;switch(b.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}b.preventDefault(),a("seek",f)}return e.onMounted(()=>{l.value=document.querySelector(".video-timeline")}),e.onUnmounted(()=>{}),(b,f)=>(e.openBlock(),e.createElementBlock("div",WE,[e.createVNode(TE,{duration:b.duration,zoom:i.value},null,8,["duration","zoom"]),e.createElementVNode("div",ZE,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(_,D)=>(e.openBlock(),e.createBlock(jE,{key:`track-${D}`,"data-testid":`track-${D}`,clips:u(D),"track-index":D,zoom:i.value,duration:b.duration,onClipMove:h,onClipTrim:p,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:M,"data-testid":"playhead","aria-label":`Playhead at ${m(b.currentTime)}`,role:"slider","aria-valuenow":b.currentTime,"aria-valuemax":b.duration,tabindex:"0",onKeydown:V},null,44,HE),e.createElementVNode("div",XE,[e.createElementVNode("button",{"data-testid":"btn-zoom-in","aria-label":"Zoom in",onClick:g},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Hr)},null,8,["icon"])]),e.createElementVNode("span",GE,e.toDisplayString(Math.round(i.value*100))+"%",1),e.createElementVNode("button",{"data-testid":"btn-zoom-out","aria-label":"Zoom out",onClick:w},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Sp)},null,8,["icon"])])])]))}}),YE=Me(JE,[["__scopeId","data-v-001df415"]]),qE={class:"video-filters-panel"},KE={class:"filter-controls"},QE=["for"],ex={class:"filter-slider-group"},tx=["id","onUpdate:modelValue","min","max","step","data-testid","aria-label","aria-valuenow","aria-valuemin","aria-valuemax","onInput"],nx={class:"filter-value"},ax={class:"filter-actions"},ox={key:0,class:"filter-presets"},ix={class:"preset-list"},rx=["data-testid","aria-label","onClick"],sx=e.defineComponent({__name:"VideoFiltersPanel",emits:["filter-change"],setup(o,{emit:n}){const t=n,a=[{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(a.reduce((h,p)=>(h[p.type]=p.default,h),{})),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(h,p){switch(h){case"brightness":case"contrast":case"saturation":case"sepia":case"grayscale":return`${p}%`;case"hue":return`${p}°`;case"blur":case"sharpen":return p.toFixed(1);default:return p.toString()}}function l(h){return["brightness","contrast","saturation","hue","blur","sharpen","sepia","grayscale"].includes(h)}function c(h){if(!l(h))return;const p={id:`filter-${h}`,filterId:h,params:{value:i[h]},intensity:1};t("filter-change",p)}function d(){a.forEach(h=>{i[h.type]=h.default,c(h.type)})}function u(){const h=prompt("Enter preset name:");if(!h)return;const p={id:`custom-${Date.now()}`,name:h,values:{...i}};r.value.push(p)}function m(h){Object.entries(h.values).forEach(([p,v])=>{i[p]=v,c(p)})}return(h,p)=>(e.openBlock(),e.createElementBlock("div",qE,[p[3]||(p[3]=e.createElementVNode("h3",null,"Video Filters",-1)),e.createElementVNode("div",KE,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,v=>e.createElementVNode("div",{key:v.type,class:"filter-control"},[e.createElementVNode("label",{for:`filter-${v.type}`},e.toDisplayString(v.label),9,QE),e.createElementVNode("div",ex,[e.withDirectives(e.createElementVNode("input",{id:`filter-${v.type}`,"onUpdate:modelValue":g=>i[v.type]=g,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:g=>c(v.type)},null,40,tx),[[e.vModelText,i[v.type],void 0,{number:!0}]]),e.createElementVNode("span",nx,e.toDisplayString(s(v.type,i[v.type])),1)])])),64))]),e.createElementVNode("div",ax,[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(U.IonIcon),{icon:e.unref(Un)},null,8,["icon"]),p[0]||(p[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(U.IonIcon),{icon:e.unref(Xo)},null,8,["icon"]),p[1]||(p[1]=e.createTextVNode(" Save as Preset ",-1))])]),r.value.length>0?(e.openBlock(),e.createElementBlock("div",ox,[p[2]||(p[2]=e.createElementVNode("h4",null,"Presets",-1)),e.createElementVNode("div",ix,[(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:g=>m(v)},e.toDisplayString(v.name),9,rx))),128))])])):e.createCommentVNode("",!0)]))}}),lx=Me(sx,[["__scopeId","data-v-5ad2ac63"]]),cx={class:"video-text-panel"},dx={class:"text-input-group"},ux={class:"text-options"},mx={class:"option-row"},px={class:"option-row"},fx={class:"option-row"},hx={class:"option-row"},vx={class:"checkbox-label"},gx={class:"option-row"},yx={class:"text-overlay-list"},bx={key:0,class:"empty-state"},wx=["data-testid"],kx={class:"overlay-preview"},_x={class:"overlay-controls"},Ex=["data-testid","aria-label","onClick"],xx=["data-testid","aria-label","onClick"],Cx=["data-testid","aria-label","onClick"],Sx=e.defineComponent({__name:"VideoTextPanel",emits:["text-add","text-remove","text-update"],setup(o,{emit:n}){const t=n,a=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),a.value.push(d),t("text-add",d),i.text=""}function s(d){const u=a.value.findIndex(m=>m.id===d);u!==-1&&(a.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};a.value.push(u),t("text-add",u)}return(d,u)=>(e.openBlock(),e.createElementBlock("div",cx,[u[17]||(u[17]=e.createElementVNode("h3",null,"Text Overlays",-1)),e.createElementVNode("div",dx,[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(U.IonIcon),{icon:e.unref(Hr)},null,8,["icon"]),u[7]||(u[7]=e.createTextVNode(" Add ",-1))])]),e.createElementVNode("div",ux,[e.createElementVNode("div",mx,[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",px,[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",fx,[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",hx,[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",vx,[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",gx,[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",yx,[u[16]||(u[16]=e.createElementVNode("h4",null,"Active Overlays",-1)),a.value.length===0?(e.openBlock(),e.createElementBlock("div",bx," No text overlays added yet ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,(m,h)=>(e.openBlock(),e.createElementBlock("div",{key:m.id,class:"text-overlay-item","data-testid":`overlay-${h}`},[e.createElementVNode("div",kx,[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",_x,[e.createElementVNode("button",{class:"edit-btn","data-testid":`btn-edit-${h}`,"aria-label":`Edit overlay: ${m.text}`,onClick:p=>l(m)},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(sp)},null,8,["icon"])],8,Ex),e.createElementVNode("button",{class:"duplicate-btn","data-testid":`btn-duplicate-${h}`,"aria-label":`Duplicate overlay: ${m.text}`,onClick:p=>c(m)},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(rp)},null,8,["icon"])],8,xx),e.createElementVNode("button",{class:"remove-btn","data-testid":`btn-remove-${h}`,"aria-label":`Remove overlay: ${m.text}`,onClick:p=>s(m.id)},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Tp)},null,8,["icon"])],8,Cx)])],8,wx))),128))])]))}}),Vx=Me(Sx,[["__scopeId","data-v-4d240e1e"]]),Nx={class:"video-tools-panel"},Tx={class:"tool-tabs"},Mx=["data-testid","aria-label","aria-selected","onClick"],Bx={class:"tool-content"},Fx={key:0,class:"trim-panel",role:"tabpanel","aria-label":"Trim controls"},Ix={class:"trim-actions"},$x={key:3,class:"transitions-panel",role:"tabpanel","aria-label":"Transition controls"},Rx={class:"transition-types"},Dx=["data-testid","aria-label","onClick"],Ax={class:"transition-preview"},Lx=e.defineComponent({__name:"VideoToolsPanel",props:{activeTool:{}},emits:["tool-change","filter-change","text-add","transition-add","trim-set-start","trim-set-end","trim-clear"],setup(o){const n=[{id:"trim",name:"Trim",icon:yc},{id:"filters",name:"Filters",icon:yn},{id:"text",name:"Text",icon:kc},{id:"transitions",name:"Transitions",icon:ul}],t=[{id:"fade",name:"Fade",icon:Yi},{id:"slide-left",name:"Slide Left",icon:Qm},{id:"slide-right",name:"Slide Right",icon:ep},{id:"dissolve",name:"Dissolve",icon:Yi},{id:"wipe",name:"Wipe",icon:ul},{id:"zoom",name:"Zoom",icon:Yi}];return(a,i)=>(e.openBlock(),e.createElementBlock("div",Nx,[e.createElementVNode("div",Tx,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(n,r=>e.createElementVNode("button",{key:r.id,class:e.normalizeClass(["tool-tab",{active:a.activeTool===r.id}]),"data-testid":`tab-${r.id}`,"aria-label":`${r.name} tool`,"aria-selected":a.activeTool===r.id,role:"tab",onClick:s=>a.$emit("tool-change",r.id)},[e.createVNode(e.unref(U.IonIcon),{icon:r.icon},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(r.name),1)],10,Mx)),64))]),e.createElementVNode("div",Bx,[a.activeTool==="trim"?(e.openBlock(),e.createElementBlock("div",Fx,[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",Ix,[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=>a.$emit("trim-set-start"))},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(cl)},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=>a.$emit("trim-set-end"))},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(cl)},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=>a.$emit("trim-clear"))},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Rn)},null,8,["icon"]),i[7]||(i[7]=e.createTextVNode(" Clear ",-1))])])])):e.createCommentVNode("",!0),a.activeTool==="filters"?(e.openBlock(),e.createBlock(lx,{key:1,onFilterChange:i[3]||(i[3]=r=>a.$emit("filter-change",r))})):e.createCommentVNode("",!0),a.activeTool==="text"?(e.openBlock(),e.createBlock(Vx,{key:2,onTextAdd:i[4]||(i[4]=r=>a.$emit("text-add",r))})):e.createCommentVNode("",!0),a.activeTool==="transitions"?(e.openBlock(),e.createElementBlock("div",$x,[i[10]||(i[10]=e.createElementVNode("h3",null,"Transitions",-1)),e.createElementVNode("div",Rx,[(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=>a.$emit("transition-add",r.id)},[e.createElementVNode("div",Ax,[e.createVNode(e.unref(U.IonIcon),{icon:r.icon},null,8,["icon"])]),e.createElementVNode("span",null,e.toDisplayString(r.name),1)],8,Dx)),64))])])):e.createCommentVNode("",!0)])]))}}),Ux=Me(Lx,[["__scopeId","data-v-fc135306"]]),Ox={class:"video-export-panel"},Px={class:"export-presets"},zx=["value"],jx={key:0,class:"preset-details"},Wx={class:"detail-row"},Zx={class:"detail-row"},Hx={class:"detail-row"},Xx={class:"advanced-options"},Gx={class:"options-content"},Jx={class:"option-group"},Yx={class:"option-group"},qx={class:"option-group"},Kx=["disabled"],Qx={key:1,class:"export-progress"},eC={class:"progress-message"},tC={class:"progress-bar"},nC=["aria-valuenow"],aC={class:"progress-percentage"},oC=e.defineComponent({__name:"VideoExportPanel",props:{presets:{},isExporting:{type:Boolean},exportProgress:{}},emits:["export"],setup(o,{emit:n}){const t=o,a=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&&a("export",{...s.value,options:{...r}})}return(d,u)=>(e.openBlock(),e.createElementBlock("div",Ox,[u[14]||(u[14]=e.createElementVNode("h3",null,"Export Video",-1)),e.createElementVNode("div",Px,[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,zx))),128))],512),[[e.vModelSelect,i.value]])]),s.value?(e.openBlock(),e.createElementBlock("div",jx,[e.createElementVNode("div",Wx,[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",Zx,[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",Hx,[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",Xx,[u[12]||(u[12]=e.createElementVNode("summary",null,"Advanced Options",-1)),e.createElementVNode("div",Gx,[e.createElementVNode("div",Jx,[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",Yx,[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",qx,[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(U.IonSpinner),{key:0,name:"crescent"})):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(aa)},null,8,["icon"]),u[13]||(u[13]=e.createTextVNode(" Export Video ",-1))],64))],8,Kx),d.isExporting?(e.openBlock(),e.createElementBlock("div",Qx,[e.createElementVNode("div",eC,e.toDisplayString(l.value),1),e.createElementVNode("div",tC,[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,nC)]),e.createElementVNode("div",aC,e.toDisplayString(d.exportProgress)+"% ",1)])):e.createCommentVNode("",!0)]))}}),iC=Me(oC,[["__scopeId","data-v-5caf8fe6"]]),rC=["data-testid"],sC={class:"progress-header"},lC={class:"file-info"},cC={class:"file-details"},dC={class:"file-name"},uC={class:"file-meta"},mC={class:"file-size"},pC={key:0,class:"separator"},fC={key:1,class:"upload-speed"},hC={key:2,class:"separator"},vC={key:3,class:"time-remaining"},gC={class:"progress-actions"},yC={key:0,class:"status-icon completed","data-testid":"video-upload-status-completed"},bC={key:1,class:"status-icon error","data-testid":"video-upload-status-error"},wC={key:2,class:"status-icon processing","data-testid":"video-upload-status-processing",role:"status","aria-label":"Processing video"},kC=["aria-valuenow","aria-label"],_C={class:"progress-bar"},EC={class:"progress-percent"},xC={key:1,class:"error-message","data-testid":"video-upload-error"},CC={key:2,class:"thumbnail-preview","data-testid":"video-upload-thumbnail"},SC=["src","alt"],VC={key:0,class:"video-duration"},NC=e.defineComponent({__name:"VideoUploadProgress",props:{upload:{}},emits:["cancel","retry","remove"],setup(o){const n=o,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"})),a=e.computed(()=>_c),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 h=n.upload.timeRemaining;if(h<60)return`${Math.round(h)}s`;const p=Math.floor(h/60);return p<60?`${p}m ${Math.round(h%60)}s`:`${Math.floor(p/60)}h ${p%60}m`}),l=e.computed(()=>{var h;return n.upload.status==="completed"&&((h=n.upload.media)!=null&&h.thumbnail_url)?n.upload.media.thumbnail_url:null}),c=e.computed(()=>{var h;return(h=n.upload.media)==null?void 0:h.duration});function d(h){if(h===0)return"0 B";const p=["B","KB","MB","GB","TB"],v=1024,g=Math.floor(Math.log(h)/Math.log(v));return`${(h/Math.pow(v,g)).toFixed(1)} ${p[g]}`}function u(h){if(h===0)return"0 B/s";const p=["B/s","KB/s","MB/s","GB/s"],v=1024,g=Math.floor(Math.log(h)/Math.log(v));return`${(h/Math.pow(v,g)).toFixed(1)} ${p[g]}`}function m(h){const p=Math.floor(h/3600),v=Math.floor(h%3600/60),g=Math.floor(h%60);return p>0?`${p}:${v.toString().padStart(2,"0")}:${g.toString().padStart(2,"0")}`:`${v}:${g.toString().padStart(2,"0")}`}return(h,p)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["upload-progress-item",t.value]),"data-testid":`video-upload-progress-${h.upload.id}`},[e.createElementVNode("div",sC,[e.createElementVNode("div",lC,[e.createVNode(e.unref(U.IonIcon),{icon:a.value,class:"file-icon","aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("div",cC,[e.createElementVNode("h4",dC,e.toDisplayString(h.upload.filename),1),e.createElementVNode("p",uC,[e.createElementVNode("span",mC,e.toDisplayString(d(h.upload.bytesTotal||0)),1),h.upload.status==="uploading"?(e.openBlock(),e.createElementBlock("span",pC,"•")):e.createCommentVNode("",!0),h.upload.status==="uploading"?(e.openBlock(),e.createElementBlock("span",fC,e.toDisplayString(u(h.upload.uploadSpeed||0)),1)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("span",hC,"•")):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("span",vC,e.toDisplayString(s.value)+" remaining ",1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",gC,[h.upload.status==="completed"?(e.openBlock(),e.createElementBlock("div",yC,[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(vc)},null,8,["icon"])])):h.upload.status==="error"?(e.openBlock(),e.createElementBlock("div",bC,[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Km),"aria-hidden":"true"},null,8,["icon"])])):h.upload.status==="processing"?(e.openBlock(),e.createElementBlock("div",wC,[e.createVNode(e.unref(U.IonSpinner),{name:"crescent"})])):e.createCommentVNode("",!0),h.upload.status==="uploading"?(e.openBlock(),e.createBlock(e.unref(U.IonButton),{key:3,fill:"clear",size:"small",onClick:p[0]||(p[0]=v=>h.$emit("cancel")),"data-testid":"btn-cancel-video-upload","aria-label":"Cancel upload"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Rn),slot:"icon-only"},null,8,["icon"])]),_:1})):h.upload.status==="error"?(e.openBlock(),e.createBlock(e.unref(U.IonButton),{key:4,fill:"clear",size:"small",onClick:p[1]||(p[1]=v=>h.$emit("retry")),"data-testid":"btn-retry-video-upload","aria-label":"Retry upload"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Un),slot:"icon-only"},null,8,["icon"])]),_:1})):h.upload.status==="completed"?(e.openBlock(),e.createBlock(e.unref(U.IonButton),{key:5,fill:"clear",size:"small",onClick:p[2]||(p[2]=v=>h.$emit("remove")),"data-testid":"btn-remove-video-upload","aria-label":"Remove from list"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Rn),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":h.upload.status==="processing"?"Processing progress":"Upload progress"},[e.createElementVNode("div",_C,[e.createElementVNode("div",{class:e.normalizeClass(["progress-fill",{indeterminate:h.upload.status==="processing"}]),style:e.normalizeStyle({width:r.value+"%"})},null,6)]),e.createElementVNode("span",EC,e.toDisplayString(Math.round(r.value))+"%",1)],8,kC)):e.createCommentVNode("",!0),h.upload.error?(e.openBlock(),e.createElementBlock("div",xC,[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Dp)},null,8,["icon"]),e.createElementVNode("span",null,e.toDisplayString(h.upload.error),1)])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",CC,[e.createElementVNode("img",{src:l.value,alt:h.upload.filename},null,8,SC),c.value?(e.openBlock(),e.createElementBlock("div",VC,e.toDisplayString(m(c.value)),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],10,rC))}}),TC=Me(NC,[["__scopeId","data-v-9eacbf91"]]),sr=4,MC=500,BC=new Set([408,425,429,500,502,503,504,520,521,522,523,524,525]);function gi(o){return typeof o=="object"&&o!==null}function Gl(o){return gi(o)?typeof o.upload_url=="string"&&typeof o.upload_id=="string"&&typeof o.media_uuid=="string"&&typeof o.expires_at=="string":!1}function FC(o){if(Gl(o))return o;if(gi(o)&&Gl(o.data))return o.data;throw new Error("Invalid upload response from backend")}function Jl(o){return gi(o)?typeof o.uuid=="string"&&typeof o.processing_status=="string":!1}function IC(o){if(Jl(o))return o;if(gi(o)&&Jl(o.data))return o.data;throw new Error("Invalid media response from backend")}function vo(o){return o?{...o}:{}}function Yl(o,n="PUT"){return typeof o.method=="string"&&o.method.trim()!==""?o.method.trim().toUpperCase():n}function $C(o){return o.resumable===!0?!0:/tusupload/i.test(o.upload_url)}function RC(o){if(typeof btoa=="function")try{return btoa(unescape(encodeURIComponent(o)))}catch{return btoa(o)}throw new Error("Base64 encoder is unavailable for TUS metadata")}function DC(o,n){return[["filename",o.filename],["filetype",o.file.type||"application/octet-stream"],["uploadid",n.upload_id],["mediauuid",n.media_uuid]].map(([a,i])=>`${a} ${RC(i)}`).join(",")}function go(o,n){const t=Math.max(o.bytesTotal,1);o.bytesUploaded=n,o.progress=Math.min(100,n/t*100);const a=Math.max((Date.now()-o.startedAt.getTime())/1e3,.001);o.uploadSpeed=n/a;const i=Math.max(t-n,0);o.timeRemaining=i/Math.max(o.uploadSpeed,1)}function AC(o,n){return o instanceof Error?o:new Error(n)}function LC(o){if(!(o instanceof Error))return!1;const n=o.message.toLowerCase();return n.includes("failed to fetch")||n.includes("networkerror")||n.includes("network request failed")||n.includes("err_ssl_")}function ql(o){const n=Math.max(0,o-1),t=MC*Math.pow(2,n);return Math.min(5e3,t)}function Kl(o){return new Promise(n=>{window.setTimeout(n,o)})}async function Ql(o,n){for(let t=1;t<=sr;t+=1)try{const a=await n();if(a.ok||!BC.has(a.status)||t>=sr)return a;await Kl(ql(t))}catch(a){if(!LC(a)||t>=sr)throw a;await Kl(ql(t))}throw new Error(`${o} failed after retry attempts`)}function UC(o={}){const n=e.ref(new Map),t=e.ref(new Set),a=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 C=Array.from(n.value.values());return C.length===0?0:C.reduce((R,W)=>R+W.progress,0)/C.length});function d(C){a.value=C}function u(){}async function m(C){var R;const A=C.filter(W=>h(W));if(A.length!==0&&((R=o.onFilesSelected)==null||R.call(o,A),o.autoUpload!==!1))for(const W of A)await p(W)}function h(C){return!(o.maxFileSize&&C.size>o.maxFileSize||o.allowedFormats&&o.allowedFormats.length>0&&!o.allowedFormats.includes(C.type))}async function p(C){var W,O,I;const A=P(C);if(n.value.has(A)){const F=n.value.get(A);if((F==null?void 0:F.status)==="uploading")return}const R={id:A,file:C,filename:C.name,progress:0,status:"pending",startedAt:new Date,bytesTotal:C.size,bytesUploaded:0};n.value.set(R.id,R),t.value.add(R.id);try{R.status="uploading",(W=o.onUploadStart)==null||W.call(o,R);const F=await v(C);o.resumable===!0||F.resumable===!0?await w(R,F):await g(R,F),R.status="processing",R.progress=100;const $=await _(F.media_uuid);R.status="completed",R.media=$,(O=o.onUploadComplete)==null||O.call(o,$)}catch(F){if(R.status!=="cancelled"){const k=AC(F,"Upload failed");R.status="error",R.error=k.message,(I=o.onUploadError)==null||I.call(o,k,R)}}finally{t.value.delete(R.id),i.delete(R.id),r.delete(R.id)}}async function v(C){if(!a.value)throw new Error("API client not configured");const A={collection:o.collection||"videos",filename:C.name,size:C.size,mime_type:C.type,...o.ownerUuid!==void 0?{ownerUuid:o.ownerUuid}:{},...o.ownerType!==void 0?{ownerType:o.ownerType}:{}},R=await a.value.post("/api/v1/video/upload",A);return FC(R)}async function g(C,A){const R=new XMLHttpRequest,W=Yl(A),O=vo(A.headers);return new Promise((I,F)=>{R.upload.addEventListener("progress",k=>{var $;k.lengthComputable&&(go(C,k.loaded),($=o.onUploadProgress)==null||$.call(o,C))}),R.addEventListener("load",()=>{i.delete(C.id),R.status>=200&&R.status<300?I():F(new Error(`Upload failed with status ${R.status}`))}),R.addEventListener("error",()=>{i.delete(C.id),F(new Error("Upload failed"))}),R.addEventListener("abort",()=>{i.delete(C.id),F(new Error("Upload cancelled"))}),R.open(W,A.upload_url),Object.entries(O).forEach(([k,$])=>{R.setRequestHeader(k,$)}),!Object.keys(O).some(k=>k.toLowerCase()==="content-type")&&C.file.type&&R.setRequestHeader("Content-Type",C.file.type),i.set(C.id,R),R.send(C.file)})}async function w(C,A){var F;if($C(A)){await M(C,A);return}const R=o.chunkSize||5*1024*1024,W=V(C.file,R),O=new AbortController;r.set(C.id,O);const I=await f(A.upload_id);I&&(W.forEach(k=>{k.end<=I.bytesUploaded&&(k.uploaded=!0)}),go(C,I.bytesUploaded));for(const k of W)k.uploaded||(await b(C,A,k,O),go(C,k.end),(F=o.onUploadProgress)==null||F.call(o,C))}async function M(C,A){var j;const R=new AbortController;r.set(C.id,R);const W={...vo(A.headers),"Tus-Resumable":"1.0.0","Upload-Length":String(C.file.size),"Upload-Metadata":DC(C,A)},O=await Ql("Resumable upload initialization",()=>fetch(A.upload_url,{method:"POST",headers:W,signal:R.signal}));if(!O.ok)throw new Error(`Failed to initialize resumable upload: ${O.status}`);const I=O.headers.get("Location");if(!I)throw new Error("Resumable upload endpoint did not return upload location");const F=new URL(I,A.upload_url).toString(),k=o.chunkSize||5*1024*1024;let $=0;for(;$<C.file.size;){const Z=Math.min($+k,C.file.size),K=C.file.slice($,Z),ge={...vo(A.headers),"Tus-Resumable":"1.0.0","Upload-Offset":String($),"Content-Type":"application/offset+octet-stream"},we=await Ql("Resumable chunk upload",()=>fetch(F,{method:"PATCH",headers:ge,body:K,signal:R.signal}));if(we.status===409){const N=Number(we.headers.get("Upload-Offset")??"-1");if(Number.isFinite(N)&&N>=0){$=N;continue}}if(!we.ok)throw new Error(`Resumable chunk upload failed: ${we.status}`);const ne=Number(we.headers.get("Upload-Offset")??String(Z));$=Number.isFinite(ne)&&ne>$?ne:Z,go(C,$),(j=o.onUploadProgress)==null||j.call(o,C)}}function V(C,A){const R=[];let W=0,O=0;for(;W<C.size;){const I=Math.min(W+A,C.size);R.push({start:W,end:I,blob:C.slice(W,I),index:O,uploaded:!1}),W=I,O++}return R}async function b(C,A,R,W){const O={...vo(A.headers),"Content-Range":`bytes ${R.start}-${R.end-1}/${C.file.size}`,"Content-Type":C.file.type||"application/octet-stream"},I=await fetch(A.upload_url,{method:Yl(A),headers:O,body:R.blob,signal:W.signal});if(!I.ok)throw new Error(`Chunk upload failed: ${I.status}`);R.uploaded=!0}async function f(C){return null}async function _(C){if(!a.value)throw new Error("API client not configured");const A=60;let R=0;for(;R<A;){const W=await a.value.get(`/api/v1/video/${C}`),O=IC(W),I=String(O.processing_status);if(I==="ready")return O;if(I==="failed"||I==="error")throw new Error("Video processing failed");await new Promise(F=>{window.setTimeout(F,5e3)}),R++}throw new Error("Video processing timeout")}function D(C){const A=n.value.get(C);if(!A)return;const R=i.get(C);R&&(R.abort(),i.delete(C));const W=r.get(C);W&&(W.abort(),r.delete(C)),A.status="cancelled",A.error="Upload cancelled",t.value.delete(C)}async function B(C){const A=n.value.get(C);A&&(A.status="pending",A.error="",A.progress=0,A.bytesUploaded=0,await p(A.file))}function E(C){n.value.delete(C),t.value.delete(C),i.delete(C),r.delete(C)}function S(){Array.from(n.value.entries()).forEach(([C,A])=>{A.status==="completed"&&n.value.delete(C)})}function P(C){return`${C.name}-${C.size}-${Date.now()}`}return{uploads:l,isUploading:s,totalProgress:c,openFilePicker:u,handleFileSelect:m,validateFile:h,startUpload:p,cancelUpload:D,retryUpload:B,removeUpload:E,clearCompleted:S,setApiClient:d}}const OC=["accept","multiple"],PC={key:0,class:"upload-trigger","data-testid":"video-uploader-trigger"},zC=["onKeydown"],jC={key:1,class:"upload-list","data-testid":"video-upload-list"},WC={class:"drag-content"},ZC=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(o,{emit:n}){const t=o,a=n,i=e.ref(),r=e.ref(!1),{uploads:s,isUploading:l,handleFileSelect:c,cancelUpload:d,retryUpload:u,removeUpload:m,setApiClient:h}=UC({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=>a("upload-start",f),onUploadProgress:f=>a("upload-progress",f),onUploadComplete:f=>a("upload-complete",f),onUploadError:(f,_)=>a("upload-error",f,_),onFilesSelected:f=>a("files-selected",f)});t.apiClient&&h(t.apiClient);const p=e.computed(()=>t.allowedFormats.join(",")),v=e.computed(()=>t.multiple||s.value.length===0);function g(){i.value&&i.value.click()}function w(f){const _=f.target,D=Array.from(_.files||[]);D.length>0&&(c(D),_.value="")}function M(f){var B;f.preventDefault(),r.value=!1;const D=Array.from(((B=f.dataTransfer)==null?void 0:B.files)||[]).filter(E=>E.type.startsWith("video/"));D.length>0&&c(D)}function V(f){var _;f.preventDefault(),(_=f.dataTransfer)!=null&&_.types.includes("Files")&&(r.value=!0)}function b(f){f.target.closest(".video-uploader")||(r.value=!1)}return e.onMounted(()=>{document.addEventListener("dragover",V),document.addEventListener("dragleave",b),document.addEventListener("drop",f=>f.preventDefault())}),e.onUnmounted(()=>{document.removeEventListener("dragover",V),document.removeEventListener("dragleave",b),document.removeEventListener("drop",f=>f.preventDefault())}),(f,_)=>(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:p.value,multiple:f.multiple,onChange:w,"data-testid":"video-uploader-input","aria-label":"Select video files to upload",hidden:""},null,40,OC),!e.unref(l)||v.value?(e.openBlock(),e.createElementBlock("div",PC,[e.renderSlot(f.$slots,"trigger",{open:g},()=>[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:g,onKeydown:[e.withKeys(g,["enter"]),e.withKeys(e.withModifiers(g,["prevent"]),["space"])]},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(_c),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(U.IonButton),{size:"small","data-testid":"btn-select-video","aria-label":"Select video file"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Hr),slot:"start","aria-hidden":"true"},null,8,["icon"]),_[2]||(_[2]=e.createTextVNode(" Select Video ",-1))]),_:1})],40,zC)],!0)])):e.createCommentVNode("",!0),e.unref(s).length>0?(e.openBlock(),e.createElementBlock("div",jC,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s),D=>(e.openBlock(),e.createBlock(TC,{key:D.id,upload:D,onCancel:B=>e.unref(d)(D.id),onRetry:B=>e.unref(u)(D.id),onRemove:B=>e.unref(m)(D.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:M,onDragover:_[0]||(_[0]=e.withModifiers(()=>{},["prevent"])),onDragleave:_[1]||(_[1]=D=>r.value=!1)},[e.createElementVNode("div",WC,[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(aa),"aria-hidden":"true"},null,8,["icon"]),_[3]||(_[3]=e.createElementVNode("p",null,"Drop video files here",-1))])],32)):e.createCommentVNode("",!0)],2))}}),HC=Me(ZC,[["__scopeId","data-v-ea7587f7"]]),XC=["aria-valuenow","aria-valuemax","aria-label"],GC={class:"progress-bar"},JC={class:"time-display","data-testid":"video-time-display"},YC={class:"current-time"},qC={class:"duration"},KC={class:"control-buttons"},QC={class:"controls-left"},eS=["aria-label"],tS={class:"controls-center"},nS={key:0,class:"volume-controls"},aS=["aria-label"],oS=["value"],iS={class:"controls-right"},rS={key:0,class:"quality-selector"},sS=["aria-expanded"],lS={class:"quality-label"},cS={key:0,class:"quality-menu","data-testid":"video-quality-menu",role:"menu"},dS=["data-testid","aria-label","onClick"],uS=["aria-label"],mS=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(o,{emit:n}){const t=o,a=n,i=e.ref(!0),r=e.ref(!1),s=e.ref(),l=U.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 _=t.buffered.start(f),D=t.buffered.end(f);if(t.currentTime>=_&&t.currentTime<=D)return{width:`${D/t.duration*100}%`}}return t.buffered.length>0?{width:`${t.buffered.end(0)/t.duration*100}%`}:{width:"0%"}}),h=e.computed(()=>t.muted||t.volume===0?$p:t.volume<33?Bp:t.volume<66?Fp:Mp);let p=null;function v(){i.value=!0,g()}function g(){p&&clearTimeout(p),t.playing&&!l&&(p=setTimeout(()=>{i.value=!1},3e3))}function w(f){if(!s.value||t.isLive)return;const _=s.value.getBoundingClientRect(),B=(f.clientX-_.left)/_.width*t.duration;a("seek",Math.max(0,Math.min(B,t.duration)))}function M(f){const _=f.target;a("setVolume",parseInt(_.value))}function V(f){a("selectQuality",f),r.value=!1}function b(f){if(!isFinite(f))return"0:00";const _=Math.floor(f/3600),D=Math.floor(f%3600/60),B=Math.floor(f%60);return _>0?`${_}:${D.toString().padStart(2,"0")}:${B.toString().padStart(2,"0")}`:`${D}:${B.toString().padStart(2,"0")}`}return e.onMounted(()=>{document.addEventListener("mousemove",v),g()}),e.onUnmounted(()=>{document.removeEventListener("mousemove",v),p&&clearTimeout(p)}),(f,_)=>(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:w},[e.createElementVNode("div",GC,[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",JC,[e.createElementVNode("span",YC,e.toDisplayString(b(f.currentTime)),1),_[7]||(_[7]=e.createElementVNode("span",{class:"separator"},"/",-1)),e.createElementVNode("span",qC,e.toDisplayString(f.isLive?"LIVE":b(f.duration)),1)])],8,XC),e.createElementVNode("div",KC,[e.createElementVNode("div",QC,[e.createElementVNode("button",{class:"control-btn play-pause","data-testid":"btn-video-play-pause",onClick:_[0]||(_[0]=D=>f.$emit("play-pause")),"aria-label":f.playing?"Pause":"Play"},[e.createVNode(e.unref(U.IonIcon),{icon:f.playing?e.unref(hp):e.unref(gp),"aria-hidden":"true"},null,8,["icon"])],8,eS),f.isLive?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,class:"control-btn skip-backward","data-testid":"btn-video-skip-backward",onClick:_[1]||(_[1]=D=>f.$emit("skip-backward")),"aria-label":"Skip backward 10 seconds"},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(yp),"aria-hidden":"true"},null,8,["icon"]),_[8]||(_[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:_[2]||(_[2]=D=>f.$emit("skip-forward")),"aria-label":"Skip forward 10 seconds"},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(kp),"aria-hidden":"true"},null,8,["icon"]),_[9]||(_[9]=e.createElementVNode("span",{class:"skip-label"},"10",-1))]))]),e.createElementVNode("div",tS,[e.unref(l)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",nS,[e.createElementVNode("button",{class:"control-btn mute-btn","data-testid":"btn-video-mute",onClick:_[3]||(_[3]=D=>f.$emit("toggleMute")),"aria-label":f.muted?"Unmute":"Mute"},[e.createVNode(e.unref(U.IonIcon),{icon:h.value,"aria-hidden":"true"},null,8,["icon"])],8,aS),e.createElementVNode("input",{type:"range",class:"volume-slider","data-testid":"slider-video-volume",min:"0",max:"100",value:f.muted?0:f.volume,onInput:M,"aria-label":"Volume"},null,40,oS)]))]),e.createElementVNode("div",iS,[f.qualityLevels.length>1?(e.openBlock(),e.createElementBlock("div",rS,[e.createElementVNode("button",{class:"control-btn quality-btn","data-testid":"btn-video-quality",onClick:_[4]||(_[4]=D=>r.value=!r.value),"aria-label":"Quality settings","aria-expanded":r.value},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Vp),"aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("span",lS,e.toDisplayString(f.currentQuality),1)],8,sS),r.value?(e.openBlock(),e.createElementBlock("div",cS,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.qualityLevels,D=>(e.openBlock(),e.createElementBlock("button",{key:D.label,class:e.normalizeClass(["quality-option",{active:D.label===f.currentQuality}]),"data-testid":`btn-video-quality-${D.label}`,"aria-label":`Set quality to ${D.label}`,role:"menuitem",onClick:B=>V(D)},e.toDisplayString(D.label),11,dS))),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:_[5]||(_[5]=D=>f.$emit("togglePiP")),"aria-label":"Picture in Picture"},[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Np),"aria-hidden":"true"},null,8,["icon"])])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"control-btn fullscreen-btn","data-testid":"btn-video-fullscreen",onClick:_[6]||(_[6]=D=>f.$emit("toggleFullscreen")),"aria-label":f.fullscreen?"Exit fullscreen":"Enter fullscreen"},[e.createVNode(e.unref(U.IonIcon),{icon:f.fullscreen?e.unref(ip):e.unref(lp),"aria-hidden":"true"},null,8,["icon"])],8,uS)])])],2))}}),pS=Me(mS,[["__scopeId","data-v-2ae77c13"]]);function fS(o={}){var K,ge,we;const n=e.ref(),t=e.ref(),a=e.ref(!1),i=e.ref(0),r=e.ref(0),s=e.ref(100),l=e.ref(o.muted||!1),c=e.ref(!1),d=e.ref(),u=e.ref(1),m=e.ref(!1),h=e.ref(null),p=e.ref("idle"),v=e.ref(o.playbackUrl||((K=o.media)==null?void 0:K.playback_url)||((ge=o.media)==null?void 0:ge.url)||""),g=e.ref(null),w=e.ref(o.isLive||!1),M=e.ref(null),V=e.ref(null);function b(ne){V.value=ne}if((we=o.media)!=null&&we.token_expires_at){const ne=new Date(o.media.token_expires_at);g.value=Number.isNaN(ne.getTime())?null:ne}async function f(){var N;const ne=w.value?t.value:n.value;if(ne)try{await ne.play(),a.value=!0,p.value=w.value?"live":"playing",(N=o.onPlay)==null||N.call(o)}catch{h.value="Failed to play video",p.value="error"}}function _(){var N;const ne=w.value?t.value:n.value;ne&&(ne.pause(),a.value=!1,p.value="paused",(N=o.onPause)==null||N.call(o))}function D(){a.value?_():f()}function B(ne){const N=w.value?t.value:n.value;if(!N||w.value)return;const L=Number.isFinite(N.duration)?N.duration:ne;N.currentTime=Math.max(0,Math.min(ne,L)),i.value=N.currentTime}function E(ne=10){const N=n.value;!N||w.value||B(N.currentTime+ne)}function S(ne=10){const N=n.value;!N||w.value||B(N.currentTime-ne)}function P(){const ne=w.value?t.value:n.value;ne&&(ne.muted=!ne.muted,l.value=ne.muted)}function C(ne){const N=w.value?t.value:n.value;if(!N)return;const L=Math.max(0,Math.min(100,ne));N.volume=L/100,s.value=L,L>0&&N.muted&&(N.muted=!1,l.value=!1)}function A(ne){const N=n.value;!N||w.value||(N.playbackRate=ne,u.value=ne)}async function R(){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 W(){const ne=w.value?t.value:n.value;if(ne)try{document.pictureInPictureElement?await document.exitPictureInPicture():document.pictureInPictureEnabled&&await ne.requestPictureInPicture()}catch{}}async function O(){var N;h.value=null,p.value="loading",(N=o.media)!=null&&N.provider&&o.media.provider!=="local"&&await I();const ne=w.value?t.value:n.value;ne&&(ne.load(),await f())}async function I(){if(!(!V.value||!o.media))try{m.value=!0;const ne=await V.value.get(`/api/v1/video/${o.media.uuid}/playback`);v.value=ne.playback_url,g.value=new Date(ne.token_expires_at);const N=w.value?t.value:n.value;if(N&&N.src!==v.value){const L=!N.paused,te=N.currentTime;N.src=v.value,w.value||(N.currentTime=te),L&&await f()}}catch{h.value="Failed to refresh playback token",p.value="error"}finally{m.value=!1}}async function F(ne){if(t.value){if(t.value.canPlayType("application/vnd.apple.mpegurl")){t.value.src=ne;return}try{t.value.src=ne}catch{h.value="Live streaming not supported in this browser",p.value="error"}}}function k(){M.value&&(M.value.destroy(),M.value=null)}function $(){var N;const ne=w.value?t.value:n.value;ne&&(i.value=ne.currentTime,r.value=ne.duration,(N=o.onTimeUpdate)==null||N.call(o,ne.currentTime))}const j=e.computed(()=>{if(!d.value||d.value.length===0||!r.value)return 0;for(let ne=0;ne<d.value.length;ne++){const N=d.value.start(ne),L=d.value.end(ne);if(i.value>=N&&i.value<=L)return L/r.value*100}return 0});function Z(){if(!g.value)return!1;const ne=new Date;return g.value.getTime()-ne.getTime()<5*60*1e3}return e.watch([n,t],([ne,N])=>{const L=w.value?N:ne;L&&(L.addEventListener("timeupdate",$),L.addEventListener("loadedmetadata",()=>{r.value=L.duration,p.value="ready"}),L.addEventListener("progress",()=>{d.value=L.buffered}),L.addEventListener("ended",()=>{var te;a.value=!1,p.value="ended",(te=o.onEnded)==null||te.call(o)}),L.addEventListener("error",te=>{var ae;p.value="error",(ae=o.onError)==null||ae.call(o,"Video playback error")}),L.volume=s.value/100,L.muted=l.value)}),e.onUnmounted(()=>{k();const ne=w.value?t.value:n.value;ne&&ne.removeEventListener("timeupdate",$)}),{videoEl:n,liveVideoEl:t,playing:a,currentTime:i,duration:r,volume:s,muted:l,isFullscreen:c,bufferedRanges:d,bufferedPercent:j,playbackRate:u,isLoading:m,error:h,status:p,currentPlaybackUrl:v,tokenExpiresAt:g,play:f,pause:_,togglePlayPause:D,seek:B,skipForward:E,skipBackward:S,toggleMute:P,setVolume:C,setPlaybackRate:A,toggleFullscreen:R,togglePiP:W,retry:O,refreshToken:I,setupLiveStream:F,setApiClient:b,shouldRefreshToken:Z}}const hS=["src","poster","controls","autoplay","muted","loop","preload"],vS={key:1,ref:"livePlayerEl",class:"live-player"},gS=["controls","muted"],yS={key:0,class:"live-indicator","data-testid":"video-live-indicator","aria-label":"Live stream"},bS={key:2,class:"video-loading","data-testid":"video-loading",role:"status","aria-label":"Loading video"},wS={key:3,class:"video-error","data-testid":"video-error",role:"alert"},kS={key:5,class:"gesture-zones","data-testid":"video-gesture-zones"},_S=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(o,{emit:n}){const t=o,a=n,{videoEl:i,liveVideoEl:r,playing:s,currentTime:l,duration:c,volume:d,muted:u,isFullscreen:m,bufferedRanges:h,isLoading:p,error:v,status:g,currentPlaybackUrl:w,tokenExpiresAt:M,play:V,pause:b,seek:f,toggleMute:_,setVolume:D,toggleFullscreen:B,togglePlayPause:E,skipForward:S,skipBackward:P,retry:C,refreshToken:A,setApiClient:R,shouldRefreshToken:W,setupLiveStream:O}=fS({...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 I(){await A()}const F=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"),p.value&&ae.push("is-loading"),ae}),k=e.computed(()=>{var ae,ie;if(t.poster)return t.poster;if((ae=t.media)!=null&&ae.poster_url)return t.media.poster_url;if((ie=t.media)!=null&&ie.thumbnail_url)return t.media.thumbnail_url});function $(ae){const ie=ae.target;a("loadedmetadata",{duration:ie.duration,width:ie.videoWidth,height:ie.videoHeight})}function j(ae){const ie=ae.target;l.value=ie.currentTime,a("timeupdate",ie.currentTime)}function Z(){s.value=!0,a("play")}function K(){s.value=!1,a("pause")}function ge(){s.value=!1,a("ended")}function we(ae){const ie=ae.target;let he="Failed to load video";if(ie.error)switch(ie.error.code){case ie.error.MEDIA_ERR_ABORTED:he="Video playback aborted";break;case ie.error.MEDIA_ERR_NETWORK:he="Network error while loading video";break;case ie.error.MEDIA_ERR_DECODE:he="Video decoding error";break;case ie.error.MEDIA_ERR_SRC_NOT_SUPPORTED:he="Video format not supported";break}v.value=he,a("error",he)}function ne(ae){const ie=ae.target;h.value=ie.buffered,a("progress",ie.buffered)}function N(){p.value=!0}function L(){p.value=!1}e.watch(()=>t.apiClient,ae=>{ae&&R(ae)},{immediate:!0}),e.watch(()=>t.playbackUrl,ae=>{typeof ae=="string"&&ae.length>0&&(w.value=ae)},{immediate:!0}),e.watch(()=>{var ae;return(ae=t.media)==null?void 0:ae.token_expires_at},ae=>{if(!ae){M.value=null;return}const ie=new Date(ae);M.value=Number.isNaN(ie.getTime())?null:ie},{immediate:!0}),e.watch(()=>{var ae;return(ae=t.media)==null?void 0:ae.playback_url},async(ae,ie)=>{if(t.playbackUrl||!ae||ae===ie)return;const he=i.value;if(!he||t.isLive){w.value=ae;return}const se=!he.paused,fe=he.currentTime;w.value=ae,await e.nextTick();try{he.currentTime=fe}catch{}se&&await V()},{immediate:!0});let te=null;return e.watch(()=>t.isLive,async ae=>{var he;if(!ae)return;const ie=t.playbackUrl||((he=t.media)==null?void 0:he.playback_url)||"";ie&&await O(ie)},{immediate:!0}),e.onMounted(()=>{var ae;(ae=t.media)!=null&&ae.provider&&t.media.provider!=="local"&&(te=setInterval(()=>{W()&&I()},3e4)),U.isPlatform("mobile")&&t.showCustomControls}),e.onUnmounted(()=>{te&&clearInterval(te)}),(ae,ie)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-player-container",F.value]),"data-testid":"video-player"},[ae.isLive?(e.openBlock(),e.createElementBlock("div",vS,[e.createElementVNode("video",{ref_key:"liveVideoEl",ref:r,controls:ae.controls&&!ae.showCustomControls,autoplay:!0,muted:e.unref(u),onPlay:Z,onPause:K,onError:we,playsinline:"",class:"video-element","data-testid":"video-element"},null,40,gS),e.unref(g)==="live"?(e.openBlock(),e.createElementBlock("div",yS,[...ie[3]||(ie[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(w),poster:k.value,controls:ae.controls&&!ae.showCustomControls,autoplay:ae.autoplay,muted:e.unref(u),loop:ae.loop,preload:ae.preload,onLoadedmetadata:$,onTimeupdate:j,onPlay:Z,onPause:K,onEnded:ge,onError:we,onProgress:ne,onWaiting:N,onCanplay:L,playsinline:"",class:"video-element","data-testid":"video-element"},null,40,hS)),e.unref(p)?(e.openBlock(),e.createElementBlock("div",bS,[e.createVNode(e.unref(U.IonSpinner),{name:"crescent"})])):e.createCommentVNode("",!0),e.unref(v)?(e.openBlock(),e.createElementBlock("div",wS,[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Xr),"aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("p",null,e.toDisplayString(e.unref(v)),1),e.createVNode(e.unref(U.IonButton),{size:"small",onClick:e.unref(C),"data-testid":"btn-video-retry","aria-label":"Retry loading video"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{icon:e.unref(Un),slot:"start","aria-hidden":"true"},null,8,["icon"]),ie[4]||(ie[4]=e.createTextVNode(" Retry ",-1))]),_:1},8,["onClick"])])):e.createCommentVNode("",!0),ae.showCustomControls&&!e.unref(v)?(e.openBlock(),e.createBlock(pS,{key:4,playing:e.unref(s),currentTime:e.unref(l),duration:e.unref(c),buffered:e.unref(h),volume:e.unref(d),muted:e.unref(u),fullscreen:e.unref(m),isLive:ae.isLive,onPlay:e.unref(V),onPause:e.unref(b),onSeek:e.unref(f),onToggleMute:e.unref(_),onSetVolume:e.unref(D),onToggleFullscreen:e.unref(B),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",kS,[e.createElementVNode("div",{class:"gesture-left","data-testid":"video-gesture-skip-back","aria-label":"Double tap to skip backward",onDblclick:ie[0]||(ie[0]=(...he)=>e.unref(P)&&e.unref(P)(...he))},null,32),e.createElementVNode("div",{class:"gesture-center","data-testid":"video-gesture-play-pause","aria-label":"Tap to play or pause",onClick:ie[1]||(ie[1]=(...he)=>e.unref(E)&&e.unref(E)(...he))}),e.createElementVNode("div",{class:"gesture-right","data-testid":"video-gesture-skip-forward","aria-label":"Double tap to skip forward",onDblclick:ie[2]||(ie[2]=(...he)=>e.unref(S)&&e.unref(S)(...he))},null,32)])):e.createCommentVNode("",!0)],2))}}),Ad=Me(_S,[["__scopeId","data-v-b8db4951"]]),ES=Ho.defineStore("video",()=>{const o=e.ref(new Map),n=e.ref(new Map),t=e.ref(new Map),a=e.ref(null),i=e.ref(!1),r=e.computed(()=>Array.from(o.value.values())),s=e.computed(()=>Array.from(n.value.values())),l=e.computed(()=>s.value.filter(O=>O.status==="live")),c=e.computed(()=>r.value.filter(O=>O.processing_status==="processing"));function d(O){o.value.set(O.uuid,O)}function u(O,I){const F=o.value.get(O);F&&o.value.set(O,{...F,...I})}function m(O){o.value.delete(O)}function h(O){return o.value.get(O)}function p(O){n.value.set(O.id,O)}function v(O,I){const F=n.value.get(O);F&&n.value.set(O,{...F,...I})}function g(O,I){const F=n.value.get(O);F&&n.value.set(O,{...F,status:I.status,viewer_count:I.viewer_count,peak_viewers:I.peak_viewers})}function w(O){n.value.delete(O)}function M(O){return n.value.get(O)}function V(O){return s.value.find(I=>I.media_uuid===O)}function b(O){t.value.set(O.id,O)}function f(O,I){const F=t.value.get(O);F&&t.value.set(O,{...F,...I})}function _(O){t.value.delete(O)}function D(O){return t.value.get(O)}function B(O){return Array.from(t.value.values()).filter(I=>I.media_uuid===O)}function E(O){a.value=O}function S(O){a.value&&(a.value={...a.value,...O})}function P(){a.value=null}function C(O){i.value=O}function A(){o.value.clear(),n.value.clear(),t.value.clear(),a.value=null,i.value=!1}function R(O){o.value.clear(),O.forEach(I=>{o.value.set(I.uuid,I)})}function W(O){n.value.clear(),O.forEach(I=>{n.value.set(I.id,I)})}return{videos:o,liveStreams:n,exportJobs:t,currentEditorState:a,isProcessing:i,allVideos:r,allLiveStreams:s,activeLiveStreams:l,processingVideos:c,setVideo:d,updateVideo:u,removeVideo:m,getVideo:h,setLiveStream:p,updateLiveStream:v,updateLiveStreamStats:g,removeLiveStream:w,getLiveStream:M,getLiveStreamByMedia:V,addExportJob:b,updateExportJob:f,removeExportJob:_,getExportJob:D,getExportJobsByMedia:B,setEditorState:E,updateEditorState:S,clearEditorState:P,setProcessing:C,clearAll:A,loadVideos:R,loadLiveStreams:W}});let Tn=null;function xS(o){Tn=o}const yo={post:async(o,n)=>{if(!Tn)throw new Error("HTTP client not configured");return await Tn(`/api/v1/video${o}`,{method:"POST",body:JSON.stringify(n),headers:{"Content-Type":"application/json"}})},get:async o=>{if(!Tn)throw new Error("HTTP client not configured");return await Tn(`/api/v1/video${o}`)},delete:async o=>{if(!Tn)throw new Error("HTTP client not configured");return await Tn(`/api/v1/video${o}`,{method:"DELETE"})}};function bo(o,n=null){const t=typeof o.id=="string"&&o.id!==""?o.id:typeof o.stream_id=="string"&&o.stream_id!==""?o.stream_id:n==null?void 0:n.id;if(!t)throw new Error("Invalid live stream response: missing stream id");const a={id:t,media_uuid:o.media_uuid??(n==null?void 0:n.media_uuid)??"",stream_key:o.stream_key??(n==null?void 0:n.stream_key)??"",rtmp_url:o.rtmp_url??(n==null?void 0:n.rtmp_url)??"",status:o.status??(n==null?void 0:n.status)??"idle",viewer_count:o.viewer_count??(n==null?void 0:n.viewer_count)??0,peak_viewers:o.peak_viewers??(n==null?void 0:n.peak_viewers)??0,auto_record:o.auto_record??(n==null?void 0:n.auto_record)??!0,low_latency:o.low_latency??(n==null?void 0:n.low_latency)??!1},i=o.playback_url??(n==null?void 0:n.playback_url);i!==void 0&&(a.playback_url=i);const r=o.started_at??(n==null?void 0:n.started_at);r!==void 0&&(a.started_at=r);const s=o.ended_at??(n==null?void 0:n.ended_at);return s!==void 0&&(a.ended_at=s),(n==null?void 0:n.metadata)!==void 0&&(a.metadata=n.metadata),(n==null?void 0:n.vod_media_uuid)!==void 0&&(a.vod_media_uuid=n.vod_media_uuid),a}function lr(o,n){return o instanceof Error&&o.message?o.message:n}function CS(o){const n=ES(),t=e.ref(null),a=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 h;const p=e.computed(()=>d.value?Math.floor((new Date().getTime()-d.value.getTime())/1e3):0),v=e.computed(()=>{var P;if(!((P=t.value)!=null&&P.playback_url))return null;const S=new URL(t.value.playback_url);return S.searchParams.set("live","true"),a.value&&S.searchParams.set("latency","low"),S.toString()}),g=e.computed(()=>{var S;return((S=t.value)==null?void 0:S.status)==="live"}),w=e.computed(()=>{var S;return((S=t.value)==null?void 0:S.status)==="idle"}),M=e.computed(()=>{var S;return((S=t.value)==null?void 0:S.status)==="ended"});async function V(S={}){s.value=!0,c.value=null;try{const P=await yo.post("/live",{title:r.value||S.title||"Live Stream",low_latency:S.low_latency??a.value,auto_record:S.auto_record??i.value,...S}),C=bo(P);return t.value=C,n.setLiveStream(C),D(),C}catch(P){throw c.value=lr(P,"Failed to create stream"),P instanceof Error?P:new Error(c.value)}finally{s.value=!1}}async function b(){if(!t.value)throw new Error("No active stream");l.value=!0,c.value=null;try{const S=await yo.post(`/live/${t.value.id}/end`),P=bo(S,t.value);return t.value=P,n.setLiveStream(P),B(),P}catch(S){throw c.value=lr(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 yo.get(`/live/${t.value.id}`),P=bo(S,t.value);u.value=P.viewer_count,m.value=P.peak_viewers,t.value=P;const C={status:P.status,viewer_count:P.viewer_count,peak_viewers:P.peak_viewers};P.started_at&&(C.started_at=P.started_at),P.ended_at&&(C.ended_at=P.ended_at),n.updateLiveStreamStats(P.id,C),P.status==="live"&&!d.value&&P.started_at&&(d.value=new Date(P.started_at)),P.status==="ended"&&B()}catch{}}async function _(S){try{const P=await yo.get(`/live/${S}`),C=bo(P,t.value);return{rtmp_url:C.rtmp_url,stream_key:C.stream_key,playback_url:C.playback_url||""}}catch(P){throw c.value=lr(P,"Failed to get stream credentials"),P instanceof Error?P:new Error(c.value)}}function D(S=5e3){B(),h=window.setInterval(()=>{f()},S)}function B(){h!==void 0&&(clearInterval(h),h=void 0)}async function E(){if(!o)return;const S=n.getLiveStreamByMedia(o);S&&(t.value=S,u.value=S.viewer_count,m.value=S.peak_viewers,S.status==="live"&&(D(),S.started_at&&(d.value=new Date(S.started_at))))}return o&&E(),e.onUnmounted(()=>{B()}),{stream:t,lowLatency:a,autoRecord:i,streamTitle:r,isCreating:s,isEnding:l,error:c,streamDuration:p,viewerCount:u,peakViewers:m,playbackUrl:v,isLive:g,isIdle:w,hasEnded:M,createStream:V,endStream:b,refreshStreamStatus:f,getStreamCredentials:_,startStatusPolling:D,stopStatusPolling:B}}const SS={class:"stream-status"},VS={class:"flex items-center justify-between"},NS={class:"flex items-center gap-3"},TS={key:0,class:"flex items-center"},MS={key:2,class:"text-sm text-gray-600"},BS={key:0,class:"flex items-center gap-2"},FS={class:"text-sm font-medium text-gray-700"},IS={key:0,class:"text-xs text-gray-500"},$S=e.defineComponent({__name:"StreamStatus",props:{status:{},viewers:{},peakViewers:{},duration:{}},setup(o){const n=o,t=e.computed(()=>({idle:"Ready to Stream",live:"Live",ended:"Stream Ended",error:"Error"})[n.status]||n.status),a=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",SS,[e.createElementVNode("div",VS,[e.createElementVNode("div",NS,[r.status==="live"?(e.openBlock(),e.createElementBlock("div",TS,[...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(a.value)},e.toDisplayString(t.value),3)),i.value?(e.openBlock(),e.createElementBlock("div",MS,e.toDisplayString(i.value),1)):e.createCommentVNode("",!0)]),r.viewers!==void 0?(e.openBlock(),e.createElementBlock("div",BS,[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",FS,e.toDisplayString(r.viewers)+" "+e.toDisplayString(r.viewers===1?"viewer":"viewers"),1),r.peakViewers>r.viewers?(e.openBlock(),e.createElementBlock("span",IS," (Peak: "+e.toDisplayString(r.peakViewers)+") ",1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])]))}}),RS=Me($S,[["__scopeId","data-v-1d09c19f"]]),DS={class:"stream-credentials"},AS={class:"space-y-3"},LS={class:"credential-field"},US={class:"flex gap-2"},OS=["value"],PS={class:"credential-field"},zS={class:"flex gap-2"},jS=["value","type"],WS=["aria-label"],ZS={key:0,class:"w-4 h-4 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},HS={key:1,class:"w-4 h-4 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},XS={key:0,class:"mt-2 text-sm text-green-600"},GS=e.defineComponent({__name:"StreamCredentials",props:{rtmpUrl:{},streamKey:{}},emits:["copy"],setup(o,{emit:n}){const t=o,a=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,a("copy",d,u),setTimeout(()=>{r.value=""},2e3)}catch{}}return(d,u)=>(e.openBlock(),e.createElementBlock("div",DS,[u[8]||(u[8]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 mb-3"},"Stream Settings",-1)),e.createElementVNode("div",AS,[e.createElementVNode("div",LS,[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",US,[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,OS),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",PS,[u[7]||(u[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 mb-1"},"Stream Key",-1)),e.createElementVNode("div",zS,[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,jS),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",HS,[...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",ZS,[...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,WS),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",XS,e.toDisplayString(r.value)+" copied to clipboard! ",1)):e.createCommentVNode("",!0)]),_:1})]))}}),JS=Me(GS,[["__scopeId","data-v-306d92f6"]]),YS={class:"live-stream-manager","data-testid":"live-stream-manager"},qS={key:0,class:"stream-setup"},KS={class:"space-y-4"},QS={class:"flex items-center justify-between p-4 bg-gray-50 rounded-lg"},eV={class:"flex items-center justify-between p-4 bg-gray-50 rounded-lg"},tV=["disabled"],nV={key:0},aV={key:1,class:"flex items-center justify-center"},oV={key:1,class:"stream-active space-y-6"},iV={key:1,class:"video-preview"},rV={key:2,class:"analytics-panel"},sV={class:"grid grid-cols-2 gap-4"},lV={class:"bg-gray-50 p-3 rounded"},cV={class:"text-2xl font-bold text-gray-900"},dV={class:"bg-gray-50 p-3 rounded"},uV={class:"text-2xl font-bold text-gray-900"},mV={class:"stream-controls flex gap-3"},pV=["disabled"],fV={key:0},hV={key:1},vV={key:2,class:"mt-4 p-4 bg-red-50 border border-red-200 rounded-lg"},gV={class:"text-red-600 text-sm"},yV=e.defineComponent({__name:"LiveStreamManager",props:{mediaUuid:{},onStreamCreated:{type:Function},onStreamEnded:{type:Function},httpClient:{type:Function}},emits:["stream-created","stream-ended","error"],setup(o,{emit:n}){const t=o,a=n;t.httpClient&&xS(t.httpClient);const{stream:i,lowLatency:r,autoRecord:s,streamTitle:l,isCreating:c,isEnding:d,error:u,createStream:m,endStream:h,streamDuration:p,playbackUrl:v,refreshStreamStatus:g}=CS(t.mediaUuid),w=e.ref(!1);async function M(){var D;try{const B=await m({title:l.value,low_latency:r.value,auto_record:s.value});a("stream-created",B),(D=t.onStreamCreated)==null||D.call(t,B)}catch(B){a("error",B)}}async function V(){var D;try{const B=await h();a("stream-ended",B),(D=t.onStreamEnded)==null||D.call(t,B)}catch(B){a("error",B)}}function b(){i.value=null,l.value="",w.value=!1,u.value=null}async function f(D,B){try{await navigator.clipboard.writeText(D)}catch{}}let _;return e.onMounted(()=>{var D;((D=i.value)==null?void 0:D.status)==="live"&&(_=window.setInterval(()=>{g()},5e3))}),e.onUnmounted(()=>{_&&clearInterval(_)}),(D,B)=>(e.openBlock(),e.createElementBlock("div",YS,[e.unref(i)?(e.openBlock(),e.createElementBlock("div",oV,[e.createVNode(RS,{status:e.unref(i).status,viewers:e.unref(i).viewer_count,duration:e.unref(p),"peak-viewers":e.unref(i).peak_viewers},null,8,["status","viewers","duration","peak-viewers"]),e.unref(i).status==="idle"?(e.openBlock(),e.createBlock(JS,{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",iV,[B[9]||(B[9]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 mb-2"},"Live Preview",-1)),e.createVNode(Ad,{"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",rV,[B[12]||(B[12]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 mb-3"},"Live Analytics",-1)),e.createElementVNode("div",sV,[e.createElementVNode("div",lV,[e.createElementVNode("div",cV,e.toDisplayString(e.unref(i).viewer_count),1),B[10]||(B[10]=e.createElementVNode("div",{class:"text-xs text-gray-500"},"Current Viewers",-1))]),e.createElementVNode("div",dV,[e.createElementVNode("div",uV,e.toDisplayString(e.unref(i).peak_viewers),1),B[11]||(B[11]=e.createElementVNode("div",{class:"text-xs text-gray-500"},"Peak Viewers",-1))])])])):e.createCommentVNode("",!0),e.createElementVNode("div",mV,[e.unref(i).status==="idle"?(e.openBlock(),e.createElementBlock("button",{key:0,onClick:B[3]||(B[3]=E=>w.value=!w.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(w.value?"Hide":"Show")+" Credentials ",1)):e.createCommentVNode("",!0),e.unref(i).status==="live"?(e.openBlock(),e.createElementBlock("button",{key:1,onClick:V,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",hV,"Ending...")):(e.openBlock(),e.createElementBlock("span",fV,"End Stream"))],8,pV)):e.createCommentVNode("",!0),e.unref(i).status==="ended"?(e.openBlock(),e.createElementBlock("button",{key:2,onClick:b,class:"flex-1 py-2 px-4 bg-blue-600 text-white font-medium rounded-lg hover:bg-blue-700 transition-colors"}," Start New Stream ")):e.createCommentVNode("",!0)])])):(e.openBlock(),e.createElementBlock("div",qS,[B[8]||(B[8]=e.createElementVNode("h3",{class:"text-lg font-semibold mb-4"},"Start Live Stream",-1)),e.createElementVNode("div",KS,[e.createElementVNode("div",QS,[B[4]||(B[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":B[0]||(B[0]=E=>e.isRef(r)?r.value=E: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",eV,[B[5]||(B[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":B[1]||(B[1]=E=>e.isRef(s)?s.value=E: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,[B[6]||(B[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":B[2]||(B[2]=E=>e.isRef(l)?l.value=E: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:M,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",aV,[...B[7]||(B[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",nV,"Create Stream"))],8,tV)])])),e.unref(u)?(e.openBlock(),e.createElementBlock("div",vV,[e.createElementVNode("p",gV,e.toDisplayString(e.unref(u)),1)])):e.createCommentVNode("",!0)]))}}),bV=Me(yV,[["__scopeId","data-v-26291f6f"]]),wV={class:"album-tree-node"},kV=["data-album-id","draggable","aria-selected","aria-expanded"],_V={key:1,class:"album-node__chevron-placeholder"},EV={key:2,"data-testid":"media-count",class:"album-node__count"},xV={key:0,class:"album-tree-node__children",role:"group"},CV=16,SV=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(o,{emit:n}){const t=o,a=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*CV}px`),d=e.computed(()=>{var b;return((b=t.dragState)==null?void 0:b.draggedAlbumId)===t.album.id}),u=e.computed(()=>{var b;return((b=t.dragState)==null?void 0:b.dropTargetId)===t.album.id}),m=e.computed(()=>{var b;return(b=t.dragState)!=null&&b.draggedAlbumId?t.dragState.draggedAlbumId===t.album.id:!1}),h=e.computed(()=>{const b=["album-node"];return r.value&&b.push("album-node--selected"),s.value&&b.push("album-node--focused"),t.compact&&b.push("album-node--compact"),d.value&&b.push("album-node--dragging"),u.value&&b.push("album-node--drop-target"),m.value&&b.push("album-node--invalid-drop"),b});function p(){a("select",t.album)}function v(b){b.stopPropagation(),a("toggle-expand",t.album.id)}function g(b){t.draggable&&(b.dataTransfer&&(b.dataTransfer.setData("text/plain",t.album.id),b.dataTransfer.effectAllowed="move"),a("drag-start",t.album.id))}function w(b){t.draggable&&(b.preventDefault(),b.dataTransfer&&(b.dataTransfer.dropEffect="move"),a("drag-over",t.album.id))}function M(){a("drag-leave",t.album.id)}function V(b){t.draggable&&(b.preventDefault(),a("drop",t.album.id))}return(b,f)=>{var D;const _=e.resolveComponent("AlbumTreeNode",!0);return e.openBlock(),e.createElementBlock("div",wV,[e.createElementVNode("div",{"data-testid":"album-node","data-album-id":b.album.id,class:e.normalizeClass(h.value),style:e.normalizeStyle({paddingLeft:c.value}),draggable:b.draggable,role:"treeitem","aria-selected":r.value,"aria-expanded":l.value?i.value:void 0,onDragstart:g,onDragover:w,onDragleave:M,onDrop:V},[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(U.IonIcon),{icon:i.value?e.unref(np):e.unref(ap)},null,8,["icon"])])):(e.openBlock(),e.createElementBlock("span",_V)),e.createVNode(e.unref(U.IonIcon),{icon:e.unref(up),class:"album-node__icon"},null,8,["icon"]),e.createElementVNode("span",{"data-testid":"album-name",class:"album-node__name",onClick:p},e.toDisplayString(b.album.name),1),b.showMediaCount?(e.openBlock(),e.createElementBlock("span",EV,e.toDisplayString(b.album.media_count),1)):e.createCommentVNode("",!0)],46,kV),i.value&&((D=b.album.children)!=null&&D.length)?(e.openBlock(),e.createElementBlock("div",xV,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.album.children,B=>(e.openBlock(),e.createBlock(_,{key:B.id,album:B,depth:b.depth+1,"selected-id":b.selectedId,"expanded-ids":b.expandedIds,"focused-id":b.focusedId,draggable:b.draggable,"show-media-count":b.showMediaCount,compact:b.compact,onSelect:f[0]||(f[0]=E=>a("select",E)),onToggleExpand:f[1]||(f[1]=E=>a("toggle-expand",E))},null,8,["album","depth","selected-id","expanded-ids","focused-id","draggable","show-media-count","compact"]))),128))])):e.createCommentVNode("",!0)])}}}),VV=Me(SV,[["__scopeId","data-v-76be65a6"]]),yi=Ho.defineStore("albums",()=>{const o=e.ref([]),n=e.ref(new Map),t=e.ref(!1),a=e.ref(null),i=e.ref(new Set),r=e.computed(()=>{const f=new Map;return o.value.forEach(_=>f.set(_.id,_)),f}),s=e.computed(()=>o.value.filter(f=>f.parent_id===null));async function l(f){t.value=!0,a.value=null;try{const _=(f==null?void 0:f.parent_id)??null,D=_?`/api/v1/albums?parent_id=${_}`:"/api/v1/albums?parent_id=null",B=await fetch(D);if(!B.ok)throw new Error("Failed to fetch albums");((await B.json()).data||[]).forEach(P=>{const C=o.value.findIndex(A=>A.id===P.id);C>=0?o.value[C]=P:o.value.push(P)}),_!==null&&i.value.add(_)}catch(_){a.value=_ instanceof Error?_.message:"Unknown error"}finally{t.value=!1}}async function c(f){t.value=!0,a.value=null;try{const _=await fetch(`/api/v1/albums/${f}`);if(!_.ok)throw new Error("Failed to fetch album");const B=(await _.json()).data,E=o.value.findIndex(S=>S.id===B.id);return E>=0?o.value[E]=B:o.value.push(B),B}catch(_){throw a.value=_ instanceof Error?_.message:"Unknown error",_}finally{t.value=!1}}async function d(f){t.value=!0,a.value=null;try{const _=await fetch(`/api/v1/albums/${f}/media`);if(!_.ok)throw new Error("Failed to fetch album media");const B=(await _.json()).data||[];return n.value.set(f,B),B}catch(_){throw a.value=_ instanceof Error?_.message:"Unknown error",_}finally{t.value=!1}}async function u(f,_){t.value=!0,a.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:_})})).ok)throw new Error("Failed to reorder album media");const B=n.value.get(f)||[],E=_.map(S=>B.find(P=>P.uuid===S)).filter(S=>S!==void 0);n.value.set(f,E)}catch(D){throw a.value=D instanceof Error?D.message:"Unknown error",D}finally{t.value=!1}}async function m(f){t.value=!0,a.value=null;try{const _=await fetch("/api/v1/albums",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(f)});if(!_.ok)throw new Error("Failed to create album");const B=(await _.json()).data;return o.value.push(B),B}catch(_){throw a.value=_ instanceof Error?_.message:"Unknown error",_}finally{t.value=!1}}async function h(f,_){t.value=!0,a.value=null;try{const D=await fetch(`/api/v1/albums/${f}`,{method:"PATCH",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(_)});if(!D.ok)throw new Error("Failed to update album");const E=(await D.json()).data,S=o.value.findIndex(P=>P.id===E.id);return S>=0&&(o.value[S]=E),E}catch(D){throw a.value=D instanceof Error?D.message:"Unknown error",D}finally{t.value=!1}}async function p(f){t.value=!0,a.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 D=o.value.findIndex(B=>B.id===f);D>=0&&o.value.splice(D,1),n.value.delete(f)}catch(_){throw a.value=_ instanceof Error?_.message:"Unknown error",_}finally{t.value=!1}}function v(f){return o.value.filter(_=>_.parent_id===f)}function g(f){return i.value.has(f)}function w(f){return n.value.get(f)||[]}async function M(f,_){const D=o.value.findIndex(E=>E.id===f);if(D<0)return;const B=o.value[D];o.value[D]={...B,parent_id:_};try{if(!(await fetch(`/api/v1/albums/${f}/move`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({parent_id:_})})).ok)throw new Error("Failed to move album")}catch(E){throw o.value[D]=B,a.value=E instanceof Error?E.message:"Unknown error",E instanceof Error?E:new Error("Failed to move album")}}function V(f){o.value=f}function b(){o.value=[],n.value.clear(),t.value=!1,a.value=null,i.value.clear()}return{albums:o,albumMedia:n,loading:t,error:a,childrenLoadedById:i,albumsById:r,rootAlbums:s,fetchAlbums:l,fetchAlbum:c,fetchAlbumMedia:d,reorderAlbumMedia:u,createAlbum:m,updateAlbum:h,deleteAlbum:p,getChildrenOf:v,childrenLoaded:g,getAlbumMedia:w,moveAlbum:M,setAlbums:V,reset:b}});function Ld(){const o=yi(),{albums:n,albumsById:t,rootAlbums:a,loading:i,error:r}=Ho.storeToRefs(o);async function s(u){await o.fetchAlbums(u)}function l(u){return o.getChildrenOf(u)}function c(u){return o.childrenLoaded(u)}async function d(u,m){await o.moveAlbum(u,m)}return{albums:n,albumsById:t,rootAlbums:a,loading:i,error:r,fetchAlbums:s,getChildrenOf:l,childrenLoaded:c,moveAlbum:d}}function Ud(o){const{childrenByParentId:n,onMove:t}=o,a=e.ref({isDragging:!1,draggedAlbumId:null,dropTargetId:null,dropPosition:null});function i(m,h){if(m===h)return!0;const p=new Set,v=[m];for(;v.length>0;){const g=v.shift();if(!g||p.has(g))continue;p.add(g);const w=n.get(g)||[];for(const M of w){if(M===h)return!0;v.push(M)}}return!1}function r(m,h){return m===h?!1:h===null?!0:!i(m,h)}function s(m){a.value={isDragging:!0,draggedAlbumId:m,dropTargetId:null,dropPosition:null}}function l(){a.value={isDragging:!1,draggedAlbumId:null,dropTargetId:null,dropPosition:null}}function c(m){a.value.dropTargetId=m}function d(){a.value.dropTargetId=null,a.value.dropPosition=null}async function u(){const{draggedAlbumId:m,dropTargetId:h}=a.value;if(!m){l();return}if(!r(m,h)){l();return}try{await t(m,h)}finally{l()}}return{dragState:a,isDescendant:i,canDropOn:r,startDrag:s,endDrag:l,setDropTarget:c,clearDropTarget:d,executeDrop:u}}const NV={key:0,"data-testid":"loading-spinner",class:"album-tree__loading"},TV={key:1,"data-testid":"error-state",class:"album-tree__error"},MV={key:2,"data-testid":"empty-state",class:"album-tree__empty"},BV={key:3,class:"album-tree__content",role:"group"},FV=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(o,{expose:n,emit:t}){const a=o,i=t,r=e.computed(()=>a.draggable===!0),s=e.computed(()=>a.showMediaCount===!0),l=e.computed(()=>a.compact===!0),{albums:c,rootAlbums:d,loading:u,error:m,fetchAlbums:h,getChildrenOf:p,childrenLoaded:v,moveAlbum:g}=Ld(),w=e.shallowRef(new Set(a.expandedIds)),M=e.ref(a.modelValue??null),V=e.ref(null),b=new Map,f=new Map;function _(N){b.clear(),f.clear();for(const L of N){b.set(L.id,L);const te=L.parent_id??null,ae=f.get(te)??[];ae.push(L.id),f.set(te,ae)}}e.watch(c,N=>{_(N)},{immediate:!0});const{dragState:D,canDropOn:B,startDrag:E,endDrag:S,setDropTarget:P,clearDropTarget:C,executeDrop:A}=Ud({childrenByParentId:f,onMove:async(N,L)=>{await g(N,L),i("album-moved",{albumId:N,newParentId:L})}});e.watch(()=>a.modelValue,N=>{M.value=N??null}),e.watch(()=>a.expandedIds,N=>{w.value=new Set(N)}),e.onMounted(async()=>{await h({parent_id:null})});const R=e.computed(()=>d.value.map(N=>W(N)));function W(N){if(!w.value.has(N.id))return N;const L=p(N.id);return{...N,children:L.map(te=>W(te))}}const O=e.computed(()=>{const N=[];function L(te){var ae;for(const ie of te)N.push(ie),w.value.has(ie.id)&&((ae=ie.children)!=null&&ae.length)&&L(ie.children)}return L(R.value),N});function I(N){var ae;if(!O.value.length)return;const L=V.value?O.value.findIndex(ie=>ie.id===V.value):-1,te=L>=0?O.value[L]:null;switch(N.key){case"ArrowDown":N.preventDefault(),L<O.value.length-1?V.value=O.value[L+1].id:L===-1&&O.value.length>0&&(V.value=O.value[0].id);break;case"ArrowUp":N.preventDefault(),L>0&&(V.value=O.value[L-1].id);break;case"ArrowRight":N.preventDefault(),te&&(te.children_count>0&&!w.value.has(te.id)?F(te.id):w.value.has(te.id)&&((ae=te.children)!=null&&ae.length)&&(V.value=te.children[0].id));break;case"ArrowLeft":N.preventDefault(),te&&(w.value.has(te.id)&&te.children_count>0?F(te.id):te.parent_id&&(V.value=te.parent_id));break;case"Enter":case" ":N.preventDefault(),te&&k(te);break;case"Home":N.preventDefault(),O.value.length>0&&(V.value=O.value[0].id);break;case"End":N.preventDefault(),O.value.length>0&&(V.value=O.value[O.value.length-1].id);break}}async function F(N){w.value.has(N)?(w.value.delete(N),i("album-collapsed",N)):(v(N)||await h({parent_id:N}),w.value.add(N),i("album-expanded",N))}function k(N){M.value=N.id,i("update:modelValue",N.id),i("album-selected",N)}function $(N){a.draggable&&E(N)}function j(N){var te;if(!a.draggable)return;const L=(te=D.value)==null?void 0:te.draggedAlbumId;L&&(P(N),B(L,N))}function Z(){a.draggable&&C()}async function K(N){a.draggable&&(P(N),await A())}function ge(N){a.draggable&&(N.preventDefault(),P(null))}async function we(N){a.draggable&&(N.preventDefault(),P(null),await A())}function ne(){S()}return n({focusedId:V}),(N,L)=>(e.openBlock(),e.createElementBlock("div",{class:"album-tree","data-testid":"album-tree",tabindex:"0",role:"tree","aria-label":"Album tree",onKeydown:I,onDragover:ge,onDrop:we,onDragend:ne},[e.unref(u)?(e.openBlock(),e.createElementBlock("div",NV,[e.createVNode(e.unref(U.IonSpinner),{name:"crescent"})])):e.unref(m)?(e.openBlock(),e.createElementBlock("div",TV,[e.createElementVNode("p",null,e.toDisplayString(e.unref(m)),1)])):e.unref(d).length?(e.openBlock(),e.createElementBlock("div",BV,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(R.value,te=>(e.openBlock(),e.createBlock(VV,{key:te.id,album:te,depth:0,"selected-id":M.value,"expanded-ids":w.value,"focused-id":V.value,draggable:r.value,"drag-state":r.value?e.unref(D):null,"show-media-count":s.value,compact:l.value,onSelect:k,onToggleExpand:F,onDragStart:$,onDragOver:j,onDragLeave:Z,onDrop:K},null,8,["album","selected-id","expanded-ids","focused-id","draggable","drag-state","show-media-count","compact"]))),128))])):(e.openBlock(),e.createElementBlock("div",MV,[L[0]||(L[0]=e.createElementVNode("p",null,"No albums yet",-1)),e.renderSlot(N.$slots,"empty-action",{},void 0,!0)]))],32))}}),Od=Me(FV,[["__scopeId","data-v-ae3dea7a"]]),IV=300,$V=e.defineComponent({__name:"AlbumBrowser",props:{isOpen:{type:Boolean},selectedAlbumId:{default:null},title:{default:"Select Album"},confirmText:{default:"Select"}},emits:["close","confirm"],setup(o,{emit:n}){const t=o,a=n,i=e.ref(t.selectedAlbumId??null),r=e.ref(null),s=e.ref(0),l=e.ref(null);e.watch(()=>t.selectedAlbumId,p=>{i.value=p??null});const c=e.computed(()=>r.value!==null);function d(p){const v=Date.now();if(l.value===p.id&&v-s.value<IV){a("confirm",p);return}s.value=v,l.value=p.id,i.value=p.id,r.value=p}function u(){r.value&&a("confirm",r.value)}function m(){a("close")}function h(){a("close")}return(p,v)=>(e.openBlock(),e.createBlock(e.unref(U.IonModal),{"is-open":p.isOpen,class:"album-browser-modal",onDidDismiss:h},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonTitle),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p.title),1)]),_:1}),e.createVNode(e.unref(U.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.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(U.IonContent),{class:"album-browser-content"},{default:e.withCtx(()=>[e.createVNode(Od,{modelValue:i.value,"onUpdate:modelValue":v[0]||(v[0]=g=>i.value=g),draggable:!1,"show-media-count":!0,compact:!1,onAlbumSelected:d},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(U.IonFooter),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonButton),{fill:"clear",onClick:m},{default:e.withCtx(()=>[...v[2]||(v[2]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),e.createVNode(e.unref(U.IonButton),{"data-testid":"confirm-button",fill:"solid",color:"primary",disabled:!c.value,onClick:u},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p.confirmText),1)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1})]),_:1},8,["is-open"]))}}),Pd=Me($V,[["__scopeId","data-v-21676ec1"]]),RV={class:"ion-padding-start text-sm"},DV={class:"ion-padding-start text-sm"},AV={key:1},LV={key:1,class:"album-manager-inline rounded-lg border border-gray-200 bg-white p-4"},UV={class:"flex items-center justify-between gap-3 pb-3"},OV={class:"text-base font-semibold text-gray-900"},PV={class:"ion-padding-start text-sm"},zV={class:"ion-padding-start text-sm"},jV={class:"flex justify-between pt-2"},WV={key:1},_a=255,Ea=1e3,ZV=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(o,{emit:n}){const t=o,a=n,i=yi(),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),h=e.ref(null),p=e.ref(!1),v=e.ref(!1),g=e.computed(()=>d.value.name?c.value.name.trim()?c.value.name.length>_a?`Name must be ${_a} characters or less`:null:"Name is required":null),w=e.computed(()=>d.value.description&&c.value.description.length>Ea?`Description must be ${Ea} characters or less`:null),M=e.computed(()=>{const I=c.value.name.trim().length>0,F=c.value.name.length<=_a,k=c.value.description.length<=Ea;return I&&F&&k&&!p.value}),V=e.computed(()=>{var I;return((I=u.value)==null?void 0:I.name)??"None (Root)"}),b=e.computed(()=>h.value?h.value.children_count===0&&h.value.media_count===0:!1),f=e.computed(()=>h.value?h.value.children_count>0?"Cannot delete album with child albums. Move or delete children first.":h.value.media_count>0?"Cannot delete album with media. Remove media first.":`Are you sure you want to delete "${h.value.name}"? This action cannot be undone.`:"");e.onMounted(async()=>{t.albumId&&await _()});async function _(){if(t.albumId)try{const I=await i.fetchAlbum(t.albumId);h.value=I,c.value={name:I.name,description:I.description??"",parent_id:I.parent_id},I.parent_id&&(u.value={id:I.parent_id,name:"Parent Album"})}catch(I){a("error",I)}}function D(){d.value.name=!0}function B(){d.value.description=!0}function E(){m.value=!0}function S(I){u.value={id:I.id,name:I.name},c.value.parent_id=I.id,m.value=!1}function P(){m.value=!1}function C(){a("close")}function A(){a("close")}async function R(){if(d.value.name=!0,d.value.description=!0,!(!M.value||p.value)){p.value=!0;try{const I={name:c.value.name.trim(),description:c.value.description.trim(),parent_id:c.value.parent_id};if(r.value&&t.albumId){const F=await i.updateAlbum(t.albumId,I);a("updated",F)}else{const F=await i.createAlbum(I);a("created",F)}a("close")}catch(I){a("error",I)}finally{p.value=!1}}}function W(){b.value&&(v.value=!0)}async function O(I){var k;if((((k=I.detail)==null?void 0:k.role)??"")!=="confirm"){v.value=!1;return}if(t.albumId){p.value=!0;try{await i.deleteAlbum(t.albumId),a("deleted",t.albumId),a("close")}catch($){a("error",$)}finally{p.value=!1,v.value=!1}}}return(I,F)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[I.mode==="modal"?(e.openBlock(),e.createBlock(e.unref(U.IonModal),{key:0,"is-open":I.isOpen,class:"album-manager-modal",onDidDismiss:A},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonTitle),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value),1)]),_:1}),e.createVNode(e.unref(U.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonButton),{"data-testid":"cancel-btn",fill:"clear",onClick:C},{default:e.withCtx(()=>[...F[4]||(F[4]=[e.createTextVNode(" Cancel ",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),e.createVNode(e.unref(U.IonContent),{class:"album-manager-content"},{default:e.withCtx(()=>[e.createElementVNode("form",{"data-testid":"album-form",class:"p-4 space-y-3",onSubmit:e.withModifiers(R,["prevent"])},[e.createVNode(e.unref(U.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...F[5]||(F[5]=[e.createTextVNode("Name *",-1)])]),_:1}),e.createVNode(e.unref(U.IonInput),{modelValue:c.value.name,"onUpdate:modelValue":F[0]||(F[0]=k=>c.value.name=k),"data-testid":"name-input",maxlength:_a,onIonBlur:D},null,8,["modelValue"])]),_:1}),g.value?(e.openBlock(),e.createBlock(e.unref(U.IonText),{key:0,color:"danger","data-testid":"name-error"},{default:e.withCtx(()=>[e.createElementVNode("p",RV,e.toDisplayString(g.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(U.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...F[6]||(F[6]=[e.createTextVNode("Description",-1)])]),_:1}),e.createVNode(e.unref(U.IonTextarea),{modelValue:c.value.description,"onUpdate:modelValue":F[1]||(F[1]=k=>c.value.description=k),"data-testid":"description-input",maxlength:Ea,onIonBlur:B},null,8,["modelValue"])]),_:1}),w.value?(e.openBlock(),e.createBlock(e.unref(U.IonText),{key:1,color:"danger","data-testid":"description-error"},{default:e.withCtx(()=>[e.createElementVNode("p",DV,e.toDisplayString(w.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(U.IonItem),{button:"","data-testid":"parent-selector",onClick:E},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonLabel),null,{default:e.withCtx(()=>[...F[7]||(F[7]=[e.createTextVNode("Parent Album",-1)])]),_:1}),e.createVNode(e.unref(U.IonNote),{slot:"end","data-testid":"parent-name"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(V.value),1)]),_:1})]),_:1})],32)]),_:1}),e.createVNode(e.unref(U.IonFooter),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonButtons),{slot:"start"},{default:e.withCtx(()=>[r.value?(e.openBlock(),e.createBlock(e.unref(U.IonButton),{key:0,"data-testid":"delete-btn",color:"danger",disabled:!b.value,title:b.value?void 0:f.value,onClick:W},{default:e.withCtx(()=>[...F[8]||(F[8]=[e.createTextVNode(" Delete ",-1)])]),_:1},8,["disabled","title"])):e.createCommentVNode("",!0)]),_:1}),e.createVNode(e.unref(U.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonButton),{"data-testid":"submit-btn",type:"submit",color:"primary",disabled:!M.value,onClick:R},{default:e.withCtx(()=>[p.value?(e.openBlock(),e.createBlock(e.unref(U.IonSpinner),{key:0,"data-testid":"loading-spinner",name:"crescent"})):(e.openBlock(),e.createElementBlock("span",AV,e.toDisplayString(l.value),1))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1})]),_:1},8,["is-open"])):(e.openBlock(),e.createElementBlock("div",LV,[e.createElementVNode("div",UV,[e.createElementVNode("h2",OV,e.toDisplayString(s.value),1),e.createVNode(e.unref(U.IonButton),{"data-testid":"cancel-btn",fill:"clear",onClick:C},{default:e.withCtx(()=>[...F[9]||(F[9]=[e.createTextVNode(" Cancel ",-1)])]),_:1})]),e.createElementVNode("form",{"data-testid":"album-form",class:"space-y-3",onSubmit:e.withModifiers(R,["prevent"])},[e.createVNode(e.unref(U.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...F[10]||(F[10]=[e.createTextVNode("Name *",-1)])]),_:1}),e.createVNode(e.unref(U.IonInput),{modelValue:c.value.name,"onUpdate:modelValue":F[2]||(F[2]=k=>c.value.name=k),"data-testid":"name-input",maxlength:_a,onIonBlur:D},null,8,["modelValue"])]),_:1}),g.value?(e.openBlock(),e.createBlock(e.unref(U.IonText),{key:0,color:"danger","data-testid":"name-error"},{default:e.withCtx(()=>[e.createElementVNode("p",PV,e.toDisplayString(g.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(U.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...F[11]||(F[11]=[e.createTextVNode("Description",-1)])]),_:1}),e.createVNode(e.unref(U.IonTextarea),{modelValue:c.value.description,"onUpdate:modelValue":F[3]||(F[3]=k=>c.value.description=k),"data-testid":"description-input",maxlength:Ea,onIonBlur:B},null,8,["modelValue"])]),_:1}),w.value?(e.openBlock(),e.createBlock(e.unref(U.IonText),{key:1,color:"danger","data-testid":"description-error"},{default:e.withCtx(()=>[e.createElementVNode("p",zV,e.toDisplayString(w.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(U.IonItem),{button:"","data-testid":"parent-selector",onClick:E},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonLabel),null,{default:e.withCtx(()=>[...F[12]||(F[12]=[e.createTextVNode("Parent Album",-1)])]),_:1}),e.createVNode(e.unref(U.IonNote),{slot:"end","data-testid":"parent-name"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(V.value),1)]),_:1})]),_:1}),e.createElementVNode("div",jV,[e.createElementVNode("div",null,[r.value?(e.openBlock(),e.createBlock(e.unref(U.IonButton),{key:0,"data-testid":"delete-btn",color:"danger",fill:"outline",disabled:!b.value,title:b.value?void 0:f.value,onClick:W},{default:e.withCtx(()=>[...F[13]||(F[13]=[e.createTextVNode(" Delete ",-1)])]),_:1},8,["disabled","title"])):e.createCommentVNode("",!0)]),e.createVNode(e.unref(U.IonButton),{"data-testid":"submit-btn",type:"submit",color:"primary",disabled:!M.value,onClick:R},{default:e.withCtx(()=>[p.value?(e.openBlock(),e.createBlock(e.unref(U.IonSpinner),{key:0,"data-testid":"loading-spinner",name:"crescent"})):(e.openBlock(),e.createElementBlock("span",WV,e.toDisplayString(l.value),1))]),_:1},8,["disabled"])])],32)])),e.createVNode(Pd,{"is-open":m.value,"selected-album-id":c.value.parent_id,title:"Select Parent Album",onClose:P,onConfirm:S},null,8,["is-open","selected-album-id"]),e.createVNode(e.unref(U.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:O},null,8,["is-open","message"])],64))}}),HV=Me(ZV,[["__scopeId","data-v-22083f3a"]]),XV={class:"album-media-grid"},GV={class:"aspect-square"},JV={key:1,"data-testid":"empty-state",class:"flex flex-col items-center justify-center py-12 gap-4"},YV={class:"text-gray-500"},qV=["data-media-id","draggable","onDragstart","onDragover","onDrop","onMouseenter"],KV={key:0,"data-testid":"drop-indicator",class:"absolute inset-0 border-2 border-primary rounded-lg pointer-events-none z-30"},QV={key:1,class:"absolute top-2 right-2 z-20 opacity-0 group-hover:opacity-100 transition-opacity cursor-grab"},e4={class:"aspect-square relative"},t4=["src","alt"],n4={key:0,class:"absolute inset-0 bg-black/50 flex items-center justify-center gap-2 transition-opacity"},a4=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(o,{emit:n}){const t=o,a=n,i=yi(),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),h=e.computed(()=>{const A=t.columns;return["grid","gap-4",`grid-cols-${A.mobile??2}`,`sm:grid-cols-${A.sm??3}`,`md:grid-cols-${A.md??4}`,`lg:grid-cols-${A.lg??5}`,`xl:grid-cols-${A.xl??6}`]}),p=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 A=await i.fetchAlbumMedia(t.albumId);r.value=A}catch{r.value=[]}finally{s.value=!1}}function g(A){return t.selectedItems.includes(A)}function w(A){a("toggle-select",A);const R=g(A.uuid)?t.selectedItems.filter(W=>W!==A.uuid):[...t.selectedItems,A.uuid];a("selection-change",R)}function M(A){if(A.conversions&&typeof A.conversions=="object"){const R=A.conversions.thumb;if(typeof R=="string")return R}return A.original_url}function V(A){l.value=A}function b(){l.value=null}function f(A){a("preview",A)}function _(A){a("edit",A)}function D(A){a("detach",A.uuid)}function B(){a("add")}function E(A,R){t.reorderable&&(c.value=R,A.dataTransfer&&(A.dataTransfer.effectAllowed="move",A.dataTransfer.setData("text/plain",String(R))))}function S(A,R){!t.reorderable||c.value===null||(A.preventDefault(),d.value=R)}function P(A,R){if(!t.reorderable||c.value===null)return;A.preventDefault();const W=c.value;if(W!==R){const O=[...r.value],[I]=O.splice(W,1);O.splice(R,0,I),r.value=O;const F=O.map(k=>k.uuid);a("reorder",F),i.reorderAlbumMedia(t.albumId,F).catch(()=>{v()})}c.value=null,d.value=null}function C(){c.value=null,d.value=null}return(A,R)=>(e.openBlock(),e.createElementBlock("div",XV,[u.value?(e.openBlock(),e.createElementBlock("div",{key:0,"data-testid":"loading-grid",class:e.normalizeClass(h.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,W=>(e.openBlock(),e.createBlock(e.unref(U.IonCard),{key:W,class:"m-0"},{default:e.withCtx(()=>[e.createElementVNode("div",GV,[e.createVNode(e.unref(U.IonSkeletonText),{animated:"",class:"w-full h-full skeleton"})])]),_:1}))),128))],2)):m.value?(e.openBlock(),e.createElementBlock("div",JV,[e.createVNode(e.unref(U.IonIcon),{name:"images-outline",class:"text-6xl text-gray-400"}),e.createElementVNode("p",YV,e.toDisplayString(A.emptyText),1),e.createVNode(e.unref(U.IonButton),{"data-testid":"add-media-btn",onClick:B},{default:e.withCtx(()=>[...R[0]||(R[0]=[e.createTextVNode(" Add Media ",-1)])]),_:1})])):(e.openBlock(),e.createElementBlock("div",{key:2,"data-testid":"media-grid",class:e.normalizeClass(h.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,(W,O)=>(e.openBlock(),e.createElementBlock("div",{key:W.uuid,"data-media-id":W.uuid,class:e.normalizeClass(["media-item relative group",{"opacity-50":c.value===O,"ring-2 ring-primary":d.value===O&&c.value!==O}]),draggable:A.reorderable,onDragstart:I=>E(I,O),onDragover:I=>S(I,O),onDrop:I=>P(I,O),onDragend:C,onMouseenter:I=>V(W.uuid),onMouseleave:b},[d.value===O&&c.value!==O&&A.reorderable?(e.openBlock(),e.createElementBlock("div",KV)):e.createCommentVNode("",!0),A.reorderable?(e.openBlock(),e.createElementBlock("div",QV,[e.createVNode(e.unref(U.IonIcon),{name:"reorder-three-outline",class:"text-white drop-shadow-md"})])):e.createCommentVNode("",!0),A.selectionMode?(e.openBlock(),e.createBlock(e.unref(U.IonCheckbox),{key:2,"data-testid":"media-checkbox",checked:g(W.uuid),class:"absolute top-2 left-2 z-20",onIonChange:I=>w(W)},null,8,["checked","onIonChange"])):e.createCommentVNode("",!0),e.createVNode(e.unref(U.IonCard),{class:"m-0 overflow-hidden"},{default:e.withCtx(()=>[e.createElementVNode("div",e4,[e.createElementVNode("img",{src:M(W),alt:W.file_name,class:"w-full h-full object-cover"},null,8,t4),A.showActions&&l.value===W.uuid?(e.openBlock(),e.createElementBlock("div",n4,[e.createVNode(e.unref(U.IonButton),{"data-testid":"action-preview",fill:"clear",size:"small",color:"light",onClick:I=>f(W)},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{slot:"icon-only",name:"eye-outline"})]),_:1},8,["onClick"]),e.createVNode(e.unref(U.IonButton),{"data-testid":"action-edit",fill:"clear",size:"small",color:"light",onClick:I=>_(W)},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{slot:"icon-only",name:"create-outline"})]),_:1},8,["onClick"]),e.createVNode(e.unref(U.IonButton),{"data-testid":"action-detach",fill:"clear",size:"small",color:"danger",onClick:I=>D(W)},{default:e.withCtx(()=>[e.createVNode(e.unref(U.IonIcon),{slot:"icon-only",name:"close-circle-outline"})]),_:1},8,["onClick"])])):e.createCommentVNode("",!0)])]),_:2},1024)],42,qV))),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:B},[e.createVNode(e.unref(U.IonIcon),{name:"add-circle-outline",class:"text-4xl text-gray-400"}),R[1]||(R[1]=e.createElementVNode("span",{class:"text-sm text-gray-500"},"Add Media",-1))])],2))]))}}),o4=Me(a4,[["__scopeId","data-v-d84b796a"]]),i4={key:0,class:"media-album-inline-create","data-testid":"media-album-inline-create"},r4={class:"media-album-inline-create__field"},s4={class:"media-album-inline-create__field"},l4=["value"],c4={key:1,class:"media-album-inline-create__autocomplete"},d4={class:"media-album-inline-create__autocomplete-input-wrap"},u4={key:0,class:"media-album-inline-create__autocomplete-list"},m4=["onMousedown"],p4={key:1,class:"media-album-inline-create__autocomplete-empty"},f4={class:"media-album-inline-create__actions"},h4=e.defineComponent({__name:"MediaAlbumInlineCreate",props:{open:{type:Boolean,default:!1},nameLabel:{default:"Album name"},albums:{default:()=>[]}},emits:["cancel","create"],setup(o,{emit:n}){const t=o,a=n,i=e.ref(""),r=e.ref(""),s=e.ref(""),l=e.ref(!1),c=e.computed(()=>t.albums.length>5),d=e.computed(()=>{if(s.value.trim()==="")return t.albums;const w=s.value.toLowerCase();return t.albums.filter(M=>M.name.toLowerCase().includes(w))}),u=e.computed(()=>{if(r.value==="")return"";const w=t.albums.find(M=>M.id===r.value);return(w==null?void 0:w.name)??""}),m=w=>{r.value=w.id,s.value=w.name,l.value=!1},h=()=>{r.value="",s.value="",l.value=!1},p=()=>{l.value=!0,r.value!==""&&(s.value=u.value)},v=()=>{setTimeout(()=>{l.value=!1,r.value!==""?s.value=u.value:s.value=""},150)},g=()=>{i.value.trim()!==""&&(a("create",i.value.trim(),r.value!==""?r.value:void 0),i.value="",r.value="",s.value="")};return(w,M)=>w.open?(e.openBlock(),e.createElementBlock("section",i4,[M[7]||(M[7]=e.createElementVNode("h4",{class:"media-album-inline-create__heading"}," New album ",-1)),e.createElementVNode("label",r4,[e.createElementVNode("span",null,e.toDisplayString(w.nameLabel),1),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":M[0]||(M[0]=V=>i.value=V),type:"text",class:"media-album-inline-create__input",placeholder:"e.g. Marbles, Pendants","data-testid":"input-media-album-name"},null,512),[[e.vModelText,i.value]])]),e.createElementVNode("label",s4,[M[6]||(M[6]=e.createElementVNode("span",null,"Parent album (optional)",-1)),c.value?(e.openBlock(),e.createElementBlock("div",c4,[e.createElementVNode("div",d4,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":M[2]||(M[2]=V=>s.value=V),type:"text",class:"media-album-inline-create__input",placeholder:"Search albums...","data-testid":"input-media-album-parent-search",onFocus:p,onBlur:v},null,544),[[e.vModelText,s.value]]),r.value!==""?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"media-album-inline-create__autocomplete-clear","aria-label":"Clear parent album",onMousedown:e.withModifiers(h,["prevent"])},[...M[5]||(M[5]=[e.createElementVNode("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round"},[e.createElementVNode("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElementVNode("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])],32)):e.createCommentVNode("",!0)]),l.value?(e.openBlock(),e.createElementBlock("ul",u4,[r.value!==""?(e.openBlock(),e.createElementBlock("li",{key:0,class:"media-album-inline-create__autocomplete-option media-album-inline-create__autocomplete-option--none",onMousedown:e.withModifiers(h,["prevent"])}," None ",32)):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,V=>(e.openBlock(),e.createElementBlock("li",{key:V.id,class:e.normalizeClass(["media-album-inline-create__autocomplete-option",{"is-selected":V.id===r.value}]),onMousedown:e.withModifiers(b=>m(V),["prevent"])},e.toDisplayString(V.name),43,m4))),128)),d.value.length===0?(e.openBlock(),e.createElementBlock("li",p4," No albums match ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])):e.withDirectives((e.openBlock(),e.createElementBlock("select",{key:0,"onUpdate:modelValue":M[1]||(M[1]=V=>r.value=V),class:"media-album-inline-create__input","data-testid":"select-media-album-parent"},[M[4]||(M[4]=e.createElementVNode("option",{value:""}," None ",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(w.albums,V=>(e.openBlock(),e.createElementBlock("option",{key:V.id,value:V.id},e.toDisplayString(V.name),9,l4))),128))],512)),[[e.vModelSelect,r.value]])]),e.createElementVNode("div",f4,[e.createElementVNode("button",{type:"button",class:"media-album-inline-create__button","data-testid":"btn-media-album-cancel",onClick:M[3]||(M[3]=V=>a("cancel"))}," Cancel "),e.createElementVNode("button",{type:"button",class:"media-album-inline-create__button media-album-inline-create__button--primary","data-testid":"btn-media-album-create",onClick:g}," Create ")])])):e.createCommentVNode("",!0)}}),zd=Me(h4,[["__scopeId","data-v-a85162fe"]]),v4={class:"media-album-unavailable-state","data-testid":"media-album-unavailable-state"},g4=e.defineComponent({__name:"MediaAlbumUnavailableState",props:{title:{default:"Album unavailable"},body:{default:"You no longer have access to this album."},actionLabel:{default:"Go to library"}},emits:["goToLibrary"],setup(o,{emit:n}){const t=n;return(a,i)=>(e.openBlock(),e.createElementBlock("section",v4,[e.createElementVNode("h3",null,e.toDisplayString(a.title),1),e.createElementVNode("p",null,e.toDisplayString(a.body),1),e.createElementVNode("button",{type:"button",class:"media-album-unavailable-state__button",onClick:i[0]||(i[0]=r=>t("goToLibrary"))},e.toDisplayString(a.actionLabel),1)]))}}),jd=Me(g4,[["__scopeId","data-v-04620e64"]]),y4={key:0,class:"media-preview-sheet","data-testid":"media-preview-sheet"},b4={class:"media-preview-sheet__header"},w4=["src","alt"],k4=["src"],_4={class:"media-preview-sheet__actions"},E4=["disabled"],x4=["disabled"],C4=e.defineComponent({__name:"MediaPreviewSheet",props:{open:{type:Boolean,default:!1},media:{default:null},canGoPrevious:{type:Boolean,default:!1},canGoNext:{type:Boolean,default:!1},selected:{type:Boolean,default:!1}},emits:["close","previous","next","toggleSelect"],setup(o,{emit:n}){const t=o,a=n,i=e.computed(()=>{var l;return((l=t.media)==null?void 0:l.mime_type.startsWith("image/"))===!0}),r=e.computed(()=>t.media?t.media.preview_url??t.media.original_url:""),s=()=>{t.media&&a("toggleSelect",t.media)};return(l,c)=>l.open&&l.media?(e.openBlock(),e.createElementBlock("section",y4,[e.createElementVNode("header",b4,[e.createElementVNode("strong",null,e.toDisplayString(l.media.file_name),1),e.createElementVNode("button",{type:"button",class:"media-preview-sheet__close","aria-label":"Close preview",onClick:c[0]||(c[0]=d=>a("close"))}," Close ")]),i.value?(e.openBlock(),e.createElementBlock("img",{key:0,class:"media-preview-sheet__image",src:r.value,alt:l.media.file_name},null,8,w4)):(e.openBlock(),e.createElementBlock("video",{key:1,class:"media-preview-sheet__video",src:r.value,controls:""},null,8,k4)),e.createElementVNode("div",_4,[e.createElementVNode("button",{type:"button",class:"media-preview-sheet__nav",disabled:!l.canGoPrevious,onClick:c[1]||(c[1]=d=>a("previous"))}," Previous ",8,E4),e.createElementVNode("button",{type:"button",class:"media-preview-sheet__select",onClick:s},e.toDisplayString(l.selected?"Deselect":"Select"),1),e.createElementVNode("button",{type:"button",class:"media-preview-sheet__nav",disabled:!l.canGoNext,onClick:c[2]||(c[2]=d=>a("next"))}," Next ",8,x4)])])):e.createCommentVNode("",!0)}}),Wd=Me(C4,[["__scopeId","data-v-9a05f74e"]]),S4={key:0,class:"media-album-grid","data-testid":"media-source-sheet"},V4={class:"media-album-grid__items"},N4={class:"media-album-grid__card-name"},T4={class:"media-album-grid__card-name"},M4=["data-testid","onClick"],B4={class:"media-album-grid__card-name"},F4={key:0,class:"media-album-grid__card-meta"},I4={key:0,class:"media-album-grid__empty"},$4=e.defineComponent({__name:"MediaSourceSheet",props:{open:{type:Boolean,default:!1},currentView:{},albums:{},viewLibraryLabel:{default:"Library"},browseAlbumsLabel:{default:"Albums"},createAlbumLabel:{default:"Create album"},enableAlbumCreation:{type:Boolean,default:!1}},emits:["close","selectLibrary","selectAlbum","createAlbum"],setup(o,{emit:n}){const t=n;return(a,i)=>a.open?(e.openBlock(),e.createElementBlock("section",S4,[e.createElementVNode("div",V4,[a.enableAlbumCreation?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"media-album-grid__card media-album-grid__card--create","data-testid":"btn-media-source-create-album",onClick:i[0]||(i[0]=r=>t("createAlbum"))},[i[2]||(i[2]=e.createElementVNode("div",{class:"media-album-grid__card-icon"},[e.createElementVNode("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),e.createElementVNode("line",{x1:"5",y1:"12",x2:"19",y2:"12"})])],-1)),e.createElementVNode("span",N4,e.toDisplayString(a.createAlbumLabel),1)])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["media-album-grid__card",{"is-active":a.currentView.scope==="library"}]),"data-testid":"btn-media-source-library",onClick:i[1]||(i[1]=r=>t("selectLibrary"))},[i[3]||(i[3]=e.createStaticVNode('<div class="media-album-grid__card-icon" data-v-129f67b1><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-v-129f67b1><rect x="3" y="3" width="7" height="7" data-v-129f67b1></rect><rect x="14" y="3" width="7" height="7" data-v-129f67b1></rect><rect x="14" y="14" width="7" height="7" data-v-129f67b1></rect><rect x="3" y="14" width="7" height="7" data-v-129f67b1></rect></svg></div>',1)),e.createElementVNode("span",T4,e.toDisplayString(a.viewLibraryLabel),1),i[4]||(i[4]=e.createElementVNode("span",{class:"media-album-grid__card-meta"},"All media",-1))],2),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.albums,r=>(e.openBlock(),e.createElementBlock("button",{key:r.id,type:"button",class:e.normalizeClass(["media-album-grid__card",{"is-active":a.currentView.scope==="album"&&a.currentView.albumId===r.id}]),"data-testid":`btn-media-source-album-${r.id}`,onClick:s=>t("selectAlbum",r)},[i[5]||(i[5]=e.createElementVNode("div",{class:"media-album-grid__card-icon"},[e.createElementVNode("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"})])],-1)),e.createElementVNode("span",B4,e.toDisplayString(r.name),1),r.mediaCount!==void 0?(e.openBlock(),e.createElementBlock("span",F4,e.toDisplayString(r.mediaCount)+" item"+e.toDisplayString(r.mediaCount===1?"":"s"),1)):e.createCommentVNode("",!0)],10,M4))),128))]),a.albums.length===0?(e.openBlock(),e.createElementBlock("p",I4," No albums yet. ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)}}),Zd=Me($4,[["__scopeId","data-v-129f67b1"]]),R4={key:0,class:"media-upload-sheet","data-testid":"media-upload-sheet"},D4=["accept"],A4={key:0,class:"media-upload-sheet__queue"},L4={class:"media-upload-sheet__queue-info"},U4={class:"media-upload-sheet__queue-status"},O4={class:"media-upload-sheet__progress-bar"},P4=e.defineComponent({__name:"MediaUploadSheet",props:{open:{type:Boolean,default:!1},queue:{},accept:{default:""},uploadLabel:{default:"Upload"}},emits:["close","filesSelected"],setup(o,{emit:n}){const t=n,a=e.ref(!1),i=c=>{const d=c.target;!(d instanceof HTMLInputElement)||d.files===null||(t("filesSelected",Array.from(d.files)),d.value="")},r=c=>{c.preventDefault(),a.value=!0},s=()=>{a.value=!1},l=c=>{var d;c.preventDefault(),a.value=!1,(d=c.dataTransfer)!=null&&d.files&&c.dataTransfer.files.length>0&&t("filesSelected",Array.from(c.dataTransfer.files))};return(c,d)=>c.open?(e.openBlock(),e.createElementBlock("section",R4,[e.createElementVNode("label",{class:e.normalizeClass(["media-upload-sheet__dropzone",{"is-drag-over":a.value}]),onDragover:r,onDragleave:s,onDrop:l},[d[1]||(d[1]=e.createStaticVNode('<div class="media-upload-sheet__dropzone-icon" data-v-e238d615><svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-v-e238d615><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" data-v-e238d615></path><polyline points="17 8 12 3 7 8" data-v-e238d615></polyline><line x1="12" y1="3" x2="12" y2="15" data-v-e238d615></line></svg></div><span class="media-upload-sheet__dropzone-text" data-v-e238d615> Drop files here or <strong data-v-e238d615>browse</strong></span>',2)),e.createElementVNode("input",{type:"file",accept:c.accept,multiple:"",class:"media-upload-sheet__file-input","data-testid":"input-media-upload-sheet",onChange:i},null,40,D4)],34),c.queue.length>0?(e.openBlock(),e.createElementBlock("ul",A4,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.queue,u=>(e.openBlock(),e.createElementBlock("li",{key:u.id,class:"media-upload-sheet__queue-item"},[e.createElementVNode("div",L4,[e.createElementVNode("strong",null,e.toDisplayString(u.file.name),1),e.createElementVNode("span",U4,e.toDisplayString(u.status),1)]),e.createElementVNode("div",O4,[e.createElementVNode("div",{class:"media-upload-sheet__progress-fill",style:e.normalizeStyle({width:`${u.progress}%`})},null,4)])]))),128))])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"media-upload-sheet__close-btn","aria-label":"Close upload panel","data-testid":"btn-close-upload-sheet",onClick:d[0]||(d[0]=u=>t("close"))}," Done ")])):e.createCommentVNode("",!0)}}),Hd=Me(P4,[["__scopeId","data-v-e238d615"]]),z4=["aria-label","aria-pressed","data-testid"],j4=["src","alt"],W4={key:1,class:"media-thumbnail-cell__video"},Z4={class:"media-thumbnail-cell__video-name"},H4={key:2,class:"media-thumbnail-cell__selected-badge"},X4={key:3,class:"media-thumbnail-cell__status-badge"},G4=["aria-label"],J4=e.defineComponent({__name:"MediaThumbnailCell",props:{media:{},selected:{type:Boolean,default:!1},status:{},testId:{default:"media-library-thumbnail"}},emits:["toggle","preview"],setup(o,{emit:n}){const t=o,a=n,i=e.computed(()=>t.media.thumbnail_url??t.media.preview_url??t.media.original_url),r=e.computed(()=>t.media.mime_type.startsWith("image/")),s=e.computed(()=>{switch(t.status){case"missing":return"Unavailable";case"forbidden":return"Restricted";case"uploading":return"Uploading";case"failed":return"Failed";case"file_lost":return"Needs file";default:return null}}),l=e.computed(()=>{const u=t.media.file_name;return t.selected?`Deselect ${u}`:`Select ${u}`}),c=()=>{a("toggle",t.media)},d=()=>{a("preview",t.media)};return(u,m)=>(e.openBlock(),e.createElementBlock("article",{class:e.normalizeClass(["media-thumbnail-cell",{"is-selected":u.selected,"has-status":s.value!==null}])},[e.createElementVNode("button",{type:"button",class:"media-thumbnail-cell__button","aria-label":l.value,"aria-pressed":u.selected?"true":"false","data-testid":u.testId,onClick:c},[r.value?(e.openBlock(),e.createElementBlock("img",{key:0,class:"media-thumbnail-cell__image",src:i.value,alt:u.media.file_name},null,8,j4)):(e.openBlock(),e.createElementBlock("div",W4,[m[0]||(m[0]=e.createElementVNode("span",{class:"media-thumbnail-cell__video-label"},"Video",-1)),e.createElementVNode("span",Z4,e.toDisplayString(u.media.file_name),1)])),u.selected?(e.openBlock(),e.createElementBlock("span",H4," Selected ")):e.createCommentVNode("",!0),s.value!==null?(e.openBlock(),e.createElementBlock("span",X4,e.toDisplayString(s.value),1)):e.createCommentVNode("",!0)],8,z4),e.createElementVNode("button",{type:"button",class:"media-thumbnail-cell__preview-button","aria-label":`Preview ${u.media.file_name}`,onClick:d}," Preview ",8,G4)],2))}}),Xd=Me(J4,[["__scopeId","data-v-edd4f0ad"]]),Y4={class:"virtual-media-grid"},q4={key:0,class:"virtual-media-grid__state","data-testid":"media-grid-loading"},K4={key:1,class:"virtual-media-grid__state","data-testid":"media-grid-empty"},Q4={key:2,class:"virtual-media-grid__items"},e3=["disabled"],t3=e.defineComponent({__name:"VirtualMediaGrid",props:{items:{},selectedItems:{},loading:{type:Boolean,default:!1},loadingMore:{type:Boolean,default:!1},hasMore:{type:Boolean,default:!1},emptyMessage:{default:"No media found."},testIdPrefix:{default:"media-grid-item"}},emits:["toggle","preview","loadMore"],setup(o,{emit:n}){const t=o,a=n;function i(r){return t.selectedItems.find(s=>s.id===r)}return(r,s)=>(e.openBlock(),e.createElementBlock("div",Y4,[r.loading&&r.items.length===0?(e.openBlock(),e.createElementBlock("div",q4," Loading media... ")):r.items.length===0?(e.openBlock(),e.createElementBlock("div",K4,e.toDisplayString(r.emptyMessage),1)):(e.openBlock(),e.createElementBlock("div",Q4,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.items,l=>{var c,d;return e.openBlock(),e.createBlock(Xd,{key:l.uuid,media:l,selected:((c=i(l.uuid))==null?void 0:c.status)==="ready",status:(d=i(l.uuid))==null?void 0:d.status,"test-id":`${r.testIdPrefix}-${l.uuid}`,onToggle:s[0]||(s[0]=u=>a("toggle",u)),onPreview:s[1]||(s[1]=u=>a("preview",u))},null,8,["media","selected","status","test-id"])}),128))])),r.hasMore?(e.openBlock(),e.createElementBlock("button",{key:3,type:"button",class:"virtual-media-grid__load-more",disabled:r.loadingMore,"data-testid":"btn-media-grid-load-more",onClick:s[2]||(s[2]=l=>a("loadMore"))},e.toDisplayString(r.loadingMore?"Loading…":"Load more"),9,e3)):e.createCommentVNode("",!0)]))}}),Gd=Me(t3,[["__scopeId","data-v-820b9a4f"]]);function Zo(o){if(o===0)return"0 Bytes";const n=1024,t=["Bytes","KB","MB","GB"],a=Math.floor(Math.log(o)/Math.log(n));return parseFloat((o/Math.pow(n,a)).toFixed(2))+" "+t[a]}function Jd(o){var t;const n=o.split(".");return n.length>1?`.${(t=n.pop())==null?void 0:t.toLowerCase()}`:""}function vs(o){return o.type.startsWith("image/")}async function Yd(o){return vs(o)?new Promise(n=>{const t=new Image,a=URL.createObjectURL(o);t.onload=()=>{URL.revokeObjectURL(a),n({width:t.naturalWidth,height:t.naturalHeight})},t.onerror=()=>{URL.revokeObjectURL(a),n(null)},t.src=a}):null}async function qd(o,n){const t=[];if(n.maxFileSize&&o.size>n.maxFileSize&&t.push({field:"size",message:`File exceeds maximum size of ${Zo(n.maxFileSize)}`,code:"MAX_FILE_SIZE"}),n.minFileSize&&o.size<n.minFileSize&&t.push({field:"size",message:`File is smaller than minimum size of ${Zo(n.minFileSize)}`,code:"MIN_FILE_SIZE"}),n.acceptedMimeTypes&&n.acceptedMimeTypes.length>0&&(n.acceptedMimeTypes.some(i=>i.endsWith("/*")?o.type.startsWith(i.slice(0,-1)):o.type===i)||t.push({field:"type",message:`File type "${o.type}" is not allowed`,code:"INVALID_MIME_TYPE"})),n.acceptedExtensions&&n.acceptedExtensions.length>0){const a=Jd(o.name);n.acceptedExtensions.some(r=>r.toLowerCase()===a.toLowerCase())||t.push({field:"extension",message:`File extension "${a}" is not allowed`,code:"INVALID_EXTENSION"})}if(vs(o)&&(n.maxDimensions||n.minDimensions)){const a=await Yd(o);a&&(n.maxDimensions&&(a.width>n.maxDimensions.width&&t.push({field:"dimensions",message:`Image width (${a.width}px) exceeds maximum (${n.maxDimensions.width}px)`,code:"MAX_WIDTH"}),a.height>n.maxDimensions.height&&t.push({field:"dimensions",message:`Image height (${a.height}px) exceeds maximum (${n.maxDimensions.height}px)`,code:"MAX_HEIGHT"})),n.minDimensions&&(a.width<n.minDimensions.width&&t.push({field:"dimensions",message:`Image width (${a.width}px) is smaller than minimum (${n.minDimensions.width}px)`,code:"MIN_WIDTH"}),a.height<n.minDimensions.height&&t.push({field:"dimensions",message:`Image height (${a.height}px) is smaller than minimum (${n.minDimensions.height}px)`,code:"MIN_HEIGHT"})))}if(n.customValidator){const a=await n.customValidator(o);t.push(...a)}return{valid:t.length===0,errors:t}}function gs(o={}){const n=e.ref(o.rules||{});function t(c){n.value=c}async function a(c){return qd(c,n.value)}async function i(c){const d=new Map;return await Promise.all(c.map(async u=>{const m=await a(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:a,validateFiles:i,canAddFiles:r,acceptString:s,isMimeTypeAllowed:l}}function n3(){return`upload-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}function a3(o){if(o.type.startsWith("image/"))return URL.createObjectURL(o)}function ys(o){const{adapter:n,maxConcurrent:t=3,rules:a,collection:i,onUploadStart:r,onUploadProgress:s,onUploadComplete:l,onUploadError:c,onQueueComplete:d,postUpload:u}=o,m=e.ref(new Map),h=e.ref(new Set),p=a?{rules:a}:{},{validateFile:v}=gs(p);async function g(){if(h.value.size>=t)return;const A=Array.from(m.value.entries()).find(([O,I])=>I.status==="pending"&&!h.value.has(O));if(!A){Array.from(m.value.values()).every(I=>I.status==="completed"||I.status==="error")&&m.value.size>0&&(d==null||d());return}const[R,W]=A;await w(R,W)}async function w(A,R){h.value.add(A),R.status="uploading",R.abortController=new AbortController,m.value.set(A,{...R}),r==null||r(R);try{const W={onProgress:I=>{R.progress=I,m.value.set(A,{...R}),s==null||s(R)},signal:R.abortController.signal};i&&(W.collection=i);const O=await n.upload(R.file,W);u&&(R.status="attaching",m.value.set(A,{...R}),s==null||s(R),await u(R,O.media,n)),R.status="completed",R.progress=100,R.media=O.media,m.value.set(A,{...R}),l==null||l(R,O.media)}catch(W){W.name==="AbortError"?m.value.delete(A):(R.status="error",R.error=W.message,m.value.set(A,{...R}),c==null||c(R,W))}finally{h.value.delete(A),delete R.abortController,g()}}async function M(A){var O;const R=Array.from(A),W=[];for(const I of R){const F=await v(I),k=n3(),$=a3(I),j={id:k,file:I,progress:0,status:F.valid?"pending":"error"};!F.valid&&((O=F.errors[0])!=null&&O.message)&&(j.error=F.errors[0].message),$&&(j.previewUrl=$),m.value.set(k,j);const Z={media:null,clientId:k,name:I.name,order:0,upload:j,errors:F.errors};W.push(Z)}for(let I=0;I<t;I++)g();return W}function V(A){const R=m.value.get(A);R&&(R.abortController&&R.abortController.abort(),R.previewUrl&&URL.revokeObjectURL(R.previewUrl),m.value.delete(A),h.value.delete(A),g())}async function b(A){const R=m.value.get(A);!R||R.status!=="error"||(R.status="pending",R.progress=0,delete R.error,m.value.set(A,{...R}),g())}function f(){for(const[A,R]of m.value.entries())(R.status==="completed"||R.status==="error")&&(R.previewUrl&&URL.revokeObjectURL(R.previewUrl),m.value.delete(A))}function _(){for(const A of m.value.values())A.abortController&&A.abortController.abort(),A.previewUrl&&URL.revokeObjectURL(A.previewUrl);m.value.clear(),h.value.clear()}function D(A){return m.value.get(A)}const B=e.computed(()=>h.value.size>0),E=e.computed(()=>h.value.size),S=e.computed(()=>Array.from(m.value.values()).filter(A=>A.status==="pending").length),P=e.computed(()=>m.value.size===0?!0:Array.from(m.value.values()).every(A=>A.status==="completed"||A.status==="error")),C=e.computed(()=>Array.from(m.value.values()));return{uploads:m,isUploading:B,activeCount:E,pendingCount:S,isComplete:P,addFiles:M,cancelUpload:V,retryUpload:b,clearCompleted:f,clearAll:_,getUpload:D,uploadsArray:C}}function Ln(o){return typeof o=="object"&&o!==null&&!Array.isArray(o)}function Oa(o){return typeof o=="string"?o:null}function ec(o){return typeof o=="number"?o:null}function o3(o){return typeof o=="boolean"?o:null}function Kd(o){return Ln(o)&&typeof o.uuid=="string"&&typeof o.file_name=="string"&&typeof o.mime_type=="string"&&(typeof o.original_url=="string"||o.original_url===null)&&typeof o.size=="number"&&typeof o.disk=="string"&&typeof o.created_at=="string"&&typeof o.updated_at=="string"}function i3(o){return!Ln(o)||typeof o.id!="string"||typeof o.status!="string"?null:o.status==="ready"?Kd(o.media)?{id:o.id,status:"ready",media:o.media}:null:o.status==="missing"||o.status==="forbidden"?{id:o.id,status:o.status}:null}function r3(o){return Ln(o)?{next_cursor:Oa(o.next_cursor),previous_cursor:Oa(o.previous_cursor),has_more:o3(o.has_more)??!1,per_page:ec(o.per_page),count:ec(o.count)}:null}function tc(o){const n=Ln(o)?o:{},t=Array.isArray(n.data)?n.data.filter(Kd):[],a=Ln(n.meta)?n.meta:{},i=r3(a.pagination),r=(i==null?void 0:i.next_cursor)??Oa(a.next_cursor)??Oa(a.cursor),s=(i==null?void 0:i.has_more)??a.has_more===!0,l=Array.isArray(n.hydrated)?n.hydrated.map(i3).filter(d=>d!==null):[],c={cursor:r,has_more:s};return i!==null&&(c.pagination=i),{data:t,meta:c,hydrated:l}}function nc(o,n,t,a,i){const r={view:o.scope==="album"?{scope:"album",album_id:o.albumId}:{scope:"library"},per_page:t,sort:n.sort??"newest"};return n.query&&n.query.trim()!==""&&(r.query=n.query.trim()),n.kinds&&n.kinds.length>0&&(r.kinds=n.kinds),a!==null&&(r.cursor=a),i&&i.length>0&&(r.hydrate_ids=i),r}function ac(o){const n=new Set,t=[];for(const a of o)n.has(a.uuid)||(n.add(a.uuid),t.push(a));return t}function s3(o){var t;if(!(o instanceof Error))return null;const n=(t=o.response)==null?void 0:t.status;return typeof n=="number"?n:null}function l3(o){var n;return o instanceof Error?((n=o.response)==null?void 0:n.data)??null:null}function c3(o){if(!Ln(o))return[];const n=[];for(const t of Object.values(o)){if(typeof t=="string"&&t.trim()!==""){n.push(t.trim());continue}if(Array.isArray(t))for(const a of t){if(typeof a!="string")continue;const i=a.trim();i!==""&&n.push(i)}}return Array.from(new Set(n))}function d3(o){var r;const n=l3(o),t=Ln(n)?n:null,a=((r=Oa(t==null?void 0:t.message))==null?void 0:r.trim())??null,i=c3(t==null?void 0:t.errors);return a!==null&&i.length>0?a==="Validation failed"?i.join(" "):i.every(l=>a.includes(l))?a:`${a} ${i.join(" ")}`:a!==null?a:i.length>0?i.join(" "):o instanceof Error?o.message:"Failed to load media."}function oc(o,n){const t=d3(n),a=s3(n);return{code:a===403?"permission_denied":o,message:t,retriable:a!==403,cause:n}}function bs(o){const n=o.perPage??40,t=e.ref([]),a=e.ref([]),i=e.ref(null),r=e.ref(!1),s=e.ref(!1),l=e.ref(!1),c=e.ref(!1),d=e.ref(null);let u=null,m=0;const h=async g=>{m+=1;const w=m;u==null||u.abort();const M=new AbortController;u=M,g?l.value=!0:s.value=!0,d.value=null,c.value=!1;try{const V=await o.httpClient.get("/v1/media/library",{params:nc(o.view.value,o.filters.value,n,g?i.value:null),signal:M.signal});if(w!==m)return;const b=tc(V);t.value=g?ac([...t.value,...b.data]):b.data,a.value=b.hydrated,i.value=b.meta.cursor,r.value=b.meta.has_more}catch(V){if(M.signal.aborted||w!==m)return;const b=oc(g?"load_more_failed":"query_failed",V);d.value=b,c.value=b.code==="permission_denied",g||(t.value=[],i.value=null,r.value=!1)}finally{w===m&&(s.value=!1,l.value=!1)}};return{items:t,hydrated:a,cursor:i,hasMore:r,loading:s,loadingMore:l,permissionDenied:c,error:d,loadInitial:async()=>{i.value=null,await h(!1)},loadMore:async()=>{!r.value||l.value||await h(!0)},refresh:async()=>{i.value=null,await h(!1)},hydrateSelection:async g=>{if(g.length===0)return a.value=[],[];try{const w=await o.httpClient.get("/v1/media/library",{params:nc(o.view.value,o.filters.value,1,null,g)}),M=tc(w);return a.value=M.hydrated,M.hydrated}catch(w){return d.value=oc("hydration_failed",w),[]}},prepend:g=>{t.value=ac([g,...t.value])}}}const u3="mediables.media-library.";function m3(o){return!o||o.key.trim()===""?null:`${u3}${o.key}`}function cr(){return typeof window>"u"||typeof window.sessionStorage>"u"?null:window.sessionStorage}function p3(o,n){const t=Date.parse(o);return Number.isFinite(t)?Date.now()-t>n*60*1e3:!0}function Qd(o){const n=m3(o),t=(o==null?void 0:o.ttlMinutes)??30,a=`${(o==null?void 0:o.key)??"media-library"}:${Date.now()}`;return{restore:()=>{if(n===null)return null;const l=cr();if(l===null)return null;const c=l.getItem(n);if(c===null)return null;let d;try{d=JSON.parse(c)}catch{return l.removeItem(n),null}if(typeof d!="object"||d===null||Array.isArray(d))return l.removeItem(n),null;const u=d;if(u.version!==1||typeof u.savedAt!="string"||p3(u.savedAt,t))return l.removeItem(n),null;const m={selectedIds:Array.isArray(u.selectedIds)?u.selectedIds.filter(h=>typeof h=="string"&&h.trim()!==""):[]};return((o==null?void 0:o.restoreView)??!0)&&u.view&&(m.view=u.view),u.filters&&(m.filters=u.filters),m},save:l=>{if(n===null)return;const c=cr();if(c===null)return;const d={version:1,savedAt:new Date().toISOString(),selectedIds:[...l.selectedIds]};((o==null?void 0:o.restoreView)??!0)&&l.view&&(d.view=l.view),l.filters&&(d.filters=l.filters),c.setItem(n,JSON.stringify(d))},clear:()=>{if(n===null)return;const l=cr();l==null||l.removeItem(n)},sessionId:a}}function eu(o){const n=e.ref(o);return{state:n,transition:a=>{n.value=a}}}function tu(o){return{emitMetric:(t,a)=>{const i={name:t,timestamp:new Date().toISOString()};a!==void 0&&(i.payload=a),o==null||o(i)}}}function ta(o){return typeof o=="object"&&o!==null&&!Array.isArray(o)}function f3(o){const n=ta(o)?o:{};return(Array.isArray(n.data)?n.data:ta(n.data)&&Array.isArray(n.data.data)?n.data.data:Array.isArray(o)?o:[]).map(a=>{if(!ta(a)||typeof a.id!="string"||typeof a.name!="string")return null;const i={id:a.id,name:a.name};return typeof a.description=="string"&&a.description.trim()!==""&&(i.description=a.description),typeof a.media_count=="number"&&(i.mediaCount=a.media_count),i}).filter(a=>a!==null)}function h3(o){const n=ta(o)?o:{},t=ta(n.data)?n.data:ta(o)?o:null;if(t===null||typeof t.id!="string"||typeof t.name!="string")return null;const a={id:t.id,name:t.name};return typeof t.description=="string"&&t.description.trim()!==""&&(a.description=t.description),a}function v3(o){return o==="ready"||o==="uploading"||o==="failed"}function wo(o,n="ready"){return{id:o.uuid,media:o,status:n,countsTowardMax:v3(n)}}function g3(o,n){return o.scope==="library"?!0:n.type==="album"&&n.albumId===o.albumId}function y3(o,n){return o.scope==="library"?n.type==="library"||n.type==="album":n.type==="album"&&n.albumId===o.albumId}function dr(o){return{code:"configuration_error",message:o,retriable:!1}}function nu(o){var ge,we,ne;const n=o.selectionMode??"multiple",t=o.maxSelection,a=o.uploadBehavior??"adapter",i=e.ref(o.initialView??{scope:"library"}),r=e.ref({sort:((ge=o.initialFilters)==null?void 0:ge.sort)??"newest",...(we=o.initialFilters)!=null&&we.query?{query:o.initialFilters.query}:{},...(ne=o.initialFilters)!=null&&ne.kinds?{kinds:o.initialFilters.kinds}:{}}),s=e.ref([]),l=e.ref([]),c=e.ref(null),d=e.ref(null),u=Qd(o.sessionPolicy),{emitMetric:m}=tu(o.telemetry),h=eu("idle"),p=bs({httpClient:o.deps.httpClient,view:i,filters:r}),v=e.computed(()=>l.value.map(N=>N.id)),g=e.computed(()=>{const N=c.value;return N===null?null:p.items.value[N]??null}),w=e.computed(()=>o.uploadTarget??{type:"library"}),M=ys({adapter:o.deps.uploadAdapter??{name:"missing-upload-adapter",upload:async()=>{throw new Error("Upload adapter is not configured.")},attach:async()=>{},attachMany:async()=>{},detach:async()=>{},reorder:async()=>{},fetchModelMedia:async()=>[],getUrl:N=>N.original_url,getThumbnailUrl:N=>N.thumbnail_url??N.preview_url??N.original_url},postUpload:async(N,L,te)=>{const ae=w.value;ae.type!=="album"||!ae.albumId||await te.attach(L.uuid,{modelType:"album",modelId:ae.albumId})},onUploadComplete:(N,L)=>{const te=w.value;g3(i.value,te)&&p.prepend(L),o.autoSelectUploaded&&y3(i.value,te)&&B(L),m("upload-complete",{mediaId:L.uuid,targetType:te.type,targetAlbumId:te.albumId})},onUploadError:(N,L)=>{d.value={code:"upload_failed",message:L.message,retriable:!0,cause:L}}}),V=e.computed(()=>M.isUploading.value),b=()=>{u.save({selectedIds:[...v.value],view:i.value,filters:r.value})},f=async N=>{const L=await p.hydrateSelection(N);l.value=L.map(te=>te.status==="ready"&&te.media?wo(te.media):{id:te.id,media:null,status:te.status,countsTowardMax:!1})},_=e.computed(()=>l.value.filter(N=>N.countsTowardMax).length),D=()=>n==="single"||t===void 0?!0:_.value<t,B=N=>{if(l.value.findIndex(te=>te.id===N.uuid)>=0){n==="multiple"?l.value=l.value.filter(te=>te.id!==N.uuid):l.value=[wo(N)],b();return}if(!D()){d.value={code:"selection_invalid",message:t!==void 0?`You can only select up to ${t} items.`:"You cannot select more items.",retriable:!0};return}n==="single"?l.value=[wo(N)]:l.value=[...l.value,wo(N)],d.value=null,b()},E=async()=>{var L;h.transition("restoring");const N=u.restore();if(N===null){h.transition("ready");return}N.view&&(i.value=N.view),N.filters&&(r.value={sort:N.filters.sort??"newest",...N.filters.query?{query:N.filters.query}:{},...N.filters.kinds?{kinds:N.filters.kinds}:{}}),await p.loadInitial(),(((L=o.sessionPolicy)==null?void 0:L.restoreSelection)??!0)&&await f(N.selectedIds),h.transition("ready")};e.watch(()=>p.error.value,N=>{N!==null&&(d.value=N,h.transition("error"))});const S=async()=>{d.value=null,h.transition("idle"),await E(),p.items.value.length===0&&!p.loading.value&&!p.permissionDenied.value&&await p.loadInitial();const N=o.defaultSelectedIds??[];l.value.length===0&&N.length>0&&await f(N),h.transition("ready")},P=async(N,L="user")=>{const te=i.value;i.value=N,L==="user"&&o.preserveSelectionOnViewChange===!1&&(l.value=[]),m("view-change",{from:te.scope,to:N.scope,reason:L}),await p.loadInitial(),b()},C=async()=>{const N=await o.deps.httpClient.get("/v1/albums");s.value=f3(N)},A=async(N,L)=>{try{const te={name:N,visibility:"private"};L&&L.trim()!==""&&(te.parent_id=L);const ae=await o.deps.httpClient.post("/v1/albums",te),ie=h3(ae);return ie===null?dr("Album creation response was invalid."):(s.value=[ie,...s.value.filter(he=>he.id!==ie.id)],await P({scope:"album",albumId:ie.id,albumName:ie.name},"inline-album-created"),ie)}catch(te){const ae={code:"album_create_failed",message:te instanceof Error?te.message:"Album creation failed.",retriable:!0,cause:te};return d.value=ae,ae}},R=async N=>{if(!o.enableUpload){d.value=dr("Uploads are not enabled for this picker.");return}if(a!=="delegate"){if(!o.deps.uploadAdapter){d.value=dr("Uploads require a configured upload adapter.");return}await M.addFiles(N)}},W=()=>{var te;const N=((te=o.validateSelection)==null?void 0:te.call(o,l.value))??null;if(N!==null){const ae={code:"selection_invalid",message:N,retriable:!0};return d.value=ae,ae}if(l.value.filter(ae=>ae.status==="ready"&&ae.media!==null).length===0){const ae={code:"selection_invalid",message:"Select at least one available media item.",retriable:!0};return d.value=ae,ae}return{orderedIds:v.value,items:[...l.value],view:i.value,filters:r.value,dirty:!0,sessionId:u.sessionId}},O=N=>{const L=p.items.value.findIndex(te=>te.uuid===N.uuid);c.value=L>=0?L:null},I=()=>{c.value=null},F=()=>{c.value===null||c.value<=0||(c.value-=1)},k=()=>{c.value===null||c.value>=p.items.value.length-1||(c.value+=1)},$=N=>{l.value=l.value.filter(L=>L.id!==N),b()},j=async()=>{await p.refresh()},Z=async N=>{r.value={...r.value,...N&&N.trim()!==""?{query:N.trim()}:{}},(!N||N.trim()==="")&&delete r.value.query,await p.loadInitial(),b()},K=async()=>{await P({scope:"library"},"permission-unavailable")};return{view:i,filters:r,albums:s,selectedItems:l,orderedIds:v,queryItems:p.items,cursor:p.cursor,hasMore:p.hasMore,loading:p.loading,loadingMore:p.loadingMore,permissionDenied:p.permissionDenied,error:d,uploadQueue:M.uploadsArray,isUploading:V,previewIndex:c,previewItem:g,initialize:S,refresh:j,loadMore:p.loadMore,setQuery:Z,setView:P,toggleSelection:B,removeSelected:$,confirmSelection:W,openPreview:O,closePreview:I,showPreviousPreview:F,showNextPreview:k,loadAlbums:C,createAlbum:A,addUploadFiles:R,goToLibrary:K,sessionId:u.sessionId}}const b3=["data-testid"],w3={class:"mlp-location-bar"},k3={class:"mlp-location-bar__left"},_3={class:"mlp-location-bar__label"},E3={class:"mlp-tabs","data-testid":"media-picker-tabs"},x3={key:0,class:"mlp-search-row"},C3=["placeholder"],S3={key:2,class:"mlp-overlay-panel"},V3={key:0,class:"mlp-error","data-testid":"media-picker-error"},N3={key:5,class:"mlp-bottom-bar"},T3={key:0,class:"mlp-bottom-bar__selection"},M3={class:"mlp-bottom-bar__count"},B3={class:"mlp-bottom-bar__thumbs"},F3=["src","alt"],I3={key:1,class:"mlp-bottom-bar__thumb-placeholder"},$3=["aria-label","onClick"],R3={class:"mlp-bottom-bar__actions"},D3=e.defineComponent({__name:"MediaLibraryPicker",props:{deps:{},modelValue:{default:()=>[]},defaultSelectedIds:{default:()=>[]},selectionMode:{default:"multiple"},maxSelection:{},preserveSelectionOnViewChange:{type:Boolean,default:!0},initialView:{default:()=>({scope:"library"})},initialFilters:{default:()=>({sort:"newest"})},enableUpload:{type:Boolean,default:!1},uploadBehavior:{default:"adapter"},enablePreview:{type:Boolean,default:!0},enableAlbumCreation:{type:Boolean,default:!1},allowedMediaKinds:{},accept:{},validateSelection:{},uploadTarget:{},autoSelectUploaded:{type:Boolean,default:!1},createAlbumDefaultVisibility:{default:"private"},sessionPolicy:{},labels:{default:()=>({})},showFooter:{type:Boolean,default:!0},testIdPrefix:{default:"media-picker"},telemetry:{}},emits:["update:modelValue","confirm","cancel","selection-change","view-change","error","metric","request-upload-files"],setup(o,{expose:n,emit:t}){const a=o,i=t,r=e.computed(()=>{var I,F,k,$,j,Z,K,ge,we,ne,N,L,te,ae,ie,he,se,fe;return{title:((I=a.labels)==null?void 0:I.title)??"Media library",searchPlaceholder:((F=a.labels)==null?void 0:F.searchPlaceholder)??"Search your media",viewLibrary:((k=a.labels)==null?void 0:k.viewLibrary)??"Library",browseAlbums:(($=a.labels)==null?void 0:$.browseAlbums)??"Albums",createAlbum:((j=a.labels)==null?void 0:j.createAlbum)??"Create album",createAlbumNameLabel:((Z=a.labels)==null?void 0:Z.createAlbumNameLabel)??"Album name",emptyLibrary:((K=a.labels)==null?void 0:K.emptyLibrary)??"No media found in your library.",emptyAlbum:((ge=a.labels)==null?void 0:ge.emptyAlbum)??"No media found in this album.",networkError:((we=a.labels)==null?void 0:we.networkError)??"Unable to load media right now.",retry:((ne=a.labels)==null?void 0:ne.retry)??"Retry",selectedCount:((N=a.labels)==null?void 0:N.selectedCount)??(xe=>`${xe} selected`),confirmAction:((L=a.labels)==null?void 0:L.confirmAction)??"Attach selected",cancel:((te=a.labels)==null?void 0:te.cancel)??"Cancel",dismiss:((ae=a.labels)==null?void 0:ae.dismiss)??"Remove",uploadLabel:((ie=a.labels)==null?void 0:ie.uploadLabel)??"Upload",albumUnavailableTitle:((he=a.labels)==null?void 0:he.albumUnavailableTitle)??"Album unavailable",albumUnavailableBody:((se=a.labels)==null?void 0:se.albumUnavailableBody)??"You no longer have access to this album.",goToLibrary:((fe=a.labels)==null?void 0:fe.goToLibrary)??"Go to library"}}),s={deps:a.deps,selectionMode:a.selectionMode,initialView:a.initialView,initialFilters:a.initialFilters,...a.maxSelection!==void 0?{maxSelection:a.maxSelection}:{},...a.modelValue.length>0||a.defaultSelectedIds.length>0?{defaultSelectedIds:a.modelValue.length>0?a.modelValue:a.defaultSelectedIds}:{},...a.sessionPolicy?{sessionPolicy:a.sessionPolicy}:{},...a.enableUpload?{enableUpload:!0}:{},uploadBehavior:a.uploadBehavior,...a.uploadTarget?{uploadTarget:a.uploadTarget}:{},...a.autoSelectUploaded?{autoSelectUploaded:!0}:{},...a.validateSelection?{validateSelection:a.validateSelection}:{},preserveSelectionOnViewChange:a.preserveSelectionOnViewChange,telemetry:I=>{var F;(F=a.telemetry)==null||F.call(a,I),i("metric",I)}},l=nu(s),c=e.ref(a.initialFilters.query??""),d=e.ref("upload"),u=e.ref(!1),m=JSON.stringify(a.modelValue.length>0?a.modelValue:a.defaultSelectedIds);let h=null;const p=e.computed(()=>JSON.stringify(l.orderedIds.value)!==m),v=e.computed(()=>l.view.value.scope==="album"?r.value.emptyAlbum:r.value.emptyLibrary),g=e.computed(()=>r.value.selectedCount(l.selectedItems.value.length)),w=e.computed(()=>l.view.value.scope==="album"?l.view.value.albumName??"Album":r.value.viewLibrary),M=e.computed(()=>l.view.value.scope==="album"),V=()=>{h!==null&&(window.clearTimeout(h),h=null)},b=()=>{i("update:modelValue",[...l.orderedIds.value]),i("selection-change",{orderedIds:[...l.orderedIds.value],items:[...l.selectedItems.value],dirty:p.value})},f=I=>{I!==null&&i("error",I)},_=I=>typeof I.code=="string",D=I=>typeof I=="object"&&I!==null&&"code"in I&&typeof I.code=="string",B=()=>{const I=l.confirmSelection();if(_(I)){f(I);return}i("confirm",{...I,dirty:p.value})},E=(I="user")=>{i("cancel",{dirty:p.value,reason:I,sessionId:l.sessionId})},S=async()=>{d.value="albums",await l.loadAlbums()},P=async()=>{await l.goToLibrary(),d.value="albums",await l.loadAlbums()},C=I=>{l.setView({scope:"album",albumId:I.id,albumName:I.name}),d.value="media"},A=async(I,F)=>{const k=l.view.value,$=await l.createAlbum(I,F);if(D($)){f($);return}u.value=!1,d.value="media",i("view-change",{from:k,to:{scope:"album",albumId:$.id,albumName:$.name},reason:"inline-album-created",restoredFromSession:!1})},R=async I=>{if(a.uploadBehavior==="delegate"){i("request-upload-files",{files:[...I],view:l.view.value,filters:l.filters.value,sessionId:l.sessionId});return}await l.addUploadFiles(I)};function W(I){var F;return I?I.thumbnail_url??((F=I.conversion_urls)==null?void 0:F.thumb)??I.preview_url??I.original_url??I.url??null:null}function O(I){return I!=null&&I.mime_type?I.mime_type.startsWith("image/"):!1}return e.watch(()=>c.value,I=>{V(),h=window.setTimeout(()=>{l.setQuery(I)},250)}),e.watch(()=>l.selectedItems.value,()=>{b()},{deep:!0}),e.watch(()=>l.error.value,I=>{f(I)}),e.onMounted(()=>{l.initialize()}),e.onBeforeUnmount(()=>{V()}),n({refresh:l.refresh}),(I,F)=>(e.openBlock(),e.createElementBlock("section",{class:"media-library-picker","data-testid":I.testIdPrefix},[e.createElementVNode("header",w3,[e.createElementVNode("div",k3,[M.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"mlp-location-bar__back","aria-label":"Back to library","data-testid":"btn-media-picker-back",onClick:P},[...F[8]||(F[8]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("polyline",{points:"15 18 9 12 15 6"})],-1)])])):e.createCommentVNode("",!0),e.createElementVNode("span",_3,e.toDisplayString(w.value),1)])]),e.createElementVNode("nav",E3,[I.enableUpload?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:e.normalizeClass(["mlp-tabs__tab",{"is-active":d.value==="upload"}]),"data-testid":"tab-media-picker-upload",onClick:F[0]||(F[0]=k=>d.value="upload")},e.toDisplayString(r.value.uploadLabel),3)):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["mlp-tabs__tab",{"is-active":d.value==="media"}]),"data-testid":"tab-media-picker-all",onClick:F[1]||(F[1]=k=>d.value="media")}," All Media ",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["mlp-tabs__tab",{"is-active":d.value==="albums"}]),"data-testid":"tab-media-picker-albums",onClick:S},e.toDisplayString(r.value.browseAlbums),3)]),d.value==="media"||d.value==="albums"?(e.openBlock(),e.createElementBlock("div",x3,[F[9]||(F[9]=e.createElementVNode("svg",{class:"mlp-search-row__icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"}),e.createElementVNode("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":F[2]||(F[2]=k=>c.value=k),class:"mlp-search-row__input",type:"search",placeholder:r.value.searchPlaceholder,"data-testid":"input-media-picker-search"},null,8,C3),[[e.vModelText,c.value]])])):e.createCommentVNode("",!0),I.enableUpload&&d.value==="upload"?(e.openBlock(),e.createBlock(Hd,{key:1,open:!0,queue:e.unref(l).uploadQueue.value,accept:I.accept,"upload-label":r.value.uploadLabel,onClose:F[3]||(F[3]=k=>d.value="media"),onFilesSelected:R},null,8,["queue","accept","upload-label"])):e.createCommentVNode("",!0),u.value?(e.openBlock(),e.createElementBlock("div",S3,[e.createVNode(zd,{open:u.value,"name-label":r.value.createAlbumNameLabel,albums:e.unref(l).albums.value,onCancel:F[4]||(F[4]=k=>u.value=!1),onCreate:A},null,8,["open","name-label","albums"])])):e.createCommentVNode("",!0),e.unref(l).permissionDenied.value&&e.unref(l).view.value.scope==="album"?(e.openBlock(),e.createBlock(jd,{key:3,title:r.value.albumUnavailableTitle,body:r.value.albumUnavailableBody,"action-label":r.value.goToLibrary,onGoToLibrary:e.unref(l).goToLibrary},null,8,["title","body","action-label","onGoToLibrary"])):e.createCommentVNode("",!0),!e.unref(l).permissionDenied.value||e.unref(l).view.value.scope!=="album"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:4},[e.unref(l).error.value?(e.openBlock(),e.createElementBlock("div",V3,[e.createElementVNode("p",null,e.toDisplayString(e.unref(l).error.value.message||r.value.networkError),1),e.createElementVNode("button",{type:"button",class:"mlp-error__retry",onClick:F[5]||(F[5]=(...k)=>e.unref(l).refresh&&e.unref(l).refresh(...k))},e.toDisplayString(r.value.retry),1)])):e.createCommentVNode("",!0),d.value==="media"?(e.openBlock(),e.createBlock(Gd,{key:1,items:e.unref(l).queryItems.value,"selected-items":e.unref(l).selectedItems.value,loading:e.unref(l).loading.value,"loading-more":e.unref(l).loadingMore.value,"has-more":e.unref(l).hasMore.value,"empty-message":v.value,"test-id-prefix":`${I.testIdPrefix}-item`,onToggle:e.unref(l).toggleSelection,onPreview:e.unref(l).openPreview,onLoadMore:e.unref(l).loadMore},null,8,["items","selected-items","loading","loading-more","has-more","empty-message","test-id-prefix","onToggle","onPreview","onLoadMore"])):d.value==="albums"?(e.openBlock(),e.createBlock(Zd,{key:2,open:!0,"current-view":e.unref(l).view.value,albums:e.unref(l).albums.value,"view-library-label":r.value.viewLibrary,"browse-albums-label":r.value.browseAlbums,"create-album-label":r.value.createAlbum,"enable-album-creation":I.enableAlbumCreation,onSelectLibrary:P,onSelectAlbum:C,onCreateAlbum:F[6]||(F[6]=k=>u.value=!0)},null,8,["current-view","albums","view-library-label","browse-albums-label","create-album-label","enable-album-creation"])):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0),I.showFooter?(e.openBlock(),e.createElementBlock("footer",N3,[e.unref(l).selectedItems.value.length>0?(e.openBlock(),e.createElementBlock("div",T3,[e.createElementVNode("span",M3,e.toDisplayString(g.value),1),e.createElementVNode("div",B3,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(l).selectedItems.value,k=>{var $,j,Z;return e.openBlock(),e.createElementBlock("div",{key:k.id,class:"mlp-bottom-bar__thumb-item"},[O(k.media)&&W(k.media)?(e.openBlock(),e.createElementBlock("img",{key:0,src:W(k.media),alt:(($=k.media)==null?void 0:$.alt_text)??((j=k.media)==null?void 0:j.file_name)??"Selected",class:"mlp-bottom-bar__thumb-img"},null,8,F3)):(e.openBlock(),e.createElementBlock("div",I3,[...F[10]||(F[10]=[e.createElementVNode("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},[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)])])),e.createElementVNode("button",{type:"button",class:"mlp-bottom-bar__thumb-remove","aria-label":`${r.value.dismiss} ${((Z=k.media)==null?void 0:Z.file_name)??k.id}`,"data-testid":"btn-media-picker-remove-selected",onClick:K=>e.unref(l).removeSelected(k.id)},[...F[11]||(F[11]=[e.createElementVNode("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round"},[e.createElementVNode("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElementVNode("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])],8,$3)])}),128))])])):e.createCommentVNode("",!0),e.createElementVNode("div",R3,[e.createElementVNode("button",{type:"button",class:"mlp-bottom-bar__cancel","data-testid":"btn-media-picker-cancel",onClick:F[7]||(F[7]=k=>E())},e.toDisplayString(r.value.cancel),1),e.createElementVNode("button",{type:"button",class:"mlp-bottom-bar__confirm","data-testid":"btn-media-picker-confirm",onClick:B},e.toDisplayString(r.value.confirmAction),1)])])):e.createCommentVNode("",!0),I.enablePreview?(e.openBlock(),e.createBlock(Wd,{key:6,open:e.unref(l).previewItem.value!==null,media:e.unref(l).previewItem.value,"can-go-previous":e.unref(l).previewIndex.value!==null&&e.unref(l).previewIndex.value>0,"can-go-next":e.unref(l).previewIndex.value!==null&&e.unref(l).previewIndex.value<e.unref(l).queryItems.value.length-1,selected:e.unref(l).previewItem.value!==null&&e.unref(l).orderedIds.value.includes(e.unref(l).previewItem.value.uuid),onClose:e.unref(l).closePreview,onPrevious:e.unref(l).showPreviousPreview,onNext:e.unref(l).showNextPreview,onToggleSelect:e.unref(l).toggleSelection},null,8,["open","media","can-go-previous","can-go-next","selected","onClose","onPrevious","onNext","onToggleSelect"])):e.createCommentVNode("",!0)],8,b3))}}),au=Me(D3,[["__scopeId","data-v-db2ced73"]]),A3={key:0,class:"media-library-picker-modal","data-testid":"media-library-picker-modal"},L3={class:"media-library-picker-modal__panel"},U3=e.defineComponent({__name:"MediaLibraryPickerModal",props:{deps:{},modelValue:{},defaultSelectedIds:{},selectionMode:{},maxSelection:{},preserveSelectionOnViewChange:{type:Boolean},initialView:{},initialFilters:{},enableUpload:{type:Boolean},uploadBehavior:{},enablePreview:{type:Boolean},enableAlbumCreation:{type:Boolean},allowedMediaKinds:{},accept:{},validateSelection:{},uploadTarget:{},autoSelectUploaded:{type:Boolean},createAlbumDefaultVisibility:{},sessionPolicy:{},labels:{},showFooter:{type:Boolean},testIdPrefix:{},telemetry:{},isOpen:{type:Boolean,default:!1},closeOnBackdrop:{type:Boolean,default:!0}},emits:["update:modelValue","confirm","cancel","close"],setup(o,{emit:n}){const t=o,a=n,i=()=>{t.closeOnBackdrop&&a("close")};return(r,s)=>r.isOpen?(e.openBlock(),e.createElementBlock("div",A3,[e.createElementVNode("button",{type:"button",class:"media-library-picker-modal__backdrop","aria-label":"Close media picker",onClick:i}),e.createElementVNode("div",L3,[e.createVNode(au,e.mergeProps(t,{"onUpdate:modelValue":s[0]||(s[0]=l=>a("update:modelValue",l)),onConfirm:s[1]||(s[1]=l=>a("confirm",l)),onCancel:s[2]||(s[2]=l=>a("cancel",l))}),null,16)])])):e.createCommentVNode("",!0)}}),O3=Me(U3,[["__scopeId","data-v-a92e8703"]]),P3={key:0,class:"media-selection-tray","data-testid":"media-selection-tray"},z3={class:"media-selection-tray__header"},j3={class:"media-selection-tray__title"},W3={class:"media-selection-tray__items"},Z3={class:"media-selection-tray__item-preview"},H3=["src","alt"],X3={key:1,class:"media-selection-tray__file-icon"},G3={class:"media-selection-tray__item-copy"},J3=["aria-label","onClick"],Y3=e.defineComponent({__name:"MediaSelectionTray",props:{items:{},selectedCountLabel:{default:"Selected items"},dismissLabel:{default:"Remove"}},emits:["remove"],setup(o,{emit:n}){const t=n;function a(r){var s;return r?r.thumbnail_url??((s=r.conversion_urls)==null?void 0:s.thumb)??r.preview_url??r.original_url??r.url??null:null}function i(r){return r!=null&&r.mime_type?r.mime_type.startsWith("image/"):!1}return(r,s)=>r.items.length>0?(e.openBlock(),e.createElementBlock("section",P3,[e.createElementVNode("header",z3,[e.createElementVNode("h3",j3,e.toDisplayString(r.selectedCountLabel),1)]),e.createElementVNode("div",W3,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.items,l=>{var c,d,u,m;return e.openBlock(),e.createElementBlock("article",{key:l.id,class:"media-selection-tray__item"},[e.createElementVNode("div",Z3,[i(l.media)&&a(l.media)?(e.openBlock(),e.createElementBlock("img",{key:0,src:a(l.media),alt:((c=l.media)==null?void 0:c.alt_text)??((d=l.media)==null?void 0:d.file_name)??"Selected media",class:"media-selection-tray__thumb"},null,8,H3)):(e.openBlock(),e.createElementBlock("div",X3,[...s[0]||(s[0]=[e.createElementVNode("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},[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)])]))]),e.createElementVNode("div",G3,[e.createElementVNode("strong",null,e.toDisplayString(((u=l.media)==null?void 0:u.file_name)??l.id),1),e.createElementVNode("span",null,e.toDisplayString(l.status),1)]),e.createElementVNode("button",{type:"button",class:"media-selection-tray__remove","aria-label":`${r.dismissLabel} ${((m=l.media)==null?void 0:m.file_name)??l.id}`,onClick:h=>t("remove",l.id)},e.toDisplayString(r.dismissLabel),9,J3)])}),128))])])):e.createCommentVNode("",!0)}}),q3=Me(Y3,[["__scopeId","data-v-f2a3d69d"]]);function ws(o={}){const n=e.ref(!1),t=e.ref(!1),a=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=M=>{if(r.value++,l.value=null,i.value=null,t.value=!1,M!=null&&typeof M=="object"&&!(M instanceof Blob)&&("image"in M||"state"in M||"sessionKey"in M)){const V=M;a.value=V.image??null,s.value=V.state??null}else a.value=M??null,s.value=null;n.value=!0},u=()=>{n.value=!1,a.value=null,i.value=null,l.value=null,t.value=!1,s.value=null},m=async M=>{try{return t.value=!0,i.value=M,o.onSave&&await o.onSave(M),u(),M}catch(V){const b=V;throw l.value=b,o.onError&&o.onError(b),b}finally{t.value=!1}},h=()=>{o.onCancel&&o.onCancel(),u()},p=M=>{l.value=M,o.onError&&o.onError(M)},v=()=>{l.value=null},g=()=>i.value,w=e.computed(()=>n.value&&i.value!==null&&!t.value);return{isOpen:n,isProcessing:t,uploadedImage:a,editedImage:i,sessionKey:r,initialState:s,error:l,hasError:c,hasUnsavedChanges:w,open:d,close:u,handleSave:m,handleCancel:h,handleError:p,clearError:v,getEditedImage:g}}let ur=null;function K3(o){return ur||(ur=ws(o)),ur}function Q3(o){return n=>new Promise((t,a)=>{ws({...o,onSave:async r=>{o!=null&&o.onSave&&await o.onSave(r),t(r)},onError:r=>{o!=null&&o.onError&&o.onError(r),a(r)},onCancel:()=>{o!=null&&o.onCancel&&o.onCancel(),a(new Error("User cancelled"))}}).open(n)})}function ks(o){return o.filter(n=>n.media&&!n.markedForRemoval).map((n,t)=>{const a={uuid:n.media.uuid,name:n.name,order:t};return n.customProperties&&(a.custom_properties=n.customProperties),a})}function Wr(o){return o.map((n,t)=>{const a={media:n,clientId:n.uuid,name:n.name||n.file_name,order:t};return n.custom_properties&&(a.customProperties=n.custom_properties),a})}function _s(o){if(o){const t={};o.apiBaseUrl!==void 0&&(t.apiBaseUrl=o.apiBaseUrl),o.isAdmin!==void 0&&(t.isAdmin=o.isAdmin),na(t)}return{name:"mediables",async upload(t,a){const r=await $t().uploadFile(t,{collection:(a==null?void 0:a.collection)||"default",customProperties:a==null?void 0:a.customProperties});if(!r)throw new Error("Upload failed: No media returned");return{media:r,uuid:r.uuid}},async attach(t,a){await $t().attachMedia(a.modelType,String(a.modelId),[t],a.collection||"images")},async attachMany(t,a){await $t().attachMedia(a.modelType,String(a.modelId),t,a.collection||"images")},async detach(t,a){await $t().detachMedia(a.modelType,String(a.modelId),t,a.collection||"images")},async reorder(t,a){await $t().reorderMedia(t.modelType,String(t.modelId),a,t.collection||"images")},async fetchModelMedia(t){return await $t().fetchModelMedia(t.modelType,String(t.modelId),t.collection||"images")},getUrl(t,a){return $t().getMediaUrl(t,a)},getThumbnailUrl(t){var a,i;return(a=t.conversion_urls)!=null&&a.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 $t().deleteMedia(t)},async update(t,a){const r=await $t().updateMedia(t,a);if(!r)throw new Error("Update failed: No media returned");return r},configure(t){const a={};t.apiBaseUrl!==void 0&&(a.apiBaseUrl=t.apiBaseUrl),t.isAdmin!==void 0&&(a.isAdmin=t.isAdmin),na(a)}}}let Io=null;function eN(){return Io||(Io=_s()),Io}function tN(){Io=null}const nN={apiBaseUrl:"/media-library-pro"};function ko(){var o;return typeof document>"u"?null:((o=document.querySelector('meta[name="csrf-token"]'))==null?void 0:o.getAttribute("content"))||null}function mr(o){const n={uuid:o.uuid,file_name:o.fileName||o.name,mime_type:`application/${o.extension}`,size:o.size,disk:"public",original_url:o.original_url||"",created_at:new Date().toISOString(),updated_at:new Date().toISOString()};return o.name&&(n.name=o.name),o.original_url&&(n.url=o.original_url),o.preview_url&&(n.thumbnail_url=o.preview_url,n.preview_url=o.preview_url),o.custom_properties&&(n.custom_properties=o.custom_properties),n}function Es(o){const n={...nN,...o};return{name:"spatie",async upload(a,i){const r=new FormData;r.append("file",a),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||ko();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 h=await d.json().catch(()=>({message:"Upload failed"}));throw new Error(h.message||`HTTP ${d.status}`)}const u=await d.json(),m=mr(u);return i!=null&&i.onProgress&&i.onProgress(100),{media:m,uuid:u.uuid}},async attach(a,i){},async attachMany(a,i){},async detach(a,i){},async reorder(a,i){},async fetchModelMedia(a){const i={Accept:"application/json",...n.headers},r=n.csrfToken||ko();r&&(i["X-CSRF-TOKEN"]=r);const s=new URLSearchParams;s.append("model_type",a.modelType),s.append("model_id",String(a.modelId)),a.collection&&s.append("collection",a.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(mr)}catch{return[]}},getUrl(a,i){var r;if(i){const s=(r=a.conversion_urls)==null?void 0:r[i];if(s)return s}return a.original_url||a.url||""},getThumbnailUrl(a){var i,r;return a.preview_url?a.preview_url:(i=a.conversion_urls)!=null&&i.preview?a.conversion_urls.preview:a.thumbnail_url?a.thumbnail_url:(r=a.conversion_urls)!=null&&r.thumb?a.conversion_urls.thumb:a.original_url||a.url||""},async delete(a){const i={Accept:"application/json",...n.headers},r=n.csrfToken||ko();r&&(i["X-CSRF-TOKEN"]=r);const s=await fetch(`${n.apiBaseUrl}/uploads/${a}`,{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(a,i){const r={Accept:"application/json","Content-Type":"application/json",...n.headers},s=n.csrfToken||ko();s&&(r["X-CSRF-TOKEN"]=s);const l=await fetch(`${n.apiBaseUrl}/uploads/${a}`,{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 mr(c)},configure(a){Object.assign(n,a)}}}let $o=null;function aN(){return $o||($o=Es()),$o}function oN(){$o=null}function ou(o,n){switch(o){case"mediables":return _s(n);case"spatie":return Es(n);default:throw new Error(`Unknown adapter: ${o}`)}}function iu(o={}){const{enabled:n=!0,onReorder:t,onDragStart:a,onDragEnd:i,draggingClass:r="is-dragging",dropTargetClass:s="is-drop-target"}=o,l=e.ref({isDragging:!1,dragIndex:null,dropIndex:null,draggedItem:null}),c=e.ref(!1);let d=null;function u(V,b,f){n&&("dataTransfer"in V&&V.dataTransfer&&(V.dataTransfer.effectAllowed="move",V.dataTransfer.setData("text/plain",String(f))),d=V.target,d&&d.classList.add(r),l.value={isDragging:!0,dragIndex:f,dropIndex:f,draggedItem:b},c.value=!0,a==null||a(b,f))}function m(V,b){var f;if(!(!n||!l.value.isDragging)&&(V.preventDefault(),l.value.dropIndex!==b)){const _=document.querySelector(`.${s}`);_==null||_.classList.remove(s);const D=(f=V.target)==null?void 0:f.closest("[data-index]");D==null||D.classList.add(s),l.value.dropIndex=b}}function h(){if(!l.value.isDragging)return;const{dragIndex:V,dropIndex:b,draggedItem:f}=l.value;d&&d.classList.remove(r);const _=document.querySelector(`.${s}`);_==null||_.classList.remove(s),V!==null&&b!==null&&V!==b&&f&&(t==null||t({fromIndex:V,toIndex:b,item:f})),v(),i==null||i()}function p(){d&&d.classList.remove(r);const V=document.querySelector(`.${s}`);V==null||V.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 g(V,b,f){const _=[...V],[D]=_.splice(b,1);return _.splice(f,0,D),_.map((B,E)=>({...B,order:E}))}function w(V,b){return{draggable:n,"data-index":b,onDragstart:f=>u(f,V,b),onDragover:f=>m(f,b),onDragend:()=>h(),onDrop:f=>{f.preventDefault(),h()}}}function M(V){V.key==="Escape"&&l.value.isDragging&&p()}return e.onMounted(()=>{document.addEventListener("keydown",M)}),e.onUnmounted(()=>{document.removeEventListener("keydown",M),p()}),{dragState:l,isDragging:c,startDrag:u,handleDragOver:m,endDrag:h,cancelDrag:p,reorderItems:g,getDragProps:w}}function bi(o={}){const{initialItems:n=[],modelType:t,modelId:a,collection:i="images",maxItems:r,maxFileSize:s,acceptedMimeTypes:l,sortable:c=!0,disabled:d=!1,rules:u={},adapterType:m="mediables",adapter:h,maxConcurrentUploads:p=3,onChange:v,onUpload:g,onUploadComplete:w,onUploadError:M,onRemove:V,onReorder:b,onError:f,onReadyToSubmitChange:_}=o,D={maxItems:r,maxFileSize:s,acceptedMimeTypes:l,...u},B=h||ou(m),E=e.ref([]),S=e.ref(!1),P=e.ref([]);function C(le){if(le.length===0)return[];const de=le[0];return"media"in de&&"clientId"in de?le:Wr(le)}E.value=C(n);const{acceptString:A,canAddFiles:R}=gs({rules:D}),W=ys({adapter:B,maxConcurrent:p,rules:D,collection:i,onUploadStart:le=>{g==null||g(le)},onUploadComplete:(le,de)=>{const Ve=E.value.findIndex(Be=>Be.clientId===le.id);Ve!==-1&&(E.value[Ve]={...E.value[Ve],media:de,name:de.name||de.file_name,upload:{...le,status:"completed"}}),w==null||w(de)},onUploadError:(le,de)=>{const Ve=E.value.findIndex(Be=>Be.clientId===le.id);Ve!==-1&&(E.value[Ve]={...E.value[Ve],upload:{...le,status:"error",error:de.message},errors:[{field:"upload",message:de.message,code:"UPLOAD_ERROR"}]}),M==null||M({file:le.file,message:de.message})},onQueueComplete:()=>{v==null||v(E.value)}}),{dragState:O,getDragProps:I,reorderItems:F}=iu({enabled:c&&!d,onReorder:le=>{E.value=F(E.value,le.fromIndex,le.toIndex),b==null||b(E.value),v==null||v(E.value)}}),k=e.computed(()=>W.isUploading.value),$=e.computed(()=>!W.isUploading.value&&W.pendingCount.value===0),j=e.computed(()=>r?E.value.length>=r:!1),Z=e.computed(()=>ks(E.value)),K=e.computed(()=>E.value.length),ge=e.computed(()=>r?Math.max(0,r-E.value.length):1/0);e.watch($,le=>{_==null||_(le)});function we(le){E.value=C(le),v==null||v(E.value)}async function ne(le){if(d)return;const de=Array.from(le);if(!R(de.length,E.value.length)){const Ke={field:"count",message:`Maximum ${r} files allowed`,code:"MAX_ITEMS"};P.value=[Ke],f==null||f([Ke]);return}const Ve=await W.addFiles(de),Be=E.value.length,dt=Ve.map((Ke,bt)=>({...Ke,order:Be+bt}));E.value=[...E.value,...dt],v==null||v(E.value)}function N(le){d||(le.upload&&(le.upload.status==="uploading"||le.upload.status==="pending")&&W.cancelUpload(le.clientId),E.value=E.value.filter(de=>de.clientId!==le.clientId),E.value=E.value.map((de,Ve)=>({...de,order:Ve})),V==null||V(le),v==null||v(E.value))}function L(le){const de=E.value.find(Ve=>Ve.clientId===le);de&&N(de)}function te(){d||(W.clearAll(),E.value=[],v==null||v(E.value))}function ae(le,de){d||!c||(E.value=F(E.value,le,de),b==null||b(E.value),v==null||v(E.value))}function ie(le,de){if(d)return;const Ve=E.value.findIndex(Be=>Be.clientId===le);Ve!==-1&&(E.value[Ve]={...E.value[Ve],...de},v==null||v(E.value))}function he(le){W.cancelUpload(le),L(le)}async function se(le){await W.retryUpload(le)}async function fe(){if(!t||!a)throw new Error("modelType and modelId are required for save()");const le={modelType:t,modelId:a,collection:i},de=E.value.filter(Ve=>Ve.media&&!Ve.markedForRemoval).map(Ve=>Ve.media.uuid);S.value=!0;try{await B.attachMany(de,le),await B.reorder(le,de)}finally{S.value=!1}}async function xe(){if(!t||!a)throw new Error("modelType and modelId are required for load()");const le={modelType:t,modelId:a,collection:i};S.value=!0;try{const de=await B.fetchModelMedia(le);E.value=Wr(de),v==null||v(E.value)}finally{S.value=!1}}return e.onMounted(()=>{t&&a&&n.length===0&&xe().catch(console.error)}),e.onUnmounted(()=>{W.clearAll()}),{items:E,setItems:we,addFiles:ne,removeItem:N,removeItemById:L,clearAll:te,reorderItems:ae,updateItem:ie,cancelUpload:he,retryUpload:se,save:fe,load:xe,isLoading:S,isUploading:k,isReadyToSubmit:$,isAtMaxItems:j,errors:P,dragState:O,getDragProps:I,adapter:B,formValues:Z,acceptString:A,count:K,remainingSlots:ge}}const iN=["aria-disabled"],rN=["accept","multiple","disabled"],sN={class:"media-dropzone__content"},lN={class:"media-dropzone__title"},cN={class:"media-dropzone__subtitle"},dN=["disabled"],uN={key:0,class:"media-dropzone__helper"},mN=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(o,{emit:n}){const t=o,a=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 g=[];return t.maxFileSize&&g.push(`Max size: ${Zo(t.maxFileSize)}`),t.maxItems&&t.maxItems>1&&g.push(`Max files: ${t.maxItems}`),g.join(" • ")});function c(g){g.preventDefault(),!t.disabled&&(i.value=!0)}function d(g){g.preventDefault(),i.value=!1}function u(g){g.preventDefault()}function m(g){var M;if(g.preventDefault(),i.value=!1,t.disabled)return;const w=(M=g.dataTransfer)==null?void 0:M.files;w&&w.length>0&&a("files",w)}function h(){var g;t.disabled||(g=r.value)==null||g.click()}function p(g){const w=g.target,M=w.files;M&&M.length>0&&a("files",M),w.value=""}function v(g){(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),h())}return(g,w)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(s.value),role:"button",tabindex:"0","aria-disabled":g.disabled,"aria-label":"Upload files",onClick:h,onKeydown:v,onDragenter:c,onDragleave:d,onDragover:u,onDrop:m},[e.createElementVNode("input",{ref_key:"fileInput",ref:r,type:"file",accept:g.accept,multiple:g.multiple,disabled:g.disabled,class:"media-dropzone__input",onChange:p},null,40,rN),e.createElementVNode("div",sN,[e.renderSlot(g.$slots,"icon",{},()=>[w[0]||(w[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",lN,[e.renderSlot(g.$slots,"title",{},()=>[e.createTextVNode(e.toDisplayString(g.title),1)],!0)]),e.createElementVNode("p",cN,[e.renderSlot(g.$slots,"subtitle",{},()=>[e.createTextVNode(e.toDisplayString(g.subtitle),1)],!0)]),e.createElementVNode("button",{type:"button",class:"media-dropzone__button",disabled:g.disabled,onClick:e.withModifiers(h,["stop"])},[e.renderSlot(g.$slots,"button",{},()=>[e.createTextVNode(e.toDisplayString(g.buttonText),1)],!0)],8,dN),l.value?(e.openBlock(),e.createElementBlock("p",uN,e.toDisplayString(l.value),1)):e.createCommentVNode("",!0)])],42,iN))}}),xs=Me(mN,[["__scopeId","data-v-b1366c1e"]]),pN=["data-index"],fN={key:0,class:"media-item__drag-handle","aria-label":"Drag to reorder",role:"button",tabindex:"0"},hN={class:"media-item__thumbnail"},vN=["src","alt"],gN={key:1,class:"media-item__file-icon"},yN={key:2,class:"media-item__progress-overlay"},bN={class:"media-item__progress-text"},wN={key:3,class:"media-item__processing-overlay"},kN={key:4,class:"media-item__error-overlay"},_N={class:"media-item__info"},EN=["title"],xN={key:0,class:"media-item__size"},CN={key:1,class:"media-item__error-message"},SN={class:"media-item__actions"},VN=["disabled"],NN=["disabled"],TN=["disabled"],MN=["disabled"],BN=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(o,{emit:n}){const t=o,a=n,i=e.ref(!1),r=e.computed(()=>{var b;return(b=t.item.upload)!=null&&b.previewUrl?t.item.upload.previewUrl:t.item.media?t.adapter.getThumbnailUrl(t.item.media):null}),s=e.computed(()=>{var b,f,_;return((b=t.item.upload)==null?void 0:b.status)==="uploading"||((f=t.item.upload)==null?void 0:f.status)==="pending"||((_=t.item.upload)==null?void 0:_.status)==="queued"}),l=e.computed(()=>{var b;return((b=t.item.upload)==null?void 0:b.status)==="processing"}),c=e.computed(()=>{var b;return((b=t.item.upload)==null?void 0:b.status)==="error"||t.item.errors&&t.item.errors.length>0}),d=e.computed(()=>{var b;return(b=t.item.upload)!=null&&b.error?t.item.upload.error:t.item.errors&&t.item.errors.length>0?t.item.errors[0].message:null}),u=e.computed(()=>{var b;return((b=t.item.upload)==null?void 0:b.progress)||0}),m=e.computed(()=>{var b;return t.item.name||((b=t.item.media)==null?void 0:b.file_name)||"Unknown file"}),h=e.computed(()=>{var B,E;const b=((B=t.item.media)==null?void 0:B.size)||((E=t.item.upload)==null?void 0:E.file.size);if(!b)return"";const f=1024,_=["Bytes","KB","MB","GB"],D=Math.floor(Math.log(b)/Math.log(f));return parseFloat((b/Math.pow(f,D)).toFixed(2))+" "+_[D]}),p=e.computed(()=>{var f,_;const b=((f=t.item.media)==null?void 0:f.mime_type)||((_=t.item.upload)==null?void 0:_.file.type);return b==null?void 0:b.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 g(){t.disabled||a("remove",t.item)}function w(){t.disabled||a("edit",t.item)}function M(){t.disabled||a("retry",t.item)}function V(){t.disabled||a("cancel",t.item)}return(b,f)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(v.value),"data-index":b.index,onMouseenter:f[0]||(f[0]=_=>i.value=!0),onMouseleave:f[1]||(f[1]=_=>i.value=!1)},[b.sortable&&!b.disabled?(e.openBlock(),e.createElementBlock("div",fN,[...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",hN,[r.value&&p.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:r.value,alt:m.value,class:"media-item__image"},null,8,vN)):(e.openBlock(),e.createElementBlock("div",gN,[...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",yN,[e.createElementVNode("div",{class:"media-item__progress-bar",style:e.normalizeStyle({width:`${u.value}%`})},null,4),e.createElementVNode("span",bN,e.toDisplayString(u.value)+"%",1)])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",wN,[...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",kN,[...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",_N,[e.createElementVNode("span",{class:"media-item__name",title:m.value},e.toDisplayString(m.value),9,EN),h.value?(e.openBlock(),e.createElementBlock("span",xN,e.toDisplayString(h.value),1)):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createElementBlock("span",CN,e.toDisplayString(d.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",SN,[s.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"media-item__action media-item__action--cancel",disabled:b.disabled,"aria-label":"Cancel upload",onClick:V},[...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,VN)):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"media-item__action media-item__action--retry",disabled:b.disabled,"aria-label":"Retry upload",onClick:M},[...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,NN)):e.createCommentVNode("",!0),b.showEdit&&b.item.media&&!s.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"media-item__action media-item__action--edit",disabled:b.disabled,"aria-label":"Edit",onClick:w},[...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,TN)):e.createCommentVNode("",!0),b.showRemove?(e.openBlock(),e.createElementBlock("button",{key:3,type:"button",class:"media-item__action media-item__action--remove",disabled:b.disabled,"aria-label":"Remove",onClick:g},[...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,MN)):e.createCommentVNode("",!0)])],42,pN))}}),Cs=Me(BN,[["__scopeId","data-v-ff81c9ec"]]),FN=["aria-label"],IN=["draggable","data-index","onDragstart","onDragover","onDragend","onDrop"],$N={key:0,class:"media-collection__footer"},RN={class:"media-collection__count"},DN={key:0},AN={key:0,class:"media-collection__uploading"},LN=["name","value"],UN=["name","value"],ON=["name","value"],PN=["name","value"],zN={key:3,class:"media-collection__errors",role:"alert","aria-live":"polite"},jN=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(o,{emit:n}){const t=o,a=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:k=>{a("update:modelValue",k),a("change",k)},onUpload:k=>{a("upload",k)},onUploadComplete:k=>{a("upload-complete",k)},onUploadError:k=>{a("upload-error",k)},onRemove:k=>{a("remove",k)},onReorder:k=>{a("reorder",k)},onError:k=>{a("validation-error",k)},onReadyToSubmitChange:k=>{a("is-ready-to-submit-change",k)}},{items:r,setItems:s,addFiles:l,removeItem:c,reorderItems:d,cancelUpload:u,retryUpload:m,isLoading:h,isUploading:p,isAtMaxItems:v,errors:g,dragState:w,getDragProps:M,adapter:V,formValues:b,acceptString:f,count:_,remainingSlots:D}=bi(i);e.provide("mediaAdapter",V),e.provide("mediaCollection",{items:r,addFiles:l,removeItem:c,reorderItems:d}),e.watch(()=>t.modelValue,k=>{k!==r.value&&s(k)},{deep:!0});const B=e.computed(()=>t.showUploadZone&&!t.disabled&&!t.readonly&&!v.value),E=e.computed(()=>({"media-collection":!0,"media-collection--disabled":t.disabled,"media-collection--readonly":t.readonly,"media-collection--loading":h.value,"media-collection--has-items":r.value.length>0,"media-collection--dragging":w.value.isDragging}));function S(k){l(k)}function P(k){c(k)}function C(k){m(k.clientId)}function A(k){u(k.clientId)}function R(k){}function W(k,$,j){if(!t.sortable||t.disabled)return;const Z=M($,j);Z.onDragstart&&Z.onDragstart(k)}function O(k,$){if(!t.sortable||t.disabled)return;k.preventDefault();const j=r.value[$],Z=M(j,$);Z.onDragover&&Z.onDragover(k)}function I(k,$){const j=M(k,$);j.onDragend&&j.onDragend()}function F(k,$){k.preventDefault();const j=r.value[$],Z=M(j,$);Z.onDrop&&Z.onDrop(k)}return(k,$)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(E.value)},[e.renderSlot(k.$slots,"dropzone",{addFiles:e.unref(l)},()=>[B.value?(e.openBlock(),e.createBlock(xs,{key:0,accept:e.unref(f),multiple:k.maxItems!==1,disabled:k.disabled,"max-file-size":k.maxFileSize,"max-items":e.unref(D),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(_)} media items`},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(r),(j,Z)=>e.renderSlot(k.$slots,"item",{key:j.clientId,item:j,index:Z,remove:()=>P(j)},()=>[e.createElementVNode("div",{class:e.normalizeClass(["media-collection__item-wrapper",{"media-collection__item-wrapper--drag-over":e.unref(w).dropIndex===Z}]),draggable:k.sortable&&!k.disabled,"data-index":Z,onDragstart:K=>W(K,j,Z),onDragover:K=>O(K,Z),onDragend:K=>I(j,Z),onDrop:K=>F(K,Z)},[e.createVNode(Cs,{item:j,adapter:e.unref(V),disabled:k.disabled,sortable:k.sortable,"show-remove":!k.readonly,"show-edit":!1,index:Z,onRemove:P,onRetry:C,onCancel:A,onEdit:R},null,8,["item","adapter","disabled","sortable","show-remove","index"])],42,IN)],!0)),128))],8,FN)):B.value?e.createCommentVNode("",!0):e.renderSlot(k.$slots,"empty",{key:1},()=>[$[0]||($[0]=e.createElementVNode("div",{class:"media-collection__empty"},[e.createElementVNode("p",null,"No files uploaded")],-1))],!0),e.renderSlot(k.$slots,"footer",{count:e.unref(_),isUploading:e.unref(p)},()=>[e.unref(r).length>0?(e.openBlock(),e.createElementBlock("div",$N,[e.createElementVNode("span",RN,[e.createTextVNode(e.toDisplayString(e.unref(_))+" "+e.toDisplayString(e.unref(_)===1?"file":"files")+" ",1),k.maxItems?(e.openBlock(),e.createElementBlock("span",DN," / "+e.toDisplayString(k.maxItems)+" max",1)):e.createCommentVNode("",!0)]),e.unref(p)?(e.openBlock(),e.createElementBlock("span",AN," Uploading... ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],!0),k.generateFormFields?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),(j,Z)=>(e.openBlock(),e.createElementBlock("input",{key:`${k.name}-${j.uuid}`,type:"hidden",name:`${k.name}[${Z}][uuid]`,value:j.uuid},null,8,LN))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),(j,Z)=>(e.openBlock(),e.createElementBlock("input",{key:`${k.name}-${j.uuid}-name`,type:"hidden",name:`${k.name}[${Z}][name]`,value:j.name},null,8,UN))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),(j,Z)=>(e.openBlock(),e.createElementBlock("input",{key:`${k.name}-${j.uuid}-order`,type:"hidden",name:`${k.name}[${Z}][order]`,value:j.order},null,8,ON))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),(j,Z)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:`${k.name}-${j.uuid}-props`},[j.custom_properties?(e.openBlock(),e.createElementBlock("input",{key:0,type:"hidden",name:`${k.name}[${Z}][custom_properties]`,value:JSON.stringify(j.custom_properties)},null,8,PN)):e.createCommentVNode("",!0)],64))),128))],64)):e.createCommentVNode("",!0),e.unref(g).length>0?(e.openBlock(),e.createElementBlock("div",zN,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(g),j=>(e.openBlock(),e.createElementBlock("p",{key:j.code||j.message,class:"media-collection__error"},e.toDisplayString(j.message),1))),128))])):e.createCommentVNode("",!0)],2))}}),WN=Me(jN,[["__scopeId","data-v-10a5bfff"]]);function Ss(o={}){const{initialItem:n,onChange:t,onReplace:a,onUpload:i,onUploadComplete:r,onUploadError:s,onRemove:l,onError:c,onReadyToSubmitChange:d,...u}=o,h={...u,initialItems:n?[n]:[],maxItems:1,sortable:!1,onChange:B=>{t==null||t(B[0]||null)},onUpload:i,onUploadComplete:r,onUploadError:s,onRemove:l,onError:c,onReadyToSubmitChange:d},p=bi(h),v=e.computed(()=>p.items.value[0]||null),g=e.computed(()=>v.value!==null),w=e.computed(()=>p.formValues.value[0]||null);function M(B){B===null?p.clearAll():p.setItems([B])}async function V(B){const E=v.value;E&&p.removeItem(E),await p.addFiles([B])}function b(){v.value&&p.removeItem(v.value)}async function f(B){const E=v.value;E&&p.removeItem(E),await p.addFiles([B]);const S=p.items.value[0];S&&(a==null||a(E,S))}function _(){var B;(B=v.value)!=null&&B.upload&&p.cancelUpload(v.value.clientId)}async function D(){var B,E;((E=(B=v.value)==null?void 0:B.upload)==null?void 0:E.status)==="error"&&await p.retryUpload(v.value.clientId)}return{item:v,setItem:M,addFile:V,removeItem:b,replaceItem:f,cancelUpload:_,retryUpload:D,save:p.save,load:p.load,isLoading:p.isLoading,isUploading:p.isUploading,isReadyToSubmit:p.isReadyToSubmit,hasItem:g,errors:p.errors,adapter:p.adapter,formValue:w,acceptString:p.acceptString}}const ZN=["accept","disabled"],HN={class:"media-attachment__preview"},XN=["name","value"],GN=["name","value"],JN=["name","value"],YN=["name","value"],qN={key:4,class:"media-attachment__errors",role:"alert","aria-live":"polite"},KN=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(o,{emit:n}){const t=o,a=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:C=>{a("update:modelValue",C),a("change",C)},onUpload:C=>{a("upload",C)},onUploadComplete:C=>{a("upload-complete",C)},onUploadError:C=>{a("upload-error",C)},onRemove:C=>{a("remove",C)},onReplace:(C,A)=>{a("replace",A)},onError:C=>{a("validation-error",C)},onReadyToSubmitChange:C=>{a("is-ready-to-submit-change",C)}},{item:s,setItem:l,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:h,isLoading:p,hasItem:v,errors:g,adapter:w,formValue:M,acceptString:V}=Ss(r);e.provide("mediaAdapter",w),e.watch(()=>t.modelValue,C=>{C!==s.value&&l(C)},{deep:!0});const b=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":p.value,"media-attachment--has-item":v.value}));function _(C){C.length>0&&c(C[0])}function D(){var C;(C=i.value)==null||C.click()}function B(C){const A=C.target,R=A.files;R&&R.length>0&&u(R[0]),A.value=""}function E(C){d()}function S(C){h()}function P(C){m()}return(C,A)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(f.value)},[e.createElementVNode("input",{ref_key:"fileInputRef",ref:i,type:"file",accept:e.unref(V),disabled:C.disabled,class:"media-attachment__hidden-input",onChange:B},null,40,ZN),b.value?e.renderSlot(C.$slots,"dropzone",{key:0,addFile:e.unref(c)},()=>[e.createVNode(xs,{accept:e.unref(V),multiple:!1,disabled:C.disabled,"max-file-size":C.maxFileSize,onFiles:_},null,8,["accept","disabled","max-file-size"])],!0):e.unref(v)&&e.unref(s)?e.renderSlot(C.$slots,"preview",{key:1,item:e.unref(s),remove:e.unref(d),replace:D},()=>[e.createElementVNode("div",HN,[e.createVNode(Cs,{item:e.unref(s),adapter:e.unref(w),disabled:C.disabled,sortable:!1,"show-remove":!C.readonly,"show-edit":!1,onRemove:E,onRetry:S,onCancel:P},null,8,["item","adapter","disabled","show-remove"]),C.showReplaceButton&&!C.readonly&&!C.disabled&&e.unref(s).media?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"media-attachment__replace-button",onClick:D},[...A[0]||(A[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(C.$slots,"empty",{key:2},()=>[A[1]||(A[1]=e.createElementVNode("div",{class:"media-attachment__empty"},[e.createElementVNode("p",null,"No file selected")],-1))],!0),C.generateFormFields&&e.unref(M)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("input",{type:"hidden",name:`${C.name}[uuid]`,value:e.unref(M).uuid},null,8,XN),e.createElementVNode("input",{type:"hidden",name:`${C.name}[name]`,value:e.unref(M).name},null,8,GN),e.createElementVNode("input",{type:"hidden",name:`${C.name}[order]`,value:e.unref(M).order},null,8,JN),e.unref(M).custom_properties?(e.openBlock(),e.createElementBlock("input",{key:0,type:"hidden",name:`${C.name}[custom_properties]`,value:JSON.stringify(e.unref(M).custom_properties)},null,8,YN)):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0),e.unref(g).length>0?(e.openBlock(),e.createElementBlock("div",qN,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(g),R=>(e.openBlock(),e.createElementBlock("p",{key:R.code||R.message,class:"media-attachment__error"},e.toDisplayString(R.message),1))),128))])):e.createCommentVNode("",!0)],2))}}),QN=Me(KN,[["__scopeId","data-v-26911174"]]),ru={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"}},e5=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(o,{expose:n,emit:t}){const a=o,i=t,r={initialItems:a.modelValue,modelType:a.modelType,modelId:a.modelId,collection:a.collection,maxItems:a.maxItems,maxFileSize:a.maxFileSize,acceptedMimeTypes:a.acceptedMimeTypes,sortable:a.sortable,disabled:a.disabled,rules:a.rules,adapterType:a.adapter,onChange:C=>{i("update:modelValue",C),i("change",C)},onUpload:C=>{i("upload",C)},onUploadComplete:C=>{i("upload-complete",C)},onUploadError:C=>{i("upload-error",C)},onRemove:C=>{i("remove",C)},onReorder:C=>{i("reorder",C)},onError:C=>{i("validation-error",C)},onReadyToSubmitChange:C=>{i("is-ready-to-submit-change",C)}},{items:s,setItems:l,addFiles:c,removeItem:d,reorderItems:u,updateItem:m,cancelUpload:h,retryUpload:p,isLoading:v,isUploading:g,isReadyToSubmit:w,isAtMaxItems:M,errors:V,dragState:b,getDragProps:f,adapter:_,formValues:D,acceptString:B}=bi(r);e.provide("mediaAdapter",_),e.provide("mediaCollection",{items:s,addFiles:c,removeItem:d,reorderItems:u}),e.watch(()=>a.modelValue,C=>{C!==s.value&&l(C)},{deep:!0});const E=e.computed(()=>({...ru,...a.labels})),S=e.computed(()=>({accept:B.value,multiple:a.maxItems!==1,disabled:a.disabled||a.readonly||M.value})),P=e.computed(()=>({items:s.value,isLoading:v.value,isUploading:g.value,isReadyToSubmit:w.value,isAtMaxItems:M.value,errors:V.value,addFiles:c,removeItem:d,reorderItems:u,clearAll:()=>{s.value.forEach(C=>d(C))},cancelUpload:h,retryUpload:p,labels:E.value,dropzoneProps:S.value}));return n({items:s,addFiles:c,removeItem:d,reorderItems:u,updateItem:m,cancelUpload:h,retryUpload:p,isLoading:v,isUploading:g,isReadyToSubmit:w,isAtMaxItems:M,errors:V,dragState:b,getDragProps:f,adapter:_,formValues:D,acceptString:B}),(C,A)=>e.renderSlot(C.$slots,"default",e.normalizeProps(e.guardReactiveProps(P.value)))}}),t5=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(o,{expose:n,emit:t}){const a=o,i=t,r={initialItem:a.modelValue,modelType:a.modelType,modelId:a.modelId,collection:a.collection,maxFileSize:a.maxFileSize,acceptedMimeTypes:a.acceptedMimeTypes,disabled:a.disabled,rules:a.rules,adapterType:a.adapter,onChange:E=>{i("update:modelValue",E),i("change",E)},onUpload:E=>{i("upload",E)},onUploadComplete:E=>{i("upload-complete",E)},onUploadError:E=>{i("upload-error",E)},onRemove:E=>{i("remove",E)},onReplace:(E,S)=>{i("replace",S)},onError:E=>{i("validation-error",E)},onReadyToSubmitChange:E=>{i("is-ready-to-submit-change",E)}},{item:s,setItem:l,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:h,isLoading:p,isUploading:v,isReadyToSubmit:g,hasItem:w,errors:M,adapter:V,formValue:b,acceptString:f}=Ss(r);e.provide("mediaAdapter",V),e.watch(()=>a.modelValue,E=>{E!==s.value&&l(E)},{deep:!0});const _=e.computed(()=>({...ru,...a.labels})),D=e.computed(()=>({accept:f.value,multiple:!1,disabled:a.disabled||a.readonly||w.value})),B=e.computed(()=>({item:s.value,hasItem:w.value,isLoading:p.value,isUploading:v.value,isReadyToSubmit:g.value,errors:M.value,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:h,labels:_.value,dropzoneProps:D.value}));return n({item:s,setItem:l,addFile:c,removeItem:d,replaceItem:u,cancelUpload:m,retryUpload:h,isLoading:p,isUploading:v,isReadyToSubmit:g,hasItem:w,errors:M,adapter:V,formValue:b,acceptString:f}),(E,S)=>e.renderSlot(E.$slots,"default",e.normalizeProps(e.guardReactiveProps(B.value)))}}),n5=["name","value"],a5=["name","value"],o5=["name","value"],i5=["name","value"],r5=e.defineComponent({__name:"MediaHiddenFields",props:{items:{default:()=>[]},item:{default:null},name:{default:"media"},format:{default:"mediables"}},setup(o){const n=o,t=e.computed(()=>n.item?[n.item]:n.items),a=e.computed(()=>ks(t.value));function i(l,c){var u;const d=((u=a.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(a.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,n5),e.createElementVNode("input",{type:"hidden",name:s(u,"name"),value:d.name},null,8,a5),e.createElementVNode("input",{type:"hidden",name:s(u,"order"),value:d.order},null,8,o5),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,i5)):e.createCommentVNode("",!0)],64))),128))}}),s5=["data-testid"],l5=["data-testid"],c5=["id"],d5=["value","maxlength","disabled","aria-labelledby","placeholder","data-testid","onInput"],u5=e.defineComponent({__name:"MediaAttachmentMetadataFields",props:{items:{},disabled:{type:Boolean,default:!1},label:{default:"Caption"},placeholder:{default:"Add an optional caption"},maxLength:{default:500},testIdPrefix:{default:"media-attachment-metadata"},getItemLabel:{type:Function,default:(o,n)=>`${o.type==="video"?"video":"photo"} ${n+1}`}},emits:["update:items"],setup(o,{emit:n}){const t=o,a=n;function i(r,s){const l=s.target;l instanceof HTMLInputElement&&a("update:items",t.items.map((c,d)=>d!==r?c:{...c,caption:l.value===""?null:l.value}))}return(r,s)=>r.items.length>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"media-attachment-metadata-fields","data-testid":r.testIdPrefix},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.items,(l,c)=>(e.openBlock(),e.createElementBlock("div",{key:l._key??l.id??`${l.url}:${c}`,class:"media-attachment-metadata-fields__row","data-testid":`${r.testIdPrefix}-${c}`},[e.createElementVNode("p",{id:`${r.testIdPrefix}-label-${c}`,class:"media-attachment-metadata-fields__label"},e.toDisplayString(r.label)+" for "+e.toDisplayString(r.getItemLabel(l,c)),9,c5),e.createElementVNode("input",{value:l.caption??"",type:"text",class:"media-attachment-metadata-fields__input",maxlength:r.maxLength,disabled:r.disabled,"aria-labelledby":`${r.testIdPrefix}-label-${c}`,placeholder:r.placeholder,"data-testid":`input-${r.testIdPrefix}-${c}`,onInput:d=>i(c,d)},null,40,d5)],8,l5))),128))],8,s5)):e.createCommentVNode("",!0)}}),m5=Me(u5,[["__scopeId","data-v-a153768a"]]),p5="/v1/media/deletion/check",f5="/v1/media/deletion/delete",_o=100;function ic(o){const n=new Set,t=[];for(const a of o){const i=a.trim().toLowerCase();i===""||n.has(i)||(n.add(i),t.push(i))}return t.sort()}function su(o){const n=o.checkEndpoint??p5,t=o.deleteEndpoint??f5,a=e.ref(!1),i=e.ref(!1),r=e.ref(null),s=e.ref(null),l=e.ref(null);async function c(m){l.value=null;const h=ic(m);if(h.length===0)return r.value=[],[];if(h.length>_o){const p=new Error(`Cannot check more than ${_o} media items at once.`);throw l.value=p,p}a.value=!0;try{const p=await o.httpClient.post(n,{uuids:h}),v=((p==null?void 0:p.data)??[]).map(g=>{var w,M,V,b;return{uuid:g.uuid,canDelete:((w=g.report)==null?void 0:w.canDelete)??!1,blocks:Array.isArray((M=g.report)==null?void 0:M.blocks)?g.report.blocks:[],cascade:Array.isArray((V=g.report)==null?void 0:V.cascade)?g.report.cascade:[],variantCount:typeof((b=g.report)==null?void 0:b.variantCount)=="number"?g.report.variantCount:0}});return r.value=v,v}catch(p){throw l.value=p instanceof Error?p:new Error(String(p)),l.value}finally{a.value=!1}}async function d(m,h={}){l.value=null;const p=ic(m);if(p.length===0){const v={results:[],summary:{}};return s.value=v,v}if(p.length>_o){const v=new Error(`Cannot delete more than ${_o} media items at once.`);throw l.value=v,v}i.value=!0;try{const v=await o.httpClient.post(t,{uuids:p,force:h.force===!0}),g={results:Array.isArray(v==null?void 0:v.results)?v.results:[],summary:(v==null?void 0:v.summary)??{}};return s.value=g,g}catch(v){throw l.value=v instanceof Error?v:new Error(String(v)),l.value}finally{i.value=!1}}function u(){r.value=null,s.value=null,l.value=null}return{isChecking:a,isDeleting:i,lastReport:r,lastResponse:s,error:l,checkDependencies:c,deleteMany:d,reset:u}}const h5="/v1/user/media/trash";function v5(o){return`/v1/user/media/${encodeURIComponent(o)}/restore`}function lu(o){const n=o.listEndpoint??h5,t=o.buildRestoreEndpoint??v5,a=o.perPage??50,i=e.ref([]),r=e.ref(0),s=e.ref(1),l=e.ref(!1),c=e.ref(!1),d=e.ref(null);async function u(p=1){var v,g;d.value=null,l.value=!0;try{const w=await o.httpClient.get(n,{params:{page:p,per_page:a}});i.value=Array.isArray(w==null?void 0:w.data)?w.data:[],r.value=typeof((v=w==null?void 0:w.meta)==null?void 0:v.total)=="number"?w.meta.total:0,s.value=typeof((g=w==null?void 0:w.meta)==null?void 0:g.current_page)=="number"?w.meta.current_page:p}catch(w){throw d.value=w instanceof Error?w:new Error(String(w)),d.value}finally{l.value=!1}}async function m(p){d.value=null,c.value=!0;try{const v=await o.httpClient.post(t(p)),g={status:(v==null?void 0:v.status)??"failed",data:(v==null?void 0:v.data)??null,duplicate_uuid:(v==null?void 0:v.duplicate_uuid)??null};return typeof(v==null?void 0:v.message)=="string"&&(g.message=v.message),g.status==="restored"&&(i.value=i.value.filter(w=>w.uuid!==p),r.value=Math.max(0,r.value-1)),g}catch(v){const g=g5(v);if(g&&typeof g.status=="string"){const w={status:g.status,duplicate_uuid:typeof g.duplicate_uuid=="string"?g.duplicate_uuid:null};return typeof g.message=="string"&&(w.message=g.message),w}throw d.value=v instanceof Error?v:new Error(String(v)),d.value}finally{c.value=!1}}function h(){i.value=[],r.value=0,s.value=1,d.value=null}return{items:i,total:r,currentPage:s,isLoading:l,isRestoring:c,error:d,fetch:u,restore:m,reset:h}}function g5(o){var t;if(typeof o!="object"||o===null)return null;const n=o;return(t=n.response)!=null&&t.data&&typeof n.response.data=="object"?n.response.data:null}const y5={class:"media-management-view","data-testid":"media-management-view"},b5={class:"media-management-view__header"},w5={class:"media-management-view__title"},k5={class:"media-management-view__actions"},_5={key:0,class:"media-management-view__badge"},E5={key:0,class:"media-management-view__panel","data-testid":"panel-library"},x5={key:0,class:"media-management-view__status","data-testid":"library-loading"},C5={key:1,class:"media-management-view__status media-management-view__status--error","data-testid":"library-error"},S5={key:2,class:"media-management-view__empty","data-testid":"library-empty"},V5={key:3,class:"media-management-view__grid","data-testid":"library-grid"},N5=["data-testid"],T5=["data-testid","aria-pressed","onClick"],M5=["src","alt"],B5={key:1,class:"media-management-view__item-placeholder"},F5={class:"media-management-view__item-meta"},I5={class:"media-management-view__item-name"},$5=["data-testid"],R5={key:1,class:"media-management-view__item-badge","data-testid":"badge-orphaned"},D5={key:4,class:"media-management-view__bulk-bar","data-testid":"bulk-bar"},A5={"data-testid":"bulk-count"},L5=["disabled"],U5={key:1,class:"media-management-view__panel","data-testid":"panel-trash"},O5={key:0,class:"media-management-view__status","data-testid":"trash-loading"},P5={key:1,class:"media-management-view__empty","data-testid":"trash-empty"},z5={key:2,class:"media-management-view__grid","data-testid":"trash-grid"},j5=["data-testid"],W5={class:"media-management-view__item-thumb"},Z5=["src","alt"],H5={class:"media-management-view__item-meta"},X5={class:"media-management-view__item-name"},G5={key:0,class:"media-management-view__item-meta-line"},J5=["data-testid","disabled","onClick"],Y5=e.defineComponent({__name:"MediaManagementView",props:{httpClient:{},capabilities:{default:()=>({})},labels:{default:()=>({})},confirmBulkDelete:{},onRestoreCollision:{}},emits:["deleted","restored","restore-conflict","error"],setup(o,{expose:n,emit:t}){const a=o,i=t,r=e.computed(()=>({showTrash:!0,allowBulkDelete:!0,showOwner:!1,...a.capabilities})),s=e.computed(()=>{var I,F,k,$,j,Z,K,ge,we,ne,N,L;return{title:((I=a.labels)==null?void 0:I.title)??"My Media",libraryTab:((F=a.labels)==null?void 0:F.libraryTab)??"Library",trashTab:((k=a.labels)==null?void 0:k.trashTab)??"Trash",loading:(($=a.labels)==null?void 0:$.loading)??"Loading…",emptyLibrary:((j=a.labels)==null?void 0:j.emptyLibrary)??"No media yet — upload your first creation.",emptyTrash:((Z=a.labels)==null?void 0:Z.emptyTrash)??"Trash is empty.",orphanedBadge:((K=a.labels)==null?void 0:K.orphanedBadge)??"Not in use",selectedCount:((ge=a.labels)==null?void 0:ge.selectedCount)??(te=>`${te} selected`),deleteButton:((we=a.labels)==null?void 0:we.deleteButton)??"Delete",restoreButton:((ne=a.labels)==null?void 0:ne.restoreButton)??"Restore",purgeAfter:((N=a.labels)==null?void 0:N.purgeAfter)??(te=>`Purges ${te}`),ownerLabel:((L=a.labels)==null?void 0:L.ownerLabel)??(te=>`User ${te.user_id??""}`)}}),l=e.computed(()=>s.value.title),c=e.computed(()=>s.value.libraryTab),d=e.computed(()=>s.value.trashTab),u=e.computed(()=>s.value.loading),m=e.computed(()=>s.value.emptyLibrary),h=e.computed(()=>s.value.emptyTrash),p=e.computed(()=>s.value.orphanedBadge),v=e.computed(()=>s.value.deleteButton),g=e.computed(()=>s.value.restoreButton),w=e.ref("library"),M=e.ref({scope:"library"}),V=e.ref({}),b=bs({httpClient:a.httpClient,view:M,filters:V,perPage:50}),f=e.computed(()=>b.items.value),_=e.computed(()=>b.loading.value),D=e.computed(()=>{var I;return((I=b.error.value)==null?void 0:I.message)??null}),B=xc(f),E=su({httpClient:a.httpClient}),S=lu({httpClient:a.httpClient});function P(I){return s.value.selectedCount(I)}function C(I){return s.value.purgeAfter(I)}function A(I){return s.value.ownerLabel(I)}async function R(){const I=B.selectedItems.value;if(I.length===0)return;const F=r.value.canDelete?I.filter(k=>r.value.canDelete(k)):I;if(F.length!==0&&!(a.confirmBulkDelete&&!await a.confirmBulkDelete(F)))try{const k=F.map(Z=>Z.uuid),j=(await E.deleteMany(k)).results.filter(Z=>Z.status==="trashed"||Z.status==="already_trashed").map(Z=>Z.uuid);if(j.length>0){for(const Z of j)B.deselect(Z);i("deleted",j),await b.refresh(),r.value.showTrash!==!1&&await S.fetch(S.currentPage.value).catch(()=>{})}}catch(k){i("error",k instanceof Error?k:new Error(String(k)))}}async function W(I){var F;try{const k=await S.restore(I);if(k.status==="restored"){i("restored",I),await b.refresh().catch(()=>{});return}if(k.status==="duplicate_conflict"){i("restore-conflict",{uuid:I,duplicateUuid:k.duplicate_uuid??null}),(F=a.onRestoreCollision)==null||F.call(a,I,k.duplicate_uuid??null);return}}catch(k){i("error",k instanceof Error?k:new Error(String(k)))}}async function O(){w.value="trash",S.items.value.length===0&&!S.isLoading.value&&await S.fetch().catch(I=>{i("error",I instanceof Error?I:new Error(String(I)))})}return e.watch(w,async I=>{I==="library"&&f.value.length===0&&!_.value&&await b.refresh().catch(()=>{})}),e.onMounted(async()=>{await b.refresh().catch(I=>{i("error",I instanceof Error?I:new Error(String(I)))}),r.value.showTrash!==!1&&S.fetch().catch(()=>{})}),n({refresh:()=>b.refresh(),refreshTrash:()=>S.fetch(),selection:B,deletion:E,trash:S}),(I,F)=>(e.openBlock(),e.createElementBlock("div",y5,[e.createElementVNode("header",b5,[e.createElementVNode("h2",w5,e.toDisplayString(l.value),1),e.createElementVNode("div",k5,[r.value.showTrash!==!1?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:e.normalizeClass(["media-management-view__tab-button",{"is-active":w.value==="library"}]),"data-testid":"tab-library",onClick:F[0]||(F[0]=k=>w.value="library")},e.toDisplayString(c.value),3)):e.createCommentVNode("",!0),r.value.showTrash!==!1?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:e.normalizeClass(["media-management-view__tab-button",{"is-active":w.value==="trash"}]),"data-testid":"tab-trash",onClick:O},[e.createTextVNode(e.toDisplayString(d.value)+" ",1),e.unref(S).total.value>0?(e.openBlock(),e.createElementBlock("span",_5,e.toDisplayString(e.unref(S).total.value),1)):e.createCommentVNode("",!0)],2)):e.createCommentVNode("",!0)])]),w.value==="library"?(e.openBlock(),e.createElementBlock("section",E5,[_.value?(e.openBlock(),e.createElementBlock("div",x5,e.toDisplayString(u.value),1)):D.value?(e.openBlock(),e.createElementBlock("div",C5,e.toDisplayString(D.value),1)):f.value.length===0?(e.openBlock(),e.createElementBlock("div",S5,e.toDisplayString(m.value),1)):(e.openBlock(),e.createElementBlock("ul",V5,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,k=>(e.openBlock(),e.createElementBlock("li",{key:k.uuid,class:e.normalizeClass(["media-management-view__item",{"is-selected":e.unref(B).isSelected(k.uuid)}]),"data-testid":`media-item-${k.uuid}`},[e.createElementVNode("button",{type:"button",class:"media-management-view__item-thumb","data-testid":`btn-select-${k.uuid}`,"aria-pressed":e.unref(B).isSelected(k.uuid),onClick:$=>e.unref(B).toggle(k.uuid)},[k.thumbnail_url||k.original_url?(e.openBlock(),e.createElementBlock("img",{key:0,src:k.thumbnail_url||k.original_url,alt:k.alt_text||k.file_name,loading:"lazy"},null,8,M5)):(e.openBlock(),e.createElementBlock("span",B5,e.toDisplayString(k.file_name),1))],8,T5),e.createElementVNode("div",F5,[e.createElementVNode("span",I5,e.toDisplayString(k.file_name),1),r.value.showOwner&&k.user_id?(e.openBlock(),e.createElementBlock("span",{key:0,class:"media-management-view__item-owner","data-testid":`owner-${k.uuid}`},e.toDisplayString(A(k)),9,$5)):e.createCommentVNode("",!0),k.is_orphaned?(e.openBlock(),e.createElementBlock("span",R5,e.toDisplayString(p.value),1)):e.createCommentVNode("",!0)])],10,N5))),128))])),e.unref(B).selectedCount.value>0&&r.value.allowBulkDelete!==!1?(e.openBlock(),e.createElementBlock("footer",D5,[e.createElementVNode("span",A5,e.toDisplayString(P(e.unref(B).selectedCount.value)),1),e.createElementVNode("button",{type:"button",class:"media-management-view__btn-delete","data-testid":"btn-bulk-delete",disabled:e.unref(E).isDeleting.value,onClick:R},e.toDisplayString(v.value),9,L5)])):e.createCommentVNode("",!0)])):w.value==="trash"?(e.openBlock(),e.createElementBlock("section",U5,[e.unref(S).isLoading.value?(e.openBlock(),e.createElementBlock("div",O5,e.toDisplayString(u.value),1)):e.unref(S).items.value.length===0?(e.openBlock(),e.createElementBlock("div",P5,e.toDisplayString(h.value),1)):(e.openBlock(),e.createElementBlock("ul",z5,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(S).items.value,k=>(e.openBlock(),e.createElementBlock("li",{key:k.uuid,class:"media-management-view__item is-trashed","data-testid":`trash-item-${k.uuid}`},[e.createElementVNode("div",W5,[k.thumbnail_url||k.original_url?(e.openBlock(),e.createElementBlock("img",{key:0,src:k.thumbnail_url||k.original_url,alt:k.alt_text||k.file_name,loading:"lazy"},null,8,Z5)):e.createCommentVNode("",!0)]),e.createElementVNode("div",H5,[e.createElementVNode("span",X5,e.toDisplayString(k.file_name),1),k.purge_after?(e.openBlock(),e.createElementBlock("span",G5,e.toDisplayString(C(k.purge_after)),1)):e.createCommentVNode("",!0)]),e.createElementVNode("button",{type:"button",class:"media-management-view__btn-restore","data-testid":`btn-restore-${k.uuid}`,disabled:e.unref(S).isRestoring.value,onClick:$=>W(k.uuid)},e.toDisplayString(g.value),9,J5)],8,j5))),128))]))])):e.createCommentVNode("",!0)]))}}),q5=Me(Y5,[["__scopeId","data-v-ec535782"]]);exports.AlbumBrowser=Pd;exports.AlbumManager=HV;exports.AlbumMediaGrid=o4;exports.AlbumTree=Od;exports.ArrayBufferTarget=Qr;exports.ExistingMediaSelector=_h;exports.ImageEditor=fc;exports.ImageEditorModal=hc;exports.LiveStreamManager=bV;exports.ManagedMediaGallery=Ym;exports.MediaAlbumInlineCreate=zd;exports.MediaAlbumUnavailableState=jd;exports.MediaAttachment=QN;exports.MediaAttachmentMetadataFields=m5;exports.MediaCollection=WN;exports.MediaCollectionDropzone=xs;exports.MediaCollectionItem=Cs;exports.MediaLibraryPicker=au;exports.MediaLibraryPickerModal=O3;exports.MediaManagementView=q5;exports.MediaPreviewSheet=Wd;exports.MediaSelectionTray=q3;exports.MediaSourceSheet=Zd;exports.MediaThumbnailCell=Xd;exports.MediaUploadSheet=Hd;exports.MediaWorkspace=Hm;exports.ModelMediaManager=Wf;exports.Muxer=Oc;exports.VideoEditor=Rd;exports.VideoEditorDialog=nE;exports.VideoEditorSimple=SE;exports.VideoExportPanel=iC;exports.VideoJobClient=vi;exports.VideoPlayer=Ad;exports.VideoTimeline=YE;exports.VideoToolsPanel=Ux;exports.VideoUploader=HC;exports.VirtualMediaGrid=Gd;exports._sfc_main=e5;exports._sfc_main$1=t5;exports._sfc_main$2=r5;exports.applyTemporaryMediaStoreConfig=cc;exports.configureMediaStore=na;exports.createAdapter=ou;exports.createEmptyEditorState=Sm;exports.createImageEditor=Q3;exports.createMediablesAdapter=_s;exports.createSpatieAdapter=Es;exports.deserializeEditorState=Cm;exports.formatFileSize=Zo;exports.fromMediaArray=Wr;exports.getFileExtension=Jd;exports.getImageDimensions=Yd;exports.getMediablesAdapter=eN;exports.getSpatieAdapter=aN;exports.isImageFile=vs;exports.normalizeEditorState=Zr;exports.normalizeRecipeForServerRender=A_;exports.recipeHasServerRenderableEdits=D_;exports.recipeHasUnsupportedServerEdits=Dd;exports.resetMediablesAdapter=tN;exports.resetSpatieAdapter=oN;exports.restoreMediaStoreConfig=lc;exports.serializeEditorState=rc;exports.snapshotMediaStoreConfig=sc;exports.toFormValues=ks;exports.useAdminMediaStore=dc;exports.useAlbumDragDrop=Ud;exports.useAlbumStore=yi;exports.useAlbums=Ld;exports.useGlobalImageEditor=K3;exports.useImageEditorModal=ws;exports.useMediaAttachment=Ss;exports.useMediaCollection=bi;exports.useMediaDeletion=su;exports.useMediaDragSort=iu;exports.useMediaLibraryPickerController=nu;exports.useMediaLibraryQuery=bs;exports.useMediaLibrarySession=Qd;exports.useMediaLibraryStateMachine=eu;exports.useMediaLibraryTelemetry=tu;exports.useMediaStore=$t;exports.useMediaTrash=lu;exports.useMediaUploadQueue=ys;exports.useMediaValidation=gs;exports.validateFile=qd;
|
|
342
|
+
//# sourceMappingURL=index-DNo3Kr1t.cjs.map
|