diff --git a/public/build/assets/BaseBottomSheet-BODCttr7.js b/public/build/assets/BaseBottomSheet-BODCttr7.js deleted file mode 100644 index 5517fcd..0000000 --- a/public/build/assets/BaseBottomSheet-BODCttr7.js +++ /dev/null @@ -1 +0,0 @@ -import{C as e,H as t,M as n,P as r,R as i,_ as a,d as o,f as s,k as c,p as l,r as u,s as d,t as f,u as p,v as m,w as h,z as g}from"./_plugin-vue_export-helper-DVo1OUMD.js";import{c as _,d as v,f as y}from"./index-C0Yc8pEe.js";var b=u(`devices`,()=>{let e=t([]),n=t(!1),r=t(null);async function i(){n.value=!0,r.value=null;try{let t=await fetch(`/api/devices`);if(!t.ok)throw Error(`Failed to load devices`);e.value=await t.json()}catch(e){r.value=e instanceof Error?e.message:`Unknown error`}finally{n.value=!1}}async function a(t,n){let r=await fetch(`/api/devices/${t}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)});if(!r.ok)throw Error(`Failed to update device`);let i=await r.json(),a=e.value.findIndex(e=>e.id===t);return a!==-1&&(e.value[a]=i),i}async function o(t,n){let r=await fetch(`/api/devices/${t}/lock`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({imageId:n})});if(!r.ok)throw Error(`Failed to lock image`);let i=await r.json(),a=e.value.findIndex(e=>e.id===t);return a!==-1&&(e.value[a]=i),i}async function s(t){let n=await fetch(`/api/devices/${t}/lock`,{method:`DELETE`});if(!n.ok)throw Error(`Failed to unlock`);let r=await n.json(),i=e.value.findIndex(e=>e.id===t);return i!==-1&&(e.value[i]=r),r}return{devices:e,loading:n,error:r,fetchDevices:i,updateDevice:a,lockImage:o,unlockImage:s}}),x=u(`upload`,()=>{let e=t(null),n=t(null),r=t(null),i=t(null),a=t(null),o=t([]),s=t(null),c=t([]),l=t(null);function u(t,r){g(),e.value=t,n.value=URL.createObjectURL(t),s.value=r??null,c.value=r?[r]:[]}async function d(t,r){g();let i=await(await fetch(t.originalUrl)).blob();e.value=new File([i],t.originalFilename,{type:i.type}),n.value=URL.createObjectURL(i),l.value=t.id,a.value=t.cropParams??null,o.value=t.stickerState?[...t.stickerState]:[],c.value=t.approvedDeviceIds,s.value=r??null}function f(e,t){i.value&&URL.revokeObjectURL(i.value),r.value=e,i.value=URL.createObjectURL(e),a.value=t}function p(e){o.value=[...o.value,e]}function m(e,t){o.value=o.value.map(n=>n.id===e?{...n,...t}:n)}function h(e){o.value=o.value.filter(t=>t.id!==e)}function g(){n.value&&URL.revokeObjectURL(n.value),i.value&&URL.revokeObjectURL(i.value),e.value=null,n.value=null,r.value=null,i.value=null,a.value=null,o.value=[],s.value=null,c.value=[],l.value=null}return{originalFile:e,originalUrl:n,croppedBlob:r,croppedUrl:i,cropParams:a,stickers:o,contextDeviceId:s,selectedDeviceIds:c,editingImageId:l,init:u,initEdit:d,setCrop:f,addSticker:p,updateSticker:m,removeSticker:h,cleanup:g}}),S={key:0,class:`btn__spinner`,"aria-hidden":`true`},C=f(m({__name:`BaseButton`,props:{variant:{default:`primary`},tag:{default:`button`},type:{default:`button`},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1}},setup(t){return(i,a)=>(c(),o(r(t.tag),e({type:t.tag===`button`?t.type:void 0,disabled:t.disabled||t.loading,class:[`btn`,`btn--${t.variant}`,{"btn--loading":t.loading}]},i.$attrs),{default:g(()=>[t.loading?(c(),l(`span`,S)):s(``,!0),n(i.$slots,`default`,{},void 0,!0)]),_:3},16,[`type`,`disabled`,`class`]))}}),[[`__scopeId`,`data-v-7d3f1e61`]]),w=[`aria-label`],T=f(m({__name:`BaseBottomSheet`,props:{modelValue:{type:Boolean},label:{}},emits:[`update:modelValue`],setup(e,{emit:r}){let u=e,f=r,m=t(null),b=null;function x(){f(`update:modelValue`,!1)}return i(()=>u.modelValue,async e=>{e?(b=document.activeElement,await h(),m.value?.focus()):(b?.focus(),b=null)}),(t,r)=>(c(),o(d,{to:`body`},[a(_,{name:`sheet`},{default:g(()=>[e.modelValue?(c(),l(`div`,{key:0,class:`sheet-overlay`,role:`dialog`,"aria-label":e.label,"aria-modal":`true`,onClick:y(x,[`self`]),onKeydown:v(x,[`esc`])},[p(`div`,{ref_key:`sheetRef`,ref:m,class:`sheet`,tabindex:`-1`},[r[0]||=p(`div`,{class:`sheet__handle`,"aria-hidden":`true`},null,-1),n(t.$slots,`default`,{},void 0,!0)],512)],40,w)):s(``,!0)]),_:3})]))}}),[[`__scopeId`,`data-v-81ce2dd1`]]);export{b as i,C as n,x as r,T as t}; \ No newline at end of file diff --git a/public/build/assets/BaseBottomSheet-cgSeW-RK.js b/public/build/assets/BaseBottomSheet-cgSeW-RK.js new file mode 100644 index 0000000..f359735 --- /dev/null +++ b/public/build/assets/BaseBottomSheet-cgSeW-RK.js @@ -0,0 +1 @@ +import{C as e,H as t,M as n,P as r,R as i,_ as a,d as o,f as s,k as c,p as l,r as u,s as d,t as f,u as p,v as m,w as h,z as g}from"./_plugin-vue_export-helper-DVo1OUMD.js";import{c as _,d as v,f as y}from"./index-CmXd-se5.js";var b=u(`devices`,()=>{let e=t([]),n=t(!1),r=t(null);async function i(){n.value=!0,r.value=null;try{let t=await fetch(`/api/devices`);if(!t.ok)throw Error(`Failed to load devices`);e.value=await t.json()}catch(e){r.value=e instanceof Error?e.message:`Unknown error`}finally{n.value=!1}}async function a(t,n){let r=await fetch(`/api/devices/${t}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)});if(!r.ok)throw Error(`Failed to update device`);let i=await r.json(),a=e.value.findIndex(e=>e.id===t);return a!==-1&&(e.value[a]=i),i}async function o(t,n){let r=await fetch(`/api/devices/${t}/lock`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({imageId:n})});if(!r.ok)throw Error(`Failed to lock image`);let i=await r.json(),a=e.value.findIndex(e=>e.id===t);return a!==-1&&(e.value[a]=i),i}async function s(t){let n=await fetch(`/api/devices/${t}/lock`,{method:`DELETE`});if(!n.ok)throw Error(`Failed to unlock`);let r=await n.json(),i=e.value.findIndex(e=>e.id===t);return i!==-1&&(e.value[i]=r),r}return{devices:e,loading:n,error:r,fetchDevices:i,updateDevice:a,lockImage:o,unlockImage:s}}),x=u(`upload`,()=>{let e=t(null),n=t(null),r=t(null),i=t(null),a=t(null),o=t(null),s=t([]),c=t(null),l=t([]),u=t(null);function d(t,r){_(),e.value=t,n.value=URL.createObjectURL(t),c.value=r??null,l.value=r?[r]:[]}async function f(t,r){_();let i=await(await fetch(t.originalUrl)).blob();e.value=new File([i],t.originalFilename,{type:i.type}),n.value=URL.createObjectURL(i),u.value=t.id,a.value=t.cropParams??null,o.value=t.cropOrientation??null,s.value=t.stickerState?[...t.stickerState]:[],l.value=t.approvedDeviceIds,c.value=r??null}function p(e,t,n){i.value&&URL.revokeObjectURL(i.value),r.value=e,i.value=URL.createObjectURL(e),a.value=t,o.value=n}function m(e){s.value=[...s.value,e]}function h(e,t){s.value=s.value.map(n=>n.id===e?{...n,...t}:n)}function g(e){s.value=s.value.filter(t=>t.id!==e)}function _(){n.value&&URL.revokeObjectURL(n.value),i.value&&URL.revokeObjectURL(i.value),e.value=null,n.value=null,r.value=null,i.value=null,a.value=null,o.value=null,s.value=[],c.value=null,l.value=[],u.value=null}return{originalFile:e,originalUrl:n,croppedBlob:r,croppedUrl:i,cropParams:a,cropOrientation:o,stickers:s,contextDeviceId:c,selectedDeviceIds:l,editingImageId:u,init:d,initEdit:f,setCrop:p,addSticker:m,updateSticker:h,removeSticker:g,cleanup:_}}),S={key:0,class:`btn__spinner`,"aria-hidden":`true`},C=f(m({__name:`BaseButton`,props:{variant:{default:`primary`},tag:{default:`button`},type:{default:`button`},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1}},setup(t){return(i,a)=>(c(),o(r(t.tag),e({type:t.tag===`button`?t.type:void 0,disabled:t.disabled||t.loading,class:[`btn`,`btn--${t.variant}`,{"btn--loading":t.loading}]},i.$attrs),{default:g(()=>[t.loading?(c(),l(`span`,S)):s(``,!0),n(i.$slots,`default`,{},void 0,!0)]),_:3},16,[`type`,`disabled`,`class`]))}}),[[`__scopeId`,`data-v-7d3f1e61`]]),w=[`aria-label`],T=f(m({__name:`BaseBottomSheet`,props:{modelValue:{type:Boolean},label:{}},emits:[`update:modelValue`],setup(e,{emit:r}){let u=e,f=r,m=t(null),b=null;function x(){f(`update:modelValue`,!1)}return i(()=>u.modelValue,async e=>{e?(b=document.activeElement,await h(),m.value?.focus()):(b?.focus(),b=null)}),(t,r)=>(c(),o(d,{to:`body`},[a(_,{name:`sheet`},{default:g(()=>[e.modelValue?(c(),l(`div`,{key:0,class:`sheet-overlay`,role:`dialog`,"aria-label":e.label,"aria-modal":`true`,onClick:y(x,[`self`]),onKeydown:v(x,[`esc`])},[p(`div`,{ref_key:`sheetRef`,ref:m,class:`sheet`,tabindex:`-1`},[r[0]||=p(`div`,{class:`sheet__handle`,"aria-hidden":`true`},null,-1),n(t.$slots,`default`,{},void 0,!0)],512)],40,w)):s(``,!0)]),_:3})]))}}),[[`__scopeId`,`data-v-81ce2dd1`]]);export{b as i,C as n,x as r,T as t}; \ No newline at end of file diff --git a/public/build/assets/DevicePicker-Dz05cPit.js b/public/build/assets/DevicePicker-DreFDlLU.js similarity index 96% rename from public/build/assets/DevicePicker-Dz05cPit.js rename to public/build/assets/DevicePicker-DreFDlLU.js index 330d1f1..fc38aff 100644 --- a/public/build/assets/DevicePicker-Dz05cPit.js +++ b/public/build/assets/DevicePicker-DreFDlLU.js @@ -1 +1 @@ -import{_ as e,d as t,g as n,j as r,k as i,l as a,o,p as s,pt as c,t as l,u,v as d,z as f}from"./_plugin-vue_export-helper-DVo1OUMD.js";import{n as p,t as m}from"./BaseBottomSheet-BODCttr7.js";var h={class:`device-picker__list`},g=[`checked`,`onChange`],_={class:`device-picker__name`},v={class:`device-picker__orientation`},y=l(d({__name:`DevicePicker`,props:{modelValue:{type:Boolean},devices:{},selected:{},uploading:{type:Boolean}},emits:[`update:modelValue`,`update:selected`,`confirm`],setup(l,{emit:d}){let y=l,b=d;function x(e){y.selected.includes(e)?b(`update:selected`,y.selected.filter(t=>t!==e)):b(`update:selected`,[...y.selected,e])}let S=a(()=>{let e=y.selected.length;return e===0?`Add to frame`:`Add to ${e} frame${e>1?`s`:``}`});return(a,d)=>(i(),t(m,{"model-value":l.modelValue,label:`Choose frames`,"onUpdate:modelValue":d[1]||=e=>a.$emit(`update:modelValue`,e)},{default:f(()=>[d[2]||=u(`h2`,{class:`device-picker__title`},`Add to frames`,-1),d[3]||=u(`p`,{class:`device-picker__sub`},`Choose which frames will show this photo.`,-1),u(`div`,h,[(i(!0),s(o,null,r(l.devices,e=>(i(),s(`label`,{key:e.id,class:`device-picker__row`},[u(`input`,{type:`checkbox`,class:`device-picker__check`,checked:l.selected.includes(e.id),onChange:t=>x(e.id)},null,40,g),u(`span`,_,c(e.name),1),u(`span`,v,c(e.orientation),1)]))),128))]),e(p,{variant:`primary`,class:`device-picker__confirm`,disabled:l.selected.length===0||l.uploading,onClick:d[0]||=e=>a.$emit(`confirm`)},{default:f(()=>[n(c(l.uploading?`Uploading…`:S.value),1)]),_:1},8,[`disabled`])]),_:1},8,[`model-value`]))}}),[[`__scopeId`,`data-v-a6466fa5`]]);export{y as t}; \ No newline at end of file +import{_ as e,d as t,g as n,j as r,k as i,l as a,o,p as s,pt as c,t as l,u,v as d,z as f}from"./_plugin-vue_export-helper-DVo1OUMD.js";import{n as p,t as m}from"./BaseBottomSheet-cgSeW-RK.js";var h={class:`device-picker__list`},g=[`checked`,`onChange`],_={class:`device-picker__name`},v={class:`device-picker__orientation`},y=l(d({__name:`DevicePicker`,props:{modelValue:{type:Boolean},devices:{},selected:{},uploading:{type:Boolean}},emits:[`update:modelValue`,`update:selected`,`confirm`],setup(l,{emit:d}){let y=l,b=d;function x(e){y.selected.includes(e)?b(`update:selected`,y.selected.filter(t=>t!==e)):b(`update:selected`,[...y.selected,e])}let S=a(()=>{let e=y.selected.length;return e===0?`Add to frame`:`Add to ${e} frame${e>1?`s`:``}`});return(a,d)=>(i(),t(m,{"model-value":l.modelValue,label:`Choose frames`,"onUpdate:modelValue":d[1]||=e=>a.$emit(`update:modelValue`,e)},{default:f(()=>[d[2]||=u(`h2`,{class:`device-picker__title`},`Add to frames`,-1),d[3]||=u(`p`,{class:`device-picker__sub`},`Choose which frames will show this photo.`,-1),u(`div`,h,[(i(!0),s(o,null,r(l.devices,e=>(i(),s(`label`,{key:e.id,class:`device-picker__row`},[u(`input`,{type:`checkbox`,class:`device-picker__check`,checked:l.selected.includes(e.id),onChange:t=>x(e.id)},null,40,g),u(`span`,_,c(e.name),1),u(`span`,v,c(e.orientation),1)]))),128))]),e(p,{variant:`primary`,class:`device-picker__confirm`,disabled:l.selected.length===0||l.uploading,onClick:d[0]||=e=>a.$emit(`confirm`)},{default:f(()=>[n(c(l.uploading?`Uploading…`:S.value),1)]),_:1},8,[`disabled`])]),_:1},8,[`model-value`]))}}),[[`__scopeId`,`data-v-a6466fa5`]]);export{y as t}; \ No newline at end of file diff --git a/public/build/assets/HomeView-Ub9_hNNK.js b/public/build/assets/HomeView-Bfoik_wA.js similarity index 98% rename from public/build/assets/HomeView-Ub9_hNNK.js rename to public/build/assets/HomeView-Bfoik_wA.js index afb3c09..a13a594 100644 --- a/public/build/assets/HomeView-Ub9_hNNK.js +++ b/public/build/assets/HomeView-Bfoik_wA.js @@ -1 +1 @@ -import{B as e,C as t,E as n,H as r,K as i,_ as a,d as o,dt as s,f as c,ft as l,g as u,h as d,j as f,k as p,l as m,o as h,p as g,pt as _,t as v,u as y,v as b,z as x}from"./_plugin-vue_export-helper-DVo1OUMD.js";import{l as S,s as C}from"./index-C0Yc8pEe.js";import{i as w,n as T,r as E,t as D}from"./BaseBottomSheet-BODCttr7.js";var O={key:0,class:`frame-card__status-badge`,"aria-live":`polite`},k=[`src`,`alt`],A={key:1,class:`frame-card__empty-preview`,"aria-hidden":`true`},j={class:`frame-card__body`},M={class:`frame-card__name`},N={key:0,class:`frame-card__count`},P={key:0},F={key:1,"aria-hidden":`true`},I=v(b({__name:`FrameCard`,props:{deviceId:{},name:{},size:{},status:{},orientation:{},thumbnailUrl:{},photoCount:{}},emits:[`add-photo`,`edit`],setup(e){let t=e,n=m(()=>t.size===`large`?{aspectRatio:t.orientation===`portrait`?`3/5`:`5/3`}:{});return(t,r)=>(p(),g(`div`,{class:s([`frame-card`,`frame-card--${e.size}`,e.status!==`ok`&&`frame-card--${e.status}`])},[e.status===`ok`?c(``,!0):(p(),g(`div`,O,[r[2]||=y(`span`,{class:`frame-card__status-dot`,"aria-hidden":`true`},null,-1),u(` `+_(e.status===`offline`?`Offline`:`Sync issue`),1)])),e.size===`large`?(p(),g(`button`,{key:1,class:`frame-card__settings-btn`,type:`button`,"aria-label":`Frame settings`,onClick:r[0]||=n=>t.$emit(`edit`,e.deviceId)},[...r[3]||=[y(`svg`,{width:`18`,height:`18`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`,"aria-hidden":`true`},[y(`circle`,{cx:`12`,cy:`12`,r:`3`}),y(`path`,{d:`M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z`})],-1)]])):c(``,!0),y(`div`,{class:`frame-card__preview`,style:l(n.value)},[e.thumbnailUrl?(p(),g(`img`,{key:0,src:e.thumbnailUrl,alt:`Current photo on ${e.name}`,class:`frame-card__img`},null,8,k)):(p(),g(`div`,A,[...r[4]||=[y(`svg`,{width:`32`,height:`32`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`},[y(`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`}),y(`circle`,{cx:`8.5`,cy:`8.5`,r:`1.5`}),y(`polyline`,{points:`21,15 16,10 5,21`})],-1)]]))],4),y(`div`,j,[y(`p`,M,_(e.name),1),e.size===`compact`?(p(),g(`p`,N,_(e.photoCount)+` `+_(e.photoCount===1?`photo`:`photos`),1)):c(``,!0),a(T,{variant:e.size===`large`?`primary`:`icon-pill`,"aria-label":(e.size,`Add photo to ${e.name}`),class:`frame-card__add-btn`,onClick:r[1]||=n=>t.$emit(`add-photo`,e.deviceId)},{default:x(()=>[e.size===`large`?(p(),g(`span`,P,`+ Add Photo`)):(p(),g(`span`,F,`+`))]),_:1},8,[`variant`,`aria-label`])])],2))}}),[[`__scopeId`,`data-v-6b5d66c8`]]),L=[`id`,`value`,`type`],R=[`for`],z=[`id`],B=v(b({__name:`BaseInput`,props:{modelValue:{default:``},label:{},type:{default:`text`},error:{},id:{}},emits:[`update:modelValue`,`blur`],setup(e,{emit:n}){let r=e,i=n,a=m(()=>r.id??`input-${Math.random().toString(36).slice(2)}`);return(n,r)=>(p(),g(`div`,{class:s([`input-wrap`,{"input-wrap--error":!!e.error,"input-wrap--filled":!!e.modelValue}])},[y(`input`,t({id:a.value},n.$attrs,{value:e.modelValue,type:e.type,class:`input-wrap__field`,placeholder:` `,onInput:r[0]||=e=>i(`update:modelValue`,e.target.value),onBlur:r[1]||=e=>i(`blur`,e)}),null,16,L),y(`label`,{for:a.value,class:`input-wrap__label`},_(e.label),9,R),e.error?(p(),g(`p`,{key:0,id:`${a.value}-error`,class:`input-wrap__error`,role:`alert`},_(e.error),9,z)):c(``,!0)],2))}}),[[`__scopeId`,`data-v-28da7c7d`]]),V={class:`orientation-picker`,role:`radiogroup`,"aria-label":`Display orientation`},H=[`aria-checked`,`aria-label`,`onClick`],U=[`viewBox`],W=[`stroke`,`fill`],G=[`fill`],K={class:`orientation-opt__label`},q={class:`orientation-opt__sub`},J=v(b({__name:`OrientationPicker`,props:{modelValue:{}},emits:[`update:modelValue`],setup(e){let n=[{value:`landscape`,label:`Landscape`,sub:`Ribbon at bottom`,viewBox:`0 0 48 48`,rect:{x:4,y:12,width:40,height:24},ribbon:{x:20,y:36,width:8,height:5}},{value:`portrait`,label:`Portrait`,sub:`Ribbon on left`,viewBox:`0 0 48 48`,rect:{x:12,y:4,width:24,height:40},ribbon:{x:7,y:20,width:5,height:8}}];return(r,i)=>(p(),g(`div`,V,[(p(),g(h,null,f(n,n=>y(`button`,{key:n.value,type:`button`,role:`radio`,"aria-checked":e.modelValue===n.value,"aria-label":n.label,class:s([`orientation-opt`,{"orientation-opt--active":e.modelValue===n.value}]),onClick:e=>r.$emit(`update:modelValue`,n.value)},[(p(),g(`svg`,{class:`orientation-opt__diagram`,viewBox:n.viewBox,fill:`none`,"aria-hidden":`true`},[y(`rect`,t({ref_for:!0},n.rect,{rx:`2`,stroke:e.modelValue===n.value?`var(--color-primary)`:`currentColor`,"stroke-width":`1.5`,fill:e.modelValue===n.value?`color-mix(in srgb, var(--color-primary) 12%, transparent)`:`var(--color-surface-2)`}),null,16,W),y(`rect`,t({ref_for:!0},n.ribbon,{fill:e.modelValue===n.value?`var(--color-primary)`:`var(--color-text-muted)`,rx:`1`}),null,16,G)],8,U)),y(`span`,K,_(n.label),1),y(`span`,q,_(n.sub),1)],10,H)),64))]))}}),[[`__scopeId`,`data-v-679dae08`]]),Y={class:`home-view`},X={key:0,class:`home-view__loading`,"aria-live":`polite`},Z={key:1,class:`home-view__empty`},Q={key:2,class:`home-view__single`},$={key:3,class:`home-view__list`},ee={class:`home-view__sheet-field`},te={class:`home-view__sheet-field`},ne={class:`home-view__sheet-field`},re={class:`home-view__interval-grid`},ie=[`onClick`],ae=[`label`],oe=[`value`],se=v(b({__name:`HomeView`,setup(t){function c(e){return e.lastSeenAt&&Date.now()-new Date(e.lastSeenAt).getTime()<=Math.max(e.rotationIntervalMinutes*2*6e4,30*6e4)?`ok`:`offline`}function l(e){let t=e.lockedImageId??e.currentImageId;return t?`/api/devices/${e.id}/preview?v=${t}`:void 0}let m=C(),v=w(),b=E();n(()=>{v.fetchDevices()});function O(e){let t=document.createElement(`input`);t.type=`file`,t.accept=`image/jpeg,image/png,image/webp,image/gif`,t.onchange=()=>{let n=t.files?.[0];n&&(b.init(n,e),m.push(`/upload`))},t.click()}let k=[{hour:0,label:`12 AM`},{hour:2,label:`2 AM`},{hour:4,label:`4 AM`},{hour:6,label:`6 AM`},{hour:8,label:`8 AM`},{hour:10,label:`10 AM`},{hour:12,label:`12 PM`},{hour:18,label:`6 PM`},{hour:20,label:`8 PM`},{hour:22,label:`10 PM`}],A=[{label:`Americas`,zones:[{value:`America/New_York`,label:`Eastern — New York, Toronto`},{value:`America/Chicago`,label:`Central — Chicago, Mexico City`},{value:`America/Denver`,label:`Mountain — Denver, Calgary`},{value:`America/Phoenix`,label:`Mountain (no DST) — Phoenix`},{value:`America/Los_Angeles`,label:`Pacific — Los Angeles, Vancouver`},{value:`America/Anchorage`,label:`Alaska — Anchorage`},{value:`Pacific/Honolulu`,label:`Hawaii — Honolulu`},{value:`America/Sao_Paulo`,label:`Brasília — São Paulo`},{value:`America/Argentina/Buenos_Aires`,label:`Argentina — Buenos Aires`},{value:`America/Bogota`,label:`Colombia — Bogotá`}]},{label:`Europe`,zones:[{value:`Europe/London`,label:`GMT/BST — London, Dublin`},{value:`Europe/Lisbon`,label:`WET/WEST — Lisbon`},{value:`Europe/Paris`,label:`CET/CEST — Paris, Brussels, Amsterdam`},{value:`Europe/Berlin`,label:`CET/CEST — Berlin, Vienna, Zurich`},{value:`Europe/Stockholm`,label:`CET/CEST — Stockholm, Oslo, Copenhagen`},{value:`Europe/Helsinki`,label:`EET/EEST — Helsinki, Tallinn, Riga`},{value:`Europe/Warsaw`,label:`CET/CEST — Warsaw, Prague, Budapest`},{value:`Europe/Rome`,label:`CET/CEST — Rome, Madrid`},{value:`Europe/Athens`,label:`EET/EEST — Athens, Bucharest`},{value:`Europe/Istanbul`,label:`TRT — Istanbul`},{value:`Europe/Moscow`,label:`MSK — Moscow`}]},{label:`Asia & Pacific`,zones:[{value:`Asia/Dubai`,label:`GST — Dubai, Abu Dhabi`},{value:`Asia/Karachi`,label:`PKT — Karachi, Islamabad`},{value:`Asia/Kolkata`,label:`IST — India`},{value:`Asia/Dhaka`,label:`BST — Dhaka, Bangladesh`},{value:`Asia/Bangkok`,label:`ICT — Bangkok, Jakarta, Hanoi`},{value:`Asia/Singapore`,label:`SGT — Singapore, Kuala Lumpur`},{value:`Asia/Shanghai`,label:`CST — Beijing, Shanghai, Taipei`},{value:`Asia/Seoul`,label:`KST — Seoul`},{value:`Asia/Tokyo`,label:`JST — Tokyo`},{value:`Australia/Sydney`,label:`AEDT/AEST — Sydney, Melbourne`},{value:`Australia/Brisbane`,label:`AEST (no DST) — Brisbane`},{value:`Australia/Perth`,label:`AWST — Perth`},{value:`Pacific/Auckland`,label:`NZDT/NZST — Auckland`}]},{label:`Africa & Middle East`,zones:[{value:`Africa/Cairo`,label:`EET — Cairo`},{value:`Africa/Nairobi`,label:`EAT — Nairobi, East Africa`},{value:`Africa/Johannesburg`,label:`SAST — Johannesburg`},{value:`Africa/Lagos`,label:`WAT — Lagos, West Africa`}]},{label:`UTC`,zones:[{value:`UTC`,label:`UTC — Coordinated Universal Time`}]}],j=r(!1),M=r(!1),N=r(null),P=r(``),F=r(`landscape`),L=r(4),R=r(`UTC`);function z(e){let t=v.devices.find(t=>t.id===e);t&&(N.value=t,P.value=t.name,F.value=t.orientation,L.value=t.wakeHour??4,R.value=t.timezone??`UTC`,j.value=!0)}async function V(){if(N.value){M.value=!0;try{await v.updateDevice(N.value.id,{name:P.value.trim()||N.value.name,orientation:F.value,wakeHour:L.value,timezone:R.value}),j.value=!1}finally{M.value=!1}}}return(t,n)=>(p(),g(h,null,[y(`main`,Y,[i(v).loading?(p(),g(`div`,X,` Loading… `)):i(v).devices.length===0?(p(),g(`div`,Z,[...n[4]||=[d(`

Set up your first frame

Power on your pictureFrame device and scan the QR code it displays to get started.

`,1)]])):i(v).devices.length===1?(p(),g(`div`,Q,[a(I,{deviceId:i(v).devices[0].id,name:i(v).devices[0].name,size:`large`,status:c(i(v).devices[0]),orientation:i(v).devices[0].orientation,thumbnailUrl:l(i(v).devices[0]),onAddPhoto:O,onEdit:z},null,8,[`deviceId`,`name`,`status`,`orientation`,`thumbnailUrl`])])):(p(),g(`div`,$,[(p(!0),g(h,null,f(i(v).devices,e=>(p(),o(I,{key:e.id,deviceId:e.id,name:e.name,size:`compact`,status:c(e),orientation:e.orientation,thumbnailUrl:l(e),onAddPhoto:O,onEdit:z},null,8,[`deviceId`,`name`,`status`,`orientation`,`thumbnailUrl`]))),128))]))]),a(D,{modelValue:j.value,"onUpdate:modelValue":n[3]||=e=>j.value=e,label:`Frame settings`},{default:x(()=>[n[7]||=y(`h2`,{class:`home-view__sheet-title`},`Frame settings`,-1),y(`div`,ee,[a(B,{modelValue:P.value,"onUpdate:modelValue":n[0]||=e=>P.value=e,label:`Frame name`,maxlength:`100`},null,8,[`modelValue`])]),y(`div`,te,[n[5]||=y(`p`,{class:`home-view__sheet-label`},`Orientation`,-1),a(J,{modelValue:F.value,"onUpdate:modelValue":n[1]||=e=>F.value=e},null,8,[`modelValue`])]),y(`div`,ne,[n[6]||=y(`p`,{class:`home-view__sheet-label`},`Update time`,-1),y(`div`,re,[(p(),g(h,null,f(k,e=>y(`button`,{key:e.hour,type:`button`,class:s([`home-view__interval-chip`,{"home-view__interval-chip--on":L.value===e.hour}]),onClick:t=>L.value=e.hour},_(e.label),11,ie)),64))]),e(y(`select`,{class:`home-view__tz-select`,"onUpdate:modelValue":n[2]||=e=>R.value=e},[(p(),g(h,null,f(A,e=>y(`optgroup`,{key:e.label,label:e.label},[(p(!0),g(h,null,f(e.zones,e=>(p(),g(`option`,{key:e.value,value:e.value},_(e.label),9,oe))),128))],8,ae)),64))],512),[[S,R.value]])]),a(T,{variant:`primary`,class:`home-view__sheet-save`,disabled:M.value,onClick:V},{default:x(()=>[u(_(M.value?`Saving…`:`Save`),1)]),_:1},8,[`disabled`])]),_:1},8,[`modelValue`])],64))}}),[[`__scopeId`,`data-v-6b74675a`]]);export{se as default}; \ No newline at end of file +import{B as e,C as t,E as n,H as r,K as i,_ as a,d as o,dt as s,f as c,ft as l,g as u,h as d,j as f,k as p,l as m,o as h,p as g,pt as _,t as v,u as y,v as b,z as x}from"./_plugin-vue_export-helper-DVo1OUMD.js";import{l as S,s as C}from"./index-CmXd-se5.js";import{i as w,n as T,r as E,t as D}from"./BaseBottomSheet-cgSeW-RK.js";var O={key:0,class:`frame-card__status-badge`,"aria-live":`polite`},k=[`src`,`alt`],A={key:1,class:`frame-card__empty-preview`,"aria-hidden":`true`},j={class:`frame-card__body`},M={class:`frame-card__name`},N={key:0,class:`frame-card__count`},P={key:0},F={key:1,"aria-hidden":`true`},I=v(b({__name:`FrameCard`,props:{deviceId:{},name:{},size:{},status:{},orientation:{},thumbnailUrl:{},photoCount:{}},emits:[`add-photo`,`edit`],setup(e){let t=e,n=m(()=>t.size===`large`?{aspectRatio:t.orientation===`portrait`?`3/5`:`5/3`}:{});return(t,r)=>(p(),g(`div`,{class:s([`frame-card`,`frame-card--${e.size}`,e.status!==`ok`&&`frame-card--${e.status}`])},[e.status===`ok`?c(``,!0):(p(),g(`div`,O,[r[2]||=y(`span`,{class:`frame-card__status-dot`,"aria-hidden":`true`},null,-1),u(` `+_(e.status===`offline`?`Offline`:`Sync issue`),1)])),e.size===`large`?(p(),g(`button`,{key:1,class:`frame-card__settings-btn`,type:`button`,"aria-label":`Frame settings`,onClick:r[0]||=n=>t.$emit(`edit`,e.deviceId)},[...r[3]||=[y(`svg`,{width:`18`,height:`18`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`,"aria-hidden":`true`},[y(`circle`,{cx:`12`,cy:`12`,r:`3`}),y(`path`,{d:`M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z`})],-1)]])):c(``,!0),y(`div`,{class:`frame-card__preview`,style:l(n.value)},[e.thumbnailUrl?(p(),g(`img`,{key:0,src:e.thumbnailUrl,alt:`Current photo on ${e.name}`,class:`frame-card__img`},null,8,k)):(p(),g(`div`,A,[...r[4]||=[y(`svg`,{width:`32`,height:`32`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`},[y(`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`}),y(`circle`,{cx:`8.5`,cy:`8.5`,r:`1.5`}),y(`polyline`,{points:`21,15 16,10 5,21`})],-1)]]))],4),y(`div`,j,[y(`p`,M,_(e.name),1),e.size===`compact`?(p(),g(`p`,N,_(e.photoCount)+` `+_(e.photoCount===1?`photo`:`photos`),1)):c(``,!0),a(T,{variant:e.size===`large`?`primary`:`icon-pill`,"aria-label":(e.size,`Add photo to ${e.name}`),class:`frame-card__add-btn`,onClick:r[1]||=n=>t.$emit(`add-photo`,e.deviceId)},{default:x(()=>[e.size===`large`?(p(),g(`span`,P,`+ Add Photo`)):(p(),g(`span`,F,`+`))]),_:1},8,[`variant`,`aria-label`])])],2))}}),[[`__scopeId`,`data-v-6b5d66c8`]]),L=[`id`,`value`,`type`],R=[`for`],z=[`id`],B=v(b({__name:`BaseInput`,props:{modelValue:{default:``},label:{},type:{default:`text`},error:{},id:{}},emits:[`update:modelValue`,`blur`],setup(e,{emit:n}){let r=e,i=n,a=m(()=>r.id??`input-${Math.random().toString(36).slice(2)}`);return(n,r)=>(p(),g(`div`,{class:s([`input-wrap`,{"input-wrap--error":!!e.error,"input-wrap--filled":!!e.modelValue}])},[y(`input`,t({id:a.value},n.$attrs,{value:e.modelValue,type:e.type,class:`input-wrap__field`,placeholder:` `,onInput:r[0]||=e=>i(`update:modelValue`,e.target.value),onBlur:r[1]||=e=>i(`blur`,e)}),null,16,L),y(`label`,{for:a.value,class:`input-wrap__label`},_(e.label),9,R),e.error?(p(),g(`p`,{key:0,id:`${a.value}-error`,class:`input-wrap__error`,role:`alert`},_(e.error),9,z)):c(``,!0)],2))}}),[[`__scopeId`,`data-v-28da7c7d`]]),V={class:`orientation-picker`,role:`radiogroup`,"aria-label":`Display orientation`},H=[`aria-checked`,`aria-label`,`onClick`],U=[`viewBox`],W=[`stroke`,`fill`],G=[`fill`],K={class:`orientation-opt__label`},q={class:`orientation-opt__sub`},J=v(b({__name:`OrientationPicker`,props:{modelValue:{}},emits:[`update:modelValue`],setup(e){let n=[{value:`landscape`,label:`Landscape`,sub:`Ribbon at bottom`,viewBox:`0 0 48 48`,rect:{x:4,y:12,width:40,height:24},ribbon:{x:20,y:36,width:8,height:5}},{value:`portrait`,label:`Portrait`,sub:`Ribbon on left`,viewBox:`0 0 48 48`,rect:{x:12,y:4,width:24,height:40},ribbon:{x:7,y:20,width:5,height:8}}];return(r,i)=>(p(),g(`div`,V,[(p(),g(h,null,f(n,n=>y(`button`,{key:n.value,type:`button`,role:`radio`,"aria-checked":e.modelValue===n.value,"aria-label":n.label,class:s([`orientation-opt`,{"orientation-opt--active":e.modelValue===n.value}]),onClick:e=>r.$emit(`update:modelValue`,n.value)},[(p(),g(`svg`,{class:`orientation-opt__diagram`,viewBox:n.viewBox,fill:`none`,"aria-hidden":`true`},[y(`rect`,t({ref_for:!0},n.rect,{rx:`2`,stroke:e.modelValue===n.value?`var(--color-primary)`:`currentColor`,"stroke-width":`1.5`,fill:e.modelValue===n.value?`color-mix(in srgb, var(--color-primary) 12%, transparent)`:`var(--color-surface-2)`}),null,16,W),y(`rect`,t({ref_for:!0},n.ribbon,{fill:e.modelValue===n.value?`var(--color-primary)`:`var(--color-text-muted)`,rx:`1`}),null,16,G)],8,U)),y(`span`,K,_(n.label),1),y(`span`,q,_(n.sub),1)],10,H)),64))]))}}),[[`__scopeId`,`data-v-679dae08`]]),Y={class:`home-view`},X={key:0,class:`home-view__loading`,"aria-live":`polite`},Z={key:1,class:`home-view__empty`},Q={key:2,class:`home-view__single`},$={key:3,class:`home-view__list`},ee={class:`home-view__sheet-field`},te={class:`home-view__sheet-field`},ne={class:`home-view__sheet-field`},re={class:`home-view__interval-grid`},ie=[`onClick`],ae=[`label`],oe=[`value`],se=v(b({__name:`HomeView`,setup(t){function c(e){return e.lastSeenAt&&Date.now()-new Date(e.lastSeenAt).getTime()<=Math.max(e.rotationIntervalMinutes*2*6e4,30*6e4)?`ok`:`offline`}function l(e){let t=e.lockedImageId??e.currentImageId;return t?`/api/devices/${e.id}/preview?v=${t}`:void 0}let m=C(),v=w(),b=E();n(()=>{v.fetchDevices()});function O(e){let t=document.createElement(`input`);t.type=`file`,t.accept=`image/jpeg,image/png,image/webp,image/gif`,t.onchange=()=>{let n=t.files?.[0];n&&(b.init(n,e),m.push(`/upload`))},t.click()}let k=[{hour:0,label:`12 AM`},{hour:2,label:`2 AM`},{hour:4,label:`4 AM`},{hour:6,label:`6 AM`},{hour:8,label:`8 AM`},{hour:10,label:`10 AM`},{hour:12,label:`12 PM`},{hour:18,label:`6 PM`},{hour:20,label:`8 PM`},{hour:22,label:`10 PM`}],A=[{label:`Americas`,zones:[{value:`America/New_York`,label:`Eastern — New York, Toronto`},{value:`America/Chicago`,label:`Central — Chicago, Mexico City`},{value:`America/Denver`,label:`Mountain — Denver, Calgary`},{value:`America/Phoenix`,label:`Mountain (no DST) — Phoenix`},{value:`America/Los_Angeles`,label:`Pacific — Los Angeles, Vancouver`},{value:`America/Anchorage`,label:`Alaska — Anchorage`},{value:`Pacific/Honolulu`,label:`Hawaii — Honolulu`},{value:`America/Sao_Paulo`,label:`Brasília — São Paulo`},{value:`America/Argentina/Buenos_Aires`,label:`Argentina — Buenos Aires`},{value:`America/Bogota`,label:`Colombia — Bogotá`}]},{label:`Europe`,zones:[{value:`Europe/London`,label:`GMT/BST — London, Dublin`},{value:`Europe/Lisbon`,label:`WET/WEST — Lisbon`},{value:`Europe/Paris`,label:`CET/CEST — Paris, Brussels, Amsterdam`},{value:`Europe/Berlin`,label:`CET/CEST — Berlin, Vienna, Zurich`},{value:`Europe/Stockholm`,label:`CET/CEST — Stockholm, Oslo, Copenhagen`},{value:`Europe/Helsinki`,label:`EET/EEST — Helsinki, Tallinn, Riga`},{value:`Europe/Warsaw`,label:`CET/CEST — Warsaw, Prague, Budapest`},{value:`Europe/Rome`,label:`CET/CEST — Rome, Madrid`},{value:`Europe/Athens`,label:`EET/EEST — Athens, Bucharest`},{value:`Europe/Istanbul`,label:`TRT — Istanbul`},{value:`Europe/Moscow`,label:`MSK — Moscow`}]},{label:`Asia & Pacific`,zones:[{value:`Asia/Dubai`,label:`GST — Dubai, Abu Dhabi`},{value:`Asia/Karachi`,label:`PKT — Karachi, Islamabad`},{value:`Asia/Kolkata`,label:`IST — India`},{value:`Asia/Dhaka`,label:`BST — Dhaka, Bangladesh`},{value:`Asia/Bangkok`,label:`ICT — Bangkok, Jakarta, Hanoi`},{value:`Asia/Singapore`,label:`SGT — Singapore, Kuala Lumpur`},{value:`Asia/Shanghai`,label:`CST — Beijing, Shanghai, Taipei`},{value:`Asia/Seoul`,label:`KST — Seoul`},{value:`Asia/Tokyo`,label:`JST — Tokyo`},{value:`Australia/Sydney`,label:`AEDT/AEST — Sydney, Melbourne`},{value:`Australia/Brisbane`,label:`AEST (no DST) — Brisbane`},{value:`Australia/Perth`,label:`AWST — Perth`},{value:`Pacific/Auckland`,label:`NZDT/NZST — Auckland`}]},{label:`Africa & Middle East`,zones:[{value:`Africa/Cairo`,label:`EET — Cairo`},{value:`Africa/Nairobi`,label:`EAT — Nairobi, East Africa`},{value:`Africa/Johannesburg`,label:`SAST — Johannesburg`},{value:`Africa/Lagos`,label:`WAT — Lagos, West Africa`}]},{label:`UTC`,zones:[{value:`UTC`,label:`UTC — Coordinated Universal Time`}]}],j=r(!1),M=r(!1),N=r(null),P=r(``),F=r(`landscape`),L=r(4),R=r(`UTC`);function z(e){let t=v.devices.find(t=>t.id===e);t&&(N.value=t,P.value=t.name,F.value=t.orientation,L.value=t.wakeHour??4,R.value=t.timezone??`UTC`,j.value=!0)}async function V(){if(N.value){M.value=!0;try{await v.updateDevice(N.value.id,{name:P.value.trim()||N.value.name,orientation:F.value,wakeHour:L.value,timezone:R.value}),j.value=!1}finally{M.value=!1}}}return(t,n)=>(p(),g(h,null,[y(`main`,Y,[i(v).loading?(p(),g(`div`,X,` Loading… `)):i(v).devices.length===0?(p(),g(`div`,Z,[...n[4]||=[d(`

Set up your first frame

Power on your pictureFrame device and scan the QR code it displays to get started.

`,1)]])):i(v).devices.length===1?(p(),g(`div`,Q,[a(I,{deviceId:i(v).devices[0].id,name:i(v).devices[0].name,size:`large`,status:c(i(v).devices[0]),orientation:i(v).devices[0].orientation,thumbnailUrl:l(i(v).devices[0]),onAddPhoto:O,onEdit:z},null,8,[`deviceId`,`name`,`status`,`orientation`,`thumbnailUrl`])])):(p(),g(`div`,$,[(p(!0),g(h,null,f(i(v).devices,e=>(p(),o(I,{key:e.id,deviceId:e.id,name:e.name,size:`compact`,status:c(e),orientation:e.orientation,thumbnailUrl:l(e),onAddPhoto:O,onEdit:z},null,8,[`deviceId`,`name`,`status`,`orientation`,`thumbnailUrl`]))),128))]))]),a(D,{modelValue:j.value,"onUpdate:modelValue":n[3]||=e=>j.value=e,label:`Frame settings`},{default:x(()=>[n[7]||=y(`h2`,{class:`home-view__sheet-title`},`Frame settings`,-1),y(`div`,ee,[a(B,{modelValue:P.value,"onUpdate:modelValue":n[0]||=e=>P.value=e,label:`Frame name`,maxlength:`100`},null,8,[`modelValue`])]),y(`div`,te,[n[5]||=y(`p`,{class:`home-view__sheet-label`},`Orientation`,-1),a(J,{modelValue:F.value,"onUpdate:modelValue":n[1]||=e=>F.value=e},null,8,[`modelValue`])]),y(`div`,ne,[n[6]||=y(`p`,{class:`home-view__sheet-label`},`Update time`,-1),y(`div`,re,[(p(),g(h,null,f(k,e=>y(`button`,{key:e.hour,type:`button`,class:s([`home-view__interval-chip`,{"home-view__interval-chip--on":L.value===e.hour}]),onClick:t=>L.value=e.hour},_(e.label),11,ie)),64))]),e(y(`select`,{class:`home-view__tz-select`,"onUpdate:modelValue":n[2]||=e=>R.value=e},[(p(),g(h,null,f(A,e=>y(`optgroup`,{key:e.label,label:e.label},[(p(!0),g(h,null,f(e.zones,e=>(p(),g(`option`,{key:e.value,value:e.value},_(e.label),9,oe))),128))],8,ae)),64))],512),[[S,R.value]])]),a(T,{variant:`primary`,class:`home-view__sheet-save`,disabled:M.value,onClick:V},{default:x(()=>[u(_(M.value?`Saving…`:`Save`),1)]),_:1},8,[`disabled`])]),_:1},8,[`modelValue`])],64))}}),[[`__scopeId`,`data-v-6b74675a`]]);export{se as default}; \ No newline at end of file diff --git a/public/build/assets/LibraryView-Cwch0dhw.js b/public/build/assets/LibraryView-Cb_nRiKt.js similarity index 98% rename from public/build/assets/LibraryView-Cwch0dhw.js rename to public/build/assets/LibraryView-Cb_nRiKt.js index b6ec93f..a267b92 100644 --- a/public/build/assets/LibraryView-Cwch0dhw.js +++ b/public/build/assets/LibraryView-Cb_nRiKt.js @@ -1 +1 @@ -import{B as e,E as t,H as n,K as r,_ as i,d as a,dt as o,f as s,g as c,h as l,j as u,k as d,l as f,o as p,p as m,pt as h,t as g,u as _,v,z as y}from"./_plugin-vue_export-helper-DVo1OUMD.js";import{a as b,d as x,f as S,i as C,o as w,s as T,u as E}from"./index-C0Yc8pEe.js";import{i as D,n as O,r as ee,t as k}from"./BaseBottomSheet-BODCttr7.js";import{t as A}from"./DevicePicker-Dz05cPit.js";var j={class:`approve-card`},M=[`src`,`alt`],N={class:`approve-card__body`},P={class:`approve-card__from`},F={class:`approve-card__date`},I={key:0,class:`approve-card__status`},L={class:`approve-card__actions`},te=g(v({__name:`ApproveCard`,props:{item:{}},emits:[`updated`],setup(e,{emit:t}){let l=e,u=t,g=b(),v=D(),x=n(!1),S=n(!1),C=n([]),w=f(()=>new Date(l.item.sharedAt).toLocaleDateString(void 0,{month:`short`,day:`numeric`,year:`numeric`}));async function T(){x.value=!1,S.value=!0;try{u(`updated`,await g.approveShared(l.item.id,C.value))}finally{S.value=!1,C.value=[]}}async function E(){S.value=!0;try{u(`updated`,await g.declineShared(l.item.id))}finally{S.value=!1}}return(t,n)=>(d(),m(p,null,[_(`div`,j,[_(`img`,{src:e.item.thumbnailUrl,alt:`Photo from ${e.item.sharedBy}`,class:`approve-card__thumb`,loading:`lazy`},null,8,M),_(`div`,N,[_(`p`,P,[n[3]||=c(`From `,-1),_(`strong`,null,h(e.item.sharedBy),1)]),_(`p`,F,h(w.value),1),e.item.status===`pending`?s(``,!0):(d(),m(`div`,I,[_(`span`,{class:o([`approve-card__badge`,`approve-card__badge--${e.item.status}`])},h(e.item.status),3)])),_(`div`,L,[e.item.status===`pending`||e.item.status===`declined`?(d(),a(O,{key:0,variant:`primary`,size:`sm`,disabled:S.value,onClick:n[0]||=e=>x.value=!0},{default:y(()=>[c(h(e.item.status===`declined`?`Add anyway`:`Add to frame`),1)]),_:1},8,[`disabled`])):s(``,!0),e.item.status===`pending`||e.item.status===`approved`?(d(),a(O,{key:1,variant:`ghost`,size:`sm`,disabled:S.value,onClick:E},{default:y(()=>[c(h(e.item.status===`approved`?`Remove`:`Decline`),1)]),_:1},8,[`disabled`])):s(``,!0)])])]),i(A,{modelValue:x.value,"onUpdate:modelValue":n[1]||=e=>x.value=e,devices:r(v).devices,selected:C.value,uploading:S.value,"confirm-label":`Add to frames`,"onUpdate:selected":n[2]||=e=>C.value=e,onConfirm:T},null,8,[`modelValue`,`devices`,`selected`,`uploading`])],64))}}),[[`__scopeId`,`data-v-6d3dd8b4`]]),R={class:`share-sheet__field`},z=[`onKeydown`],B={key:0,class:`share-sheet__error`},V={key:1,class:`share-sheet__success`},ne=g(v({__name:`ShareSheet`,props:{modelValue:{type:Boolean},imageId:{}},emits:[`update:modelValue`],setup(t,{emit:r}){let o=t,l=b(),u=n(``),f=n(!1),p=n(``),g=n(``);async function v(){if(p.value=``,g.value=``,u.value.trim()){f.value=!0;try{await l.shareImage(o.imageId,u.value.trim()),g.value=`Invite sent to ${u.value.trim()}`,u.value=``}catch(e){p.value=e instanceof Error?e.message:`Failed to send`}finally{f.value=!1}}}return(n,r)=>(d(),a(k,{"model-value":t.modelValue,label:`Share photo`,"onUpdate:modelValue":r[1]||=e=>n.$emit(`update:modelValue`,e)},{default:y(()=>[r[2]||=_(`h2`,{class:`share-sheet__title`},`Share with someone`,-1),r[3]||=_(`p`,{class:`share-sheet__sub`},`They'll get an email and can add it to their frame.`,-1),_(`div`,R,[e(_(`input`,{"onUpdate:modelValue":r[0]||=e=>u.value=e,type:`email`,class:`share-sheet__input`,placeholder:`their@email.com`,autocomplete:`email`,onKeydown:x(S(v,[`prevent`]),[`enter`])},null,40,z),[[E,u.value]])]),p.value?(d(),m(`p`,B,h(p.value),1)):s(``,!0),g.value?(d(),m(`p`,V,h(g.value),1)):s(``,!0),i(O,{variant:`primary`,class:`share-sheet__btn`,disabled:f.value||!u.value.trim(),onClick:v},{default:y(()=>[c(h(f.value?`Sending…`:`Send invite`),1)]),_:1},8,[`disabled`])]),_:1},8,[`model-value`]))}}),[[`__scopeId`,`data-v-24296e7b`]]),re={class:`library`},ie={class:`library__tabs`,role:`tablist`},ae=[`aria-selected`,`onClick`],oe={key:0,class:`library__loading`},se={key:0,class:`library__empty`},ce={key:1,class:`library__grid`},le={class:`library__thumb`},H=[`src`,`alt`],U={class:`library__thumb-actions`},W=[`aria-label`,`disabled`,`onClick`],ue={key:0,width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"aria-hidden":`true`},de={key:1,width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"aria-hidden":`true`},fe=[`aria-label`,`onClick`],pe=[`onClick`],me={key:0,class:`library__approvals`},he=[`aria-label`,`onClick`],ge={key:1,class:`library__locks`},_e=[`aria-label`,`onClick`],ve={width:`10`,height:`10`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"aria-hidden":`true`},ye={key:0,d:`M7 11V7a5 5 0 0 1 10 0v4`},be={key:1,d:`M7 11V7a5 5 0 0 1 9.9-1`},xe={class:`library__subtabs`,role:`tablist`},Se=[`aria-selected`,`onClick`],Ce={key:0,class:`library__loading`},we={key:1,class:`library__shared-empty`},Te={class:`library__empty-title`},Ee={class:`library__empty-sub`},De={key:2,class:`library__shared-list`},Oe={key:3,class:`library__pagination`},ke=[`disabled`],Ae={class:`library__page-info`},je=[`disabled`],Me={class:`library__sheet-actions`},G=g(v({__name:`LibraryView`,setup(e){let g=T(),v=b(),x=D(),S=ee(),E=C(),A=w(),j=[{id:`all`,label:`All`},{id:`mine`,label:`Mine`},{id:`shared`,label:`Shared`}],M=n(A.query.tab??`all`),N=[{id:`pending`,label:`Pending`},{id:`approved`,label:`Approved`},{id:`declined`,label:`Declined`}],P=n(`pending`),F=n([]),I=n(!1),L=n(1),R=n(1);async function z(e,t=1){I.value=!0;try{let n=await v.fetchSharedImages(e,t);F.value=n.items,L.value=n.page,R.value=n.totalPages}finally{I.value=!1}}function B(e){P.value=e,z(e,1)}function V(e){z(P.value,e)}function G(e){let t=F.value.findIndex(t=>t.id===e.id);t!==-1&&(F.value[t]=e)}t(()=>{v.fetchImages(),x.fetchDevices(),v.fetchPendingCount(),M.value===`shared`&&z(P.value)});let K=f(()=>v.images),q=n(!1),J=n(null);function Ne(e){J.value=e,q.value=!0}let Y=n(null);async function X(e){if(!Y.value){Y.value=e.id;try{await S.initEdit(e),g.push(`/upload`)}catch{E.show(`Could not load photo for editing`,`error`)}finally{Y.value=null}}}async function Pe(e,t){try{t.lockedImageId===e?await x.unlockImage(t.id):await x.lockImage(t.id,e)}catch{E.show(`Failed to update lock`,`error`)}}async function Fe(e,t,n){try{await v.setApproval(e,t,n)}catch{E.show(`Failed to update frame approval`,`error`)}}let Z=n(!1),Q=n(null),$=n(!1);function Ie(e){Q.value=e,Z.value=!0}async function Le(){if(Q.value){$.value=!0;try{await v.deleteImage(Q.value),Z.value=!1,E.show(`Photo deleted`,`success`)}catch{E.show(`Delete failed`,`error`)}finally{$.value=!1}}}return(e,t)=>(d(),m(`main`,re,[_(`div`,ie,[(d(),m(p,null,u(j,e=>_(`button`,{key:e.id,type:`button`,role:`tab`,"aria-selected":M.value===e.id,class:o([`library__tab`,{"library__tab--active":M.value===e.id}]),onClick:t=>M.value=e.id},h(e.label),11,ae)),64))]),r(v).loading?(d(),m(`div`,oe,`Loading…`)):M.value===`shared`?(d(),m(p,{key:2},[_(`div`,xe,[(d(),m(p,null,u(N,e=>_(`button`,{key:e.id,type:`button`,role:`tab`,"aria-selected":P.value===e.id,class:o([`library__subtab`,{"library__subtab--active":P.value===e.id}]),onClick:t=>B(e.id)},h(e.label),11,Se)),64))]),I.value?(d(),m(`div`,Ce,`Loading…`)):F.value.length===0?(d(),m(`div`,we,[t[11]||=l(``,1),_(`p`,Te,h(P.value===`pending`?`No pending photos`:P.value===`approved`?`No approved photos`:`No declined photos`),1),_(`p`,Ee,h(P.value===`pending`?`Photos shared with you will appear here.`:`Photos you've added to a frame will appear here.`),1)])):(d(),m(`div`,De,[(d(!0),m(p,null,u(F.value,e=>(d(),a(te,{key:e.id,item:e,onUpdated:G},null,8,[`item`]))),128))])),R.value>1?(d(),m(`div`,Oe,[_(`button`,{class:`library__page-btn`,disabled:L.value<=1,onClick:t[0]||=e=>V(L.value-1)},`← Prev`,8,ke),_(`span`,Ae,h(L.value)+` / `+h(R.value),1),_(`button`,{class:`library__page-btn`,disabled:L.value>=R.value,onClick:t[1]||=e=>V(L.value+1)},`Next →`,8,je)])):s(``,!0)],64)):(d(),m(p,{key:1},[K.value.length===0?(d(),m(`div`,se,[...t[5]||=[l(`

No photos yet

Tap "+ Add Photo" on the home screen to get started.

`,3)]])):(d(),m(`div`,ce,[(d(!0),m(p,null,u(K.value,e=>(d(),m(`div`,{key:e.id,class:`library__item`},[_(`div`,le,[_(`img`,{src:e.thumbnailUrl,alt:e.originalFilename,class:`library__img`,loading:`lazy`},null,8,H),_(`div`,U,[_(`button`,{class:`library__action-btn`,type:`button`,"aria-label":`Edit ${e.originalFilename}`,disabled:Y.value===e.id,onClick:t=>X(e)},[Y.value===e.id?(d(),m(`svg`,de,[...t[7]||=[_(`circle`,{cx:`12`,cy:`12`,r:`10`},null,-1),_(`line`,{x1:`12`,y1:`8`,x2:`12`,y2:`12`},null,-1),_(`line`,{x1:`12`,y1:`16`,x2:`12.01`,y2:`16`},null,-1)]])):(d(),m(`svg`,ue,[...t[6]||=[_(`path`,{d:`M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7`},null,-1),_(`path`,{d:`M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z`},null,-1)]]))],8,W),_(`button`,{class:`library__action-btn`,type:`button`,"aria-label":`Share ${e.originalFilename}`,onClick:t=>Ne(e.id)},[...t[8]||=[l(``,1)]],8,fe),_(`button`,{class:`library__action-btn library__action-btn--danger`,type:`button`,"aria-label":`Delete photo`,onClick:t=>Ie(e.id)},[...t[9]||=[l(``,1)]],8,pe)])]),r(x).devices.length>0?(d(),m(`div`,me,[(d(!0),m(p,null,u(r(x).devices,t=>(d(),m(`button`,{key:t.id,class:o([`library__approval-chip`,{"library__approval-chip--on":e.approvedDeviceIds.includes(t.id)}]),type:`button`,"aria-label":`${e.approvedDeviceIds.includes(t.id)?`Remove from`:`Add to`} ${t.name}`,onClick:n=>Fe(e.id,t.id,!e.approvedDeviceIds.includes(t.id))},h(t.name),11,he))),128))])):s(``,!0),r(x).devices.length>0?(d(),m(`div`,ge,[(d(!0),m(p,null,u(r(x).devices.filter(t=>e.approvedDeviceIds.includes(t.id)),n=>(d(),m(`button`,{key:n.id,class:o([`library__lock-chip`,{"library__lock-chip--on":n.lockedImageId===e.id}]),type:`button`,"aria-label":`${n.lockedImageId===e.id?`Unlock from`:`Lock to`} ${n.name}`,onClick:t=>Pe(e.id,n)},[(d(),m(`svg`,ve,[t[10]||=_(`rect`,{x:`3`,y:`11`,width:`18`,height:`11`,rx:`2`,ry:`2`},null,-1),n.lockedImageId===e.id?(d(),m(`path`,ye)):(d(),m(`path`,be))])),c(` `+h(n.name),1)],10,_e))),128))])):s(``,!0)]))),128))]))],64)),J.value===null?s(``,!0):(d(),a(ne,{key:3,modelValue:q.value,"onUpdate:modelValue":t[2]||=e=>q.value=e,"image-id":J.value},null,8,[`modelValue`,`image-id`])),i(k,{modelValue:Z.value,"onUpdate:modelValue":t[4]||=e=>Z.value=e,label:`Delete photo`},{default:y(()=>[t[13]||=_(`h2`,{class:`library__sheet-title`},`Delete this photo?`,-1),t[14]||=_(`p`,{class:`library__sheet-sub`},`It will be removed from all frames.`,-1),_(`div`,Me,[i(O,{variant:`secondary`,onClick:t[3]||=e=>Z.value=!1},{default:y(()=>[...t[12]||=[c(`Cancel`,-1)]]),_:1}),i(O,{variant:`destructive`,disabled:$.value,onClick:Le},{default:y(()=>[c(h($.value?`Deleting…`:`Delete`),1)]),_:1},8,[`disabled`])])]),_:1},8,[`modelValue`])]))}}),[[`__scopeId`,`data-v-695e06b8`]]);export{G as default}; \ No newline at end of file +import{B as e,E as t,H as n,K as r,_ as i,d as a,dt as o,f as s,g as c,h as l,j as u,k as d,l as f,o as p,p as m,pt as h,t as g,u as _,v,z as y}from"./_plugin-vue_export-helper-DVo1OUMD.js";import{a as b,d as x,f as S,i as C,o as w,s as T,u as E}from"./index-CmXd-se5.js";import{i as D,n as O,r as ee,t as k}from"./BaseBottomSheet-cgSeW-RK.js";import{t as A}from"./DevicePicker-DreFDlLU.js";var j={class:`approve-card`},M=[`src`,`alt`],N={class:`approve-card__body`},P={class:`approve-card__from`},F={class:`approve-card__date`},I={key:0,class:`approve-card__status`},L={class:`approve-card__actions`},te=g(v({__name:`ApproveCard`,props:{item:{}},emits:[`updated`],setup(e,{emit:t}){let l=e,u=t,g=b(),v=D(),x=n(!1),S=n(!1),C=n([]),w=f(()=>new Date(l.item.sharedAt).toLocaleDateString(void 0,{month:`short`,day:`numeric`,year:`numeric`}));async function T(){x.value=!1,S.value=!0;try{u(`updated`,await g.approveShared(l.item.id,C.value))}finally{S.value=!1,C.value=[]}}async function E(){S.value=!0;try{u(`updated`,await g.declineShared(l.item.id))}finally{S.value=!1}}return(t,n)=>(d(),m(p,null,[_(`div`,j,[_(`img`,{src:e.item.thumbnailUrl,alt:`Photo from ${e.item.sharedBy}`,class:`approve-card__thumb`,loading:`lazy`},null,8,M),_(`div`,N,[_(`p`,P,[n[3]||=c(`From `,-1),_(`strong`,null,h(e.item.sharedBy),1)]),_(`p`,F,h(w.value),1),e.item.status===`pending`?s(``,!0):(d(),m(`div`,I,[_(`span`,{class:o([`approve-card__badge`,`approve-card__badge--${e.item.status}`])},h(e.item.status),3)])),_(`div`,L,[e.item.status===`pending`||e.item.status===`declined`?(d(),a(O,{key:0,variant:`primary`,size:`sm`,disabled:S.value,onClick:n[0]||=e=>x.value=!0},{default:y(()=>[c(h(e.item.status===`declined`?`Add anyway`:`Add to frame`),1)]),_:1},8,[`disabled`])):s(``,!0),e.item.status===`pending`||e.item.status===`approved`?(d(),a(O,{key:1,variant:`ghost`,size:`sm`,disabled:S.value,onClick:E},{default:y(()=>[c(h(e.item.status===`approved`?`Remove`:`Decline`),1)]),_:1},8,[`disabled`])):s(``,!0)])])]),i(A,{modelValue:x.value,"onUpdate:modelValue":n[1]||=e=>x.value=e,devices:r(v).devices,selected:C.value,uploading:S.value,"confirm-label":`Add to frames`,"onUpdate:selected":n[2]||=e=>C.value=e,onConfirm:T},null,8,[`modelValue`,`devices`,`selected`,`uploading`])],64))}}),[[`__scopeId`,`data-v-6d3dd8b4`]]),R={class:`share-sheet__field`},z=[`onKeydown`],B={key:0,class:`share-sheet__error`},V={key:1,class:`share-sheet__success`},ne=g(v({__name:`ShareSheet`,props:{modelValue:{type:Boolean},imageId:{}},emits:[`update:modelValue`],setup(t,{emit:r}){let o=t,l=b(),u=n(``),f=n(!1),p=n(``),g=n(``);async function v(){if(p.value=``,g.value=``,u.value.trim()){f.value=!0;try{await l.shareImage(o.imageId,u.value.trim()),g.value=`Invite sent to ${u.value.trim()}`,u.value=``}catch(e){p.value=e instanceof Error?e.message:`Failed to send`}finally{f.value=!1}}}return(n,r)=>(d(),a(k,{"model-value":t.modelValue,label:`Share photo`,"onUpdate:modelValue":r[1]||=e=>n.$emit(`update:modelValue`,e)},{default:y(()=>[r[2]||=_(`h2`,{class:`share-sheet__title`},`Share with someone`,-1),r[3]||=_(`p`,{class:`share-sheet__sub`},`They'll get an email and can add it to their frame.`,-1),_(`div`,R,[e(_(`input`,{"onUpdate:modelValue":r[0]||=e=>u.value=e,type:`email`,class:`share-sheet__input`,placeholder:`their@email.com`,autocomplete:`email`,onKeydown:x(S(v,[`prevent`]),[`enter`])},null,40,z),[[E,u.value]])]),p.value?(d(),m(`p`,B,h(p.value),1)):s(``,!0),g.value?(d(),m(`p`,V,h(g.value),1)):s(``,!0),i(O,{variant:`primary`,class:`share-sheet__btn`,disabled:f.value||!u.value.trim(),onClick:v},{default:y(()=>[c(h(f.value?`Sending…`:`Send invite`),1)]),_:1},8,[`disabled`])]),_:1},8,[`model-value`]))}}),[[`__scopeId`,`data-v-24296e7b`]]),re={class:`library`},ie={class:`library__tabs`,role:`tablist`},ae=[`aria-selected`,`onClick`],oe={key:0,class:`library__loading`},se={key:0,class:`library__empty`},ce={key:1,class:`library__grid`},le={class:`library__thumb`},H=[`src`,`alt`],U={class:`library__thumb-actions`},W=[`aria-label`,`disabled`,`onClick`],ue={key:0,width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"aria-hidden":`true`},de={key:1,width:`13`,height:`13`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"aria-hidden":`true`},fe=[`aria-label`,`onClick`],pe=[`onClick`],me={key:0,class:`library__approvals`},he=[`aria-label`,`onClick`],ge={key:1,class:`library__locks`},_e=[`aria-label`,`onClick`],ve={width:`10`,height:`10`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"aria-hidden":`true`},ye={key:0,d:`M7 11V7a5 5 0 0 1 10 0v4`},be={key:1,d:`M7 11V7a5 5 0 0 1 9.9-1`},xe={class:`library__subtabs`,role:`tablist`},Se=[`aria-selected`,`onClick`],Ce={key:0,class:`library__loading`},we={key:1,class:`library__shared-empty`},Te={class:`library__empty-title`},Ee={class:`library__empty-sub`},De={key:2,class:`library__shared-list`},Oe={key:3,class:`library__pagination`},ke=[`disabled`],Ae={class:`library__page-info`},je=[`disabled`],Me={class:`library__sheet-actions`},G=g(v({__name:`LibraryView`,setup(e){let g=T(),v=b(),x=D(),S=ee(),E=C(),A=w(),j=[{id:`all`,label:`All`},{id:`mine`,label:`Mine`},{id:`shared`,label:`Shared`}],M=n(A.query.tab??`all`),N=[{id:`pending`,label:`Pending`},{id:`approved`,label:`Approved`},{id:`declined`,label:`Declined`}],P=n(`pending`),F=n([]),I=n(!1),L=n(1),R=n(1);async function z(e,t=1){I.value=!0;try{let n=await v.fetchSharedImages(e,t);F.value=n.items,L.value=n.page,R.value=n.totalPages}finally{I.value=!1}}function B(e){P.value=e,z(e,1)}function V(e){z(P.value,e)}function G(e){let t=F.value.findIndex(t=>t.id===e.id);t!==-1&&(F.value[t]=e)}t(()=>{v.fetchImages(),x.fetchDevices(),v.fetchPendingCount(),M.value===`shared`&&z(P.value)});let K=f(()=>v.images),q=n(!1),J=n(null);function Ne(e){J.value=e,q.value=!0}let Y=n(null);async function X(e){if(!Y.value){Y.value=e.id;try{await S.initEdit(e),g.push(`/upload`)}catch{E.show(`Could not load photo for editing`,`error`)}finally{Y.value=null}}}async function Pe(e,t){try{t.lockedImageId===e?await x.unlockImage(t.id):await x.lockImage(t.id,e)}catch{E.show(`Failed to update lock`,`error`)}}async function Fe(e,t,n){try{await v.setApproval(e,t,n)}catch{E.show(`Failed to update frame approval`,`error`)}}let Z=n(!1),Q=n(null),$=n(!1);function Ie(e){Q.value=e,Z.value=!0}async function Le(){if(Q.value){$.value=!0;try{await v.deleteImage(Q.value),Z.value=!1,E.show(`Photo deleted`,`success`)}catch{E.show(`Delete failed`,`error`)}finally{$.value=!1}}}return(e,t)=>(d(),m(`main`,re,[_(`div`,ie,[(d(),m(p,null,u(j,e=>_(`button`,{key:e.id,type:`button`,role:`tab`,"aria-selected":M.value===e.id,class:o([`library__tab`,{"library__tab--active":M.value===e.id}]),onClick:t=>M.value=e.id},h(e.label),11,ae)),64))]),r(v).loading?(d(),m(`div`,oe,`Loading…`)):M.value===`shared`?(d(),m(p,{key:2},[_(`div`,xe,[(d(),m(p,null,u(N,e=>_(`button`,{key:e.id,type:`button`,role:`tab`,"aria-selected":P.value===e.id,class:o([`library__subtab`,{"library__subtab--active":P.value===e.id}]),onClick:t=>B(e.id)},h(e.label),11,Se)),64))]),I.value?(d(),m(`div`,Ce,`Loading…`)):F.value.length===0?(d(),m(`div`,we,[t[11]||=l(``,1),_(`p`,Te,h(P.value===`pending`?`No pending photos`:P.value===`approved`?`No approved photos`:`No declined photos`),1),_(`p`,Ee,h(P.value===`pending`?`Photos shared with you will appear here.`:`Photos you've added to a frame will appear here.`),1)])):(d(),m(`div`,De,[(d(!0),m(p,null,u(F.value,e=>(d(),a(te,{key:e.id,item:e,onUpdated:G},null,8,[`item`]))),128))])),R.value>1?(d(),m(`div`,Oe,[_(`button`,{class:`library__page-btn`,disabled:L.value<=1,onClick:t[0]||=e=>V(L.value-1)},`← Prev`,8,ke),_(`span`,Ae,h(L.value)+` / `+h(R.value),1),_(`button`,{class:`library__page-btn`,disabled:L.value>=R.value,onClick:t[1]||=e=>V(L.value+1)},`Next →`,8,je)])):s(``,!0)],64)):(d(),m(p,{key:1},[K.value.length===0?(d(),m(`div`,se,[...t[5]||=[l(`

No photos yet

Tap "+ Add Photo" on the home screen to get started.

`,3)]])):(d(),m(`div`,ce,[(d(!0),m(p,null,u(K.value,e=>(d(),m(`div`,{key:e.id,class:`library__item`},[_(`div`,le,[_(`img`,{src:e.thumbnailUrl,alt:e.originalFilename,class:`library__img`,loading:`lazy`},null,8,H),_(`div`,U,[_(`button`,{class:`library__action-btn`,type:`button`,"aria-label":`Edit ${e.originalFilename}`,disabled:Y.value===e.id,onClick:t=>X(e)},[Y.value===e.id?(d(),m(`svg`,de,[...t[7]||=[_(`circle`,{cx:`12`,cy:`12`,r:`10`},null,-1),_(`line`,{x1:`12`,y1:`8`,x2:`12`,y2:`12`},null,-1),_(`line`,{x1:`12`,y1:`16`,x2:`12.01`,y2:`16`},null,-1)]])):(d(),m(`svg`,ue,[...t[6]||=[_(`path`,{d:`M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7`},null,-1),_(`path`,{d:`M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z`},null,-1)]]))],8,W),_(`button`,{class:`library__action-btn`,type:`button`,"aria-label":`Share ${e.originalFilename}`,onClick:t=>Ne(e.id)},[...t[8]||=[l(``,1)]],8,fe),_(`button`,{class:`library__action-btn library__action-btn--danger`,type:`button`,"aria-label":`Delete photo`,onClick:t=>Ie(e.id)},[...t[9]||=[l(``,1)]],8,pe)])]),r(x).devices.length>0?(d(),m(`div`,me,[(d(!0),m(p,null,u(r(x).devices,t=>(d(),m(`button`,{key:t.id,class:o([`library__approval-chip`,{"library__approval-chip--on":e.approvedDeviceIds.includes(t.id)}]),type:`button`,"aria-label":`${e.approvedDeviceIds.includes(t.id)?`Remove from`:`Add to`} ${t.name}`,onClick:n=>Fe(e.id,t.id,!e.approvedDeviceIds.includes(t.id))},h(t.name),11,he))),128))])):s(``,!0),r(x).devices.length>0?(d(),m(`div`,ge,[(d(!0),m(p,null,u(r(x).devices.filter(t=>e.approvedDeviceIds.includes(t.id)),n=>(d(),m(`button`,{key:n.id,class:o([`library__lock-chip`,{"library__lock-chip--on":n.lockedImageId===e.id}]),type:`button`,"aria-label":`${n.lockedImageId===e.id?`Unlock from`:`Lock to`} ${n.name}`,onClick:t=>Pe(e.id,n)},[(d(),m(`svg`,ve,[t[10]||=_(`rect`,{x:`3`,y:`11`,width:`18`,height:`11`,rx:`2`,ry:`2`},null,-1),n.lockedImageId===e.id?(d(),m(`path`,ye)):(d(),m(`path`,be))])),c(` `+h(n.name),1)],10,_e))),128))])):s(``,!0)]))),128))]))],64)),J.value===null?s(``,!0):(d(),a(ne,{key:3,modelValue:q.value,"onUpdate:modelValue":t[2]||=e=>q.value=e,"image-id":J.value},null,8,[`modelValue`,`image-id`])),i(k,{modelValue:Z.value,"onUpdate:modelValue":t[4]||=e=>Z.value=e,label:`Delete photo`},{default:y(()=>[t[13]||=_(`h2`,{class:`library__sheet-title`},`Delete this photo?`,-1),t[14]||=_(`p`,{class:`library__sheet-sub`},`It will be removed from all frames.`,-1),_(`div`,Me,[i(O,{variant:`secondary`,onClick:t[3]||=e=>Z.value=!1},{default:y(()=>[...t[12]||=[c(`Cancel`,-1)]]),_:1}),i(O,{variant:`destructive`,disabled:$.value,onClick:Le},{default:y(()=>[c(h($.value?`Deleting…`:`Delete`),1)]),_:1},8,[`disabled`])])]),_:1},8,[`modelValue`])]))}}),[[`__scopeId`,`data-v-695e06b8`]]);export{G as default}; \ No newline at end of file diff --git a/public/build/assets/SettingsView-Dbe21KxS.js b/public/build/assets/SettingsView-B067l1Rb.js similarity index 92% rename from public/build/assets/SettingsView-Dbe21KxS.js rename to public/build/assets/SettingsView-B067l1Rb.js index 728b661..e3e2beb 100644 --- a/public/build/assets/SettingsView-Dbe21KxS.js +++ b/public/build/assets/SettingsView-B067l1Rb.js @@ -1 +1 @@ -import{K as e,dt as t,f as n,ft as r,j as i,k as a,l as o,o as s,p as c,pt as l,t as u,u as d,v as f}from"./_plugin-vue_export-helper-DVo1OUMD.js";import{n as p,r as m,t as h}from"./index-C0Yc8pEe.js";var g={class:`settings`},_={class:`settings__section`},v={class:`theme-grid`,role:`radiogroup`,"aria-label":`Choose theme`},y=[`aria-checked`,`aria-label`,`onClick`],b={class:`theme-swatch__label`},x={key:0,class:`theme-swatch__check`,"aria-hidden":`true`},S={class:`settings__section`},C={class:`settings__row`},w={class:`settings__row-value`},T=u(f({__name:`SettingsView`,setup(u){let f=m(),{saveTheme:T}=p(),E=o(()=>f.user?.theme??`warm-craft`);function D(e){T(e)}return(o,u)=>(a(),c(`main`,g,[u[5]||=d(`h1`,{class:`settings__title`},`Settings`,-1),d(`section`,_,[u[1]||=d(`h2`,{class:`settings__section-title`},`Theme`,-1),d(`div`,v,[(a(!0),c(s,null,i(e(h),e=>(a(),c(`button`,{key:e.id,type:`button`,role:`radio`,"aria-checked":E.value===e.id,"aria-label":e.label,class:t([`theme-swatch`,{"theme-swatch--active":E.value===e.id}]),style:r({"--swatch-bg":e.bg,"--swatch-primary":e.primary,"--swatch-text":e.text}),onClick:t=>D(e.id)},[u[0]||=d(`span`,{class:`theme-swatch__preview`,"aria-hidden":`true`},[d(`span`,{class:`theme-swatch__bar`}),d(`span`,{class:`theme-swatch__dot`})],-1),d(`span`,b,l(e.label),1),E.value===e.id?(a(),c(`span`,x,`✓`)):n(``,!0)],14,y))),128))])]),d(`section`,S,[u[3]||=d(`h2`,{class:`settings__section-title`},`Account`,-1),d(`div`,C,[u[2]||=d(`span`,{class:`settings__row-label`},`Signed in as`,-1),d(`span`,w,l(e(f).user?.email),1)]),u[4]||=d(`a`,{href:`/logout`,class:`settings__logout`},`Sign out`,-1)])]))}}),[[`__scopeId`,`data-v-1446e085`]]);export{T as default}; \ No newline at end of file +import{K as e,dt as t,f as n,ft as r,j as i,k as a,l as o,o as s,p as c,pt as l,t as u,u as d,v as f}from"./_plugin-vue_export-helper-DVo1OUMD.js";import{n as p,r as m,t as h}from"./index-CmXd-se5.js";var g={class:`settings`},_={class:`settings__section`},v={class:`theme-grid`,role:`radiogroup`,"aria-label":`Choose theme`},y=[`aria-checked`,`aria-label`,`onClick`],b={class:`theme-swatch__label`},x={key:0,class:`theme-swatch__check`,"aria-hidden":`true`},S={class:`settings__section`},C={class:`settings__row`},w={class:`settings__row-value`},T=u(f({__name:`SettingsView`,setup(u){let f=m(),{saveTheme:T}=p(),E=o(()=>f.user?.theme??`warm-craft`);function D(e){T(e)}return(o,u)=>(a(),c(`main`,g,[u[5]||=d(`h1`,{class:`settings__title`},`Settings`,-1),d(`section`,_,[u[1]||=d(`h2`,{class:`settings__section-title`},`Theme`,-1),d(`div`,v,[(a(!0),c(s,null,i(e(h),e=>(a(),c(`button`,{key:e.id,type:`button`,role:`radio`,"aria-checked":E.value===e.id,"aria-label":e.label,class:t([`theme-swatch`,{"theme-swatch--active":E.value===e.id}]),style:r({"--swatch-bg":e.bg,"--swatch-primary":e.primary,"--swatch-text":e.text}),onClick:t=>D(e.id)},[u[0]||=d(`span`,{class:`theme-swatch__preview`,"aria-hidden":`true`},[d(`span`,{class:`theme-swatch__bar`}),d(`span`,{class:`theme-swatch__dot`})],-1),d(`span`,b,l(e.label),1),E.value===e.id?(a(),c(`span`,x,`✓`)):n(``,!0)],14,y))),128))])]),d(`section`,S,[u[3]||=d(`h2`,{class:`settings__section-title`},`Account`,-1),d(`div`,C,[u[2]||=d(`span`,{class:`settings__row-label`},`Signed in as`,-1),d(`span`,w,l(e(f).user?.email),1)]),u[4]||=d(`a`,{href:`/logout`,class:`settings__logout`},`Sign out`,-1)])]))}}),[[`__scopeId`,`data-v-1446e085`]]);export{T as default}; \ No newline at end of file diff --git a/public/build/assets/UploadView-BMrcHXkZ.css b/public/build/assets/UploadView-BMrcHXkZ.css new file mode 100644 index 0000000..5d37a13 --- /dev/null +++ b/public/build/assets/UploadView-BMrcHXkZ.css @@ -0,0 +1 @@ +.crop-editor[data-v-85d7731b]{touch-action:none;background:#000;flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.crop-editor__canvas[data-v-85d7731b]{touch-action:none;cursor:grab;flex:1;min-height:0;display:block}.crop-editor__canvas[data-v-85d7731b]:active{cursor:grabbing}.crop-editor__top[data-v-85d7731b]{pointer-events:none;flex-direction:column;align-items:center;gap:8px;display:flex;position:absolute;top:12px;left:12px;right:12px}.crop-editor__label[data-v-85d7731b]{color:#fff;font-size:var(--text-xs);letter-spacing:.04em;background:#0009;border-radius:999px;padding:4px 12px;font-weight:700}.crop-editor__orient[data-v-85d7731b]{pointer-events:auto;background:#0009;border-radius:999px;gap:4px;padding:4px;display:flex}.crop-editor__orient-btn[data-v-85d7731b]{color:#ffffffa6;cursor:pointer;width:36px;height:32px;transition:background var(--duration-fast), color var(--duration-fast);background:0 0;border:none;border-radius:999px;justify-content:center;align-items:center;display:flex}.crop-editor__orient-btn--active[data-v-85d7731b]{color:#000;background:#fff}.crop-editor__mismatch[data-v-85d7731b]{pointer-events:auto;background:var(--color-warning,#f59e0b);color:#fff;font-size:var(--text-xs);border-radius:999px;align-items:center;gap:6px;max-width:100%;padding:6px 12px;font-weight:600;line-height:1.3;display:flex}.crop-editor__mismatch svg[data-v-85d7731b]{flex-shrink:0}.crop-editor__actions[data-v-85d7731b]{padding:var(--space-4);justify-content:center;display:flex;position:absolute;bottom:0;left:0;right:0}.crop-editor__use-btn[data-v-85d7731b]{width:100%;max-width:320px}.sticker-tray__cats[data-v-7eada75b]{gap:var(--space-2);padding-bottom:var(--space-3);scrollbar-width:none;display:flex;overflow-x:auto}.sticker-tray__cats[data-v-7eada75b]::-webkit-scrollbar{display:none}.sticker-tray__cat[data-v-7eada75b]{border:1.5px solid var(--color-border);font-size:var(--text-sm);white-space:nowrap;cursor:pointer;color:var(--color-text-muted);transition:all var(--duration-fast);background:0 0;border-radius:999px;padding:6px 14px;font-weight:600}.sticker-tray__cat--active[data-v-7eada75b]{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-fg)}.sticker-tray__grid[data-v-7eada75b]{gap:var(--space-2);grid-template-columns:repeat(5,1fr);display:grid}.sticker-tray__item[data-v-7eada75b]{padding:var(--space-2) var(--space-1);border-radius:var(--radius-sm);cursor:pointer;transition:background var(--duration-fast);background:0 0;border:none;flex-direction:column;align-items:center;gap:4px;display:flex}.sticker-tray__item[data-v-7eada75b]:active{background:var(--color-surface-2)}.sticker-tray__emoji[data-v-7eada75b]{font-family:Apple Color Emoji,Segoe UI Emoji,Noto Color Emoji,sans-serif;font-size:36px;line-height:1}.sticker-tray__label[data-v-7eada75b]{color:var(--color-text-muted);text-align:center;font-size:10px;font-weight:600;line-height:1.2}.sticker-canvas[data-v-fb52db70]{background:#111;flex-direction:column;flex:1;align-items:center;min-height:0;display:flex;position:relative;overflow:hidden}.sticker-canvas[data-v-fb52db70] .konvajs-content{flex-shrink:0}.sticker-canvas__delete[data-v-fb52db70]{top:var(--space-3);right:var(--space-3);cursor:pointer;color:#fff;z-index:10;background:#c81e1ed9;border:none;border-radius:50%;justify-content:center;align-items:center;width:36px;height:36px;display:flex;position:absolute}.sticker-canvas__bar[data-v-fb52db70]{align-items:center;gap:var(--space-3);height:72px;padding:0 var(--space-4);background:var(--color-surface);border-top:1px solid var(--color-border);display:flex;position:absolute;bottom:0;left:0;right:0}.sticker-canvas__add-btn[data-v-fb52db70]{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);border:1.5px solid var(--color-border);color:var(--color-text);font-size:var(--text-sm);cursor:pointer;white-space:nowrap;background:0 0;font-weight:600;display:flex}.sticker-canvas__next-btn[data-v-fb52db70]{min-width:96px;margin-left:auto}.upload-view[data-v-7bbd1577]{z-index:100;background:var(--color-bg);flex-direction:column;display:flex;position:fixed;inset:0}.upload-view__header[data-v-7bbd1577]{height:56px;padding:0 var(--space-4);background:var(--color-surface);border-bottom:1px solid var(--color-border);flex-shrink:0;align-items:center;display:flex;position:relative}.upload-view__back[data-v-7bbd1577]{cursor:pointer;width:40px;height:40px;color:var(--color-text);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;margin-left:-8px;display:flex}.upload-view__step-label[data-v-7bbd1577]{font-size:var(--text-base);color:var(--color-text);font-weight:700;position:absolute;left:50%;transform:translate(-50%)}.upload-view__skip[data-v-7bbd1577]{font-size:var(--text-sm);color:var(--color-text-muted);cursor:pointer;padding:var(--space-2) 0;background:0 0;border:none;margin-left:auto;font-weight:600}.upload-view__stage[data-v-7bbd1577]{flex:1;min-height:0}.upload-view__done[data-v-7bbd1577]{justify-content:center;align-items:center;gap:var(--space-4);padding:var(--space-6) var(--space-5);text-align:center;flex-direction:column;flex:1;display:flex}.upload-view__done-icon[data-v-7bbd1577]{font-family:Apple Color Emoji,Segoe UI Emoji,Noto Color Emoji,sans-serif;font-size:64px;line-height:1}.upload-view__done-title[data-v-7bbd1577]{font-size:var(--text-xl);font-weight:700}.upload-view__done-sub[data-v-7bbd1577]{font-size:var(--text-sm);color:var(--color-text-muted);max-width:260px;line-height:1.5}.upload-view__done-btn[data-v-7bbd1577]{width:100%;max-width:320px} diff --git a/public/build/assets/UploadView-CJEQVpkq.css b/public/build/assets/UploadView-CJEQVpkq.css deleted file mode 100644 index e6e27f2..0000000 --- a/public/build/assets/UploadView-CJEQVpkq.css +++ /dev/null @@ -1 +0,0 @@ -.crop-editor[data-v-ec2eb68c]{touch-action:none;background:#000;flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.crop-editor__canvas[data-v-ec2eb68c]{touch-action:none;cursor:grab;flex:1;min-height:0;display:block}.crop-editor__canvas[data-v-ec2eb68c]:active{cursor:grabbing}.crop-editor__label[data-v-ec2eb68c]{color:#fff;font-size:var(--text-xs);letter-spacing:.04em;pointer-events:none;background:#0009;border-radius:999px;padding:4px 12px;font-weight:700;position:absolute;top:16px;left:50%;transform:translate(-50%)}.crop-editor__actions[data-v-ec2eb68c]{padding:var(--space-4);justify-content:center;display:flex;position:absolute;bottom:0;left:0;right:0}.crop-editor__use-btn[data-v-ec2eb68c]{width:100%;max-width:320px}.sticker-tray__cats[data-v-7eada75b]{gap:var(--space-2);padding-bottom:var(--space-3);scrollbar-width:none;display:flex;overflow-x:auto}.sticker-tray__cats[data-v-7eada75b]::-webkit-scrollbar{display:none}.sticker-tray__cat[data-v-7eada75b]{border:1.5px solid var(--color-border);font-size:var(--text-sm);white-space:nowrap;cursor:pointer;color:var(--color-text-muted);transition:all var(--duration-fast);background:0 0;border-radius:999px;padding:6px 14px;font-weight:600}.sticker-tray__cat--active[data-v-7eada75b]{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-fg)}.sticker-tray__grid[data-v-7eada75b]{gap:var(--space-2);grid-template-columns:repeat(5,1fr);display:grid}.sticker-tray__item[data-v-7eada75b]{padding:var(--space-2) var(--space-1);border-radius:var(--radius-sm);cursor:pointer;transition:background var(--duration-fast);background:0 0;border:none;flex-direction:column;align-items:center;gap:4px;display:flex}.sticker-tray__item[data-v-7eada75b]:active{background:var(--color-surface-2)}.sticker-tray__emoji[data-v-7eada75b]{font-family:Apple Color Emoji,Segoe UI Emoji,Noto Color Emoji,sans-serif;font-size:36px;line-height:1}.sticker-tray__label[data-v-7eada75b]{color:var(--color-text-muted);text-align:center;font-size:10px;font-weight:600;line-height:1.2}.sticker-canvas[data-v-fb52db70]{background:#111;flex-direction:column;flex:1;align-items:center;min-height:0;display:flex;position:relative;overflow:hidden}.sticker-canvas[data-v-fb52db70] .konvajs-content{flex-shrink:0}.sticker-canvas__delete[data-v-fb52db70]{top:var(--space-3);right:var(--space-3);cursor:pointer;color:#fff;z-index:10;background:#c81e1ed9;border:none;border-radius:50%;justify-content:center;align-items:center;width:36px;height:36px;display:flex;position:absolute}.sticker-canvas__bar[data-v-fb52db70]{align-items:center;gap:var(--space-3);height:72px;padding:0 var(--space-4);background:var(--color-surface);border-top:1px solid var(--color-border);display:flex;position:absolute;bottom:0;left:0;right:0}.sticker-canvas__add-btn[data-v-fb52db70]{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);border:1.5px solid var(--color-border);color:var(--color-text);font-size:var(--text-sm);cursor:pointer;white-space:nowrap;background:0 0;font-weight:600;display:flex}.sticker-canvas__next-btn[data-v-fb52db70]{min-width:96px;margin-left:auto}.upload-view[data-v-fca2e263]{z-index:100;background:var(--color-bg);flex-direction:column;display:flex;position:fixed;inset:0}.upload-view__header[data-v-fca2e263]{height:56px;padding:0 var(--space-4);background:var(--color-surface);border-bottom:1px solid var(--color-border);flex-shrink:0;align-items:center;display:flex;position:relative}.upload-view__back[data-v-fca2e263]{cursor:pointer;width:40px;height:40px;color:var(--color-text);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;margin-left:-8px;display:flex}.upload-view__step-label[data-v-fca2e263]{font-size:var(--text-base);color:var(--color-text);font-weight:700;position:absolute;left:50%;transform:translate(-50%)}.upload-view__skip[data-v-fca2e263]{font-size:var(--text-sm);color:var(--color-text-muted);cursor:pointer;padding:var(--space-2) 0;background:0 0;border:none;margin-left:auto;font-weight:600}.upload-view__stage[data-v-fca2e263]{flex:1;min-height:0}.upload-view__done[data-v-fca2e263]{justify-content:center;align-items:center;gap:var(--space-4);padding:var(--space-6) var(--space-5);text-align:center;flex-direction:column;flex:1;display:flex}.upload-view__done-icon[data-v-fca2e263]{font-family:Apple Color Emoji,Segoe UI Emoji,Noto Color Emoji,sans-serif;font-size:64px;line-height:1}.upload-view__done-title[data-v-fca2e263]{font-size:var(--text-xl);font-weight:700}.upload-view__done-sub[data-v-fca2e263]{font-size:var(--text-sm);color:var(--color-text-muted);max-width:260px;line-height:1.5}.upload-view__done-btn[data-v-fca2e263]{width:100%;max-width:320px} diff --git a/public/build/assets/UploadView-D4bnhltO.js b/public/build/assets/UploadView-D4bnhltO.js new file mode 100644 index 0000000..a9fa6f2 --- /dev/null +++ b/public/build/assets/UploadView-D4bnhltO.js @@ -0,0 +1 @@ +import{E as e,H as t,K as n,N as r,R as i,T as a,_ as o,d as s,dt as c,f as l,g as u,j as d,k as f,l as p,o as m,p as h,pt as g,t as _,u as v,v as y,w as b,z as x}from"./_plugin-vue_export-helper-DVo1OUMD.js";import{a as S,i as C,s as w}from"./index-CmXd-se5.js";import{i as T,n as E,r as D,t as O}from"./BaseBottomSheet-cgSeW-RK.js";import{t as k}from"./DevicePicker-DreFDlLU.js";var A={class:`crop-editor__top`},j={key:0,class:`crop-editor__label`},M={class:`crop-editor__orient`,role:`radiogroup`,"aria-label":`Crop orientation`},N=[`aria-checked`,`aria-label`,`onClick`],P={width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"aria-hidden":`true`},ee={key:0,x:`2`,y:`6`,width:`20`,height:`12`,rx:`1.5`},te={key:1,x:`6`,y:`2`,width:`12`,height:`20`,rx:`1.5`},ne={key:1,class:`crop-editor__mismatch`,role:`status`},F={class:`crop-editor__actions`},I=_(y({__name:`CropEditor`,props:{src:{},orientation:{},deviceName:{},initialParams:{},initialOrientation:{}},emits:[`crop`],setup(n,{emit:r}){let s=n,_=r,y=[{value:`landscape`,label:`Landscape crop`},{value:`portrait`,label:`Portrait crop`}],b=t(s.initialOrientation??s.orientation),S=p(()=>b.value===`landscape`?{w:1600,h:960}:{w:960,h:1600}),C=p(()=>S.value.w/S.value.h),w=p(()=>b.value!==s.orientation),T=t(),D=t(),O=null,k=null,I=0,L=t(0),R=t(0),z=t(1),B={x:0,y:0,w:0,h:0},V=1;function re(e){b.value!==e&&(b.value=e,L.value=0,R.value=0,z.value=1,H())}function H(){let e=D.value,t=T.value;if(!e||!t)return;let n=t.getBoundingClientRect(),r=n.height-80,i=n.width;e.width=i,e.height=r,O=e.getContext(`2d`);let a=i-48,o=r-48,s,c;a/o>C.value?(c=o,s=c*C.value):(s=a,c=s/C.value),B={x:(i-s)/2,y:(r-c)/2,w:s,h:c},k&&U()}function U(){k&&(V=Math.max(B.w/k.naturalWidth,B.h/k.naturalHeight),s.initialParams?W(s.initialParams):(z.value=1,L.value=0,R.value=0,K()))}function W(e){if(!k)return;let t=B.w/e.natW;z.value=t/V,L.value=t*(k.naturalWidth/2-e.natX-e.natW/2),R.value=t*(k.naturalHeight/2-e.natY-e.natH/2);let[n,r]=G(L.value,R.value);L.value=n,R.value=r,K()}function G(e,t){if(!k)return[e,t];let n=V*z.value,r=k.naturalWidth*n,i=k.naturalHeight*n,a=(r-B.w)/2,o=(i-B.h)/2;return[Math.max(-a,Math.min(a,e)),Math.max(-o,Math.min(o,t))]}function K(){if(!O||!k||!D.value)return;let{width:e,height:t}=D.value,n=V*z.value,r=k.naturalWidth*n,i=k.naturalHeight*n,a=B.x+B.w/2+L.value,o=B.y+B.h/2+R.value,s=a-r/2,c=o-i/2;O.clearRect(0,0,e,t),O.drawImage(k,s,c,r,i),O.save(),O.fillStyle=`rgba(0,0,0,0.55)`,O.fillRect(0,0,e,t),O.globalCompositeOperation=`destination-out`,O.fillRect(B.x,B.y,B.w,B.h),O.restore(),O.strokeStyle=`#fff`,O.lineWidth=2,O.strokeRect(B.x,B.y,B.w,B.h),O.lineWidth=3,[[B.x,B.y,20,0,0,20],[B.x+B.w,B.y,-20,0,0,20],[B.x,B.y+B.h,20,0,0,-20],[B.x+B.w,B.y+B.h,-20,0,0,-20]].forEach(([e,t,n,r,i,a])=>{O.beginPath(),O.moveTo(e+n,t+r),O.lineTo(e,t),O.lineTo(e+i,t+a),O.stroke()})}let q=new Map,J=0;function Y(e){if(D.value?.setPointerCapture(e.pointerId),q.set(e.pointerId,{x:e.clientX,y:e.clientY}),q.size===2){let e=[...q.values()];J=Math.hypot(e[1].x-e[0].x,e[1].y-e[0].y)}}function X(e){if(!q.has(e.pointerId))return;let t=q.get(e.pointerId);if(q.set(e.pointerId,{x:e.clientX,y:e.clientY}),q.size===1){let n=e.clientX-t.x,r=e.clientY-t.y,[i,a]=G(L.value+n,R.value+r);L.value=i,R.value=a,Q();return}if(q.size===2){let e=[...q.values()],t=Math.hypot(e[1].x-e[0].x,e[1].y-e[0].y);if(J>0){let e=t/J;z.value=Math.max(1,z.value*e);let[n,r]=G(L.value,R.value);L.value=n,R.value=r,Q()}J=t}}function Z(e){q.delete(e.pointerId),J=0}function Q(){cancelAnimationFrame(I),I=requestAnimationFrame(K)}async function ie(){if(!k)return;let e=V*z.value,t=B.x+B.w/2+L.value,n=B.y+B.h/2+R.value,r=t-k.naturalWidth*e/2,i=n-k.naturalHeight*e/2,a=(B.x-r)/e,o=(B.y-i)/e,s=B.w/e,c=B.h/e,{w:l,h:u}=S.value,d=new OffscreenCanvas(l,u);d.getContext(`2d`).drawImage(k,a,o,s,c,0,0,l,u),_(`crop`,{blob:await d.convertToBlob({type:`image/jpeg`,quality:.92}),params:{natX:a,natY:o,natW:s,natH:c},orientation:b.value})}let $=new ResizeObserver(H);return e(()=>{T.value&&$.observe(T.value),H(),k=new Image,k.onload=()=>{H(),U()},k.src=s.src}),i(()=>s.src,e=>{k&&(k.onload=()=>U(),k.src=e)}),a(()=>{$.disconnect(),cancelAnimationFrame(I)}),(e,t)=>(f(),h(`div`,{class:`crop-editor`,ref_key:`containerRef`,ref:T},[v(`canvas`,{ref_key:`canvasRef`,ref:D,class:`crop-editor__canvas`,onPointerdown:Y,onPointermove:X,onPointerup:Z,onPointercancel:Z},null,544),v(`div`,A,[n.deviceName?(f(),h(`div`,j,g(n.deviceName),1)):l(``,!0),v(`div`,M,[(f(),h(m,null,d(y,e=>v(`button`,{key:e.value,type:`button`,role:`radio`,"aria-checked":b.value===e.value,"aria-label":e.label,class:c([`crop-editor__orient-btn`,{"crop-editor__orient-btn--active":b.value===e.value}]),onClick:t=>re(e.value)},[(f(),h(`svg`,P,[e.value===`landscape`?(f(),h(`rect`,ee)):(f(),h(`rect`,te))]))],10,N)),64))]),w.value?(f(),h(`div`,ne,[t[0]||=v(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"aria-hidden":`true`},[v(`path`,{d:`M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z`}),v(`line`,{x1:`12`,y1:`9`,x2:`12`,y2:`13`}),v(`line`,{x1:`12`,y1:`17`,x2:`12.01`,y2:`17`})],-1),v(`span`,null,`Frame is set to `+g(n.orientation)+`. Switch the frame in Settings to display this crop.`,1)])):l(``,!0)]),v(`div`,F,[o(E,{variant:`primary`,class:`crop-editor__use-btn`,onClick:ie},{default:x(()=>[...t[1]||=[u(` Use this crop `,-1)]]),_:1})])],512))}}),[[`__scopeId`,`data-v-85d7731b`]]),L=[{id:`seasonal`,label:`Seasonal`},{id:`holidays`,label:`Holidays`},{id:`fun`,label:`Fun`},{id:`family`,label:`Family`},{id:`nature`,label:`Nature`}],R=[{id:`sea-snow`,category:`seasonal`,label:`Snowflake`,emoji:`❄️`},{id:`sea-sun`,category:`seasonal`,label:`Sun`,emoji:`☀️`},{id:`sea-leaves`,category:`seasonal`,label:`Autumn`,emoji:`🍂`},{id:`sea-blossom`,category:`seasonal`,label:`Blossom`,emoji:`🌸`},{id:`sea-snowman`,category:`seasonal`,label:`Snowman`,emoji:`⛄`},{id:`hol-tree`,category:`holidays`,label:`Tree`,emoji:`🎄`},{id:`hol-gift`,category:`holidays`,label:`Gift`,emoji:`🎁`},{id:`hol-heart`,category:`holidays`,label:`Heart`,emoji:`❤️`},{id:`hol-party`,category:`holidays`,label:`Party`,emoji:`🎉`},{id:`hol-cake`,category:`holidays`,label:`Cake`,emoji:`🎂`},{id:`fun-star`,category:`fun`,label:`Star`,emoji:`⭐`},{id:`fun-rainbow`,category:`fun`,label:`Rainbow`,emoji:`🌈`},{id:`fun-balloon`,category:`fun`,label:`Balloon`,emoji:`🎈`},{id:`fun-sparkle`,category:`fun`,label:`Sparkles`,emoji:`✨`},{id:`fun-fire`,category:`fun`,label:`Fire`,emoji:`🔥`},{id:`fam-house`,category:`family`,label:`Home`,emoji:`🏠`},{id:`fam-paw`,category:`family`,label:`Paw`,emoji:`🐾`},{id:`fam-camera`,category:`family`,label:`Camera`,emoji:`📷`},{id:`fam-plane`,category:`family`,label:`Airplane`,emoji:`✈️`},{id:`fam-music`,category:`family`,label:`Music`,emoji:`🎵`},{id:`nat-tree`,category:`nature`,label:`Tree`,emoji:`🌲`},{id:`nat-flower`,category:`nature`,label:`Flower`,emoji:`🌺`},{id:`nat-bee`,category:`nature`,label:`Bee`,emoji:`🐝`},{id:`nat-fly`,category:`nature`,label:`Butterfly`,emoji:`🦋`},{id:`nat-moon`,category:`nature`,label:`Moon`,emoji:`🌙`}],z={class:`sticker-tray`},B={class:`sticker-tray__cats`,role:`tablist`},V=[`onClick`],re={class:`sticker-tray__grid`,role:`tabpanel`},H=[`aria-label`,`onClick`],U={class:`sticker-tray__emoji`,"aria-hidden":`true`},W={class:`sticker-tray__label`},G=_(y({__name:`StickerTray`,props:{modelValue:{type:Boolean}},emits:[`update:modelValue`,`pick`],setup(e){let r=t(`seasonal`),i=p(()=>R.filter(e=>e.category===r.value));return(t,a)=>(f(),s(O,{"model-value":e.modelValue,label:`Add sticker`,"onUpdate:modelValue":a[0]||=e=>t.$emit(`update:modelValue`,e)},{default:x(()=>[v(`div`,z,[v(`div`,B,[(f(!0),h(m,null,d(n(L),e=>(f(),h(`button`,{key:e.id,type:`button`,role:`tab`,class:c([`sticker-tray__cat`,{"sticker-tray__cat--active":r.value===e.id}]),onClick:t=>r.value=e.id},g(e.label),11,V))),128))]),v(`div`,re,[(f(!0),h(m,null,d(i.value,e=>(f(),h(`button`,{key:e.id,type:`button`,class:`sticker-tray__item`,"aria-label":e.label,onClick:n=>t.$emit(`pick`,e.id)},[v(`span`,U,g(e.emoji),1),v(`span`,W,g(e.label),1)],8,H))),128))])])]),_:1},8,[`model-value`]))}}),[[`__scopeId`,`data-v-7eada75b`]]),K={class:`sticker-canvas__bar`},q=52,J=_(y({__name:`StickerCanvas`,props:{croppedUrl:{},orientation:{},stickers:{}},emits:[`add-sticker`,`update-sticker`,`remove-sticker`,`done`],setup(n,{emit:c}){let g=n,_=c,y=t(),S=t(),C=t(),w=t(),T=t(!1),D=t(null),O=t(375),k=t(225),A=g.orientation===`landscape`?1600/960:960/1600;function j(){if(!y.value)return;let{width:e,height:t}=y.value.getBoundingClientRect(),n=t-72;e/n>A?(k.value=n,O.value=n*A):(O.value=e,k.value=e/A),P()}let M=new ResizeObserver(j);e(()=>{y.value&&M.observe(y.value),j(),Q()}),a(()=>{M.disconnect(),ie()});let N=t(null);function P(){let e=new Image;e.onload=()=>{N.value=e},e.src=g.croppedUrl}i(()=>g.croppedUrl,()=>P(),{immediate:!0});let ee=p(()=>({width:O.value,height:k.value})),te=p(()=>({image:N.value,x:0,y:0,width:O.value,height:k.value})),ne={enabledAnchors:[`top-left`,`top-right`,`bottom-left`,`bottom-right`],rotateEnabled:!0,borderStroke:`rgba(255,255,255,0.8)`,anchorFill:`#fff`,anchorSize:18,keepRatio:!0,boundBoxFunc:(e,t)=>t};function F(e){return{id:e.id,text:I(e.type),fontSize:q,fontFamily:`"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji",sans-serif`,x:e.x,y:e.y,scaleX:e.scale,scaleY:e.scale,rotation:e.rotation,draggable:!0,offsetX:q/2,offsetY:q/2}}function I(e){return R.find(t=>t.id===e)?.emoji??`⭐`}function L(e,t){t.cancelBubble=!0,D.value=e,b(()=>{let t=(w.value?.getNode())?.findOne(`#${e}`),n=C.value?.getNode();t&&n&&n.nodes([t])})}function z(e){e.target===e.target.getStage()&&(D.value=null,C.value?.getNode()?.nodes([]))}function B(){D.value&&(_(`remove-sticker`,D.value),D.value=null,C.value?.getNode()?.nodes([]))}function V(e,t){_(`update-sticker`,e,{x:t.target.x(),y:t.target.y()})}function re(e,t){_(`update-sticker`,e,{x:t.target.x(),y:t.target.y(),scale:t.target.scaleX(),rotation:t.target.rotation()})}function H(e){let t={id:`${e}-${Date.now()}`,type:e,x:O.value/2,y:k.value/2,scale:1,rotation:0};_(`add-sticker`,t),T.value=!1,b(()=>L(t.id,{cancelBubble:!1}))}let U=0,W=1;function J(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function Y(e){e.touches.length!==2||!D.value||(U=J(e.touches),W=g.stickers.find(e=>e.id===D.value)?.scale??1)}function X(e){if(e.touches.length!==2||!D.value||U===0)return;e.preventDefault();let t=Math.max(.2,Math.min(6,W*(J(e.touches)/U)));_(`update-sticker`,D.value,{scale:t})}function Z(){U=0,W=1}function Q(){let e=y.value;e&&(e.addEventListener(`touchstart`,Y,{passive:!0}),e.addEventListener(`touchmove`,X,{passive:!1}),e.addEventListener(`touchend`,Z,{passive:!0}))}function ie(){let e=y.value;e&&(e.removeEventListener(`touchstart`,Y),e.removeEventListener(`touchmove`,X),e.removeEventListener(`touchend`,Z))}async function $(){D.value=null,C.value?.getNode()?.nodes([]),await b();let e=S.value?.getNode();if(!e)return;let t=(g.orientation===`landscape`?1600:960)/O.value,n=await e.toBlob({pixelRatio:t,mimeType:`image/jpeg`,quality:.92});n&&_(`done`,n)}return(e,t)=>{let i=r(`v-image`),a=r(`v-layer`),c=r(`v-text`),p=r(`v-transformer`),g=r(`v-stage`);return f(),h(`div`,{class:`sticker-canvas`,ref_key:`containerRef`,ref:y},[o(g,{ref_key:`stageRef`,ref:S,config:ee.value,onClick:z,onTap:z},{default:x(()=>[o(a,null,{default:x(()=>[o(i,{config:te.value},null,8,[`config`])]),_:1}),o(a,{ref_key:`stickerLayerRef`,ref:w},{default:x(()=>[(f(!0),h(m,null,d(n.stickers,e=>(f(),s(c,{key:e.id,config:F(e),onClick:t=>L(e.id,t),onTap:t=>L(e.id,t),onDragend:t=>V(e.id,t),onTransformend:t=>re(e.id,t)},null,8,[`config`,`onClick`,`onTap`,`onDragend`,`onTransformend`]))),128)),o(p,{ref_key:`transformerRef`,ref:C,config:ne},null,512)]),_:1},512)]),_:1},8,[`config`]),D.value?(f(),h(`button`,{key:0,class:`sticker-canvas__delete`,type:`button`,"aria-label":`Remove sticker`,onClick:B},[...t[2]||=[v(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"aria-hidden":`true`},[v(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),v(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]])):l(``,!0),v(`div`,K,[v(`button`,{class:`sticker-canvas__add-btn`,type:`button`,onClick:t[0]||=e=>T.value=!0},[...t[3]||=[v(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"aria-hidden":`true`},[v(`circle`,{cx:`12`,cy:`12`,r:`10`}),v(`line`,{x1:`12`,y1:`8`,x2:`12`,y2:`16`}),v(`line`,{x1:`8`,y1:`12`,x2:`16`,y2:`12`})],-1),u(` Add sticker `,-1)]]),o(E,{variant:`primary`,class:`sticker-canvas__next-btn`,onClick:$},{default:x(()=>[...t[4]||=[u(`Next`,-1)]]),_:1})]),o(G,{modelValue:T.value,"onUpdate:modelValue":t[1]||=e=>T.value=e,onPick:H},null,8,[`modelValue`])],512)}}}),[[`__scopeId`,`data-v-fb52db70`]]),Y={class:`upload-view`},X={class:`upload-view__header`},Z=[`aria-label`],Q={key:0,width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"aria-hidden":`true`},ie={key:1,width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"aria-hidden":`true`},$={class:`upload-view__step-label`},ae={key:2,class:`upload-view__done`},oe={class:`upload-view__done-title`},se=_(y({__name:`UploadView`,setup(r){let i=w(),a=D(),c=T(),d=S(),m=C(),_=t(`crop`),y=t(!1),b=t(!1),O=null,A=p(()=>a.editingImageId!==null);e(async()=>{if(await c.fetchDevices(),!a.originalFile){i.replace(`/`);return}_.value=`crop`});let j=p(()=>a.contextDeviceId?c.devices.find(e=>e.id===a.contextDeviceId):c.devices[0]),M=p(()=>j.value?.orientation??`landscape`),N=p(()=>j.value?.name),P=p(()=>_.value===`crop`?A.value?`Edit crop`:`Crop photo`:_.value===`stickers`?`Add stickers`:A.value?`Updated`:`Added`);function ee({blob:e,params:t,orientation:n}){a.setCrop(e,t,n),_.value=`stickers`}function te(){a.croppedBlob&&(O=a.croppedBlob,A.value?L():b.value=!0)}function ne(e){O=e,A.value?L():b.value=!0}function F(){if(_.value===`crop`){a.cleanup(),i.replace(`/library`);return}_.value===`stickers`&&(_.value=`crop`)}async function L(){if(O){y.value=!0;try{let e=new File([O],`photo.jpg`,{type:`image/jpeg`});if(A.value){await d.reprocessImage(a.editingImageId,e,{cropParams:a.cropParams??void 0,stickerState:a.stickers,cropOrientation:a.cropOrientation??void 0}),b.value=!1,_.value=`done`;return}let t=await d.uploadImage(e,{original:a.originalFile??void 0,cropParams:a.cropParams??void 0,stickerState:a.stickers,cropOrientation:a.cropOrientation??void 0});await Promise.all(a.selectedDeviceIds.map(e=>d.setApproval(t.id,e,!0))),b.value=!1,_.value=`done`}catch(e){m.show(e instanceof Error?e.message:`Upload failed`,`error`)}finally{y.value=!1}}}function R(){a.cleanup(),i.replace(`/library`)}return(e,t)=>(f(),h(`div`,Y,[v(`header`,X,[_.value===`done`?l(``,!0):(f(),h(`button`,{key:0,class:`upload-view__back`,type:`button`,"aria-label":_.value===`crop`?`Cancel`:`Back`,onClick:F},[_.value===`crop`?(f(),h(`svg`,Q,[...t[2]||=[v(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`},null,-1),v(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`},null,-1)]])):(f(),h(`svg`,ie,[...t[3]||=[v(`polyline`,{points:`15 18 9 12 15 6`},null,-1)]]))],8,Z)),v(`span`,$,g(P.value),1),_.value===`stickers`?(f(),h(`button`,{key:1,class:`upload-view__skip`,type:`button`,onClick:te},`Skip`)):l(``,!0)]),_.value===`crop`&&n(a).originalUrl?(f(),s(I,{key:0,src:n(a).originalUrl,orientation:M.value,"device-name":N.value,"initial-params":n(a).cropParams,"initial-orientation":n(a).cropOrientation,class:`upload-view__stage`,onCrop:ee},null,8,[`src`,`orientation`,`device-name`,`initial-params`,`initial-orientation`])):_.value===`stickers`&&n(a).croppedUrl?(f(),s(J,{key:1,"cropped-url":n(a).croppedUrl,orientation:M.value,stickers:n(a).stickers,class:`upload-view__stage`,onAddSticker:n(a).addSticker,onUpdateSticker:n(a).updateSticker,onRemoveSticker:n(a).removeSticker,onDone:ne},null,8,[`cropped-url`,`orientation`,`stickers`,`onAddSticker`,`onUpdateSticker`,`onRemoveSticker`])):_.value===`done`?(f(),h(`div`,ae,[t[5]||=v(`div`,{class:`upload-view__done-icon`,"aria-hidden":`true`},`🎉`,-1),v(`p`,oe,g(A.value?`Photo updated!`:`Photo added!`),1),t[6]||=v(`p`,{class:`upload-view__done-sub`},`It'll appear on your frame at the next update.`,-1),o(E,{variant:`primary`,class:`upload-view__done-btn`,onClick:R},{default:x(()=>[...t[4]||=[u(`Done`,-1)]]),_:1})])):l(``,!0),A.value?l(``,!0):(f(),s(k,{key:3,modelValue:b.value,"onUpdate:modelValue":t[0]||=e=>b.value=e,devices:n(c).devices,selected:n(a).selectedDeviceIds,uploading:y.value,"onUpdate:selected":t[1]||=e=>n(a).selectedDeviceIds=e,onConfirm:L},null,8,[`modelValue`,`devices`,`selected`,`uploading`]))]))}}),[[`__scopeId`,`data-v-7bbd1577`]]);export{se as default}; \ No newline at end of file diff --git a/public/build/assets/UploadView-Uqz760jq.js b/public/build/assets/UploadView-Uqz760jq.js deleted file mode 100644 index ac3fb14..0000000 --- a/public/build/assets/UploadView-Uqz760jq.js +++ /dev/null @@ -1 +0,0 @@ -import{E as e,H as t,K as n,N as r,R as i,T as a,_ as o,d as s,dt as c,f as l,g as u,j as d,k as f,l as p,o as m,p as h,pt as g,t as _,u as v,v as y,w as b,z as x}from"./_plugin-vue_export-helper-DVo1OUMD.js";import{a as S,i as C,s as w}from"./index-C0Yc8pEe.js";import{i as T,n as E,r as D,t as O}from"./BaseBottomSheet-BODCttr7.js";import{t as k}from"./DevicePicker-Dz05cPit.js";var A={key:0,class:`crop-editor__label`},j={class:`crop-editor__actions`},M=_(y({__name:`CropEditor`,props:{src:{},orientation:{},deviceName:{},initialParams:{}},emits:[`crop`],setup(n,{emit:r}){let s=n,c=r,d=s.orientation===`landscape`?1600:960,p=s.orientation===`landscape`?960:1600,m=d/p,_=t(),y=t(),b=null,S=null,C=0,w=t(0),T=t(0),D=t(1),O={x:0,y:0,w:0,h:0},k=1;function M(){let e=y.value,t=_.value;if(!e||!t)return;let n=t.getBoundingClientRect(),r=n.height-80,i=n.width;e.width=i,e.height=r,b=e.getContext(`2d`);let a=i-48,o=r-48,s,c;a/o>m?(c=o,s=c*m):(s=a,c=s/m),O={x:(i-s)/2,y:(r-c)/2,w:s,h:c},S&&N()}function N(){S&&(k=Math.max(O.w/S.naturalWidth,O.h/S.naturalHeight),s.initialParams?P(s.initialParams):(D.value=1,w.value=0,T.value=0,I()))}function P(e){if(!S)return;let t=O.w/e.natW;D.value=t/k,w.value=t*(S.naturalWidth/2-e.natX-e.natW/2),T.value=t*(S.naturalHeight/2-e.natY-e.natH/2);let[n,r]=F(w.value,T.value);w.value=n,T.value=r,I()}function F(e,t){if(!S)return[e,t];let n=k*D.value,r=S.naturalWidth*n,i=S.naturalHeight*n,a=(r-O.w)/2,o=(i-O.h)/2;return[Math.max(-a,Math.min(a,e)),Math.max(-o,Math.min(o,t))]}function I(){if(!b||!S||!y.value)return;let{width:e,height:t}=y.value,n=k*D.value,r=S.naturalWidth*n,i=S.naturalHeight*n,a=O.x+O.w/2+w.value,o=O.y+O.h/2+T.value,s=a-r/2,c=o-i/2;b.clearRect(0,0,e,t),b.drawImage(S,s,c,r,i),b.save(),b.fillStyle=`rgba(0,0,0,0.55)`,b.fillRect(0,0,e,t),b.globalCompositeOperation=`destination-out`,b.fillRect(O.x,O.y,O.w,O.h),b.restore(),b.strokeStyle=`#fff`,b.lineWidth=2,b.strokeRect(O.x,O.y,O.w,O.h),b.lineWidth=3,[[O.x,O.y,20,0,0,20],[O.x+O.w,O.y,-20,0,0,20],[O.x,O.y+O.h,20,0,0,-20],[O.x+O.w,O.y+O.h,-20,0,0,-20]].forEach(([e,t,n,r,i,a])=>{b.beginPath(),b.moveTo(e+n,t+r),b.lineTo(e,t),b.lineTo(e+i,t+a),b.stroke()})}let L=new Map,R=0;function z(e){if(y.value?.setPointerCapture(e.pointerId),L.set(e.pointerId,{x:e.clientX,y:e.clientY}),L.size===2){let e=[...L.values()];R=Math.hypot(e[1].x-e[0].x,e[1].y-e[0].y)}}function B(e){if(!L.has(e.pointerId))return;let t=L.get(e.pointerId);if(L.set(e.pointerId,{x:e.clientX,y:e.clientY}),L.size===1){let n=e.clientX-t.x,r=e.clientY-t.y,[i,a]=F(w.value+n,T.value+r);w.value=i,T.value=a,H();return}if(L.size===2){let e=[...L.values()],t=Math.hypot(e[1].x-e[0].x,e[1].y-e[0].y);if(R>0){let e=t/R;D.value=Math.max(1,D.value*e);let[n,r]=F(w.value,T.value);w.value=n,T.value=r,H()}R=t}}function V(e){L.delete(e.pointerId),R=0}function H(){cancelAnimationFrame(C),C=requestAnimationFrame(I)}async function U(){if(!S)return;let e=k*D.value,t=O.x+O.w/2+w.value,n=O.y+O.h/2+T.value,r=t-S.naturalWidth*e/2,i=n-S.naturalHeight*e/2,a=(O.x-r)/e,o=(O.y-i)/e,s=O.w/e,l=O.h/e,u=new OffscreenCanvas(d,p);u.getContext(`2d`).drawImage(S,a,o,s,l,0,0,d,p),c(`crop`,{blob:await u.convertToBlob({type:`image/jpeg`,quality:.92}),params:{natX:a,natY:o,natW:s,natH:l}})}let W=new ResizeObserver(M);return e(()=>{_.value&&W.observe(_.value),M(),S=new Image,S.onload=()=>{M(),N()},S.src=s.src}),i(()=>s.src,e=>{S&&(S.onload=()=>N(),S.src=e)}),a(()=>{W.disconnect(),cancelAnimationFrame(C)}),(e,t)=>(f(),h(`div`,{class:`crop-editor`,ref_key:`containerRef`,ref:_},[v(`canvas`,{ref_key:`canvasRef`,ref:y,class:`crop-editor__canvas`,onPointerdown:z,onPointermove:B,onPointerup:V,onPointercancel:V},null,544),n.deviceName?(f(),h(`div`,A,g(n.deviceName),1)):l(``,!0),v(`div`,j,[o(E,{variant:`primary`,class:`crop-editor__use-btn`,onClick:U},{default:x(()=>[...t[0]||=[u(` Use this crop `,-1)]]),_:1})])],512))}}),[[`__scopeId`,`data-v-ec2eb68c`]]),N=[{id:`seasonal`,label:`Seasonal`},{id:`holidays`,label:`Holidays`},{id:`fun`,label:`Fun`},{id:`family`,label:`Family`},{id:`nature`,label:`Nature`}],P=[{id:`sea-snow`,category:`seasonal`,label:`Snowflake`,emoji:`❄️`},{id:`sea-sun`,category:`seasonal`,label:`Sun`,emoji:`☀️`},{id:`sea-leaves`,category:`seasonal`,label:`Autumn`,emoji:`🍂`},{id:`sea-blossom`,category:`seasonal`,label:`Blossom`,emoji:`🌸`},{id:`sea-snowman`,category:`seasonal`,label:`Snowman`,emoji:`⛄`},{id:`hol-tree`,category:`holidays`,label:`Tree`,emoji:`🎄`},{id:`hol-gift`,category:`holidays`,label:`Gift`,emoji:`🎁`},{id:`hol-heart`,category:`holidays`,label:`Heart`,emoji:`❤️`},{id:`hol-party`,category:`holidays`,label:`Party`,emoji:`🎉`},{id:`hol-cake`,category:`holidays`,label:`Cake`,emoji:`🎂`},{id:`fun-star`,category:`fun`,label:`Star`,emoji:`⭐`},{id:`fun-rainbow`,category:`fun`,label:`Rainbow`,emoji:`🌈`},{id:`fun-balloon`,category:`fun`,label:`Balloon`,emoji:`🎈`},{id:`fun-sparkle`,category:`fun`,label:`Sparkles`,emoji:`✨`},{id:`fun-fire`,category:`fun`,label:`Fire`,emoji:`🔥`},{id:`fam-house`,category:`family`,label:`Home`,emoji:`🏠`},{id:`fam-paw`,category:`family`,label:`Paw`,emoji:`🐾`},{id:`fam-camera`,category:`family`,label:`Camera`,emoji:`📷`},{id:`fam-plane`,category:`family`,label:`Airplane`,emoji:`✈️`},{id:`fam-music`,category:`family`,label:`Music`,emoji:`🎵`},{id:`nat-tree`,category:`nature`,label:`Tree`,emoji:`🌲`},{id:`nat-flower`,category:`nature`,label:`Flower`,emoji:`🌺`},{id:`nat-bee`,category:`nature`,label:`Bee`,emoji:`🐝`},{id:`nat-fly`,category:`nature`,label:`Butterfly`,emoji:`🦋`},{id:`nat-moon`,category:`nature`,label:`Moon`,emoji:`🌙`}],F={class:`sticker-tray`},I={class:`sticker-tray__cats`,role:`tablist`},L=[`onClick`],R={class:`sticker-tray__grid`,role:`tabpanel`},z=[`aria-label`,`onClick`],B={class:`sticker-tray__emoji`,"aria-hidden":`true`},V={class:`sticker-tray__label`},H=_(y({__name:`StickerTray`,props:{modelValue:{type:Boolean}},emits:[`update:modelValue`,`pick`],setup(e){let r=t(`seasonal`),i=p(()=>P.filter(e=>e.category===r.value));return(t,a)=>(f(),s(O,{"model-value":e.modelValue,label:`Add sticker`,"onUpdate:modelValue":a[0]||=e=>t.$emit(`update:modelValue`,e)},{default:x(()=>[v(`div`,F,[v(`div`,I,[(f(!0),h(m,null,d(n(N),e=>(f(),h(`button`,{key:e.id,type:`button`,role:`tab`,class:c([`sticker-tray__cat`,{"sticker-tray__cat--active":r.value===e.id}]),onClick:t=>r.value=e.id},g(e.label),11,L))),128))]),v(`div`,R,[(f(!0),h(m,null,d(i.value,e=>(f(),h(`button`,{key:e.id,type:`button`,class:`sticker-tray__item`,"aria-label":e.label,onClick:n=>t.$emit(`pick`,e.id)},[v(`span`,B,g(e.emoji),1),v(`span`,V,g(e.label),1)],8,z))),128))])])]),_:1},8,[`model-value`]))}}),[[`__scopeId`,`data-v-7eada75b`]]),U={class:`sticker-canvas__bar`},W=52,G=_(y({__name:`StickerCanvas`,props:{croppedUrl:{},orientation:{},stickers:{}},emits:[`add-sticker`,`update-sticker`,`remove-sticker`,`done`],setup(n,{emit:c}){let g=n,_=c,y=t(),S=t(),C=t(),w=t(),T=t(!1),D=t(null),O=t(375),k=t(225),A=g.orientation===`landscape`?1600/960:960/1600;function j(){if(!y.value)return;let{width:e,height:t}=y.value.getBoundingClientRect(),n=t-72;e/n>A?(k.value=n,O.value=n*A):(O.value=e,k.value=e/A),F()}let M=new ResizeObserver(j);e(()=>{y.value&&M.observe(y.value),j(),ne()}),a(()=>{M.disconnect(),re()});let N=t(null);function F(){let e=new Image;e.onload=()=>{N.value=e},e.src=g.croppedUrl}i(()=>g.croppedUrl,()=>F(),{immediate:!0});let I=p(()=>({width:O.value,height:k.value})),L=p(()=>({image:N.value,x:0,y:0,width:O.value,height:k.value})),R={enabledAnchors:[`top-left`,`top-right`,`bottom-left`,`bottom-right`],rotateEnabled:!0,borderStroke:`rgba(255,255,255,0.8)`,anchorFill:`#fff`,anchorSize:18,keepRatio:!0,boundBoxFunc:(e,t)=>t};function z(e){return{id:e.id,text:B(e.type),fontSize:W,fontFamily:`"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji",sans-serif`,x:e.x,y:e.y,scaleX:e.scale,scaleY:e.scale,rotation:e.rotation,draggable:!0,offsetX:W/2,offsetY:W/2}}function B(e){return P.find(t=>t.id===e)?.emoji??`⭐`}function V(e,t){t.cancelBubble=!0,D.value=e,b(()=>{let t=(w.value?.getNode())?.findOne(`#${e}`),n=C.value?.getNode();t&&n&&n.nodes([t])})}function G(e){e.target===e.target.getStage()&&(D.value=null,C.value?.getNode()?.nodes([]))}function K(){D.value&&(_(`remove-sticker`,D.value),D.value=null,C.value?.getNode()?.nodes([]))}function q(e,t){_(`update-sticker`,e,{x:t.target.x(),y:t.target.y()})}function J(e,t){_(`update-sticker`,e,{x:t.target.x(),y:t.target.y(),scale:t.target.scaleX(),rotation:t.target.rotation()})}function ee(e){let t={id:`${e}-${Date.now()}`,type:e,x:O.value/2,y:k.value/2,scale:1,rotation:0};_(`add-sticker`,t),T.value=!1,b(()=>V(t.id,{cancelBubble:!1}))}let Y=0,X=1;function Z(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function Q(e){e.touches.length!==2||!D.value||(Y=Z(e.touches),X=g.stickers.find(e=>e.id===D.value)?.scale??1)}function $(e){if(e.touches.length!==2||!D.value||Y===0)return;e.preventDefault();let t=Math.max(.2,Math.min(6,X*(Z(e.touches)/Y)));_(`update-sticker`,D.value,{scale:t})}function te(){Y=0,X=1}function ne(){let e=y.value;e&&(e.addEventListener(`touchstart`,Q,{passive:!0}),e.addEventListener(`touchmove`,$,{passive:!1}),e.addEventListener(`touchend`,te,{passive:!0}))}function re(){let e=y.value;e&&(e.removeEventListener(`touchstart`,Q),e.removeEventListener(`touchmove`,$),e.removeEventListener(`touchend`,te))}async function ie(){D.value=null,C.value?.getNode()?.nodes([]),await b();let e=S.value?.getNode();if(!e)return;let t=(g.orientation===`landscape`?1600:960)/O.value,n=await e.toBlob({pixelRatio:t,mimeType:`image/jpeg`,quality:.92});n&&_(`done`,n)}return(e,t)=>{let i=r(`v-image`),a=r(`v-layer`),c=r(`v-text`),p=r(`v-transformer`),g=r(`v-stage`);return f(),h(`div`,{class:`sticker-canvas`,ref_key:`containerRef`,ref:y},[o(g,{ref_key:`stageRef`,ref:S,config:I.value,onClick:G,onTap:G},{default:x(()=>[o(a,null,{default:x(()=>[o(i,{config:L.value},null,8,[`config`])]),_:1}),o(a,{ref_key:`stickerLayerRef`,ref:w},{default:x(()=>[(f(!0),h(m,null,d(n.stickers,e=>(f(),s(c,{key:e.id,config:z(e),onClick:t=>V(e.id,t),onTap:t=>V(e.id,t),onDragend:t=>q(e.id,t),onTransformend:t=>J(e.id,t)},null,8,[`config`,`onClick`,`onTap`,`onDragend`,`onTransformend`]))),128)),o(p,{ref_key:`transformerRef`,ref:C,config:R},null,512)]),_:1},512)]),_:1},8,[`config`]),D.value?(f(),h(`button`,{key:0,class:`sticker-canvas__delete`,type:`button`,"aria-label":`Remove sticker`,onClick:K},[...t[2]||=[v(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"aria-hidden":`true`},[v(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),v(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})],-1)]])):l(``,!0),v(`div`,U,[v(`button`,{class:`sticker-canvas__add-btn`,type:`button`,onClick:t[0]||=e=>T.value=!0},[...t[3]||=[v(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"aria-hidden":`true`},[v(`circle`,{cx:`12`,cy:`12`,r:`10`}),v(`line`,{x1:`12`,y1:`8`,x2:`12`,y2:`16`}),v(`line`,{x1:`8`,y1:`12`,x2:`16`,y2:`12`})],-1),u(` Add sticker `,-1)]]),o(E,{variant:`primary`,class:`sticker-canvas__next-btn`,onClick:ie},{default:x(()=>[...t[4]||=[u(`Next`,-1)]]),_:1})]),o(H,{modelValue:T.value,"onUpdate:modelValue":t[1]||=e=>T.value=e,onPick:ee},null,8,[`modelValue`])],512)}}}),[[`__scopeId`,`data-v-fb52db70`]]),K={class:`upload-view`},q={class:`upload-view__header`},J=[`aria-label`],ee={key:0,width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"aria-hidden":`true`},Y={key:1,width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"aria-hidden":`true`},X={class:`upload-view__step-label`},Z={key:2,class:`upload-view__done`},Q={class:`upload-view__done-title`},$=_(y({__name:`UploadView`,setup(r){let i=w(),a=D(),c=T(),d=S(),m=C(),_=t(`crop`),y=t(!1),b=t(!1),O=null,A=p(()=>a.editingImageId!==null);e(async()=>{if(await c.fetchDevices(),!a.originalFile){i.replace(`/`);return}_.value=`crop`});let j=p(()=>a.contextDeviceId?c.devices.find(e=>e.id===a.contextDeviceId):c.devices[0]),N=p(()=>j.value?.orientation??`landscape`),P=p(()=>j.value?.name),F=p(()=>_.value===`crop`?A.value?`Edit crop`:`Crop photo`:_.value===`stickers`?`Add stickers`:A.value?`Updated`:`Added`);function I({blob:e,params:t}){a.setCrop(e,t),_.value=`stickers`}function L(){a.croppedBlob&&(O=a.croppedBlob,A.value?B():b.value=!0)}function R(e){O=e,A.value?B():b.value=!0}function z(){if(_.value===`crop`){a.cleanup(),i.replace(`/library`);return}_.value===`stickers`&&(_.value=`crop`)}async function B(){if(O){y.value=!0;try{let e=new File([O],`photo.jpg`,{type:`image/jpeg`});if(A.value){await d.reprocessImage(a.editingImageId,e,{cropParams:a.cropParams??void 0,stickerState:a.stickers}),b.value=!1,_.value=`done`;return}let t=await d.uploadImage(e,{original:a.originalFile??void 0,cropParams:a.cropParams??void 0,stickerState:a.stickers});await Promise.all(a.selectedDeviceIds.map(e=>d.setApproval(t.id,e,!0))),b.value=!1,_.value=`done`}catch(e){m.show(e instanceof Error?e.message:`Upload failed`,`error`)}finally{y.value=!1}}}function V(){a.cleanup(),i.replace(`/library`)}return(e,t)=>(f(),h(`div`,K,[v(`header`,q,[_.value===`done`?l(``,!0):(f(),h(`button`,{key:0,class:`upload-view__back`,type:`button`,"aria-label":_.value===`crop`?`Cancel`:`Back`,onClick:z},[_.value===`crop`?(f(),h(`svg`,ee,[...t[2]||=[v(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`},null,-1),v(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`},null,-1)]])):(f(),h(`svg`,Y,[...t[3]||=[v(`polyline`,{points:`15 18 9 12 15 6`},null,-1)]]))],8,J)),v(`span`,X,g(F.value),1),_.value===`stickers`?(f(),h(`button`,{key:1,class:`upload-view__skip`,type:`button`,onClick:L},`Skip`)):l(``,!0)]),_.value===`crop`&&n(a).originalUrl?(f(),s(M,{key:0,src:n(a).originalUrl,orientation:N.value,"device-name":P.value,"initial-params":n(a).cropParams,class:`upload-view__stage`,onCrop:I},null,8,[`src`,`orientation`,`device-name`,`initial-params`])):_.value===`stickers`&&n(a).croppedUrl?(f(),s(G,{key:1,"cropped-url":n(a).croppedUrl,orientation:N.value,stickers:n(a).stickers,class:`upload-view__stage`,onAddSticker:n(a).addSticker,onUpdateSticker:n(a).updateSticker,onRemoveSticker:n(a).removeSticker,onDone:R},null,8,[`cropped-url`,`orientation`,`stickers`,`onAddSticker`,`onUpdateSticker`,`onRemoveSticker`])):_.value===`done`?(f(),h(`div`,Z,[t[5]||=v(`div`,{class:`upload-view__done-icon`,"aria-hidden":`true`},`🎉`,-1),v(`p`,Q,g(A.value?`Photo updated!`:`Photo added!`),1),t[6]||=v(`p`,{class:`upload-view__done-sub`},`It'll appear on your frame at the next update.`,-1),o(E,{variant:`primary`,class:`upload-view__done-btn`,onClick:V},{default:x(()=>[...t[4]||=[u(`Done`,-1)]]),_:1})])):l(``,!0),A.value?l(``,!0):(f(),s(k,{key:3,modelValue:b.value,"onUpdate:modelValue":t[0]||=e=>b.value=e,devices:n(c).devices,selected:n(a).selectedDeviceIds,uploading:y.value,"onUpdate:selected":t[1]||=e=>n(a).selectedDeviceIds=e,onConfirm:B},null,8,[`modelValue`,`devices`,`selected`,`uploading`]))]))}}),[[`__scopeId`,`data-v-fca2e263`]]);export{$ as default}; \ No newline at end of file diff --git a/public/build/assets/index-C0Yc8pEe.js b/public/build/assets/index-CmXd-se5.js similarity index 95% rename from public/build/assets/index-C0Yc8pEe.js rename to public/build/assets/index-CmXd-se5.js index 354ce95..0bb87c2 100644 --- a/public/build/assets/index-C0Yc8pEe.js +++ b/public/build/assets/index-CmXd-se5.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/HomeView-Ub9_hNNK.js","assets/_plugin-vue_export-helper-DVo1OUMD.js","assets/BaseBottomSheet-BODCttr7.js","assets/BaseBottomSheet-MPNarQ8K.css","assets/HomeView-B0-v2mFc.css","assets/LibraryView-Cwch0dhw.js","assets/DevicePicker-Dz05cPit.js","assets/DevicePicker-B4xrdE2f.css","assets/LibraryView-25yn4n9v.css","assets/UploadView-Uqz760jq.js","assets/UploadView-CJEQVpkq.css","assets/SettingsView-Dbe21KxS.js","assets/SettingsView-CWIIisVW.css"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/HomeView-Bfoik_wA.js","assets/_plugin-vue_export-helper-DVo1OUMD.js","assets/BaseBottomSheet-cgSeW-RK.js","assets/BaseBottomSheet-MPNarQ8K.css","assets/HomeView-B0-v2mFc.css","assets/LibraryView-Cb_nRiKt.js","assets/DevicePicker-DreFDlLU.js","assets/DevicePicker-B4xrdE2f.css","assets/LibraryView-25yn4n9v.css","assets/UploadView-D4bnhltO.js","assets/UploadView-BMrcHXkZ.css","assets/SettingsView-B067l1Rb.js","assets/SettingsView-CWIIisVW.css"])))=>i.map(i=>d[i]); import{$ as e,A as t,D as n,E as r,F as i,G as a,H as o,I as s,J as c,K as l,L as u,N as d,O as f,Q as p,R as m,S as h,T as g,U as _,V as v,W as y,X as b,Y as x,Z as S,_ as C,a as w,at as ee,b as T,c as te,ct as E,d as ne,dt as re,et as D,f as O,g as ie,i as k,it as A,j,k as ae,l as M,lt as oe,m as se,mt as ce,n as le,nt as ue,o as de,ot as N,p as fe,pt as pe,q as me,r as he,rt as ge,st as _e,t as ve,tt as ye,u as be,ut as xe,v as Se,w as Ce,x as we,y as Te,z as Ee}from"./_plugin-vue_export-helper-DVo1OUMD.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var De=void 0,Oe=typeof window<`u`&&window.trustedTypes;if(Oe)try{De=Oe.createPolicy(`vue`,{createHTML:e=>e})}catch{}var ke=De?e=>De.createHTML(e):e=>e,Ae=`http://www.w3.org/2000/svg`,je=`http://www.w3.org/1998/Math/MathML`,Me=typeof document<`u`?document:null,Ne=Me&&Me.createElement(`template`),Pe={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{let t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{let i=t===`svg`?Me.createElementNS(Ae,e):t===`mathml`?Me.createElementNS(je,e):n?Me.createElement(e,{is:n}):Me.createElement(e);return e===`select`&&r&&r.multiple!=null&&i.setAttribute(`multiple`,r.multiple),i},createText:e=>Me.createTextNode(e),createComment:e=>Me.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Me.querySelector(e),setScopeId(e,t){e.setAttribute(t,``)},insertStaticContent(e,t,n,r,i,a){let o=n?n.previousSibling:t.lastChild;if(i&&(i===a||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===a||!(i=i.nextSibling)););else{Ne.innerHTML=ke(r===`svg`?`${e}`:r===`mathml`?`${e}`:e);let i=Ne.content;if(r===`svg`||r===`mathml`){let e=i.firstChild;for(;e.firstChild;)i.appendChild(e.firstChild);i.removeChild(e)}t.insertBefore(i,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Fe=`transition`,Ie=`animation`,Le=Symbol(`_vtc`),Re={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},ze=x({},w,Re),Be=(e=>(e.displayName=`Transition`,e.props=ze,e))((e,{slots:t})=>we(k,Ue(e),t)),Ve=(t,n=[])=>{e(t)?t.forEach(e=>e(...n)):t&&t(...n)},He=t=>t?e(t)?t.some(e=>e.length>1):t.length>1:!1;function Ue(e){let t={};for(let n in e)n in Re||(t[n]=e[n]);if(e.css===!1)return t;let{name:n=`v`,type:r,duration:i,enterFromClass:a=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:s=`${n}-enter-to`,appearFromClass:c=a,appearActiveClass:l=o,appearToClass:u=s,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:f=`${n}-leave-active`,leaveToClass:p=`${n}-leave-to`}=e,m=We(i),h=m&&m[0],g=m&&m[1],{onBeforeEnter:_,onEnter:v,onEnterCancelled:y,onLeave:b,onLeaveCancelled:S,onBeforeAppear:C=_,onAppear:w=v,onAppearCancelled:ee=y}=t,T=(e,t,n,r)=>{e._enterCancelled=r,qe(e,t?u:s),qe(e,t?l:o),n&&n()},te=(e,t)=>{e._isLeaving=!1,qe(e,d),qe(e,p),qe(e,f),t&&t()},E=e=>(t,n)=>{let i=e?w:v,o=()=>T(t,e,n);Ve(i,[t,o]),Je(()=>{qe(t,e?c:a),Ke(t,e?u:s),He(i)||Xe(t,r,h,o)})};return x(t,{onBeforeEnter(e){Ve(_,[e]),Ke(e,a),Ke(e,o)},onBeforeAppear(e){Ve(C,[e]),Ke(e,c),Ke(e,l)},onEnter:E(!1),onAppear:E(!0),onLeave(e,t){e._isLeaving=!0;let n=()=>te(e,t);Ke(e,d),e._enterCancelled?(Ke(e,f),et(e)):(et(e),Ke(e,f)),Je(()=>{e._isLeaving&&(qe(e,d),Ke(e,p),He(b)||Xe(e,r,g,n))}),Ve(b,[e,n])},onEnterCancelled(e){T(e,!1,void 0,!0),Ve(y,[e])},onAppearCancelled(e){T(e,!0,void 0,!0),Ve(ee,[e])},onLeaveCancelled(e){te(e),Ve(S,[e])}})}function We(e){if(e==null)return null;if(ue(e))return[Ge(e.enter),Ge(e.leave)];{let t=Ge(e);return[t,t]}}function Ge(e){return ce(e)}function Ke(e,t){t.split(/\s+/).forEach(t=>t&&e.classList.add(t)),(e[Le]||(e[Le]=new Set)).add(t)}function qe(e,t){t.split(/\s+/).forEach(t=>t&&e.classList.remove(t));let n=e[Le];n&&(n.delete(t),n.size||(e[Le]=void 0))}function Je(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}var Ye=0;function Xe(e,t,n,r){let i=e._endId=++Ye,a=()=>{i===e._endId&&r()};if(n!=null)return setTimeout(a,n);let{type:o,timeout:s,propCount:c}=Ze(e,t);if(!o)return r();let l=o+`end`,u=0,d=()=>{e.removeEventListener(l,f),a()},f=t=>{t.target===e&&++u>=c&&d()};setTimeout(()=>{u(n[e]||``).split(`, `),i=r(`${Fe}Delay`),a=r(`${Fe}Duration`),o=Qe(i,a),s=r(`${Ie}Delay`),c=r(`${Ie}Duration`),l=Qe(s,c),u=null,d=0,f=0;t===Fe?o>0&&(u=Fe,d=o,f=a.length):t===Ie?l>0&&(u=Ie,d=l,f=c.length):(d=Math.max(o,l),u=d>0?o>l?Fe:Ie:null,f=u?u===Fe?a.length:c.length:0);let p=u===Fe&&/\b(?:transform|all)(?:,|$)/.test(r(`${Fe}Property`).toString());return{type:u,timeout:d,propCount:f,hasTransform:p}}function Qe(e,t){for(;e.length$e(t)+$e(e[n])))}function $e(e){return e===`auto`?0:Number(e.slice(0,-1).replace(`,`,`.`))*1e3}function et(e){return(e?e.ownerDocument:document).body.offsetHeight}function tt(e,t,n){let r=e[Le];r&&(t=(t?[t,...r]:[...r]).join(` `)),t==null?e.removeAttribute(`class`):n?e.setAttribute(`class`,t):e.className=t}var nt=Symbol(`_vod`),rt=Symbol(`_vsh`),it=Symbol(``),at=/(?:^|;)\s*display\s*:/;function ot(e,t,n){let r=e.style,i=N(n),a=!1;if(n&&!i){if(t)if(N(t))for(let e of t.split(`;`)){let t=e.slice(0,e.indexOf(`:`)).trim();n[t]??ct(r,t,``)}else for(let e in t)n[e]??ct(r,e,``);for(let i in n){i===`display`&&(a=!0);let o=n[i];o==null?ct(r,i,``):ft(e,i,!N(t)&&t?t[i]:void 0,o)||ct(r,i,o)}}else if(i){if(t!==n){let e=r[it];e&&(n+=`;`+e),r.cssText=n,a=at.test(n)}}else t&&e.removeAttribute(`style`);nt in e&&(e[nt]=a?r.display:``,e[rt]&&(r.display=`none`))}var st=/\s*!important$/;function ct(t,n,r){if(e(r))r.forEach(e=>ct(t,n,e));else if(r??=``,n.startsWith(`--`))t.setProperty(n,r);else{let e=dt(t,n);st.test(r)?t.setProperty(b(e),r.replace(st,``),`important`):t[e]=r}}var lt=[`Webkit`,`Moz`,`ms`],ut={};function dt(e,t){let n=ut[t];if(n)return n;let r=me(t);if(r!==`filter`&&r in e)return ut[t]=r;r=c(r);for(let n=0;nSt||=(Ct.then(()=>St=0),Date.now());function Tt(e,t){let n=e=>{if(!e._vts)e._vts=Date.now();else if(e._vts<=n.attached)return;te(Et(e,n.value),t,5,[e])};return n.value=e,n.attached=wt(),n}function Et(t,n){if(e(n)){let e=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{e.call(t),t._stopped=!0},n.map(e=>t=>!t._stopped&&e&&e(t))}else return n}var Dt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ot=(e,t,n,r,i,a)=>{let o=i===`svg`;t===`class`?tt(e,r,o):t===`style`?ot(e,n,r):ge(t)?ye(t)||yt(e,t,n,r,a):(t[0]===`.`?(t=t.slice(1),!0):t[0]===`^`?(t=t.slice(1),!1):kt(e,t,r,o))?(ht(e,t,r),!e.tagName.includes(`-`)&&(t===`value`||t===`checked`||t===`selected`)&&mt(e,t,r,o,a,t!==`value`)):e._isVueCE&&(At(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!N(r)))?ht(e,me(t),r,a,t):(t===`true-value`?e._trueValue=r:t===`false-value`&&(e._falseValue=r),mt(e,t,r,o))};function kt(e,t,n,r){if(r)return!!(t===`innerHTML`||t===`textContent`||t in e&&Dt(t)&&D(n));if(t===`spellcheck`||t===`draggable`||t===`translate`||t===`autocorrect`||t===`sandbox`&&e.tagName===`IFRAME`||t===`form`||t===`list`&&e.tagName===`INPUT`||t===`type`&&e.tagName===`TEXTAREA`)return!1;if(t===`width`||t===`height`){let t=e.tagName;if(t===`IMG`||t===`VIDEO`||t===`CANVAS`||t===`SOURCE`)return!1}return Dt(t)&&N(n)?!1:t in e}function At(e,t){let n=e._def.props;if(!n)return!1;let r=me(t);return Array.isArray(n)?n.some(e=>me(e)===r):Object.keys(n).some(e=>me(e)===r)}var jt=new WeakMap,Mt=new WeakMap,Nt=Symbol(`_moveCb`),Pt=Symbol(`_enterCb`),Ft=(e=>(delete e.props.mode,e))({name:`TransitionGroup`,props:x({},ze,{tag:String,moveClass:String}),setup(e,{slots:t}){let n=Te(),r=u(),o,c;return f(()=>{if(!o.length)return;let t=e.moveClass||`${e.name||`v`}-move`;if(!Bt(o[0].el,n.vnode.el,t)){o=[];return}o.forEach(It),o.forEach(Lt);let r=o.filter(Rt);et(n.vnode.el),r.forEach(e=>{let n=e.el,r=n.style;Ke(n,t),r.transform=r.webkitTransform=r.transitionDuration=``;let i=n[Nt]=e=>{e&&e.target!==n||(!e||e.propertyName.endsWith(`transform`))&&(n.removeEventListener(`transitionend`,i),n[Nt]=null,qe(n,t))};n.addEventListener(`transitionend`,i)}),o=[]}),()=>{let l=a(e),u=Ue(l),d=l.tag||de;if(o=[],c)for(let e=0;e{e.split(/\s+/).forEach(e=>e&&r.classList.remove(e))}),n.split(/\s+/).forEach(e=>e&&r.classList.add(e)),r.style.display=`none`;let a=t.nodeType===1?t:t.parentNode;a.appendChild(r);let{hasTransform:o}=Ze(r);return a.removeChild(r),o}var Vt=t=>{let n=t.props[`onUpdate:modelValue`]||!1;return e(n)?e=>p(n,e):n};function Ht(e){e.target.composing=!0}function Ut(e){let t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event(`input`)))}var Wt=Symbol(`_assign`);function Gt(e,t,n){return t&&(e=e.trim()),n&&(e=xe(e)),e}var Kt={created(e,{modifiers:{lazy:t,trim:n,number:r}},i){e[Wt]=Vt(i);let a=r||i.props&&i.props.type===`number`;gt(e,t?`change`:`input`,t=>{t.target.composing||e[Wt](Gt(e.value,n,a))}),(n||a)&>(e,`change`,()=>{e.value=Gt(e.value,n,a)}),t||(gt(e,`compositionstart`,Ht),gt(e,`compositionend`,Ut),gt(e,`change`,Ut))},mounted(e,{value:t}){e.value=t??``},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:i,number:a}},o){if(e[Wt]=Vt(o),e.composing)return;let s=(a||e.type===`number`)&&!/^0\d/.test(e.value)?xe(e.value):e.value,c=t??``;if(s===c)return;let l=e.getRootNode();(l instanceof Document||l instanceof ShadowRoot)&&l.activeElement===e&&e.type!==`range`&&(r&&t===n||i&&e.value.trim()===c)||(e.value=c)}},qt={deep:!0,created(e,{value:t,modifiers:{number:n}},r){let i=A(t);gt(e,`change`,()=>{let t=Array.prototype.filter.call(e.options,e=>e.selected).map(e=>n?xe(Yt(e)):Yt(e));e[Wt](e.multiple?i?new Set(t):t:t[0]),e._assigning=!0,Ce(()=>{e._assigning=!1})}),e[Wt]=Vt(r)},mounted(e,{value:t}){Jt(e,t)},beforeUpdate(e,t,n){e[Wt]=Vt(n)},updated(e,{value:t}){e._assigning||Jt(e,t)}};function Jt(t,n){let r=t.multiple,i=e(n);if(!(r&&!i&&!A(n))){for(let e=0,a=t.options.length;eString(e)===String(o)):a.selected=oe(n,o)>-1}else a.selected=n.has(o);else if(E(Yt(a),n)){t.selectedIndex!==e&&(t.selectedIndex=e);return}}!r&&t.selectedIndex!==-1&&(t.selectedIndex=-1)}}function Yt(e){return`_value`in e?e._value:e.value}var Xt=[`ctrl`,`shift`,`alt`,`meta`],Zt={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>`button`in e&&e.button!==0,middle:e=>`button`in e&&e.button!==1,right:e=>`button`in e&&e.button!==2,exact:(e,t)=>Xt.some(n=>e[`${n}Key`]&&!t.includes(n))},Qt=(e,t)=>{if(!e)return e;let n=e._withMods||={},r=t.join(`.`);return n[r]||(n[r]=((n,...r)=>{for(let e=0;e{let n=e._withKeys||={},r=t.join(`.`);return n[r]||(n[r]=(n=>{if(!(`key`in n))return;let r=b(n.key);if(t.some(e=>e===r||$t[e]===r))return e(n)}))},tn=x({patchProp:Ot},Pe),nn;function rn(){return nn||=se(tn)}var an=((...e)=>{let t=rn().createApp(...e),{mount:n}=t;return t.mount=e=>{let r=sn(e);if(!r)return;let i=t._component;!D(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent=``);let a=n(r,!1,on(r));return r instanceof Element&&(r.removeAttribute(`v-cloak`),r.setAttribute(`data-v-app`,``)),a},t});function on(e){if(e instanceof SVGElement)return`svg`;if(typeof MathMLElement==`function`&&e instanceof MathMLElement)return`mathml`}function sn(e){return N(e)?document.querySelector(e):e}var cn=Math.PI/180;function ln(){return typeof window<`u`&&({}.toString.call(window)===`[object Window]`||{}.toString.call(window)===`[object global]`)}var un=typeof global<`u`?global:typeof window<`u`?window:typeof WorkerGlobalScope<`u`?self:{},P={_global:un,version:`10.3.0`,isBrowser:ln(),isUnminified:/param/.test(function(e){}.toString()),dblClickWindow:400,getAngle(e){return P.angleDeg?e*cn:e},enableTrace:!1,pointerEventsEnabled:!0,autoDrawEnabled:!0,hitOnDragEnabled:!1,capturePointerEventsEnabled:!1,_mouseListenClick:!1,_touchListenClick:!1,_pointerListenClick:!1,_mouseInDblClickWindow:!1,_touchInDblClickWindow:!1,_pointerInDblClickWindow:!1,_mouseDblClickPointerId:null,_touchDblClickPointerId:null,_pointerDblClickPointerId:null,_renderBackend:`web`,legacyTextRendering:!1,pixelRatio:typeof window<`u`&&window.devicePixelRatio||1,dragDistance:3,angleDeg:!0,showWarnings:!0,dragButtons:[0,1],isDragging(){return P.DD.isDragging},isTransforming(){return P.Transformer?.isTransforming()??!1},isDragReady(){return!!P.DD.node},releaseCanvasOnDestroy:!0,document:un.document,_injectGlobal(e){un.Konva!==void 0&&console.error(`Several Konva instances detected. It is not recommended to use multiple Konva instances in the same environment.`),un.Konva=e}},F=e=>{P[e.prototype.getClassName()]=e};P._injectGlobal(P);var dn=`Konva.js unsupported environment. Looks like you are trying to use Konva.js in Node.js environment. because "document" object is undefined. @@ -13,4 +13,4 @@ or bash: npm install skia-canvas js: import "konva/skia-backend"; `,fn=()=>{if(typeof document>`u`)throw Error(dn)},pn=class e{constructor(e=[1,0,0,1,0,0]){this.dirty=!1,this.m=e&&e.slice()||[1,0,0,1,0,0]}reset(){this.m[0]=1,this.m[1]=0,this.m[2]=0,this.m[3]=1,this.m[4]=0,this.m[5]=0}copy(){return new e(this.m)}copyInto(e){e.m[0]=this.m[0],e.m[1]=this.m[1],e.m[2]=this.m[2],e.m[3]=this.m[3],e.m[4]=this.m[4],e.m[5]=this.m[5]}point(e){let t=this.m;return{x:t[0]*e.x+t[2]*e.y+t[4],y:t[1]*e.x+t[3]*e.y+t[5]}}translate(e,t){return this.m[4]+=this.m[0]*e+this.m[2]*t,this.m[5]+=this.m[1]*e+this.m[3]*t,this}scale(e,t){return this.m[0]*=e,this.m[1]*=e,this.m[2]*=t,this.m[3]*=t,this}rotate(e){let t=Math.cos(e),n=Math.sin(e),r=this.m[0]*t+this.m[2]*n,i=this.m[1]*t+this.m[3]*n,a=this.m[0]*-n+this.m[2]*t,o=this.m[1]*-n+this.m[3]*t;return this.m[0]=r,this.m[1]=i,this.m[2]=a,this.m[3]=o,this}getTranslation(){return{x:this.m[4],y:this.m[5]}}skew(e,t){let n=this.m[0]+this.m[2]*t,r=this.m[1]+this.m[3]*t,i=this.m[2]+this.m[0]*e,a=this.m[3]+this.m[1]*e;return this.m[0]=n,this.m[1]=r,this.m[2]=i,this.m[3]=a,this}multiply(e){let t=this.m[0]*e.m[0]+this.m[2]*e.m[1],n=this.m[1]*e.m[0]+this.m[3]*e.m[1],r=this.m[0]*e.m[2]+this.m[2]*e.m[3],i=this.m[1]*e.m[2]+this.m[3]*e.m[3],a=this.m[0]*e.m[4]+this.m[2]*e.m[5]+this.m[4],o=this.m[1]*e.m[4]+this.m[3]*e.m[5]+this.m[5];return this.m[0]=t,this.m[1]=n,this.m[2]=r,this.m[3]=i,this.m[4]=a,this.m[5]=o,this}invert(){let e=1/(this.m[0]*this.m[3]-this.m[1]*this.m[2]),t=this.m[3]*e,n=-this.m[1]*e,r=-this.m[2]*e,i=this.m[0]*e,a=e*(this.m[2]*this.m[5]-this.m[3]*this.m[4]),o=e*(this.m[1]*this.m[4]-this.m[0]*this.m[5]);return this.m[0]=t,this.m[1]=n,this.m[2]=r,this.m[3]=i,this.m[4]=a,this.m[5]=o,this}getMatrix(){return this.m}decompose(){let e=this.m[0],t=this.m[1],n=this.m[2],r=this.m[3],i=this.m[4],a=this.m[5],o=e*r-t*n,s={x:i,y:a,rotation:0,scaleX:0,scaleY:0,skewX:0,skewY:0};if(e!=0||t!=0){let i=Math.sqrt(e*e+t*t);s.rotation=t>0?Math.acos(e/i):-Math.acos(e/i),s.scaleX=i,s.scaleY=o/i,s.skewX=(e*n+t*r)/o,s.skewY=0}else if(n!=0||r!=0){let i=Math.sqrt(n*n+r*r);s.rotation=Math.PI/2-(r>0?Math.acos(-n/i):-Math.acos(n/i)),s.scaleX=o/i,s.scaleY=i,s.skewX=0,s.skewY=(e*n+t*r)/o}return s.rotation=I._getRotation(s.rotation),s}},mn=`[object Array]`,hn=`[object Number]`,gn=`[object String]`,_n=`[object Boolean]`,vn=Math.PI/180,yn=180/Math.PI,bn=`#`,xn=``,Sn=`0`,Cn=`Konva warning: `,wn=`Konva error: `,Tn=`rgb(`,En={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,132,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,255,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,203],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[119,128,144],slategrey:[119,128,144],snow:[255,255,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],transparent:[255,255,255,0],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,5]},Dn=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/,On=[],kn=null,An=typeof requestAnimationFrame<`u`&&requestAnimationFrame||function(e){setTimeout(e,16)},I={_isElement(e){return!!(e&&e.nodeType==1)},_isFunction(e){return!!(e&&e.constructor&&e.call&&e.apply)},_isPlainObject(e){return!!e&&e.constructor===Object},_isArray(e){return Object.prototype.toString.call(e)===mn},_isNumber(e){return Object.prototype.toString.call(e)===hn&&!isNaN(e)&&isFinite(e)},_isString(e){return Object.prototype.toString.call(e)===gn},_isBoolean(e){return Object.prototype.toString.call(e)===_n},isObject(e){return e instanceof Object},isValidSelector(e){if(typeof e!=`string`)return!1;let t=e[0];return t===`#`||t===`.`||t===t.toUpperCase()},_sign(e){return e===0||e>0?1:-1},requestAnimFrame(e){On.push(e),On.length===1&&An(function(){let e=On;On=[],e.forEach(function(e){e()})})},createCanvasElement(){fn();let e=document.createElement(`canvas`);try{e.style=e.style||{}}catch{}return e},createImageElement(){return fn(),document.createElement(`img`)},_isInDocument(e){for(;e=e.parentNode;)if(e==document)return!0;return!1},_urlToImage(e,t){let n=I.createImageElement();n.onload=function(){t(n)},n.src=e},_rgbToHex(e,t,n){return((1<<24)+(e<<16)+(t<<8)+n).toString(16).slice(1)},_hexToRgb(e){e=e.replace(bn,xn);let t=parseInt(e,16);return{r:t>>16&255,g:t>>8&255,b:t&255}},getRandomColor(){let e=(Math.random()*16777215<<0).toString(16);for(;e.length<6;)e=Sn+e;return bn+e},isCanvasFarblingActive(){if(kn!==null)return kn;if(typeof document>`u`)return kn=!1,!1;let e=this.createCanvasElement();e.width=10,e.height=10;let t=e.getContext(`2d`,{willReadFrequently:!0});t.clearRect(0,0,10,10),t.fillStyle=`#282828`,t.fillRect(0,0,10,10);let n=t.getImageData(0,0,10,10).data,r=!1;for(let e=0;e<100;e++)if(n[e*4]!==40||n[e*4+1]!==40||n[e*4+2]!==40||n[e*4+3]!==255){r=!0;break}return kn=r,this.releaseCanvas(e),kn},getHitColor(){let e=this.getRandomColor();return this.isCanvasFarblingActive()?this.getSnappedHexColor(e):e},getHitColorKey(e,t,n){return this.isCanvasFarblingActive()&&(e=Math.round(e/5)*5,t=Math.round(t/5)*5,n=Math.round(n/5)*5),bn+this._rgbToHex(e,t,n)},getSnappedHexColor(e){let t=this._hexToRgb(e);return bn+this._rgbToHex(Math.round(t.r/5)*5,Math.round(t.g/5)*5,Math.round(t.b/5)*5)},getRGB(e){let t;return e in En?(t=En[e],{r:t[0],g:t[1],b:t[2]}):e[0]===bn?this._hexToRgb(e.substring(1)):e.substr(0,4)===Tn?(t=Dn.exec(e.replace(/ /g,``)),{r:parseInt(t[1],10),g:parseInt(t[2],10),b:parseInt(t[3],10)}):{r:0,g:0,b:0}},colorToRGBA(e){return e||=`black`,I._namedColorToRBA(e)||I._hex3ColorToRGBA(e)||I._hex4ColorToRGBA(e)||I._hex6ColorToRGBA(e)||I._hex8ColorToRGBA(e)||I._rgbColorToRGBA(e)||I._rgbaColorToRGBA(e)||I._hslColorToRGBA(e)},_namedColorToRBA(e){let t=En[e.toLowerCase()];return t?{r:t[0],g:t[1],b:t[2],a:1}:null},_rgbColorToRGBA(e){if(e.indexOf(`rgb(`)===0){e=e.match(/rgb\(([^)]+)\)/)[1];let t=e.split(/ *, */).map(Number);return{r:t[0],g:t[1],b:t[2],a:1}}},_rgbaColorToRGBA(e){if(e.indexOf(`rgba(`)===0){e=e.match(/rgba\(([^)]+)\)/)[1];let t=e.split(/ *, */).map((e,t)=>e.slice(-1)===`%`?t===3?parseInt(e)/100:parseInt(e)/100*255:Number(e));return{r:t[0],g:t[1],b:t[2],a:t[3]}}},_hex8ColorToRGBA(e){if(e[0]===`#`&&e.length===9)return{r:parseInt(e.slice(1,3),16),g:parseInt(e.slice(3,5),16),b:parseInt(e.slice(5,7),16),a:parseInt(e.slice(7,9),16)/255}},_hex6ColorToRGBA(e){if(e[0]===`#`&&e.length===7)return{r:parseInt(e.slice(1,3),16),g:parseInt(e.slice(3,5),16),b:parseInt(e.slice(5,7),16),a:1}},_hex4ColorToRGBA(e){if(e[0]===`#`&&e.length===5)return{r:parseInt(e[1]+e[1],16),g:parseInt(e[2]+e[2],16),b:parseInt(e[3]+e[3],16),a:parseInt(e[4]+e[4],16)/255}},_hex3ColorToRGBA(e){if(e[0]===`#`&&e.length===4)return{r:parseInt(e[1]+e[1],16),g:parseInt(e[2]+e[2],16),b:parseInt(e[3]+e[3],16),a:1}},_hslColorToRGBA(e){if(/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.test(e)){let[t,...n]=/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(e),r=Number(n[0])/360,i=Number(n[1])/100,a=Number(n[2])/100,o,s,c;if(i===0)return c=a*255,{r:Math.round(c),g:Math.round(c),b:Math.round(c),a:1};o=a<.5?a*(1+i):a+i-a*i;let l=2*a-o,u=[0,0,0];for(let e=0;e<3;e++)s=r+1/3*-(e-1),s<0&&s++,s>1&&s--,c=6*s<1?l+(o-l)*6*s:2*s<1?o:3*s<2?l+(o-l)*(2/3-s)*6:l,u[e]=c*255;return{r:Math.round(u[0]),g:Math.round(u[1]),b:Math.round(u[2]),a:1}}},haveIntersection(e,t){return!(t.x>e.x+e.width||t.x+t.widthe.y+e.height||t.y+t.height1?(o=n,s=r,c=(n-i)*(n-i)+(r-a)*(r-a)):(o=e+u*(n-e),s=t+u*(r-t),c=(o-i)*(o-i)+(s-a)*(s-a))}return[o,s,c]},_getProjectionToLine(e,t,n){let r=I.cloneObject(e),i=Number.MAX_VALUE;return t.forEach(function(a,o){if(!n&&o===t.length-1)return;let s=t[(o+1)%t.length],c=I._getProjectionToSegment(a.x,a.y,s.x,s.y,e.x,e.y),l=c[0],u=c[1],d=c[2];dt.length){let n=t;t=e,e=n}for(let t=0;t{e.width=0,e.height=0})},drawRoundedRectPath(e,t,n,r){let i=t<0?t:0,a=n<0?n:0;t=Math.abs(t),n=Math.abs(n);let o=0,s=0,c=0,l=0;typeof r==`number`?o=s=c=l=Math.min(r,t/2,n/2):(o=Math.min(r[0]||0,t/2,n/2),s=Math.min(r[1]||0,t/2,n/2),l=Math.min(r[2]||0,t/2,n/2),c=Math.min(r[3]||0,t/2,n/2)),e.moveTo(i+o,a),e.lineTo(i+t-s,a),e.arc(i+t-s,a+s,s,Math.PI*3/2,0,!1),e.lineTo(i+t,a+n-l),e.arc(i+t-l,a+n-l,l,0,Math.PI/2,!1),e.lineTo(i+c,a+n),e.arc(i+c,a+n-c,c,Math.PI/2,Math.PI,!1),e.lineTo(i,a+o),e.arc(i+o,a+o,o,Math.PI,Math.PI*3/2,!1)},drawRoundedPolygonPath(e,t,n,r,i){r=Math.abs(r);for(let a=0;atypeof e==`number`?Math.floor(e):e)),i+=Nn+c.join(Mn)+Pn)):(i+=o.property,e||(i+=zn+o.val)),i+=Ln;return i}clearTrace(){this.traceArr=[]}_trace(e){let t=this.traceArr,n;t.push(e),n=t.length,n>=Hn&&t.shift()}reset(){let e=this.getCanvas().getPixelRatio();this.setTransform(1*e,0,0,1*e,0,0)}getCanvas(){return this.canvas}clear(e){let t=this.getCanvas();e?this.clearRect(e.x||0,e.y||0,e.width||0,e.height||0):this.clearRect(0,0,t.getWidth()/t.pixelRatio,t.getHeight()/t.pixelRatio)}_applyLineCap(e){let t=e.attrs.lineCap;t&&this.setAttr(`lineCap`,t)}_applyOpacity(e){let t=e.getAbsoluteOpacity();t!==1&&this.setAttr(`globalAlpha`,t)}_applyLineJoin(e){let t=e.attrs.lineJoin;t&&this.setAttr(`lineJoin`,t)}_applyMiterLimit(e){let t=e.attrs.miterLimit;t!=null&&this.setAttr(`miterLimit`,t)}setAttr(e,t){this._context[e]=t}arc(e,t,n,r,i,a){this._context.arc(e,t,n,r,i,a)}arcTo(e,t,n,r,i){this._context.arcTo(e,t,n,r,i)}beginPath(){this._context.beginPath()}bezierCurveTo(e,t,n,r,i,a){this._context.bezierCurveTo(e,t,n,r,i,a)}clearRect(e,t,n,r){this._context.clearRect(e,t,n,r)}clip(...e){this._context.clip.apply(this._context,e)}closePath(){this._context.closePath()}createImageData(e,t){let n=arguments;if(n.length===2)return this._context.createImageData(e,t);if(n.length===1)return this._context.createImageData(e)}createLinearGradient(e,t,n,r){return this._context.createLinearGradient(e,t,n,r)}createPattern(e,t){return this._context.createPattern(e,t)}createRadialGradient(e,t,n,r,i,a){return this._context.createRadialGradient(e,t,n,r,i,a)}drawImage(e,t,n,r,i,a,o,s,c){let l=arguments,u=this._context;l.length===3?u.drawImage(e,t,n):l.length===5?u.drawImage(e,t,n,r,i):l.length===9&&u.drawImage(e,t,n,r,i,a,o,s,c)}ellipse(e,t,n,r,i,a,o,s){this._context.ellipse(e,t,n,r,i,a,o,s)}isPointInPath(e,t,n,r){return n?this._context.isPointInPath(n,e,t,r):this._context.isPointInPath(e,t,r)}fill(...e){this._context.fill.apply(this._context,e)}fillRect(e,t,n,r){this._context.fillRect(e,t,n,r)}strokeRect(e,t,n,r){this._context.strokeRect(e,t,n,r)}fillText(e,t,n,r){r?this._context.fillText(e,t,n,r):this._context.fillText(e,t,n)}measureText(e){return this._context.measureText(e)}getImageData(e,t,n,r){return this._context.getImageData(e,t,n,r)}lineTo(e,t){this._context.lineTo(e,t)}moveTo(e,t){this._context.moveTo(e,t)}rect(e,t,n,r){this._context.rect(e,t,n,r)}roundRect(e,t,n,r,i){this._context.roundRect(e,t,n,r,i)}putImageData(e,t,n){this._context.putImageData(e,t,n)}quadraticCurveTo(e,t,n,r){this._context.quadraticCurveTo(e,t,n,r)}restore(){this._context.restore()}rotate(e){this._context.rotate(e)}save(){this._context.save()}scale(e,t){this._context.scale(e,t)}setLineDash(e){this._context.setLineDash?this._context.setLineDash(e):`mozDash`in this._context?this._context.mozDash=e:`webkitLineDash`in this._context&&(this._context.webkitLineDash=e)}getLineDash(){return this._context.getLineDash()}setTransform(e,t,n,r,i,a){this._context.setTransform(e,t,n,r,i,a)}stroke(e){e?this._context.stroke(e):this._context.stroke()}strokeText(e,t,n,r){this._context.strokeText(e,t,n,r)}transform(e,t,n,r,i,a){this._context.transform(e,t,n,r,i,a)}translate(e,t){this._context.translate(e,t)}_enableTrace(){let e=this,t=Bn.length,n=this.setAttr,r,i,a=function(t){let n=e[t],r;e[t]=function(){return i=jn(Array.prototype.slice.call(arguments,0)),r=n.apply(e,arguments),e._trace({method:t,args:i}),r}};for(r=0;r{t.dragStatus===`dragging`&&(e=!0)}),e},justDragged:!1,get node(){let e;return L._dragElements.forEach(t=>{e=t.node}),e},_dragElements:new Map,_drag(e){let t=[];L._dragElements.forEach((n,r)=>{let{node:i}=n,a=i.getStage();a.setPointersPositions(e),n.pointerId===void 0&&(n.pointerId=I._getFirstPointerId(e));let o=a._changedPointerPositions.find(e=>e.id===n.pointerId);if(o){if(n.dragStatus!==`dragging`){let t=i.dragDistance();if(Math.max(Math.abs(o.x-n.startPointerPos.x),Math.abs(o.y-n.startPointerPos.y)){t.getStage()&&t.fire(`dragmove`,{type:`dragmove`,target:t,evt:e},!0)})},_endDragBefore(e){let t=[];L._dragElements.forEach(n=>{let{node:r}=n,i=r.getStage();if(e&&i.setPointersPositions(e),!i._changedPointerPositions.find(e=>e.id===n.pointerId))return;(n.dragStatus===`dragging`||n.dragStatus===`stopped`)&&(L.justDragged=!0,P._mouseListenClick=!1,P._touchListenClick=!1,P._pointerListenClick=!1,n.dragStatus=`stopped`);let a=n.node.getLayer()||n.node instanceof P.Stage&&n.node;a&&t.indexOf(a)===-1&&t.push(a)}),t.forEach(e=>{e.draw()})},_endDragAfter(e){L._dragElements.forEach((t,n)=>{t.dragStatus===`stopped`&&t.node.fire(`dragend`,{type:`dragend`,target:t.node,evt:e},!0),t.dragStatus!==`dragging`&&L._dragElements.delete(n)})}};P.isBrowser&&(window.addEventListener(`mouseup`,L._endDragBefore,!0),window.addEventListener(`touchend`,L._endDragBefore,!0),window.addEventListener(`touchcancel`,L._endDragBefore,!0),window.addEventListener(`mousemove`,L._drag),window.addEventListener(`touchmove`,L._drag),window.addEventListener(`mouseup`,L._endDragAfter,!1),window.addEventListener(`touchend`,L._endDragAfter,!1),window.addEventListener(`touchcancel`,L._endDragAfter,!1));function $n(e){return I._isString(e)?`"`+e+`"`:Object.prototype.toString.call(e)===`[object Number]`||I._isBoolean(e)?e:Object.prototype.toString.call(e)}function er(e){return e>255?255:e<0?0:Math.round(e)}function R(){if(P.isUnminified)return function(e,t){return I._isNumber(e)||I.warn($n(e)+` is a not valid value for "`+t+`" attribute. The value should be a number.`),e}}function tr(e){if(P.isUnminified)return function(t,n){let r=I._isNumber(t),i=I._isArray(t)&&t.length==e;return!r&&!i&&I.warn($n(t)+` is a not valid value for "`+n+`" attribute. The value should be a number or Array(`+e+`)`),t}}function nr(){if(P.isUnminified)return function(e,t){return I._isNumber(e)||e===`auto`||I.warn($n(e)+` is a not valid value for "`+t+`" attribute. The value should be a number or "auto".`),e}}function rr(){if(P.isUnminified)return function(e,t){return I._isString(e)||I.warn($n(e)+` is a not valid value for "`+t+`" attribute. The value should be a string.`),e}}function ir(){if(P.isUnminified)return function(e,t){let n=I._isString(e),r=Object.prototype.toString.call(e)===`[object CanvasGradient]`||e&&e.addColorStop;return n||r||I.warn($n(e)+` is a not valid value for "`+t+`" attribute. The value should be a string or a native gradient.`),e}}function ar(){if(P.isUnminified)return function(e,t){let n=Int8Array?Object.getPrototypeOf(Int8Array):null;return n&&e instanceof n||(I._isArray(e)?e.forEach(function(e){I._isNumber(e)||I.warn(`"`+t+`" attribute has non numeric element `+e+`. Make sure that all elements are numbers.`)}):I.warn($n(e)+` is a not valid value for "`+t+`" attribute. The value should be a array of numbers.`)),e}}function or(){if(P.isUnminified)return function(e,t){return e===!0||e===!1||I.warn($n(e)+` is a not valid value for "`+t+`" attribute. The value should be a boolean.`),e}}function sr(e){if(P.isUnminified)return function(t,n){return t==null||I.isObject(t)||I.warn($n(t)+` is a not valid value for "`+n+`" attribute. The value should be an object with properties `+e),t}}var cr=`get`,lr=`set`,z={addGetterSetter(e,t,n,r,i){z.addGetter(e,t,n),z.addSetter(e,t,r,i),z.addOverloadedGetterSetter(e,t)},addGetter(e,t,n){let r=cr+I._capitalize(t);e.prototype[r]=e.prototype[r]||function(){let e=this.attrs[t];return e===void 0?n:e}},addSetter(e,t,n,r){let i=lr+I._capitalize(t);e.prototype[i]||z.overWriteSetter(e,t,n,r)},overWriteSetter(e,t,n,r){let i=lr+I._capitalize(t);e.prototype[i]=function(e){return n&&e!=null&&(e=n.call(this,e,t)),this._setAttr(t,e),r&&r.call(this),this}},addComponentsGetterSetter(e,t,n,r,i){let a=n.length,o=I._capitalize,s=cr+o(t),c=lr+o(t);e.prototype[s]=function(){let e={};for(let r=0;r{this._setAttr(t+o(e),void 0)}),this._fireChangeEvent(t,a,e),i&&i.call(this),this},z.addOverloadedGetterSetter(e,t)},addOverloadedGetterSetter(e,t){let n=I._capitalize(t),r=lr+n,i=cr+n;e.prototype[t]=function(){return arguments.length?(this[r](arguments[0]),this):this[i]()}},addDeprecatedGetterSetter(e,t,n,r){I.error(`Adding deprecated `+t);let i=cr+I._capitalize(t),a=t+` property is deprecated and will be removed soon. Look at Konva change log for more information.`;e.prototype[i]=function(){I.error(a);let e=this.attrs[t];return e===void 0?n:e},z.addSetter(e,t,r,function(){I.error(a)}),z.addOverloadedGetterSetter(e,t)},backCompat(e,t){I.each(t,function(t,n){let r=e.prototype[n],i=cr+I._capitalize(t),a=lr+I._capitalize(t);function o(){r.apply(this,arguments),I.error(`"`+t+`" method is deprecated and will be removed soon. Use ""`+n+`" instead.`)}e.prototype[t]=o,e.prototype[i]=o,e.prototype[a]=o})},afterSetFilter(){this._filterUpToDate=!1}};function ur(e){let t=/(\w+)\(([^)]+)\)/g,n;for(;(n=t.exec(e))!==null;){let[,e,t]=n;switch(e){case`blur`:{let e=parseFloat(t.replace(`px`,``));return function(t){this.blurRadius(e*.5);let n=P.Filters;n&&n.Blur&&n.Blur.call(this,t)}}case`brightness`:{let e=t.includes(`%`)?parseFloat(t)/100:parseFloat(t);return function(t){this.brightness(e);let n=P.Filters;n&&n.Brightness&&n.Brightness.call(this,t)}}case`contrast`:{let e=parseFloat(t);return function(t){let n=100*(Math.sqrt(e)-1);this.contrast(n);let r=P.Filters;r&&r.Contrast&&r.Contrast.call(this,t)}}case`grayscale`:return function(e){let t=P.Filters;t&&t.Grayscale&&t.Grayscale.call(this,e)};case`sepia`:return function(e){let t=P.Filters;t&&t.Sepia&&t.Sepia.call(this,e)};case`invert`:return function(e){let t=P.Filters;t&&t.Invert&&t.Invert.call(this,e)};default:I.warn(`CSS filter "${e}" is not supported in fallback mode. Consider using function filters for better compatibility.`);break}}return()=>{}}var dr=`absoluteOpacity`,fr=`allEventListeners`,pr=`absoluteTransform`,mr=`absoluteScale`,hr=`canvas`,gr=`Change`,_r=`children`,vr=`konva`,yr=`listening`,br=`mouseenter`,xr=`mouseleave`,Sr=`pointerenter`,Cr=`pointerleave`,wr=`touchenter`,Tr=`touchleave`,Er=`set`,Dr=`Shape`,Or=` `,kr=`stage`,Ar=`transform`,jr=`Stage`,Mr=`visible`,Nr=[`xChange.konva`,`yChange.konva`,`scaleXChange.konva`,`scaleYChange.konva`,`skewXChange.konva`,`skewYChange.konva`,`rotationChange.konva`,`offsetXChange.konva`,`offsetYChange.konva`,`transformsEnabledChange.konva`].join(Or),Pr=1,B=class e{constructor(e){this._id=Pr++,this.eventListeners={},this.attrs={},this.index=0,this._allEventListeners=null,this.parent=null,this._cache=new Map,this._attachedDepsListeners=new Map,this._lastPos=null,this._batchingTransformChange=!1,this._needClearTransformCache=!1,this._filterUpToDate=!1,this._isUnderCache=!1,this._dragEventId=null,this._shouldFireChangeEvents=!1,this.setAttrs(e),this._shouldFireChangeEvents=!0}hasChildren(){return!1}_clearCache(e){(e===Ar||e===pr)&&this._cache.get(e)?this._cache.get(e).dirty=!0:e?this._cache.delete(e):this._cache.clear()}_getCache(e,t){let n=this._cache.get(e);return(n===void 0||(e===Ar||e===pr)&&n.dirty===!0)&&(n=t.call(this),this._cache.set(e,n)),n}_calculate(e,t,n){if(!this._attachedDepsListeners.get(e)){let n=t.map(e=>e+`Change.konva`).join(Or);this.on(n,()=>{this._clearCache(e)}),this._attachedDepsListeners.set(e,!0)}return this._getCache(e,n)}_getCanvasCache(){return this._cache.get(hr)}_clearSelfAndDescendantCache(e){this._clearCache(e),e===pr&&this.fire(`absoluteTransformChange`)}clearCache(){if(this._cache.has(hr)){let{scene:e,filter:t,hit:n}=this._cache.get(hr);I.releaseCanvas(e._canvas,t._canvas,n._canvas),this._cache.delete(hr)}return this._clearSelfAndDescendantCache(),this._requestDraw(),this}cache(e){let t=e||{},n={};(t.x===void 0||t.y===void 0||t.width===void 0||t.height===void 0)&&(n=this.getClientRect({skipTransform:!0,relativeTo:this.getParent()||void 0}));let r=Math.ceil(t.width||n.width),i=Math.ceil(t.height||n.height),a=t.pixelRatio,o=t.x===void 0?Math.floor(n.x):t.x,s=t.y===void 0?Math.floor(n.y):t.y,c=t.offset||0,l=t.drawBorder||!1,u=t.hitCanvasPixelRatio||1;if(!r||!i){I.error(`Can not cache the node. Width or height of the node equals 0. Caching is skipped.`);return}let d=+(Math.abs(Math.round(n.x)-o)>.5),f=+(Math.abs(Math.round(n.y)-s)>.5);r+=c*2+d,i+=c*2+f,o-=c,s-=c;let p=new Zn({pixelRatio:a,width:r,height:i}),m=new Zn({pixelRatio:a,width:0,height:0,willReadFrequently:!0}),h=new Qn({pixelRatio:u,width:r,height:i}),g=p.getContext(),_=h.getContext(),v=new Zn({width:p.width/p.pixelRatio+Math.abs(o),height:p.height/p.pixelRatio+Math.abs(s),pixelRatio:p.pixelRatio}),y=v.getContext();return h.isCache=!0,p.isCache=!0,this._cache.delete(hr),this._filterUpToDate=!1,t.imageSmoothingEnabled===!1&&(p.getContext()._context.imageSmoothingEnabled=!1,m.getContext()._context.imageSmoothingEnabled=!1),g.save(),_.save(),y.save(),g.translate(-o,-s),_.translate(-o,-s),y.translate(-o,-s),v.x=o,v.y=s,this._isUnderCache=!0,this._clearSelfAndDescendantCache(dr),this._clearSelfAndDescendantCache(mr),this.drawScene(p,this,v),this.drawHit(h,this),this._isUnderCache=!1,g.restore(),_.restore(),l&&(g.save(),g.beginPath(),g.rect(0,0,r,i),g.closePath(),g.setAttr(`strokeStyle`,`red`),g.setAttr(`lineWidth`,5),g.stroke(),g.restore()),I.releaseCanvas(v._canvas),this._cache.set(hr,{scene:p,filter:m,hit:h,x:o,y:s}),this._requestDraw(),this}isCached(){return this._cache.has(hr)}getClientRect(e){throw Error(`abstract "getClientRect" method call`)}_transformedRect(e,t){let n=[{x:e.x,y:e.y},{x:e.x+e.width,y:e.y},{x:e.x+e.width,y:e.y+e.height},{x:e.x,y:e.y+e.height}],r=1/0,i=1/0,a=-1/0,o=-1/0,s=this.getAbsoluteTransform(t);return n.forEach(function(e){let t=s.point(e);r===void 0&&(r=a=t.x,i=o=t.y),r=Math.min(r,t.x),i=Math.min(i,t.y),a=Math.max(a,t.x),o=Math.max(o,t.y)}),{x:r,y:i,width:a-r,height:o-i}}_drawCachedSceneCanvas(e){e.save(),e._applyOpacity(this),e._applyGlobalCompositeOperation(this);let t=this._getCanvasCache();e.translate(t.x,t.y);let n=this._getCachedSceneCanvas(),r=n.pixelRatio;e.drawImage(n._canvas,0,0,n.width/r,n.height/r),e.restore()}_drawCachedHitCanvas(e){let t=this._getCanvasCache(),n=t.hit;e.save(),e.translate(t.x,t.y),e.drawImage(n._canvas,0,0,n.width/n.pixelRatio,n.height/n.pixelRatio),e.restore()}_getCachedSceneCanvas(){let e=this.filters(),t=this._getCanvasCache(),n=t.scene,r=t.filter,i=r.getContext(),a,o,s,c;if(!e||e.length===0)return n;if(this._filterUpToDate)return r;let l=!0;for(let t=0;t{this.isAncestorOf(e.node)&&L._dragElements.delete(t)}),this._remove(),this}_clearCaches(){this._clearSelfAndDescendantCache(pr),this._clearSelfAndDescendantCache(dr),this._clearSelfAndDescendantCache(mr),this._clearSelfAndDescendantCache(kr),this._clearSelfAndDescendantCache(Mr),this._clearSelfAndDescendantCache(yr)}_remove(){this._clearCaches();let e=this.getParent();e&&e.children&&(e.children.splice(this.index,1),e._setChildrenIndices(),this.parent=null)}destroy(){return this.remove(),this.clearCache(),this}getAttr(e){let t=`get`+I._capitalize(e);return I._isFunction(this[t])?this[t]():this.attrs[e]}getAncestors(){let e=this.getParent(),t=[];for(;e;)t.push(e),e=e.getParent();return t}getAttrs(){return this.attrs||{}}setAttrs(e){return this._batchTransformChanges(()=>{let t,n;if(!e)return this;for(t in e)t!==_r&&(n=Er+I._capitalize(t),I._isFunction(this[n])?this[n](e[t]):this._setAttr(t,e[t]))}),this}isListening(){return this._getCache(yr,this._isListening)}_isListening(e){if(!this.listening())return!1;let t=this.getParent();return t&&t!==e&&this!==e?t._isListening(e):!0}isVisible(){return this._getCache(Mr,this._isVisible)}_isVisible(e){if(!this.visible())return!1;let t=this.getParent();return t&&t!==e&&this!==e?t._isVisible(e):!0}shouldDrawHit(e,t=!1){if(e)return this._isVisible(e)&&this._isListening(e);let n=this.getLayer(),r=!1;L._dragElements.forEach(e=>{e.dragStatus===`dragging`&&(e.node.nodeType===`Stage`||e.node.getLayer()===n)&&(r=!0)});let i=!t&&!P.hitOnDragEnabled&&(r||P.isTransforming());return this.isListening()&&this.isVisible()&&!i}show(){return this.visible(!0),this}hide(){return this.visible(!1),this}getZIndex(){return this.index||0}getAbsoluteZIndex(){let e=this.getDepth(),t=this,n=0,r,i,a,o;function s(c){for(r=[],i=c.length,a=0;a0&&r[0].getDepth()<=e&&s(r)}let c=this.getStage();return t.nodeType!==jr&&c&&s(c.getChildren()),n}getDepth(){let e=0,t=this.parent;for(;t;)e++,t=t.parent;return e}_batchTransformChanges(e){this._batchingTransformChange=!0,e(),this._batchingTransformChange=!1,this._needClearTransformCache&&(this._clearCache(Ar),this._clearSelfAndDescendantCache(pr)),this._needClearTransformCache=!1}setPosition(e){return this._batchTransformChanges(()=>{this.x(e.x),this.y(e.y)}),this}getPosition(){return{x:this.x(),y:this.y()}}getRelativePointerPosition(){let e=this.getStage();if(!e)return null;let t=e.getPointerPosition();if(!t)return null;let n=this.getAbsoluteTransform().copy();return n.invert(),n.point(t)}getAbsolutePosition(e){let t=!1,n=this.parent;for(;n;){if(n.isCached()){t=!0;break}n=n.parent}t&&!e&&(e=!0);let r=this.getAbsoluteTransform(e).getMatrix(),i=new pn,a=this.offset();return i.m=r.slice(),i.translate(a.x,a.y),i.getTranslation()}setAbsolutePosition(e){let{x:t,y:n,...r}=this._clearTransform();this.attrs.x=t,this.attrs.y=n,this._clearCache(Ar);let i=this._getAbsoluteTransform().copy();return i.invert(),i.translate(e.x,e.y),e={x:this.attrs.x+i.getTranslation().x,y:this.attrs.y+i.getTranslation().y},this._setTransform(r),this.setPosition({x:e.x,y:e.y}),this._clearCache(Ar),this._clearSelfAndDescendantCache(pr),this}_setTransform(e){let t;for(t in e)this.attrs[t]=e[t]}_clearTransform(){let e={x:this.x(),y:this.y(),rotation:this.rotation(),scaleX:this.scaleX(),scaleY:this.scaleY(),offsetX:this.offsetX(),offsetY:this.offsetY(),skewX:this.skewX(),skewY:this.skewY()};return this.attrs.x=0,this.attrs.y=0,this.attrs.rotation=0,this.attrs.scaleX=1,this.attrs.scaleY=1,this.attrs.offsetX=0,this.attrs.offsetY=0,this.attrs.skewX=0,this.attrs.skewY=0,e}move(e){let t=e.x,n=e.y,r=this.x(),i=this.y();return t!==void 0&&(r+=t),n!==void 0&&(i+=n),this.setPosition({x:r,y:i}),this}_eachAncestorReverse(e,t){let n=[],r=this.getParent(),i,a;if(!(t&&t._id===this._id)){for(n.unshift(this);r&&(!t||r._id!==t._id);)n.unshift(r),r=r.parent;for(i=n.length,a=0;a0?(this.parent.children.splice(e,1),this.parent.children.splice(e-1,0,this),this.parent._setChildrenIndices(),!0):!1}moveToBottom(){if(!this.parent)return I.warn(`Node has no parent. moveToBottom function is ignored.`),!1;let e=this.index;return e>0?(this.parent.children.splice(e,1),this.parent.children.unshift(this),this.parent._setChildrenIndices(),!0):!1}setZIndex(e){if(!this.parent)return I.warn(`Node has no parent. zIndex parameter is ignored.`),this;(e<0||e>=this.parent.children.length)&&I.warn(`Unexpected value `+e+` for zIndex property. zIndex is just index of a node in children of its parent. Expected value is from 0 to `+(this.parent.children.length-1)+`.`);let t=this.index;return this.parent.children.splice(t,1),this.parent.children.splice(e,0,this),this.parent._setChildrenIndices(),this}getAbsoluteOpacity(){return this._getCache(dr,this._getAbsoluteOpacity)}_getAbsoluteOpacity(){let e=this.opacity(),t=this.getParent();return t&&!t._isUnderCache&&(e*=t.getAbsoluteOpacity()),e}moveTo(e){return this.getParent()!==e&&(this._remove(),e.add(this)),this}toObject(){let e=this.getAttrs(),t,n,r,i,a,o={attrs:{},className:this.getClassName()};for(t in e)n=e[t],a=I.isObject(n)&&!I._isPlainObject(n)&&!I._isArray(n),!a&&(r=typeof this[t]==`function`&&this[t],delete e[t],i=r?r.call(this):null,e[t]=n,i!==n&&(o.attrs[t]=n));return I._prepareToStringify(o)}toJSON(){return JSON.stringify(this.toObject())}getParent(){return this.parent}findAncestors(e,t,n){let r=[];t&&this._isMatch(e)&&r.push(this);let i=this.parent;for(;i;){if(i===n)return r;i._isMatch(e)&&r.push(i),i=i.parent}return r}isAncestorOf(e){return!1}findAncestor(e,t,n){return this.findAncestors(e,t,n)[0]}_isMatch(e){if(!e)return!1;if(typeof e==`function`)return e(this);let t=e.replace(/ /g,``).split(`,`),n=t.length,r,i;for(r=0;r{try{let n=e?.callback;n&&delete e.callback,I._urlToImage(this.toDataURL(e),function(e){t(e),n?.(e)})}catch(e){n(e)}})}toBlob(e){return new Promise((t,n)=>{try{let n=e?.callback;n&&delete e.callback,this.toCanvas(e).toBlob(e=>{t(e),n?.(e)},e?.mimeType,e?.quality)}catch(e){n(e)}})}setSize(e){return this.width(e.width),this.height(e.height),this}getSize(){return{width:this.width(),height:this.height()}}getClassName(){return this.className||this.nodeType}getType(){return this.nodeType}getDragDistance(){return this.attrs.dragDistance===void 0?this.parent?this.parent.getDragDistance():P.dragDistance:this.attrs.dragDistance}_off(e,t,n){let r=this.eventListeners[e],i,a,o;for(i=0;i=0)||this.isDragging())return;let t=!1;L._dragElements.forEach(e=>{this.isAncestorOf(e.node)&&(t=!0)}),t||this._createDragElement(e)})}_dragChange(){if(this.attrs.draggable)this._listenDrag();else{if(this._dragCleanup(),!this.getStage())return;let e=L._dragElements.get(this._id),t=e&&e.dragStatus===`dragging`,n=e&&e.dragStatus===`ready`;t?this.stopDrag():n&&L._dragElements.delete(this._id)}}_dragCleanup(){this.off(`mousedown.konva`),this.off(`touchstart.konva`)}isClientRectOnScreen(e={x:0,y:0}){let t=this.getStage();if(!t)return!1;let n={x:-e.x,y:-e.y,width:t.width()+2*e.x,height:t.height()+2*e.y};return I.haveIntersection(n,this.getClientRect())}static create(e,t){return I._isString(e)&&(e=JSON.parse(e)),this._createNode(e,t)}static _createNode(t,n){let r=e.prototype.getClassName.call(t),i=t.children,a,o,s;n&&(t.attrs.container=n),P[r]||(I.warn(`Can not find a node with class name "`+r+`". Fallback to "Shape".`),r=`Shape`);let c=P[r];if(a=new c(t.attrs),i)for(o=i.length,s=0;s0}removeChildren(){return this.getChildren().forEach(e=>{e.parent=null,e.index=0,e.remove()}),this.children=[],this._requestDraw(),this}destroyChildren(){return this.getChildren().forEach(e=>{e.parent=null,e.index=0,e.destroy()}),this.children=[],this._requestDraw(),this}add(...e){if(e.length===0)return this;if(e.length>1){for(let t=0;t0?t[0]:void 0}_generalFind(e,t){let n=[];return this._descendants(r=>{let i=r._isMatch(e);return i&&n.push(r),!!(i&&t)}),n}_descendants(e){let t=!1,n=this.getChildren();for(let r of n)if(t=e(r),t||r.hasChildren()&&(t=r._descendants(e),t))return!0;return!1}toObject(){let e=B.prototype.toObject.call(this);return e.children=[],this.getChildren().forEach(t=>{e.children.push(t.toObject())}),e}isAncestorOf(e){let t=e.getParent();for(;t;){if(t._id===this._id)return!0;t=t.getParent()}return!1}clone(e){let t=B.prototype.clone.call(this,e);return this.getChildren().forEach(function(e){t.add(e.clone())}),t}getAllIntersections(e){let t=[];return this.find(`Shape`).forEach(n=>{n.isVisible()&&n.intersects(e)&&t.push(n)}),t}_clearSelfAndDescendantCache(e){var t;super._clearSelfAndDescendantCache(e),!this.isCached()&&((t=this.children)==null||t.forEach(function(t){t._clearSelfAndDescendantCache(e)}))}_setChildrenIndices(){var e;(e=this.children)==null||e.forEach(function(e,t){e.index=t}),this._requestDraw()}drawScene(e,t,n){let r=this.getLayer(),i=e||r&&r.getCanvas(),a=i&&i.getContext(),o=this._getCanvasCache(),s=o&&o.scene,c=i&&i.isCache;if(!this.isVisible()&&!c)return this;if(s){a.save();let e=this.getAbsoluteTransform(t).getMatrix();a.transform(e[0],e[1],e[2],e[3],e[4],e[5]),this._drawCachedSceneCanvas(a),a.restore()}else this._drawChildren(`drawScene`,i,t,n);return this}drawHit(e,t){if(!this.shouldDrawHit(t))return this;let n=this.getLayer(),r=e||n&&n.hitCanvas,i=r&&r.getContext(),a=this._getCanvasCache();if(a&&a.hit){i.save();let e=this.getAbsoluteTransform(t).getMatrix();i.transform(e[0],e[1],e[2],e[3],e[4],e[5]),this._drawCachedHitCanvas(i),i.restore()}else this._drawChildren(`drawHit`,r,t);return this}_drawChildren(e,t,n,r){var i;let a=t&&t.getContext(),o=this.clipWidth(),s=this.clipHeight(),c=this.clipFunc(),l=typeof o==`number`&&typeof s==`number`||c,u=n===this;if(l){a.save();let e=this.getAbsoluteTransform(n),t=e.getMatrix();a.transform(t[0],t[1],t[2],t[3],t[4],t[5]),a.beginPath();let r;if(c)r=c.call(this,a,this);else{let e=this.clipX(),t=this.clipY();a.rect(e||0,t||0,o,s)}a.clip.apply(a,r),t=e.copy().invert().getMatrix(),a.transform(t[0],t[1],t[2],t[3],t[4],t[5])}let d=!u&&this.globalCompositeOperation()!==`source-over`&&e===`drawScene`;d&&(a.save(),a._applyGlobalCompositeOperation(this)),(i=this.children)==null||i.forEach(function(i){i[e](t,n,r)}),d&&a.restore(),l&&a.restore()}getClientRect(e={}){var t;let n=e.skipTransform,r=e.relativeTo,i,a,o,s,c={x:1/0,y:1/0,width:0,height:0},l=this;(t=this.children)==null||t.forEach(function(t){if(!t.visible())return;let n=t.getClientRect({relativeTo:l,skipShadow:e.skipShadow,skipStroke:e.skipStroke});n.width===0&&n.height===0||(i===void 0?(i=n.x,a=n.y,o=n.x+n.width,s=n.y+n.height):(i=Math.min(i,n.x),a=Math.min(a,n.y),o=Math.max(o,n.x+n.width),s=Math.max(s,n.y+n.height)))});let u=this.find(`Shape`),d=!1;for(let e=0;ee.indexOf(`pointer`)>=0?`pointer`:e.indexOf(`touch`)>=0?`touch`:`mouse`,_i=e=>{let t=gi(e);if(t===`pointer`)return P.pointerEventsEnabled&&hi.pointer;if(t===`touch`)return hi.touch;if(t===`mouse`)return hi.mouse};function vi(e={}){return(e.clipFunc||e.clipWidth||e.clipHeight)&&I.warn(`Stage does not support clipping. Please use clip for Layers or Groups.`),e}var yi=`Pointer position is missing and not registered by the stage. Looks like it is outside of the stage container. You can set it manually from event: stage.setPointersPositions(event);`,bi=[],xi=class extends H{constructor(e){super(vi(e)),this._pointerPositions=[],this._changedPointerPositions=[],this._buildDOM(),this._bindContentEvents(),bi.push(this),this.on(`widthChange.konva heightChange.konva`,this._resizeDOM),this.on(`visibleChange.konva`,this._checkVisibility),this.on(`clipWidthChange.konva clipHeightChange.konva clipFuncChange.konva`,()=>{vi(this.attrs)}),this._checkVisibility()}_validateAdd(e){let t=e.getType()===`Layer`,n=e.getType()===`FastLayer`;t||n||I.throw(`You may only add layers to the stage.`)}_checkVisibility(){if(!this.content)return;let e=this.visible()?``:`none`;this.content.style.display=e}setContainer(e){if(typeof e===Ur){let t;if(e.charAt(0)===`.`){let t=e.slice(1);e=document.getElementsByClassName(t)[0]}else t=e.charAt(0)===`#`?e.slice(1):e,e=document.getElementById(t);if(!e)throw`Can not find container in document with id `+t}return this._setAttr(`container`,e),this.content&&(this.content.parentElement&&this.content.parentElement.removeChild(this.content),e.appendChild(this.content)),this}shouldDrawHit(){return!0}clear(){let e=this.children,t=e.length;for(let n=0;n-1&&bi.splice(t,1),I.releaseCanvas(this.bufferCanvas._canvas,this.bufferHitCanvas._canvas),this}getPointerPosition(){let e=this._pointerPositions[0]||this._changedPointerPositions[0];return e?{x:e.x,y:e.y}:(I.warn(yi),null)}_getPointerById(e){return this._pointerPositions.find(t=>t.id===e)}getPointersPositions(){return this._pointerPositions}getStage(){return this}getContent(){return this.content}_toKonvaCanvas(e){e={...e},e.x=e.x||0,e.y=e.y||0,e.width=e.width||this.width(),e.height=e.height||this.height();let t=new Zn({width:e.width,height:e.height,pixelRatio:e.pixelRatio||1}),n=t.getContext()._context,r=this.children;return(e.x||e.y)&&n.translate(-1*e.x,-1*e.y),r.forEach(function(t){if(!t.isVisible())return;let r=t._toKonvaCanvas(e);n.drawImage(r._canvas,e.x,e.y,r.getWidth()/r.getPixelRatio(),r.getHeight()/r.getPixelRatio())}),t}getIntersection(e){if(!e)return null;let t=this.children,n=t.length-1;for(let r=n;r>=0;r--){let n=t[r].getIntersection(e);if(n)return n}return null}_resizeDOM(){let e=this.width(),t=this.height();this.content&&(this.content.style.width=e+Wr,this.content.style.height=t+Wr),this.bufferCanvas.setSize(e,t),this.bufferHitCanvas.setSize(e,t),this.children.forEach(n=>{n.setSize({width:e,height:t}),n.draw()})}add(e,...t){if(arguments.length>1){for(let e=0;epi&&I.warn(`The stage has `+n+` layers. Recommended maximum number of layers is 3-5. Adding more layers into the stage may drop the performance. Rethink your tree structure, you can use Konva.Group.`),e.setSize({width:this.width(),height:this.height()}),e.draw(),P.isBrowser&&this.content.appendChild(e.canvas._canvas),this}getParent(){return null}getLayer(){return null}hasPointerCapture(e){return zr(e,this)}setPointerCapture(e){Br(e,this)}releaseCapture(e){Vr(e,this)}getLayers(){return this.children}_bindContentEvents(){P.isBrowser&&mi.forEach(([e,t])=>{this.content.addEventListener(e,e=>{this[t](e)},{passive:!1})})}_pointerenter(e){this.setPointersPositions(e);let t=_i(e.type);t&&this._fire(t.pointerenter,{evt:e,target:this,currentTarget:this})}_pointerover(e){this.setPointersPositions(e);let t=_i(e.type);t&&this._fire(t.pointerover,{evt:e,target:this,currentTarget:this})}_getTargetShape(e){let t=this[e+`targetShape`];return t&&!t.getStage()&&(t=null),t}_pointerleave(e){let t=_i(e.type),n=gi(e.type);if(!t)return;this.setPointersPositions(e);let r=this._getTargetShape(n),i=!(P.isDragging()||P.isTransforming())||P.hitOnDragEnabled;r&&i?(r._fireAndBubble(t.pointerout,{evt:e}),r._fireAndBubble(t.pointerleave,{evt:e}),this._fire(t.pointerleave,{evt:e,target:this,currentTarget:this}),this[n+`targetShape`]=null):i&&(this._fire(t.pointerleave,{evt:e,target:this,currentTarget:this}),this._fire(t.pointerout,{evt:e,target:this,currentTarget:this})),this.pointerPos=null,this._pointerPositions=[]}_pointerdown(e){let t=_i(e.type),n=gi(e.type);if(!t)return;this.setPointersPositions(e);let r=!1;this._changedPointerPositions.forEach(i=>{let a=this.getIntersection(i);if(L.justDragged=!1,P[`_`+n+`ListenClick`]=!0,!a||!a.isListening()){this[n+`ClickStartShape`]=void 0;return}P.capturePointerEventsEnabled&&a.setPointerCapture(i.id),this[n+`ClickStartShape`]=a,a._fireAndBubble(t.pointerdown,{evt:e,pointerId:i.id}),r=!0;let o=e.type.indexOf(`touch`)>=0;a.preventDefault()&&e.cancelable&&o&&e.preventDefault()}),r||this._fire(t.pointerdown,{evt:e,target:this,currentTarget:this,pointerId:this._pointerPositions[0].id})}_pointermove(e){let t=_i(e.type),n=gi(e.type);if(!t)return;let r=e.type.indexOf(`touch`)>=0||e.pointerType===`touch`;if(P.isDragging()&&L.node.preventDefault()&&e.cancelable&&r&&e.preventDefault(),this.setPointersPositions(e),!(!(P.isDragging()||P.isTransforming())||P.hitOnDragEnabled))return;let i={},a=!1,o=this._getTargetShape(n);this._changedPointerPositions.forEach(r=>{let s=Lr(r.id)||this.getIntersection(r),c=r.id,l={evt:e,pointerId:c},u=o!==s;if(u&&o&&(o._fireAndBubble(t.pointerout,{...l},s),o._fireAndBubble(t.pointerleave,{...l},s)),s){if(i[s._id])return;i[s._id]=!0}s&&s.isListening()?(a=!0,u&&(s._fireAndBubble(t.pointerover,{...l},o),s._fireAndBubble(t.pointerenter,{...l},o),this[n+`targetShape`]=s),s._fireAndBubble(t.pointermove,{...l})):o&&(this._fire(t.pointerover,{evt:e,target:this,currentTarget:this,pointerId:c}),this[n+`targetShape`]=null)}),a||this._fire(t.pointermove,{evt:e,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id})}_pointerup(e){let t=_i(e.type),n=gi(e.type);if(!t)return;this.setPointersPositions(e);let r=this[n+`ClickStartShape`],i=this[n+`ClickEndShape`],a={},o=!1;this._changedPointerPositions.forEach(s=>{let c=Lr(s.id)||this.getIntersection(s);if(c){if(c.releaseCapture(s.id),a[c._id])return;a[c._id]=!0}let l=s.id,u={evt:e,pointerId:l},d=!1;P[`_`+n+`InDblClickWindow`]?(d=!0,clearTimeout(this[n+`DblTimeout`])):L.justDragged||(P[`_`+n+`InDblClickWindow`]=!0,clearTimeout(this[n+`DblTimeout`])),this[n+`DblTimeout`]=setTimeout(function(){P[`_`+n+`InDblClickWindow`]=!1},P.dblClickWindow),c&&c.isListening()?(o=!0,this[n+`ClickEndShape`]=c,c._fireAndBubble(t.pointerup,{...u}),P[`_`+n+`ListenClick`]&&r&&r===c&&(c._fireAndBubble(t.pointerclick,{...u}),d&&i&&i===c&&c._fireAndBubble(t.pointerdblclick,{...u}))):(this[n+`ClickEndShape`]=null,o||=(this._fire(t.pointerup,{evt:e,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id}),!0),P[`_`+n+`ListenClick`]&&this._fire(t.pointerclick,{evt:e,target:this,currentTarget:this,pointerId:l}),d&&this._fire(t.pointerdblclick,{evt:e,target:this,currentTarget:this,pointerId:l}))}),o||this._fire(t.pointerup,{evt:e,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id}),P[`_`+n+`ListenClick`]=!1,e.cancelable&&n!==`touch`&&n!==`pointer`&&e.preventDefault()}_contextmenu(e){this.setPointersPositions(e);let t=this.getIntersection(this.getPointerPosition());t&&t.isListening()?t._fireAndBubble(si,{evt:e}):this._fire(si,{evt:e,target:this,currentTarget:this})}_wheel(e){this.setPointersPositions(e);let t=this.getIntersection(this.getPointerPosition());t&&t.isListening()?t._fireAndBubble(fi,{evt:e}):this._fire(fi,{evt:e,target:this,currentTarget:this})}_pointercancel(e){this.setPointersPositions(e);let t=Lr(e.pointerId)||this.getIntersection(this.getPointerPosition());t&&t._fireAndBubble(ei,Rr(e)),Vr(e.pointerId)}_lostpointercapture(e){Vr(e.pointerId)}setPointersPositions(e){let t=this._getContentPosition(),n=null,r=null;e||=window.event,e.touches===void 0?(n=(e.clientX-t.left)/t.scaleX,r=(e.clientY-t.top)/t.scaleY,this.pointerPos={x:n,y:r},this._pointerPositions=[{x:n,y:r,id:I._getFirstPointerId(e)}],this._changedPointerPositions=[{x:n,y:r,id:I._getFirstPointerId(e)}]):(this._pointerPositions=[],this._changedPointerPositions=[],Array.prototype.forEach.call(e.touches,e=>{this._pointerPositions.push({id:e.identifier,x:(e.clientX-t.left)/t.scaleX,y:(e.clientY-t.top)/t.scaleY})}),Array.prototype.forEach.call(e.changedTouches||e.touches,e=>{this._changedPointerPositions.push({id:e.identifier,x:(e.clientX-t.left)/t.scaleX,y:(e.clientY-t.top)/t.scaleY})}))}_setPointerPosition(e){I.warn(`Method _setPointerPosition is deprecated. Use "stage.setPointersPositions(event)" instead.`),this.setPointersPositions(e)}_getContentPosition(){if(!this.content||!this.content.getBoundingClientRect)return{top:0,left:0,scaleX:1,scaleY:1};let e=this.content.getBoundingClientRect();return{top:e.top,left:e.left,scaleX:e.width/this.content.clientWidth||1,scaleY:e.height/this.content.clientHeight||1}}_buildDOM(){if(this.bufferCanvas=new Zn({width:this.width(),height:this.height()}),this.bufferHitCanvas=new Qn({pixelRatio:1,width:this.width(),height:this.height()}),!P.isBrowser)return;let e=this.container();if(!e)throw`Stage has no container. A container is required.`;e.innerHTML=``,this.content=document.createElement(`div`),this.content.style.position=`relative`,this.content.style.userSelect=`none`,this.content.className=`konvajs-content`,this.content.setAttribute(`role`,`presentation`),e.appendChild(this.content),this._resizeDOM()}cache(){return I.warn(`Cache function is not allowed for stage. You may use cache only for layers, groups and shapes.`),this}clearCache(){return this}batchDraw(){return this.getChildren().forEach(function(e){e.batchDraw()}),this}};xi.prototype.nodeType=Hr,F(xi),z.addGetterSetter(xi,`container`),P.isBrowser&&document.addEventListener(`visibilitychange`,()=>{bi.forEach(e=>{e.batchDraw()})});var Si=`hasShadow`,Ci=`shadowRGBA`,wi=`patternImage`,Ti=`linearGradient`,Ei=`radialGradient`,Di;function Oi(){return Di||(Di=I.createCanvasElement().getContext(`2d`),Di)}var ki={};function Ai(e){let t=this.attrs.fillRule;t?e.fill(t):e.fill()}function ji(e){e.stroke()}function Mi(e){let t=this.attrs.fillRule;t?e.fill(t):e.fill()}function Ni(e){e.stroke()}function Pi(){this._clearCache(Si)}function Fi(){this._clearCache(Ci)}function Ii(){this._clearCache(wi)}function Li(){this._clearCache(Ti)}function Ri(){this._clearCache(Ei)}var U=class extends B{constructor(e){super(e);let t,n=0;for(;t=I.getHitColor(),!(t&&!(t in ki));)if(n++,n>=1e4){I.warn(`Failed to find a unique color key for a shape. Konva may work incorrectly. Most likely your browser is using canvas farbling. Consider disabling it.`),t=I.getRandomColor();break}this.colorKey=t,ki[t]=this}getContext(){return I.warn(`shape.getContext() method is deprecated. Please do not use it.`),this.getLayer().getContext()}getCanvas(){return I.warn(`shape.getCanvas() method is deprecated. Please do not use it.`),this.getLayer().getCanvas()}getSceneFunc(){return this.attrs.sceneFunc||this._sceneFunc}getHitFunc(){return this.attrs.hitFunc||this._hitFunc}hasShadow(){return this._getCache(Si,this._hasShadow)}_hasShadow(){return this.shadowEnabled()&&this.shadowOpacity()!==0&&!!(this.shadowColor()||this.shadowBlur()||this.shadowOffsetX()||this.shadowOffsetY())}_getFillPattern(){return this._getCache(wi,this.__getFillPattern)}__getFillPattern(){if(this.fillPatternImage()){let e=Oi().createPattern(this.fillPatternImage(),this.fillPatternRepeat()||`repeat`);if(e&&e.setTransform){let t=new pn;t.translate(this.fillPatternX(),this.fillPatternY()),t.rotate(P.getAngle(this.fillPatternRotation())),t.scale(this.fillPatternScaleX(),this.fillPatternScaleY()),t.translate(-1*this.fillPatternOffsetX(),-1*this.fillPatternOffsetY());let n=t.getMatrix(),r=typeof DOMMatrix>`u`?{a:n[0],b:n[1],c:n[2],d:n[3],e:n[4],f:n[5]}:new DOMMatrix(n);e.setTransform(r)}return e}}_getLinearGradient(){return this._getCache(Ti,this.__getLinearGradient)}__getLinearGradient(){let e=this.fillLinearGradientColorStops();if(e){let t=Oi(),n=this.fillLinearGradientStartPoint(),r=this.fillLinearGradientEndPoint(),i=t.createLinearGradient(n.x,n.y,r.x,r.y);for(let t=0;tthis.fillEnabled()&&!!(this.fill()||this.fillPatternImage()||this.fillLinearGradientColorStops()||this.fillRadialGradientColorStops()))}hasStroke(){return this._calculate(`hasStroke`,[`strokeEnabled`,`strokeWidth`,`stroke`,`strokeLinearGradientColorStops`],()=>this.strokeEnabled()&&this.strokeWidth()&&!!(this.stroke()||this.strokeLinearGradientColorStops()))}hasHitStroke(){let e=this.hitStrokeWidth();return e===`auto`?this.hasStroke():this.strokeEnabled()&&!!e}intersects(e){let t=this.getStage();if(!t)return!1;let n=t.bufferHitCanvas;return n.getContext().clear(),this.drawHit(n,void 0,!0),n.context.getImageData(Math.round(e.x),Math.round(e.y),1,1).data[3]>0}destroy(){return B.prototype.destroy.call(this),delete ki[this.colorKey],delete this.colorKey,this}_useBufferCanvas(e){if(!(this.attrs.perfectDrawEnabled??!0))return!1;let t=e||this.hasFill(),n=this.hasStroke(),r=this.getAbsoluteOpacity()!==1;if(t&&n&&r)return!0;let i=this.hasShadow(),a=this.shadowForStrokeEnabled();return!!(t&&n&&i&&a)}setStrokeHitEnabled(e){I.warn(`strokeHitEnabled property is deprecated. Please use hitStrokeWidth instead.`),e?this.hitStrokeWidth(`auto`):this.hitStrokeWidth(0)}getStrokeHitEnabled(){return this.hitStrokeWidth()!==0}getSelfRect(){let e=this.size();return{x:this._centroid?-e.width/2:0,y:this._centroid?-e.height/2:0,width:e.width,height:e.height}}getClientRect(e={}){let t=!1,n=this.getParent();for(;n;){if(n.isCached()){t=!0;break}n=n.getParent()}let r=e.skipTransform,i=e.relativeTo||t&&this.getStage()||void 0,a=this.getSelfRect(),o=!e.skipStroke&&this.hasStroke()&&this.strokeWidth()||0,s=a.width+o,c=a.height+o,l=!e.skipShadow&&this.hasShadow(),u=l?this.shadowOffsetX():0,d=l?this.shadowOffsetY():0,f=s+Math.abs(u),p=c+Math.abs(d),m=l&&this.shadowBlur()||0,h={width:f+m*2,height:p+m*2,x:-(o/2+m)+Math.min(u,0)+a.x,y:-(o/2+m)+Math.min(d,0)+a.y};return r?h:this._transformedRect(h,i)}drawScene(e,t,n){let r=this.getLayer(),i=(e||r.getCanvas()).getContext(),a=this._getCanvasCache(),o=this.getSceneFunc(),s=this.hasShadow(),c,l=t===this;if(!this.isVisible()&&!l)return this;if(a){i.save();let e=this.getAbsoluteTransform(t).getMatrix();return i.transform(e[0],e[1],e[2],e[3],e[4],e[5]),this._drawCachedSceneCanvas(i),i.restore(),this}if(!o)return this;if(i.save(),this._useBufferCanvas()){c=this.getStage();let e=n||c.bufferCanvas,r=e.getContext();n?(r.save(),r.setTransform(1,0,0,1,0,0),r.clearRect(0,0,e.width,e.height),r.restore()):r.clear(),r.save(),r._applyLineJoin(this),r._applyMiterLimit(this);let a=this.getAbsoluteTransform(t).getMatrix();r.transform(a[0],a[1],a[2],a[3],a[4],a[5]),o.call(this,r,this),r.restore();let u=e.pixelRatio;s&&i._applyShadow(this),l||(i._applyOpacity(this),i._applyGlobalCompositeOperation(this)),i.drawImage(e._canvas,e.x||0,e.y||0,e.width/u,e.height/u)}else{if(i._applyLineJoin(this),i._applyMiterLimit(this),!l){let e=this.getAbsoluteTransform(t).getMatrix();i.transform(e[0],e[1],e[2],e[3],e[4],e[5]),i._applyOpacity(this),i._applyGlobalCompositeOperation(this)}s&&i._applyShadow(this),o.call(this,i,this)}return i.restore(),this}drawHit(e,t,n=!1){if(!this.shouldDrawHit(t,n))return this;let r=this.getLayer(),i=e||r.hitCanvas,a=i&&i.getContext(),o=this.hitFunc()||this.sceneFunc(),s=this._getCanvasCache(),c=s&&s.hit;if(this.colorKey||I.warn(`Looks like your canvas has a destroyed shape in it. Do not reuse shape after you destroyed it. If you want to reuse shape you should call remove() instead of destroy()`),c){a.save();let e=this.getAbsoluteTransform(t).getMatrix();return a.transform(e[0],e[1],e[2],e[3],e[4],e[5]),this._drawCachedHitCanvas(a),a.restore(),this}if(!o)return this;if(a.save(),a._applyLineJoin(this),a._applyMiterLimit(this),this!==t){let e=this.getAbsoluteTransform(t).getMatrix();a.transform(e[0],e[1],e[2],e[3],e[4],e[5])}return o.call(this,a,this),a.restore(),this}drawHitFromCache(e=0){let t=this._getCanvasCache(),n=this._getCachedSceneCanvas(),r=t.hit,i=r.getContext(),a=r.getWidth(),o=r.getHeight();i.clear(),i.drawImage(n._canvas,0,0,a,o);try{let t=i.getImageData(0,0,a,o),n=t.data,r=n.length,s=I._hexToRgb(this.colorKey);for(let t=0;te?(n[t]=s.r,n[t+1]=s.g,n[t+2]=s.b,n[t+3]=255):n[t+3]=0;i.putImageData(t,0,0)}catch(e){I.error(`Unable to draw hit graph from cached scene canvas. `+e.message)}return this}hasPointerCapture(e){return zr(e,this)}setPointerCapture(e){Br(e,this)}releaseCapture(e){Vr(e,this)}};U.prototype._fillFunc=Ai,U.prototype._strokeFunc=ji,U.prototype._fillFuncHit=Mi,U.prototype._strokeFuncHit=Ni,U.prototype._centroid=!1,U.prototype.nodeType=`Shape`,F(U),U.prototype.eventListeners={},U.prototype.on(`shadowColorChange.konva shadowBlurChange.konva shadowOffsetChange.konva shadowOpacityChange.konva shadowEnabledChange.konva`,Pi),U.prototype.on(`shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva`,Fi),U.prototype.on(`fillPriorityChange.konva fillPatternImageChange.konva fillPatternRepeatChange.konva fillPatternScaleXChange.konva fillPatternScaleYChange.konva fillPatternOffsetXChange.konva fillPatternOffsetYChange.konva fillPatternXChange.konva fillPatternYChange.konva fillPatternRotationChange.konva`,Ii),U.prototype.on(`fillPriorityChange.konva fillLinearGradientColorStopsChange.konva fillLinearGradientStartPointXChange.konva fillLinearGradientStartPointYChange.konva fillLinearGradientEndPointXChange.konva fillLinearGradientEndPointYChange.konva`,Li),U.prototype.on(`fillPriorityChange.konva fillRadialGradientColorStopsChange.konva fillRadialGradientStartPointXChange.konva fillRadialGradientStartPointYChange.konva fillRadialGradientEndPointXChange.konva fillRadialGradientEndPointYChange.konva fillRadialGradientStartRadiusChange.konva fillRadialGradientEndRadiusChange.konva`,Ri),z.addGetterSetter(U,`stroke`,void 0,ir()),z.addGetterSetter(U,`strokeWidth`,2,R()),z.addGetterSetter(U,`fillAfterStrokeEnabled`,!1),z.addGetterSetter(U,`hitStrokeWidth`,`auto`,nr()),z.addGetterSetter(U,`strokeHitEnabled`,!0,or()),z.addGetterSetter(U,`perfectDrawEnabled`,!0,or()),z.addGetterSetter(U,`shadowForStrokeEnabled`,!0,or()),z.addGetterSetter(U,`lineJoin`),z.addGetterSetter(U,`lineCap`),z.addGetterSetter(U,`miterLimit`),z.addGetterSetter(U,`sceneFunc`),z.addGetterSetter(U,`hitFunc`),z.addGetterSetter(U,`dash`),z.addGetterSetter(U,`dashOffset`,0,R()),z.addGetterSetter(U,`shadowColor`,void 0,rr()),z.addGetterSetter(U,`shadowBlur`,0,R()),z.addGetterSetter(U,`shadowOpacity`,1,R()),z.addComponentsGetterSetter(U,`shadowOffset`,[`x`,`y`]),z.addGetterSetter(U,`shadowOffsetX`,0,R()),z.addGetterSetter(U,`shadowOffsetY`,0,R()),z.addGetterSetter(U,`fillPatternImage`),z.addGetterSetter(U,`fill`,void 0,ir()),z.addGetterSetter(U,`fillPatternX`,0,R()),z.addGetterSetter(U,`fillPatternY`,0,R()),z.addGetterSetter(U,`fillLinearGradientColorStops`),z.addGetterSetter(U,`strokeLinearGradientColorStops`),z.addGetterSetter(U,`fillRadialGradientStartRadius`,0),z.addGetterSetter(U,`fillRadialGradientEndRadius`,0),z.addGetterSetter(U,`fillRadialGradientColorStops`),z.addGetterSetter(U,`fillPatternRepeat`,`repeat`),z.addGetterSetter(U,`fillEnabled`,!0),z.addGetterSetter(U,`strokeEnabled`,!0),z.addGetterSetter(U,`shadowEnabled`,!0),z.addGetterSetter(U,`dashEnabled`,!0),z.addGetterSetter(U,`strokeScaleEnabled`,!0),z.addGetterSetter(U,`fillPriority`,`color`),z.addComponentsGetterSetter(U,`fillPatternOffset`,[`x`,`y`]),z.addGetterSetter(U,`fillPatternOffsetX`,0,R()),z.addGetterSetter(U,`fillPatternOffsetY`,0,R()),z.addComponentsGetterSetter(U,`fillPatternScale`,[`x`,`y`]),z.addGetterSetter(U,`fillPatternScaleX`,1,R()),z.addGetterSetter(U,`fillPatternScaleY`,1,R()),z.addComponentsGetterSetter(U,`fillLinearGradientStartPoint`,[`x`,`y`]),z.addComponentsGetterSetter(U,`strokeLinearGradientStartPoint`,[`x`,`y`]),z.addGetterSetter(U,`fillLinearGradientStartPointX`,0),z.addGetterSetter(U,`strokeLinearGradientStartPointX`,0),z.addGetterSetter(U,`fillLinearGradientStartPointY`,0),z.addGetterSetter(U,`strokeLinearGradientStartPointY`,0),z.addComponentsGetterSetter(U,`fillLinearGradientEndPoint`,[`x`,`y`]),z.addComponentsGetterSetter(U,`strokeLinearGradientEndPoint`,[`x`,`y`]),z.addGetterSetter(U,`fillLinearGradientEndPointX`,0),z.addGetterSetter(U,`strokeLinearGradientEndPointX`,0),z.addGetterSetter(U,`fillLinearGradientEndPointY`,0),z.addGetterSetter(U,`strokeLinearGradientEndPointY`,0),z.addComponentsGetterSetter(U,`fillRadialGradientStartPoint`,[`x`,`y`]),z.addGetterSetter(U,`fillRadialGradientStartPointX`,0),z.addGetterSetter(U,`fillRadialGradientStartPointY`,0),z.addComponentsGetterSetter(U,`fillRadialGradientEndPoint`,[`x`,`y`]),z.addGetterSetter(U,`fillRadialGradientEndPointX`,0),z.addGetterSetter(U,`fillRadialGradientEndPointY`,0),z.addGetterSetter(U,`fillPatternRotation`,0),z.addGetterSetter(U,`fillRule`,void 0,rr()),z.backCompat(U,{dashArray:`dash`,getDashArray:`getDash`,setDashArray:`getDash`,drawFunc:`sceneFunc`,getDrawFunc:`getSceneFunc`,setDrawFunc:`setSceneFunc`,drawHitFunc:`hitFunc`,getDrawHitFunc:`getHitFunc`,setDrawHitFunc:`setHitFunc`});var zi=`beforeDraw`,Bi=`draw`,Vi=[{x:0,y:0},{x:-1,y:-1},{x:1,y:-1},{x:1,y:1},{x:-1,y:1}],Hi=Vi.length,Ui=class extends H{constructor(e){super(e),this.canvas=new Zn,this.hitCanvas=new Qn({pixelRatio:1}),this._waitingForDraw=!1,this.on(`visibleChange.konva`,this._checkVisibility),this._checkVisibility(),this.on(`imageSmoothingEnabledChange.konva`,this._setSmoothEnabled),this._setSmoothEnabled()}createPNGStream(){return this.canvas._canvas.createPNGStream()}getCanvas(){return this.canvas}getNativeCanvasElement(){return this.canvas._canvas}getHitCanvas(){return this.hitCanvas}getContext(){return this.getCanvas().getContext()}clear(e){return this.getContext().clear(e),this.getHitCanvas().getContext().clear(e),this}setZIndex(e){super.setZIndex(e);let t=this.getStage();return t&&t.content&&(t.content.removeChild(this.getNativeCanvasElement()),e{this.draw(),this._waitingForDraw=!1})),this}getIntersection(e){if(!this.isListening()||!this.isVisible())return null;let t=1,n=!1;for(;;){for(let r=0;r0)return{antialiased:!0};return{}}drawScene(e,t,n){let r=this.getLayer(),i=e||r&&r.getCanvas();return this._fire(zi,{node:this}),this.clearBeforeDraw()&&i.getContext().clear(),H.prototype.drawScene.call(this,i,t,n),this._fire(Bi,{node:this}),this}drawHit(e,t){let n=this.getLayer(),r=e||n&&n.hitCanvas;return n&&n.clearBeforeDraw()&&n.getHitCanvas().getContext().clear(),H.prototype.drawHit.call(this,r,t),this}enableHitGraph(){return this.hitGraphEnabled(!0),this}disableHitGraph(){return this.hitGraphEnabled(!1),this}setHitGraphEnabled(e){I.warn(`hitGraphEnabled method is deprecated. Please use layer.listening() instead.`),this.listening(e)}getHitGraphEnabled(e){return I.warn(`hitGraphEnabled method is deprecated. Please use layer.listening() instead.`),this.listening()}toggleHitCanvas(){if(!this.parent||!this.parent.content)return;let e=this.parent;this.hitCanvas._canvas.parentNode?e.content.removeChild(this.hitCanvas._canvas):e.content.appendChild(this.hitCanvas._canvas)}destroy(){return I.releaseCanvas(this.getNativeCanvasElement(),this.getHitCanvas()._canvas),super.destroy()}};Ui.prototype.nodeType=`Layer`,F(Ui),z.addGetterSetter(Ui,`imageSmoothingEnabled`,!0),z.addGetterSetter(Ui,`clearBeforeDraw`,!0),z.addGetterSetter(Ui,`hitGraphEnabled`,!0,or());var Wi=class extends Ui{constructor(e){super(e),this.listening(!1),I.warn(`Konva.Fast layer is deprecated. Please use "new Konva.Layer({ listening: false })" instead.`)}};Wi.prototype.nodeType=`FastLayer`,F(Wi);var Gi=class extends H{_validateAdd(e){let t=e.getType();t!==`Group`&&t!==`Shape`&&I.throw(`You may only add groups and shapes to groups.`)}};Gi.prototype.nodeType=`Group`,F(Gi);var Ki=(function(){return un.performance&&un.performance.now?function(){return un.performance.now()}:function(){return new Date().getTime()}})(),qi=class e{constructor(t,n){this.id=e.animIdCounter++,this.frame={time:0,timeDiff:0,lastTime:Ki(),frameRate:0},this.func=t,this.setLayers(n)}setLayers(e){let t=[];return e&&(t=Array.isArray(e)?e:[e]),this.layers=t,this}getLayers(){return this.layers}addLayer(e){let t=this.layers,n=t.length;for(let r=0;rthis.duration?this.yoyo?(this._time=this.duration,this.reverse()):this.finish():e<0?this.yoyo?(this._time=0,this.play()):this.reset():(this._time=e,this.update())}getTime(){return this._time}setPosition(e){this.prevPos=this._pos,this.propFunc(e),this._pos=e}getPosition(e){return e===void 0&&(e=this._time),this.func(e,this.begin,this._change,this.duration)}play(){this.state=Xi,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire(`onPlay`)}reverse(){this.state=Zi,this._time=this.duration-this._time,this._startTime=this.getTimer()-this._time,this.onEnterFrame(),this.fire(`onReverse`)}seek(e){this.pause(),this._time=e,this.update(),this.fire(`onSeek`)}reset(){this.pause(),this._time=0,this.update(),this.fire(`onReset`)}finish(){this.pause(),this._time=this.duration,this.update(),this.fire(`onFinish`)}update(){this.setPosition(this.getPosition(this._time)),this.fire(`onUpdate`)}onEnterFrame(){let e=this.getTimer()-this._startTime;this.state===Xi?this.setTime(e):this.state===Zi&&this.setTime(this.duration-e)}pause(){this.state=Yi,this.fire(`onPause`)}getTimer(){return new Date().getTime()}},ta=class e{constructor(t){let n=this,r=t.node,i=r._id,a=t.easing||na.Linear,o=!!t.yoyo,s,c;s=t.duration===void 0?.3:t.duration===0?.001:t.duration,this.node=r,this._id=$i++;let l=r.getLayer()||(r instanceof P.Stage?r.getLayers():null);for(c in l||I.error("Tween constructor have `node` that is not in a layer. Please add node into layer first."),this.anim=new qi(function(){n.tween.onEnterFrame()},l),this.tween=new ea(c,function(e){n._tweenFunc(e)},a,0,1,s*1e3,o),this._addListeners(),e.attrs[i]||(e.attrs[i]={}),e.attrs[i][this._id]||(e.attrs[i][this._id]={}),e.tweens[i]||(e.tweens[i]={}),t)Ji[c]===void 0&&this._addAttr(c,t[c]);this.reset(),this.onFinish=t.onFinish,this.onReset=t.onReset,this.onUpdate=t.onUpdate}_addAttr(t,n){let r=this.node,i=r._id,a,o,s,c,l,u=e.tweens[i][t];u&&delete e.attrs[i][u][t];let d=r.getAttr(t);if(I._isArray(n))if(a=[],o=Math.max(n.length,d.length),t===`points`&&n.length!==d.length&&(n.length>d.length?(c=d,d=I._prepareArrayForTween(d,n,r.closed())):(s=n,n=I._prepareArrayForTween(n,d,r.closed()))),t.indexOf(`fill`)===0)for(let e=0;e{this.anim.start()},this.tween.onReverse=()=>{this.anim.start()},this.tween.onPause=()=>{this.anim.stop()},this.tween.onFinish=()=>{let t=this.node,n=e.attrs[t._id][this._id];n.points&&n.points.trueEnd&&t.setAttr(`points`,n.points.trueEnd),this.onFinish&&this.onFinish.call(this)},this.tween.onReset=()=>{let t=this.node,n=e.attrs[t._id][this._id];n.points&&n.points.trueStart&&t.points(n.points.trueStart),this.onReset&&this.onReset()},this.tween.onUpdate=()=>{this.onUpdate&&this.onUpdate.call(this)}}play(){return this.tween.play(),this}reverse(){return this.tween.reverse(),this}reset(){return this.tween.reset(),this}seek(e){return this.tween.seek(e*1e3),this}pause(){return this.tween.pause(),this}finish(){return this.tween.finish(),this}destroy(){let t=this.node._id,n=this._id,r=e.tweens[t];this.pause(),this.anim&&this.anim.stop();for(let n in r)delete e.tweens[t][n];delete e.attrs[t][n],e.tweens[t]&&(Object.keys(e.tweens[t]).length===0&&delete e.tweens[t],Object.keys(e.attrs[t]).length===0&&delete e.attrs[t])}};ta.attrs={},ta.tweens={},B.prototype.to=function(e){let t=e.onFinish;e.node=this,e.onFinish=function(){this.destroy(),t&&t()},new ta(e).play()};var na={BackEaseIn(e,t,n,r){let i=1.70158;return n*(e/=r)*e*((i+1)*e-i)+t},BackEaseOut(e,t,n,r){let i=1.70158;return n*((e=e/r-1)*e*((i+1)*e+i)+1)+t},BackEaseInOut(e,t,n,r){let i=1.70158;return(e/=r/2)<1?n/2*(e*e*(((i*=1.525)+1)*e-i))+t:n/2*((e-=2)*e*(((i*=1.525)+1)*e+i)+2)+t},ElasticEaseIn(e,t,n,r,i,a){let o=0;return e===0?t:(e/=r)===1?t+n:(a||=r*.3,!i||i0?e:t),c=1*t,l=a*(a>0?e:t),u=o*(o>0?t:e);return{x:s,y:n?-1*u:l,width:c-s,height:u-l}}};ia.prototype._centroid=!0,ia.prototype.className=`Arc`,ia.prototype._attrsAffectingSize=[`innerRadius`,`outerRadius`,`angle`,`clockwise`],F(ia),z.addGetterSetter(ia,`innerRadius`,0,R()),z.addGetterSetter(ia,`outerRadius`,0,R()),z.addGetterSetter(ia,`angle`,0,R()),z.addGetterSetter(ia,`clockwise`,!1,or());function aa(e,t,n,r,i,a,o){let s=Math.sqrt((n-e)**2+(r-t)**2),c=Math.sqrt((i-n)**2+(a-r)**2),l=o*s/(s+c),u=o*c/(s+c);return[n-l*(i-e),r-l*(a-t),n+u*(i-e),r+u*(a-t)]}function oa(e,t){let n=e.length,r=[];for(let i=2;i=0){let e=Math.sqrt(a);n.push((-r+e)/(2*t)),n.push((-r-e)/(2*t))}}}return n.filter(e=>e>0&&e<1).flatMap(e=>t.map(t=>{let n=1-e;return n*n*n*t[0]+3*n*n*e*t[1]+3*n*e*e*t[2]+e*e*e*t[3]}))}var ca=class extends U{constructor(e){super(e),this.on(`pointsChange.konva tensionChange.konva closedChange.konva bezierChange.konva`,function(){this._clearCache(`tensionPoints`)})}_sceneFunc(e){let t=this.points(),n=t.length,r=this.tension(),i=this.closed(),a=this.bezier();if(!n)return;let o=0;if(e.beginPath(),e.moveTo(t[0],t[1]),r!==0&&n>4){let r=this.getTensionPoints(),a=r.length;for(o=i?0:4,i||e.quadraticCurveTo(r[0],r[1],r[2],r[3]);o{let r,i,a=n/2;r=0;for(let n=0;n<20;n++)i=a*la[20][n]+a,r+=ua[20][n]*ma(e,t,i);return a*r},pa=(e,t,n)=>{n===void 0&&(n=1);let r=e[0]-2*e[1]+e[2],i=t[0]-2*t[1]+t[2],a=2*e[1]-2*e[0],o=2*t[1]-2*t[0],s=4*(r*r+i*i),c=4*(r*a+i*o),l=a*a+o*o;if(s===0)return n*Math.sqrt((e[2]-e[0])**2+(t[2]-t[0])**2);let u=c/(2*s),d=l/s,f=n+u,p=d-u*u,m=f*f+p>0?Math.sqrt(f*f+p):0,h=u*u+p>0?Math.sqrt(u*u+p):0,g=u+Math.sqrt(u*u+p)===0?0:p*Math.log(Math.abs((f+m)/(u+h)));return Math.sqrt(s)/2*(f*m-u*h+g)};function ma(e,t,n){let r=ha(1,n,e),i=ha(1,n,t),a=r*r+i*i;return Math.sqrt(a)}var ha=(e,t,n)=>{let r=n.length-1,i,a;if(r===0)return 0;if(e===0){a=0;for(let e=0;e<=r;e++)a+=da[r][e]*(1-t)**(r-e)*t**+e*n[e];return a}else{i=Array(r);for(let e=0;e{let r=1,i=e/t,a=(e-n(i))/t,o=0;for(;r>.001;){let s=n(i+a),c=Math.abs(e-s)/t;if(c500)break}return i},W=class e extends U{constructor(e){super(e),this.dataArray=[],this.pathLength=0,this._readDataAttribute(),this.on(`dataChange.konva`,function(){this._readDataAttribute()})}_readDataAttribute(){this.dataArray=e.parsePathData(this.data()),this.pathLength=e.getPathLength(this.dataArray)}_sceneFunc(e){let t=this.dataArray;e.beginPath();let n=!1;for(let r=0;ro?i:o,f=i>o?1:i/o,p=i>o?o/i:1;e.translate(t,r),e.rotate(l),e.scale(f,p),e.arc(0,0,d,s,s+c,1-u),e.scale(1/f,1/p),e.rotate(-l),e.translate(-t,-r);break;case`z`:n=!0,e.closePath();break}}!n&&!this.hasFill()?e.strokeShape(this):e.fillStrokeShape(this)}getSelfRect(){let t=[];this.dataArray.forEach(function(n){if(n.command===`A`){let r=n.points[4],i=n.points[5],a=n.points[4]+i,o=Math.PI/180;if(Math.abs(r-a)a;i-=o){let r=e.getPointOnEllipticalArc(n.points[0],n.points[1],n.points[2],n.points[3],i,0);t.push(r.x,r.y)}else for(let i=r+o;in[i].pathLength;)t-=n[i].pathLength,++i;if(i===a)return r=n[i-1].points.slice(-2),{x:r[0],y:r[1]};if(t<.01)return n[i].command===`M`?(r=n[i].points.slice(0,2),{x:r[0],y:r[1]}):{x:n[i].start.x,y:n[i].start.y};let o=n[i],s=o.points;switch(o.command){case`L`:return e.getPointOnLine(t,o.start.x,o.start.y,s[0],s[1]);case`C`:return e.getPointOnCubicBezier(ga(t,e.getPathLength(n),e=>fa([o.start.x,s[0],s[2],s[4]],[o.start.y,s[1],s[3],s[5]],e)),o.start.x,o.start.y,s[0],s[1],s[2],s[3],s[4],s[5]);case`Q`:return e.getPointOnQuadraticBezier(ga(t,e.getPathLength(n),e=>pa([o.start.x,s[0],s[2]],[o.start.y,s[1],s[3]],e)),o.start.x,o.start.y,s[0],s[1],s[2],s[3]);case`A`:let r=s[0],i=s[1],a=s[2],c=s[3],l=s[5],u=s[6],d=s[4];return d+=l*t/o.pathLength,e.getPointOnEllipticalArc(r,i,a,c,d,u)}return null}static getPointOnLine(e,t,n,r,i,a,o){a??=t,o??=n;let s=this.getLineLength(t,n,r,i);if(s<1e-10)return{x:t,y:n};if(r===t)return{x:a,y:o+(i>n?e:-e)};let c=(i-n)/(r-t),l=Math.sqrt(e*e/(1+c*c))*(r=0&&(d+=2,d>=7&&(d-=7));continue}if(d>=0){if(d===3){if(/^[01]{2}\d+(?:\.\d+)?$/.test(t)){u.push(parseInt(t[0],10)),u.push(parseInt(t[1],10)),u.push(parseFloat(t.slice(2))),d+=3,d>=7&&(d-=7);continue}if(t===`11`||t===`10`||t===`01`){u.push(parseInt(t[0],10)),u.push(parseInt(t[1],10)),d+=2,d>=7&&(d-=7);continue}if(t===`0`||t===`1`){u.push(parseInt(t,10)),d+=1,d>=7&&(d-=7);continue}}else if(d===4){if(/^[01]\d+(?:\.\d+)?$/.test(t)){u.push(parseInt(t[0],10)),u.push(parseFloat(t.slice(1))),d+=2,d>=7&&(d-=7);continue}if(t===`0`||t===`1`){u.push(parseInt(t,10)),d+=1,d>=7&&(d-=7);continue}}let e=parseFloat(t);isNaN(e)?u.push(0):u.push(e),d+=1,d>=7&&(d-=7)}else{let e=parseFloat(t);isNaN(e)?u.push(0):u.push(e)}}for(;u.length>0&&!isNaN(u[0]);){let e=``,t=[],r=o,a=s,c,l,d,f,p,m,h,g,_,v;switch(n){case`l`:o+=u.shift(),s+=u.shift(),e=`L`,t.push(o,s);break;case`L`:o=u.shift(),s=u.shift(),t.push(o,s);break;case`m`:let r=u.shift(),a=u.shift();if(o+=r,s+=a,e=`M`,i.length>2&&i[i.length-1].command===`z`){for(let e=i.length-2;e>=0;e--)if(i[e].command===`M`){o=i[e].points[0]+r,s=i[e].points[1]+a;break}}t.push(o,s),n=`l`;break;case`M`:o=u.shift(),s=u.shift(),e=`M`,t.push(o,s),n=`L`;break;case`h`:o+=u.shift(),e=`L`,t.push(o,s);break;case`H`:o=u.shift(),e=`L`,t.push(o,s);break;case`v`:s+=u.shift(),e=`L`,t.push(o,s);break;case`V`:s=u.shift(),e=`L`,t.push(o,s);break;case`C`:t.push(u.shift(),u.shift(),u.shift(),u.shift()),o=u.shift(),s=u.shift(),t.push(o,s);break;case`c`:t.push(o+u.shift(),s+u.shift(),o+u.shift(),s+u.shift()),o+=u.shift(),s+=u.shift(),e=`C`,t.push(o,s);break;case`S`:l=o,d=s,c=i[i.length-1],c.command===`C`&&(l=o+(o-c.points[2]),d=s+(s-c.points[3])),t.push(l,d,u.shift(),u.shift()),o=u.shift(),s=u.shift(),e=`C`,t.push(o,s);break;case`s`:l=o,d=s,c=i[i.length-1],c.command===`C`&&(l=o+(o-c.points[2]),d=s+(s-c.points[3])),t.push(l,d,o+u.shift(),s+u.shift()),o+=u.shift(),s+=u.shift(),e=`C`,t.push(o,s);break;case`Q`:t.push(u.shift(),u.shift()),o=u.shift(),s=u.shift(),t.push(o,s);break;case`q`:t.push(o+u.shift(),s+u.shift()),o+=u.shift(),s+=u.shift(),e=`Q`,t.push(o,s);break;case`T`:l=o,d=s,c=i[i.length-1],c.command===`Q`&&(l=o+(o-c.points[0]),d=s+(s-c.points[1])),o=u.shift(),s=u.shift(),e=`Q`,t.push(l,d,o,s);break;case`t`:l=o,d=s,c=i[i.length-1],c.command===`Q`&&(l=o+(o-c.points[0]),d=s+(s-c.points[1])),o+=u.shift(),s+=u.shift(),e=`Q`,t.push(l,d,o,s);break;case`A`:f=u.shift(),p=u.shift(),m=u.shift(),h=u.shift(),g=u.shift(),_=o,v=s,o=u.shift(),s=u.shift(),e=`A`,t=this.convertEndpointToCenterParameterization(_,v,o,s,h,g,f,p,m);break;case`a`:f=u.shift(),p=u.shift(),m=u.shift(),h=u.shift(),g=u.shift(),_=o,v=s,o+=u.shift(),s+=u.shift(),e=`A`,t=this.convertEndpointToCenterParameterization(_,v,o,s,h,g,f,p,m);break}i.push({command:e||n,points:t,start:{x:r,y:a},pathLength:this.calcLength(r,a,e||n,t)})}(n===`z`||n===`Z`)&&i.push({command:`z`,points:[],start:void 0,pathLength:0})}return i}static calcLength(t,n,r,i){let a,o,s,c,l=e;switch(r){case`L`:return l.getLineLength(t,n,i[0],i[1]);case`C`:return fa([t,i[0],i[2],i[4]],[n,i[1],i[3],i[5]],1);case`Q`:return pa([t,i[0],i[2]],[n,i[1],i[3]],1);case`A`:a=0;let e=i[4],r=i[5],u=i[4]+r,d=Math.PI/180;if(Math.abs(e-u)u;c-=d)s=l.getPointOnEllipticalArc(i[0],i[1],i[2],i[3],c,0),a+=l.getLineLength(o.x,o.y,s.x,s.y),o=s;else for(c=e+d;c1&&(o*=Math.sqrt(f),s*=Math.sqrt(f));let p=Math.sqrt((o*o*(s*s)-o*o*(d*d)-s*s*(u*u))/(o*o*(d*d)+s*s*(u*u)));i===a&&(p*=-1),isNaN(p)&&(p=0);let m=p*o*d/s,h=p*-s*u/o,g=(e+n)/2+Math.cos(l)*m-Math.sin(l)*h,_=(t+r)/2+Math.sin(l)*m+Math.cos(l)*h,v=function(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1])},y=function(e,t){return(e[0]*t[0]+e[1]*t[1])/(v(e)*v(t))},b=function(e,t){return(e[0]*t[1]=1&&(w=0),a===0&&w>0&&(w-=2*Math.PI),a===1&&w<0&&(w+=2*Math.PI),[g,_,o,s,x,w,l,a]}};W.prototype.className=`Path`,W.prototype._attrsAffectingSize=[`data`],F(W),z.addGetterSetter(W,`data`);var _a=class extends ca{_sceneFunc(e){super._sceneFunc(e);let t=Math.PI*2,n=this.points(),r=n,i=this.tension()!==0&&n.length>4;i&&(r=this.getTensionPoints());let a=this.pointerLength(),o=n.length,s,c;if(i){let e=[r[r.length-4],r[r.length-3],r[r.length-2],r[r.length-1],n[o-2],n[o-1]],t=W.calcLength(r[r.length-4],r[r.length-3],`C`,e),i=W.getPointOnQuadraticBezier(Math.min(1,1-a/t),e[0],e[1],e[2],e[3],e[4],e[5]);s=n[o-2]-i.x,c=n[o-1]-i.y}else s=n[o-2]-n[o-4],c=n[o-1]-n[o-3];let l=(Math.atan2(c,s)+t)%t,u=this.pointerWidth();this.pointerAtEnding()&&(e.save(),e.beginPath(),e.translate(n[o-2],n[o-1]),e.rotate(l),e.moveTo(0,0),e.lineTo(-a,u/2),e.lineTo(-a,-u/2),e.closePath(),e.restore(),this.__fillStroke(e)),this.pointerAtBeginning()&&(e.save(),e.beginPath(),e.translate(n[0],n[1]),i?(s=(r[0]+r[2])/2-n[0],c=(r[1]+r[3])/2-n[1]):(s=n[2]-n[0],c=n[3]-n[1]),e.rotate((Math.atan2(-c,-s)+t)%t),e.moveTo(0,0),e.lineTo(-a,u/2),e.lineTo(-a,-u/2),e.closePath(),e.restore(),this.__fillStroke(e))}__fillStroke(e){let t=this.dashEnabled();t&&(this.attrs.dashEnabled=!1,e.setLineDash([])),e.fillStrokeShape(this),t&&(this.attrs.dashEnabled=!0)}getSelfRect(){let e=super.getSelfRect(),t=this.pointerWidth()/2;return{x:e.x,y:e.y-t,width:e.width,height:e.height+t*2}}};_a.prototype.className=`Arrow`,F(_a),z.addGetterSetter(_a,`pointerLength`,10,R()),z.addGetterSetter(_a,`pointerWidth`,10,R()),z.addGetterSetter(_a,`pointerAtBeginning`,!1),z.addGetterSetter(_a,`pointerAtEnding`,!0);var va=class extends U{_sceneFunc(e){e.beginPath(),e.arc(0,0,this.attrs.radius||0,0,Math.PI*2,!1),e.closePath(),e.fillStrokeShape(this)}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(e){this.radius()!==e/2&&this.radius(e/2)}setHeight(e){this.radius()!==e/2&&this.radius(e/2)}};va.prototype._centroid=!0,va.prototype.className=`Circle`,va.prototype._attrsAffectingSize=[`radius`],F(va),z.addGetterSetter(va,`radius`,0,R());var ya=class extends U{_sceneFunc(e){let t=this.radiusX(),n=this.radiusY();e.beginPath(),e.save(),t!==n&&e.scale(1,n/t),e.arc(0,0,t,0,Math.PI*2,!1),e.restore(),e.closePath(),e.fillStrokeShape(this)}getWidth(){return this.radiusX()*2}getHeight(){return this.radiusY()*2}setWidth(e){this.radiusX(e/2)}setHeight(e){this.radiusY(e/2)}};ya.prototype.className=`Ellipse`,ya.prototype._centroid=!0,ya.prototype._attrsAffectingSize=[`radiusX`,`radiusY`],F(ya),z.addComponentsGetterSetter(ya,`radius`,[`x`,`y`]),z.addGetterSetter(ya,`radiusX`,0,R()),z.addGetterSetter(ya,`radiusY`,0,R());var ba=class e extends U{constructor(e){super(e),this._loadListener=()=>{this._requestDraw()},this.on(`imageChange.konva`,e=>{this._removeImageLoad(e.oldVal),this._setImageLoad()}),this._setImageLoad()}_setImageLoad(){let e=this.image();e&&e.complete||e&&e.readyState===4||e&&e.addEventListener&&e.addEventListener(`load`,this._loadListener)}_removeImageLoad(e){e&&e.removeEventListener&&e.removeEventListener(`load`,this._loadListener)}destroy(){return this._removeImageLoad(this.image()),super.destroy(),this}_useBufferCanvas(){let e=!!this.cornerRadius(),t=this.hasShadow();return e&&t?!0:super._useBufferCanvas(!0)}_sceneFunc(e){let t=this.getWidth(),n=this.getHeight(),r=this.cornerRadius(),i=this.attrs.image,a;if(i){let e=this.attrs.cropWidth,r=this.attrs.cropHeight;a=e&&r?[i,this.cropX(),this.cropY(),e,r,0,0,t,n]:[i,0,0,t,n]}(this.hasFill()||this.hasStroke()||r)&&(e.beginPath(),r?I.drawRoundedRectPath(e,t,n,r):e.rect(0,0,t,n),e.closePath(),e.fillStrokeShape(this)),i&&(r&&e.clip(),e.drawImage.apply(e,a))}_hitFunc(e){let t=this.width(),n=this.height(),r=this.cornerRadius();e.beginPath(),r?I.drawRoundedRectPath(e,t,n,r):e.rect(0,0,t,n),e.closePath(),e.fillStrokeShape(this)}getWidth(){return this.attrs.width??this.image()?.width??0}getHeight(){return this.attrs.height??this.image()?.height??0}static fromURL(t,n,r=null){let i=I.createImageElement();i.onload=function(){n(new e({image:i}))},i.onerror=r,i.crossOrigin=`Anonymous`,i.src=t}};ba.prototype.className=`Image`,ba.prototype._attrsAffectingSize=[`image`],F(ba),z.addGetterSetter(ba,`cornerRadius`,0,tr(4)),z.addGetterSetter(ba,`image`),z.addComponentsGetterSetter(ba,`crop`,[`x`,`y`,`width`,`height`]),z.addGetterSetter(ba,`cropX`,0,R()),z.addGetterSetter(ba,`cropY`,0,R()),z.addGetterSetter(ba,`cropWidth`,0,R()),z.addGetterSetter(ba,`cropHeight`,0,R());var xa=[`fontFamily`,`fontSize`,`fontStyle`,`padding`,`lineHeight`,`text`,`width`,`height`,`pointerDirection`,`pointerWidth`,`pointerHeight`],Sa=`Change.konva`,Ca=`none`,wa=`up`,Ta=`right`,Ea=`down`,Da=`left`,Oa=xa.length,ka=class extends Gi{constructor(e){super(e),this.on(`add.konva`,function(e){this._addListeners(e.child),this._sync()})}getText(){return this.find(`Text`)[0]}getTag(){return this.find(`Tag`)[0]}_addListeners(e){let t=this,n,r=function(){t._sync()};for(n=0;n{t=Math.min(t,e.x),n=Math.max(n,e.x),r=Math.min(r,e.y),i=Math.max(i,e.y)}),{x:t,y:r,width:n-t,height:i-r}}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(e){this.radius(e/2)}setHeight(e){this.radius(e/2)}};Ma.prototype.className=`RegularPolygon`,Ma.prototype._centroid=!0,Ma.prototype._attrsAffectingSize=[`radius`],F(Ma),z.addGetterSetter(Ma,`radius`,0,R()),z.addGetterSetter(Ma,`sides`,0,R()),z.addGetterSetter(Ma,`cornerRadius`,0,tr(4));var Na=Math.PI*2,Pa=class extends U{_sceneFunc(e){e.beginPath(),e.arc(0,0,this.innerRadius(),0,Na,!1),e.moveTo(this.outerRadius(),0),e.arc(0,0,this.outerRadius(),Na,0,!0),e.closePath(),e.fillStrokeShape(this)}getWidth(){return this.outerRadius()*2}getHeight(){return this.outerRadius()*2}setWidth(e){this.outerRadius(e/2)}setHeight(e){this.outerRadius(e/2)}};Pa.prototype.className=`Ring`,Pa.prototype._centroid=!0,Pa.prototype._attrsAffectingSize=[`innerRadius`,`outerRadius`],F(Pa),z.addGetterSetter(Pa,`innerRadius`,0,R()),z.addGetterSetter(Pa,`outerRadius`,0,R());var Fa=class extends U{constructor(e){super(e),this._updated=!0,this.anim=new qi(()=>{let e=this._updated;return this._updated=!1,e}),this.on(`animationChange.konva`,function(){this.frameIndex(0)}),this.on(`frameIndexChange.konva`,function(){this._updated=!0}),this.on(`frameRateChange.konva`,function(){this.anim.isRunning()&&(clearInterval(this.interval),this._setInterval())})}_sceneFunc(e){let t=this.animation(),n=this.frameIndex(),r=n*4,i=this.animations()[t],a=this.frameOffsets(),o=i[r+0],s=i[r+1],c=i[r+2],l=i[r+3],u=this.image();if((this.hasFill()||this.hasStroke())&&(e.beginPath(),e.rect(0,0,c,l),e.closePath(),e.fillStrokeShape(this)),u)if(a){let r=a[t],i=n*2;e.drawImage(u,o,s,c,l,r[i+0],r[i+1],c,l)}else e.drawImage(u,o,s,c,l,0,0,c,l)}_hitFunc(e){let t=this.animation(),n=this.frameIndex(),r=n*4,i=this.animations()[t],a=this.frameOffsets(),o=i[r+2],s=i[r+3];if(e.beginPath(),a){let r=a[t],i=n*2;e.rect(r[i+0],r[i+1],o,s)}else e.rect(0,0,o,s);e.closePath(),e.fillShape(this)}_useBufferCanvas(){return super._useBufferCanvas(!0)}_setInterval(){let e=this;this.interval=setInterval(function(){e._updateIndex()},1e3/this.frameRate())}start(){if(this.isRunning())return;let e=this.getLayer();this.anim.setLayers(e),this._setInterval(),this.anim.start()}stop(){this.anim.stop(),clearInterval(this.interval)}isRunning(){return this.anim.isRunning()}_updateIndex(){let e=this.frameIndex(),t=this.animation();e{if(/\p{Emoji}/u.test(t)){let i=r[n+1];i&&/\p{Emoji_Modifier}|\u200D/u.test(i)?(e.push(t+i),r[n+1]=``):e.push(t)}else /\p{Regional_Indicator}{2}/u.test(t+(r[n+1]||``))?e.push(t+r[n+1]):n>0&&/\p{Mn}|\p{Me}|\p{Mc}/u.test(t)?e[e.length-1]+=t:t&&e.push(t);return e},[])}var Ra=`auto`,za=`center`,Ba=`inherit`,Va=`justify`,Ha=`Change.konva`,Ua=`2d`,Wa=`-`,Ga=`left`,Ka=`text`,qa=`Text`,Ja=`top`,Ya=`bottom`,Xa=`middle`,Za=`normal`,Qa=`px `,$a=` `,eo=`right`,to=`rtl`,no=`word`,ro=`char`,io=`none`,ao=`…`,oo=[`direction`,`fontFamily`,`fontSize`,`fontStyle`,`fontVariant`,`padding`,`align`,`verticalAlign`,`lineHeight`,`text`,`width`,`height`,`wrap`,`ellipsis`,`letterSpacing`],so=oo.length,co=null;function lo(){if(co!==null)return co;co=!1;try{let e=document.createElement(`canvas`);e.width=10,e.height=10;let t=e.getContext(Ua);if(t){t.globalAlpha=0,t.shadowColor=`black`,t.shadowBlur=5,t.shadowOffsetX=5,t.shadowOffsetY=5,t.fillStyle=`black`,t.font=`10px Arial`,t.fillText(`X`,0,10);let e=t.getImageData(0,0,10,10).data;for(let t=3;t0){co=!0;break}}}catch{}return co}function uo(e){return e.split(`,`).map(e=>{e=e.trim();let t=e.indexOf(` `)>=0,n=e.indexOf(`"`)>=0||e.indexOf(`'`)>=0;return t&&!n&&(e=`"${e}"`),e}).join(`, `)}var fo;function po(){return fo||(fo=I.createCanvasElement().getContext(Ua),fo)}function mo(e){e.fillText(this._partialText,this._partialTextX,this._partialTextY)}function ho(e){e.setAttr(`miterLimit`,2),e.strokeText(this._partialText,this._partialTextX,this._partialTextY)}function go(e){return e||={},!e.fillLinearGradientColorStops&&!e.fillRadialGradientColorStops&&!e.fillPatternImage&&(e.fill=e.fill||`black`),e}var G=class extends U{constructor(e){super(go(e)),this._partialTextX=0,this._partialTextY=0;for(let e=0;ee+La(t.text).length,0);f({char:s,index:a+n,x:o,y:y+0,lineIndex:v,column:a,isLastInLine:x,width:this.measureSize(s).width,context:e})}e.fillStrokeShape(this),f&&e.restore(),o+=this.measureSize(s).width+d}}else d!==0&&e.setAttr(`letterSpacing`,`${d}px`),this._partialTextX=o,this._partialTextY=y+0,this._partialText=m,e.fillStrokeShape(this);if(_){e.save(),e.beginPath();let t=P.legacyTextRendering?0:-Math.round(i/4),n=S;e.moveTo(n,y+0+t);let a=l===Va&&!x?u-r*2:b;e.lineTo(n+Math.round(a),y+0+t),e.lineWidth=i/15,e.strokeStyle=this._getLinearGradient()||p,e.stroke(),e.restore()}e.restore(),n>1&&(y+=a)}}_hitFunc(e){let t=this.getWidth(),n=this.getHeight();e.beginPath(),e.rect(0,0,t,n),e.closePath(),e.fillStrokeShape(this)}setText(e){let t=I._isString(e)?e:e==null?``:e+``;return this._setAttr(Ka,t),this}getWidth(){return this.attrs.width===Ra||this.attrs.width===void 0?this.getTextWidth()+this.padding()*2:this.attrs.width}getHeight(){return this.attrs.height===Ra||this.attrs.height===void 0?this.fontSize()*this.textArr.length*this.lineHeight()+this.padding()*2:this.attrs.height}getTextWidth(){return this.textWidth}getTextHeight(){return I.warn(`text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height.`),this.textHeight}measureSize(e){let t=po(),n=this.fontSize(),r;t.save(),t.font=this._getContextFont(),r=t.measureText(e),t.restore();let i=n/100;return{actualBoundingBoxAscent:r.actualBoundingBoxAscent??71.58203125*i,actualBoundingBoxDescent:r.actualBoundingBoxDescent??0,actualBoundingBoxLeft:r.actualBoundingBoxLeft??-7.421875*i,actualBoundingBoxRight:r.actualBoundingBoxRight??75.732421875*i,alphabeticBaseline:r.alphabeticBaseline??0,emHeightAscent:r.emHeightAscent??100*i,emHeightDescent:r.emHeightDescent??-20*i,fontBoundingBoxAscent:r.fontBoundingBoxAscent??91*i,fontBoundingBoxDescent:r.fontBoundingBoxDescent??21*i,hangingBaseline:r.hangingBaseline??72.80000305175781*i,ideographicBaseline:r.ideographicBaseline??-21*i,width:r.width,height:n}}_getContextFont(){return this.fontStyle()+$a+this.fontVariant()+$a+(this.fontSize()+Qa)+uo(this.fontFamily())}_addTextLine(e){this.align()===Va&&(e=e.trim());let t=this._getTextWidth(e);return this.textArr.push({text:e,width:t,lastInParagraph:!1})}_getTextWidth(e){let t=this.letterSpacing(),n=e.length;return po().measureText(e).width+t*n}_setTextData(){let e=this.text().split(` -`),t=+this.fontSize(),n=0,r=this.lineHeight()*t,i=this.attrs.width,a=this.attrs.height,o=i!==Ra&&i!==void 0,s=a!==Ra&&a!==void 0,c=this.padding(),l=i-c*2,u=a-c*2,d=0,f=this.wrap(),p=f!==ro&&f!==io,m=this.ellipsis();this.textArr=[],po().font=this._getContextFont();let h=m?this._getTextWidth(ao):0;for(let t=0,i=e.length;tl)for(;a.length>0;){let e=0,t=La(a).length,i=``,o=0;for(;e>>1,c=La(a).slice(0,n+1).join(``),f=this._getTextWidth(c);(m&&s&&d+r>u?f+h:f)<=l?(e=n+1,i=c,o=f):t=n}if(i){if(p){let t=La(a),n=La(i),r=t[n.length],s=r===$a||r===Wa,c;if(s&&o<=l)c=n.length;else{let e=n.lastIndexOf($a),t=n.lastIndexOf(Wa);c=Math.max(e,t)+1}c>0&&(e=c,i=t.slice(0,e).join(``),o=this._getTextWidth(i))}if(i=i.trimRight(),this._addTextLine(i),n=Math.max(n,o),d+=r,this._shouldHandleEllipsis(d)){this._tryToAddEllipsisToLastLine();break}if(a=La(a).slice(e).join(``).trimLeft(),a.length>0&&(c=this._getTextWidth(a),c<=l)){this._addTextLine(a),d+=r,n=Math.max(n,c);break}}else break}else this._addTextLine(a),d+=r,n=Math.max(n,c),this._shouldHandleEllipsis(d)&&tu)break}this.textHeight=t,this.textWidth=n}_shouldHandleEllipsis(e){let t=+this.fontSize(),n=this.lineHeight()*t,r=this.attrs.height,i=r!==Ra&&r!==void 0,a=r-this.padding()*2;return this.wrap()===io||i&&e+n>a}_tryToAddEllipsisToLastLine(){let e=this.attrs.width,t=e!==Ra&&e!==void 0,n=e-this.padding()*2,r=this.ellipsis(),i=this.textArr[this.textArr.length-1];!i||!r||(t&&(this._getTextWidth(i.text+ao)this.pathLength?null:W.getPointAtLengthOfDataArray(e,this.dataArray)}_readDataAttribute(){this.dataArray=W.parsePathData(this.attrs.data),this.pathLength=this._getTextPathLength()}_sceneFunc(e){e.setAttr(`font`,this._getContextFont()),e.setAttr(`textBaseline`,this.textBaseline()),e.setAttr(`textAlign`,`left`),e.save();let t=this.textDecoration(),n=this.fill(),r=this.fontSize(),i=this.glyphInfo,a=t.indexOf(`underline`)!==-1,o=t.indexOf(`line-through`)!==-1;a&&e.beginPath();for(let t=0;t=1){let n=t[0].p0;e.moveTo(n.x,n.y)}for(let n=0;nthis.pathLength&&f-this.pathLength<=c?this.pathLength:f);if(!p)return;let m=W.getLineLength(r.x,r.y,p.x,p.y),h=0;if(s)try{h=s(t[n-1].char,i)*this.fontSize()}catch{h=0}r.x+=h,p.x+=h,this.textWidth+=h;let g=W.getPointOnLine(h+m/2,r.x,r.y,p.x,p.y),_=Math.atan2(p.y-r.y,p.x-r.x);this.glyphInfo.push({transposeX:g.x,transposeY:g.y,text:e[n],rotation:_,p0:r,p1:p,width:m}),d+=u}}getSelfRect(){if(!this.glyphInfo.length)return{x:0,y:0,width:0,height:0};let e=[];this.glyphInfo.forEach(function(t){e.push(t.p0.x),e.push(t.p0.y),e.push(t.p1.x),e.push(t.p1.y)});let t=e[0]||0,n=e[0]||0,r=e[1]||0,i=e[1]||0,a,o;for(let s=0;se+`.${xo}`).join(` `),Co=`nodesRect`,wo=[`widthChange`,`heightChange`,`scaleXChange`,`scaleYChange`,`skewXChange`,`skewYChange`,`rotationChange`,`offsetXChange`,`offsetYChange`,`transformsEnabledChange`,`strokeWidthChange`,`draggableChange`],To={"top-left":-45,"top-center":0,"top-right":45,"middle-right":-90,"middle-left":90,"bottom-left":-135,"bottom-center":180,"bottom-right":135},Eo=`ontouchstart`in P._global;function Do(e,t,n){if(e===`rotater`)return n;t+=I.degToRad(To[e]||0);let r=(I.radToDeg(t)%360+360)%360;return I._inRange(r,337.5,360)||I._inRange(r,0,22.5)?`ns-resize`:I._inRange(r,22.5,67.5)?`nesw-resize`:I._inRange(r,67.5,112.5)?`ew-resize`:I._inRange(r,112.5,157.5)?`nwse-resize`:I._inRange(r,157.5,202.5)?`ns-resize`:I._inRange(r,202.5,247.5)?`nesw-resize`:I._inRange(r,247.5,292.5)?`ew-resize`:I._inRange(r,292.5,337.5)?`nwse-resize`:(I.error(`Transformer has unknown angle for cursor detection: `+r),`pointer`)}var Oo=[`top-left`,`top-center`,`top-right`,`middle-right`,`middle-left`,`bottom-left`,`bottom-center`,`bottom-right`],ko=1e8;function Ao(e){return{x:e.x+e.width/2*Math.cos(e.rotation)+e.height/2*Math.sin(-e.rotation),y:e.y+e.height/2*Math.cos(e.rotation)+e.width/2*Math.sin(e.rotation)}}function jo(e,t,n){let r=n.x+(e.x-n.x)*Math.cos(t)-(e.y-n.y)*Math.sin(t),i=n.y+(e.x-n.x)*Math.sin(t)+(e.y-n.y)*Math.cos(t);return{...e,rotation:e.rotation+t,x:r,y:i}}function Mo(e,t){return jo(e,t,Ao(e))}function No(e,t,n){let r=t;for(let i=0;ie.isAncestorOf(this)?(I.error(`Konva.Transformer cannot be an a child of the node you are trying to attach`),!1):!0);return this._nodes=e=t,e.length===1&&this.useSingleNodeRotation()?this.rotation(e[0].getAbsoluteRotation()):this.rotation(0),this._nodes.forEach(e=>{let t=()=>{this.nodes().length===1&&this.useSingleNodeRotation()&&this.rotation(this.nodes()[0].getAbsoluteRotation()),this._resetTransformCache(),!this._transforming&&!this.isDragging()&&this.update()};if(e._attrsAffectingSize.length){let n=e._attrsAffectingSize.map(e=>e+`Change.`+this._getEventNamespace()).join(` `);e.on(n,t)}e.on(wo.map(e=>e+`.${this._getEventNamespace()}`).join(` `),t),e.on(`absoluteTransformChange.${this._getEventNamespace()}`,t),this._proxyDrag(e)}),this._resetTransformCache(),this.findOne(`.top-left`)&&this.update(),this}_proxyDrag(e){let t;e.on(`dragstart.${this._getEventNamespace()}`,n=>{t=e.getAbsolutePosition(),!this.isDragging()&&e!==this.findOne(`.back`)&&this.startDrag(n,!1)}),e.on(`dragmove.${this._getEventNamespace()}`,n=>{if(!t)return;let r=e.getAbsolutePosition(),i=r.x-t.x,a=r.y-t.y;this.nodes().forEach(t=>{if(t===e||t.isDragging())return;let r=t.getAbsolutePosition();t.setAbsolutePosition({x:r.x+i,y:r.y+a}),t.startDrag(n)}),t=null})}getNodes(){return this._nodes||[]}getActiveAnchor(){return this._movingAnchorName}detach(){this._nodes&&this._nodes.forEach(e=>{e.off(`.`+this._getEventNamespace())}),this._nodes=[],this._resetTransformCache()}_resetTransformCache(){this._clearCache(Co),this._clearCache(`transform`),this._clearSelfAndDescendantCache(`absoluteTransform`)}_getNodeRect(){return this._getCache(Co,this.__getNodeRect)}__getNodeShape(e,t=this.rotation(),n){let r=e.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),i=e.getAbsoluteScale(n),a=e.getAbsolutePosition(n),o=r.x*i.x-e.offsetX()*i.x,s=r.y*i.y-e.offsetY()*i.y,c=(P.getAngle(e.getAbsoluteRotation())+Math.PI*2)%(Math.PI*2);return jo({x:a.x+o*Math.cos(c)+s*Math.sin(-c),y:a.y+s*Math.cos(c)+o*Math.sin(c),width:r.width*i.x,height:r.height*i.y,rotation:c},-P.getAngle(t),{x:0,y:0})}__getNodeRect(){if(!this.getNode())return{x:-ko,y:-ko,width:0,height:0,rotation:0};let e=[];this.nodes().map(t=>{let n=t.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),r=[{x:n.x,y:n.y},{x:n.x+n.width,y:n.y},{x:n.x+n.width,y:n.y+n.height},{x:n.x,y:n.y+n.height}],i=t.getAbsoluteTransform();r.forEach(function(t){let n=i.point(t);e.push(n)})});let t=new pn;t.rotate(-P.getAngle(this.rotation()));let n=1/0,r=1/0,i=-1/0,a=-1/0;e.forEach(function(e){let o=t.point(e);n===void 0&&(n=i=o.x,r=a=o.y),n=Math.min(n,o.x),r=Math.min(r,o.y),i=Math.max(i,o.x),a=Math.max(a,o.y)}),t.invert();let o=t.point({x:n,y:r});return{x:o.x,y:o.y,width:i-n,height:a-r,rotation:P.getAngle(this.rotation())}}getX(){return this._getNodeRect().x}getY(){return this._getNodeRect().y}getWidth(){return this._getNodeRect().width}getHeight(){return this._getNodeRect().height}_createElements(){this._createBack(),Oo.forEach(e=>{this._createAnchor(e)}),this._createAnchor(`rotater`),this._elementsCreated=!0}_createAnchor(e){let t=new ja({stroke:`rgb(0, 161, 255)`,fill:`white`,strokeWidth:1,name:e+` _anchor`,dragDistance:0,draggable:!0,hitStrokeWidth:Eo?10:`auto`}),n=this;t.on(`mousedown touchstart`,function(e){n._handleMouseDown(e)}),t.on(`dragstart`,e=>{t.stopDrag(),e.cancelBubble=!0}),t.on(`dragend`,e=>{e.cancelBubble=!0}),t.on(`mouseenter`,()=>{let n=Do(e,P.getAngle(this.rotation()),this.rotateAnchorCursor());t.getStage().content&&(t.getStage().content.style.cursor=n),this._cursorChange=!0}),t.on(`mouseout`,()=>{t.getStage().content&&(t.getStage().content.style.cursor=``),this._cursorChange=!1}),this.add(t)}_createBack(){let e=new U({name:`back`,width:0,height:0,sceneFunc(e,t){let n=t.getParent(),r=n.padding(),i=t.width(),a=t.height();if(e.beginPath(),e.rect(-r,-r,i+r*2,a+r*2),n.rotateEnabled()&&n.rotateLineVisible()){let t=n.rotateAnchorAngle(),r=n.rotateAnchorOffset(),o=I.degToRad(t),s=Math.sin(o),c=-Math.cos(o),l=i/2,u=a/2,d=1/0;c<0?d=Math.min(d,-u/c):c>0&&(d=Math.min(d,(a-u)/c)),s<0?d=Math.min(d,-l/s):s>0&&(d=Math.min(d,(i-l)/s));let f=l+s*d,p=u+c*d,m=I._sign(a),h=f+s*r*m,g=p+c*r*m;e.moveTo(f,p),e.lineTo(h,g)}e.fillStrokeShape(t)},hitFunc:(e,t)=>{if(!this.shouldOverdrawWholeArea())return;let n=this.padding();e.beginPath(),e.rect(-n,-n,t.width()+n*2,t.height()+n*2),e.fillStrokeShape(t)}});this.add(e),this._proxyDrag(e),e.on(`dragstart`,e=>{e.cancelBubble=!0}),e.on(`dragmove`,e=>{e.cancelBubble=!0}),e.on(`dragend`,e=>{e.cancelBubble=!0}),this.on(`dragmove`,e=>{this.update()})}_handleMouseDown(e){if(this._transforming)return;this._movingAnchorName=e.target.name().split(` `)[0];let t=this._getNodeRect(),n=t.width,r=t.height,i=Math.sqrt(n**2+r**2);this.sin=Math.abs(r/i),this.cos=Math.abs(n/i),typeof window<`u`&&(window.addEventListener(`mousemove`,this._handleMouseMove),window.addEventListener(`touchmove`,this._handleMouseMove),window.addEventListener(`mouseup`,this._handleMouseUp,!0),window.addEventListener(`touchend`,this._handleMouseUp,!0)),this._transforming=!0;let a=e.target.getAbsolutePosition(),o=e.target.getStage().getPointerPosition();this._anchorDragOffset={x:o.x-a.x,y:o.y-a.y},Po++,this._fire(`transformstart`,{evt:e.evt,target:this.getNode()}),this._nodes.forEach(t=>{t._fire(`transformstart`,{evt:e.evt,target:t})})}_handleMouseMove(e){let t,n,r,i=this.findOne(`.`+this._movingAnchorName),a=i.getStage();a.setPointersPositions(e);let o=a.getPointerPosition(),s={x:o.x-this._anchorDragOffset.x,y:o.y-this._anchorDragOffset.y},c=i.getAbsolutePosition();this.anchorDragBoundFunc()&&(s=this.anchorDragBoundFunc()(c,s,e)),i.setAbsolutePosition(s);let l=i.getAbsolutePosition();if(c.x===l.x&&c.y===l.y)return;if(this._movingAnchorName===`rotater`){let r=this._getNodeRect();t=i.x()-r.width/2,n=-i.y()+r.height/2;let a=P.getAngle(this.rotateAnchorAngle()),o=Math.atan2(-n,t)+Math.PI/2-a;r.height<0&&(o-=Math.PI);let s=P.getAngle(this.rotation())+o,c=P.getAngle(this.rotationSnapTolerance()),l=Mo(r,No(this.rotationSnaps(),s,c)-r.rotation);this._fitNodesInto(l,e);return}let u=this.shiftBehavior(),d;d=u===`inverted`?this.keepRatio()&&!e.shiftKey:u===`none`?this.keepRatio():this.keepRatio()||e.shiftKey;let f=this.centeredScaling()||e.altKey;if(this._movingAnchorName===`top-left`){if(d){let e=f?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(`.bottom-right`).x(),y:this.findOne(`.bottom-right`).y()};r=Math.sqrt((e.x-i.x())**2+(e.y-i.y())**2);let a=this.findOne(`.top-left`).x()>e.x?-1:1,o=this.findOne(`.top-left`).y()>e.y?-1:1;t=r*this.cos*a,n=r*this.sin*o,this.findOne(`.top-left`).x(e.x-t),this.findOne(`.top-left`).y(e.y-n)}}else if(this._movingAnchorName===`top-center`)this.findOne(`.top-left`).y(i.y());else if(this._movingAnchorName===`top-right`){if(d){let e=f?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(`.bottom-left`).x(),y:this.findOne(`.bottom-left`).y()};r=Math.sqrt((i.x()-e.x)**2+(e.y-i.y())**2);let a=this.findOne(`.top-right`).x()e.y?-1:1;t=r*this.cos*a,n=r*this.sin*o,this.findOne(`.top-right`).x(e.x+t),this.findOne(`.top-right`).y(e.y-n)}var p=i.position();this.findOne(`.top-left`).y(p.y),this.findOne(`.bottom-right`).x(p.x)}else if(this._movingAnchorName===`middle-left`)this.findOne(`.top-left`).x(i.x());else if(this._movingAnchorName===`middle-right`)this.findOne(`.bottom-right`).x(i.x());else if(this._movingAnchorName===`bottom-left`){if(d){let e=f?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(`.top-right`).x(),y:this.findOne(`.top-right`).y()};r=Math.sqrt((e.x-i.x())**2+(i.y()-e.y)**2);let a=e.x{var n;t._fire(`transformend`,{evt:e,target:t}),(n=t.getLayer())==null||n.batchDraw()}),this._movingAnchorName=null}}_fitNodesInto(e,t){let n=this._getNodeRect();if(I._inRange(e.width,-this.padding()*2-1,1)){this.update();return}if(I._inRange(e.height,-this.padding()*2-1,1)){this.update();return}let r=new pn;if(r.rotate(P.getAngle(this.rotation())),this._movingAnchorName&&e.width<0&&this._movingAnchorName.indexOf(`left`)>=0){let t=r.point({x:-this.padding()*2,y:0});e.x+=t.x,e.y+=t.y,e.width+=this.padding()*2,this._movingAnchorName=this._movingAnchorName.replace(`left`,`right`),this._anchorDragOffset.x-=t.x,this._anchorDragOffset.y-=t.y}else if(this._movingAnchorName&&e.width<0&&this._movingAnchorName.indexOf(`right`)>=0){let t=r.point({x:this.padding()*2,y:0});this._movingAnchorName=this._movingAnchorName.replace(`right`,`left`),this._anchorDragOffset.x-=t.x,this._anchorDragOffset.y-=t.y,e.width+=this.padding()*2}if(this._movingAnchorName&&e.height<0&&this._movingAnchorName.indexOf(`top`)>=0){let t=r.point({x:0,y:-this.padding()*2});e.x+=t.x,e.y+=t.y,this._movingAnchorName=this._movingAnchorName.replace(`top`,`bottom`),this._anchorDragOffset.x-=t.x,this._anchorDragOffset.y-=t.y,e.height+=this.padding()*2}else if(this._movingAnchorName&&e.height<0&&this._movingAnchorName.indexOf(`bottom`)>=0){let t=r.point({x:0,y:this.padding()*2});this._movingAnchorName=this._movingAnchorName.replace(`bottom`,`top`),this._anchorDragOffset.x-=t.x,this._anchorDragOffset.y-=t.y,e.height+=this.padding()*2}if(this.boundBoxFunc()){let t=this.boundBoxFunc()(n,e);t?e=t:I.warn(`boundBoxFunc returned falsy. You should return new bound rect from it!`)}let i=1e7,a=new pn;a.translate(n.x,n.y),a.rotate(n.rotation),a.scale(n.width/i,n.height/i);let o=new pn,s=e.width/i,c=e.height/i;this.flipEnabled()===!1?(o.translate(e.x,e.y),o.rotate(e.rotation),o.translate(e.width<0?e.width:0,e.height<0?e.height:0),o.scale(Math.abs(s),Math.abs(c))):(o.translate(e.x,e.y),o.rotate(e.rotation),o.scale(s,c));let l=o.multiply(a.invert());this._nodes.forEach(e=>{var t;if(!e.getStage())return;let n=e.getParent().getAbsoluteTransform(),r=e.getTransform().copy();r.translate(e.offsetX(),e.offsetY());let i=new pn;i.multiply(n.copy().invert()).multiply(l).multiply(n).multiply(r);let a=i.decompose();e.setAttrs(a),(t=e.getLayer())==null||t.batchDraw()}),this.rotation(I._getRotation(e.rotation)),this._nodes.forEach(e=>{this._fire(`transform`,{evt:t,target:e}),e._fire(`transform`,{evt:t,target:e})}),this._resetTransformCache(),this.update(),this.getLayer().batchDraw()}forceUpdate(){this._resetTransformCache(),this.update()}_batchChangeChild(e,t){this.findOne(e).setAttrs(t)}update(){var e;let t=this._getNodeRect();this.rotation(I._getRotation(t.rotation));let n=t.width,r=t.height,i=this.enabledAnchors(),a=this.resizeEnabled(),o=this.padding(),s=this.anchorSize(),c=this.find(`._anchor`);c.forEach(e=>{e.setAttrs({width:s,height:s,offsetX:s/2,offsetY:s/2,stroke:this.anchorStroke(),strokeWidth:this.anchorStrokeWidth(),fill:this.anchorFill(),cornerRadius:this.anchorCornerRadius()})}),this._batchChangeChild(`.top-left`,{x:0,y:0,offsetX:s/2+o,offsetY:s/2+o,visible:a&&i.indexOf(`top-left`)>=0}),this._batchChangeChild(`.top-center`,{x:n/2,y:0,offsetY:s/2+o,visible:a&&i.indexOf(`top-center`)>=0}),this._batchChangeChild(`.top-right`,{x:n,y:0,offsetX:s/2-o,offsetY:s/2+o,visible:a&&i.indexOf(`top-right`)>=0}),this._batchChangeChild(`.middle-left`,{x:0,y:r/2,offsetX:s/2+o,visible:a&&i.indexOf(`middle-left`)>=0}),this._batchChangeChild(`.middle-right`,{x:n,y:r/2,offsetX:s/2-o,visible:a&&i.indexOf(`middle-right`)>=0}),this._batchChangeChild(`.bottom-left`,{x:0,y:r,offsetX:s/2+o,offsetY:s/2-o,visible:a&&i.indexOf(`bottom-left`)>=0}),this._batchChangeChild(`.bottom-center`,{x:n/2,y:r,offsetY:s/2-o,visible:a&&i.indexOf(`bottom-center`)>=0}),this._batchChangeChild(`.bottom-right`,{x:n,y:r,offsetX:s/2-o,offsetY:s/2-o,visible:a&&i.indexOf(`bottom-right`)>=0});let l=this.rotateAnchorAngle(),u=this.rotateAnchorOffset(),d=I.degToRad(l),f=Math.sin(d),p=-Math.cos(d),m=n/2,h=r/2,g=1/0;p<0?g=Math.min(g,-h/p):p>0&&(g=Math.min(g,(r-h)/p)),f<0?g=Math.min(g,-m/f):f>0&&(g=Math.min(g,(n-m)/f));let _=m+f*g,v=h+p*g,y=I._sign(r);this._batchChangeChild(`.rotater`,{x:_+f*u*y,y:v+p*u*y-o*p,visible:this.rotateEnabled()}),this._batchChangeChild(`.back`,{width:n,height:r,visible:this.borderEnabled(),stroke:this.borderStroke(),strokeWidth:this.borderStrokeWidth(),dash:this.borderDash(),draggable:this.nodes().some(e=>e.draggable()),x:0,y:0});let b=this.anchorStyleFunc();b&&c.forEach(e=>{b(e)}),(e=this.getLayer())==null||e.batchDraw()}isTransforming(){return this._transforming}stopTransform(){if(this._transforming){this._removeEvents();let e=this.findOne(`.`+this._movingAnchorName);e&&e.stopDrag()}}destroy(){return this.getStage()&&this._cursorChange&&this.getStage().content&&(this.getStage().content.style.cursor=``),Gi.prototype.destroy.call(this),this.detach(),this._removeEvents(),this}add(...e){return this._elementsCreated?(I.error(`You cannot add external nodes to the Transformer. Use tr.nodes([node]) instead.`),this):super.add(...e)}toObject(){return B.prototype.toObject.call(this)}clone(e){return B.prototype.clone.call(this,e)}getClientRect(){return this.nodes().length>0?super.getClientRect():{x:0,y:0,width:0,height:0}}};q.isTransforming=()=>Po>0;function Fo(e){return e instanceof Array||I.warn(`enabledAnchors value should be an array`),e instanceof Array&&e.forEach(function(e){Oo.indexOf(e)===-1&&I.warn(`Unknown anchor name: `+e+`. Available names are: `+Oo.join(`, `))}),e||[]}q.prototype.className=`Transformer`,F(q),z.addGetterSetter(q,`enabledAnchors`,Oo,Fo),z.addGetterSetter(q,`flipEnabled`,!0,or()),z.addGetterSetter(q,`resizeEnabled`,!0),z.addGetterSetter(q,`anchorSize`,10,R()),z.addGetterSetter(q,`rotateEnabled`,!0),z.addGetterSetter(q,`rotateLineVisible`,!0),z.addGetterSetter(q,`rotationSnaps`,[]),z.addGetterSetter(q,`rotateAnchorOffset`,50,R()),z.addGetterSetter(q,`rotateAnchorAngle`,0,R()),z.addGetterSetter(q,`rotateAnchorCursor`,`crosshair`),z.addGetterSetter(q,`rotationSnapTolerance`,5,R()),z.addGetterSetter(q,`borderEnabled`,!0),z.addGetterSetter(q,`anchorStroke`,`rgb(0, 161, 255)`),z.addGetterSetter(q,`anchorStrokeWidth`,1,R()),z.addGetterSetter(q,`anchorFill`,`white`),z.addGetterSetter(q,`anchorCornerRadius`,0,R()),z.addGetterSetter(q,`borderStroke`,`rgb(0, 161, 255)`),z.addGetterSetter(q,`borderStrokeWidth`,1,R()),z.addGetterSetter(q,`borderDash`),z.addGetterSetter(q,`keepRatio`,!0),z.addGetterSetter(q,`shiftBehavior`,`default`),z.addGetterSetter(q,`centeredScaling`,!1),z.addGetterSetter(q,`ignoreStroke`,!1),z.addGetterSetter(q,`padding`,0,R()),z.addGetterSetter(q,`nodes`),z.addGetterSetter(q,`node`),z.addGetterSetter(q,`boundBoxFunc`),z.addGetterSetter(q,`anchorDragBoundFunc`),z.addGetterSetter(q,`anchorStyleFunc`),z.addGetterSetter(q,`shouldOverdrawWholeArea`,!1),z.addGetterSetter(q,`useSingleNodeRotation`,!0),z.backCompat(q,{lineEnabled:`borderEnabled`,rotateHandlerOffset:`rotateAnchorOffset`,enabledHandlers:`enabledAnchors`});var Io=class extends U{_sceneFunc(e){e.beginPath(),e.arc(0,0,this.radius(),0,P.getAngle(this.angle()),this.clockwise()),e.lineTo(0,0),e.closePath(),e.fillStrokeShape(this)}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(e){this.radius(e/2)}setHeight(e){this.radius(e/2)}};Io.prototype.className=`Wedge`,Io.prototype._centroid=!0,Io.prototype._attrsAffectingSize=[`radius`],F(Io),z.addGetterSetter(Io,`radius`,0,R()),z.addGetterSetter(Io,`angle`,0,R()),z.addGetterSetter(Io,`clockwise`,!1),z.backCompat(Io,{angleDeg:`angle`,getAngleDeg:`getAngle`,setAngleDeg:`setAngle`});function Lo(){this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}var Ro=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],zo=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function Bo(e,t){let n=e.data,r=e.width,i=e.height,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,ee=t+t+1,T=r-1,te=i-1,E=t+1,ne=E*(E+1)/2,re=new Lo,D=Ro[t],O=zo[t],ie=null,k=re,A=null,j=null;for(let e=1;e>O,C===0?n[o]=n[o+1]=n[o+2]=0:(C=255/C,n[o]=(c*D>>O)*C,n[o+1]=(l*D>>O)*C,n[o+2]=(u*D>>O)*C),c-=f,l-=p,u-=m,d-=h,f-=A.r,p-=A.g,m-=A.b,h-=A.a,a=s+((a=e+t+1)>O,C>0?(C=255/C,n[a]=(c*D>>O)*C,n[a+1]=(l*D>>O)*C,n[a+2]=(u*D>>O)*C):n[a]=n[a+1]=n[a+2]=0,c-=f,l-=p,u-=m,d-=h,f-=A.r,p-=A.g,m-=A.b,h-=A.a,a=e+((a=t+E)0&&Bo(e,t)};z.addGetterSetter(B,`blurRadius`,0,R(),z.afterSetFilter);var Ho=function(e){let t=this.brightness()*255,n=e.data,r=n.length;for(let e=0;e255?255:i,a=a<0?0:a>255?255:a,o=o<0?0:o>255?255:o,n[e]=i,n[e+1]=a,n[e+2]=o};z.addGetterSetter(B,`contrast`,0,R(),z.afterSetFilter);var Go=function(e){let t=e.data,n=e.width,r=e.height,i=Math.min(1,Math.max(0,this.embossStrength?.call(this)??.5)),a=Math.min(1,Math.max(0,this.embossWhiteLevel?.call(this)??.5)),o={"top-left":315,top:270,"top-right":225,right:180,"bottom-right":135,bottom:90,"bottom-left":45,left:0}[this.embossDirection?.call(this)??`top-left`]??315,s=!!(this.embossBlend?.call(this)??!1),c=i*10,l=a*255,u=o*Math.PI/180,d=Math.cos(u),f=Math.sin(u),p=128/1020*c,m=new Uint8ClampedArray(t),h=new Float32Array(n*r);for(let e=0,n=0;ne<0?0:e>255?255:e;for(let e=1;ei&&(i=a),c=t[e+1],cs&&(s=c),d=t[e+2],du&&(u=d);i===r&&(i=255,r=0),s===o&&(s=255,o=0),u===l&&(u=255,l=0);let p,m,h,g,_,v;if(f>0)p=i+f*(255-i),m=r-f*(r-0),h=s+f*(255-s),g=o-f*(o-0),_=u+f*(255-u),v=l-f*(l-0);else{let e=(i+r)*.5;p=i+f*(i-e),m=r+f*(r-e);let t=(s+o)*.5;h=s+f*(s-t),g=o+f*(o-t);let n=(u+l)*.5;_=u+f*(u-n),v=l+f*(l-n)}for(let e=0;el?f:l;let p=o,m=a,h=360/m*Math.PI/180;for(let e=0;el?f:l;let p=o,m=a,h=n.polarRotation||0,g,_;for(u=0;ut&&(b=y,x=0,S=-1),i=0;i=0&&d=0&&f=0&&d=0&&f=1020?255:0}return o}function cs(e,t,n){let r=[1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9],i=Math.round(Math.sqrt(r.length)),a=Math.floor(i/2),o=[];for(let s=0;s=0&&d=0&&f=n))for(let t=f;t=r)continue;let i=(n*t+e)*4;a+=o[i+0],s+=o[i+1],c+=o[i+2],l+=o[i+3],m+=1}a/=m,s/=m,c/=m,l/=m;for(let e=u;e=n))for(let t=f;t=r)continue;let i=(n*t+e)*4;o[i+0]=a,o[i+1]=s,o[i+2]=c,o[i+3]=l}}};z.addGetterSetter(B,`pixelSize`,8,R(),z.afterSetFilter);var fs=function(e){let t=Math.round(this.levels()*254)+1,n=e.data,r=n.length,i=255/t;for(let e=0;e255?255:e<0?0:Math.round(e)}),z.addGetterSetter(B,`green`,0,function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)}),z.addGetterSetter(B,`blue`,0,er,z.afterSetFilter);var ms=function(e){let t=e.data,n=t.length,r=this.red(),i=this.green(),a=this.blue(),o=this.alpha();for(let e=0;e255?255:e<0?0:Math.round(e)}),z.addGetterSetter(B,`green`,0,function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)}),z.addGetterSetter(B,`blue`,0,er,z.afterSetFilter),z.addGetterSetter(B,`alpha`,1,function(e){return this._filterUpToDate=!1,e>1?1:e<0?0:e});var hs=function(e){let t=e.data,n=t.length;for(let e=0;e=128&&(t[e]=255-n,t[e+1]=255-r,t[e+2]=255-i)}return e},_s=function(e){let t=this.threshold()*255,n=e.data,r=n.length;for(let e=0;e{i(e.getAttr(r))})}}var Es=`V`;function Ds(e){function t(e){return e?.__konvaNode?e:e?.parent?t(e.parent):(console.error(`vue-konva error: Can not find parent node`),null)}return t(e.parent)}function Os(e){return e.component?e.component.__konvaNode||Os(e.component.subTree):null}function ks(e){let{el:t,component:n}=e,r=Os(e);if(t?.tagName&&n&&!r){let e=t.tagName.toLowerCase();return console.error(`vue-konva error: You are trying to render "${e}" inside your component tree. Looks like it is not a Konva node. You can render only Konva components inside the Stage.`),null}return r}function As(e){let t=e=>!!e&&typeof e==`object`&&`component`in e,n=e=>Array.isArray(e),r=e=>t(e)?[e,...r(e.children)]:n(e)?e.flatMap(r):[];return r(e.children)}function js(e,t){let n=As(e),r=[];n.forEach(e=>{let t=ks(e);t&&r.push(t)});let i=!1;r.forEach((e,t)=>{e.getZIndex()!==t&&(e.setZIndex(t),i=!0)}),i&&ys(t)}var Ms=vs.default?.Stage||vs.Stage,Ns=Se({name:`Stage`,props:{config:{type:Object,default:function(){return{}}},__useStrictMode:{type:Boolean}},inheritAttrs:!1,setup(e,{attrs:t,slots:n,expose:i}){let a=Te();if(!a)return;let s=v({}),c=o(null),l=new Ms({width:e.config.width,height:e.config.height,container:document.createElement(`div`)});a.__konvaNode=l,p();function u(){return a?.__konvaNode}function d(){return a?.__konvaNode}function p(){if(!a)return;let n=s||{},r={...t,...e.config};Ss(a,r,n,e.__useStrictMode),Object.assign(s,r)}return r(()=>{c.value&&l.container(c.value),p(),Ts(l,a)}),f(()=>{p(),js(a.subTree,l),Ts(l,a)}),g(()=>{l.destroy()}),m(()=>e.config,p,{deep:!0}),i({getStage:d,getNode:u}),()=>we(`div`,{ref:c,id:t?.id,accesskey:t?.accesskey,class:t?.class,role:t?.role,style:t?.style,tabindex:t?.tabindex,title:t?.title},n.default?.())}}),Ps=`.vue-konva-event`,Fs={Group:!0,Layer:!0,FastLayer:!0,Label:!0};function J(e,t){return Se({name:e,props:{config:{type:Object,default:function(){return{}}},__useStrictMode:{type:Boolean}},setup(i,{attrs:a,slots:o,expose:s}){let c=Te();if(!c)return;let l=v({}),u=new t;c.__konvaNode=u,c.vnode.__konvaNode=u,h();function d(){return c?.__konvaNode}function p(){return c?.__konvaNode}function h(){if(!c)return;let e={};for(let t in c?.vnode.props)t.slice(0,2)===`on`&&(e[t]=c.vnode.props[t]);let t=l||{},n={...a,...i.config,...e};Ss(c,n,t,i.__useStrictMode),Object.assign(l,n)}r(()=>{let e=Ds(c)?.__konvaNode;e&&`add`in e&&e.add(u),ys(u),Ts(u,c)}),n(()=>{ys(u),u.destroy(),u.off(Ps),u.off(Cs)}),f(()=>{h(),js(c.subTree,u),Ts(u,c)}),m(()=>i.config,h,{deep:!0}),s({getStage:p,getNode:d});let g=Fs.hasOwnProperty(e);return()=>g?o.default?.():null}})}var Y=vs.default||vs,Is=J(`Arc`,Y.Arc),Ls=J(`Arrow`,Y.Arrow),Rs=J(`Circle`,Y.Circle),zs=J(`Ellipse`,Y.Ellipse),Bs=J(`FastLayer`,Y.FastLayer),Vs=J(`Group`,Y.Group),Hs=J(`Image`,Y.Image),Us=J(`Label`,Y.Label),Ws=J(`Layer`,Y.Layer),Gs=J(`Line`,Y.Line),Ks=J(`Path`,Y.Path),qs=J(`Rect`,Y.Rect),Js=J(`RegularPolygon`,Y.RegularPolygon),Ys=J(`Ring`,Y.Ring),Xs=J(`Shape`,Y.Shape),Zs=J(`Sprite`,Y.Sprite),Qs=J(`Star`,Y.Star),$s=J(`Tag`,Y.Tag),ec=J(`Text`,Y.Text),tc=J(`TextPath`,Y.TextPath),nc=J(`Transformer`,Y.Transformer),rc=J(`Wedge`,Y.Wedge),ic=Object.freeze(Object.defineProperty({__proto__:null,Arc:Is,Arrow:Ls,Circle:Rs,Ellipse:zs,FastLayer:Bs,Group:Vs,Image:Hs,Label:Us,Layer:Ws,Line:Gs,Path:Ks,Rect:qs,RegularPolygon:Js,Ring:Ys,Shape:Xs,Sprite:Zs,Star:Qs,Tag:$s,Text:ec,TextPath:tc,Transformer:nc,Wedge:rc},Symbol.toStringTag,{value:`Module`})),ac={install:(e,t)=>{let n=t?.prefix||Es,r=t?.customNodes?Object.entries(t.customNodes).map(([e,t])=>J(e,t)):[];[Ns,...Object.values(ic),...r].forEach(t=>{e.component(`${n}${t.name}`,t)})}},oc=typeof document<`u`;function sc(e){return typeof e==`object`||`displayName`in e||`props`in e||`__vccOpts`in e}function cc(e){return e.__esModule||e[Symbol.toStringTag]===`Module`||e.default&&sc(e.default)}var X=Object.assign;function lc(e,t){let n={};for(let r in t){let i=t[r];n[r]=dc(i)?i.map(e):e(i)}return n}var uc=()=>{},dc=Array.isArray;function fc(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}var pc=/#/g,mc=/&/g,hc=/\//g,gc=/=/g,_c=/\?/g,vc=/\+/g,yc=/%5B/g,bc=/%5D/g,xc=/%5E/g,Sc=/%60/g,Cc=/%7B/g,wc=/%7C/g,Tc=/%7D/g,Ec=/%20/g;function Dc(e){return e==null?``:encodeURI(``+e).replace(wc,`|`).replace(yc,`[`).replace(bc,`]`)}function Oc(e){return Dc(e).replace(Cc,`{`).replace(Tc,`}`).replace(xc,`^`)}function kc(e){return Dc(e).replace(vc,`%2B`).replace(Ec,`+`).replace(pc,`%23`).replace(mc,`%26`).replace(Sc,"`").replace(Cc,`{`).replace(Tc,`}`).replace(xc,`^`)}function Ac(e){return kc(e).replace(gc,`%3D`)}function jc(e){return Dc(e).replace(pc,`%23`).replace(_c,`%3F`)}function Mc(e){return jc(e).replace(hc,`%2F`)}function Nc(e){if(e==null)return null;try{return decodeURIComponent(``+e)}catch{}return``+e}var Pc=/\/$/,Fc=e=>e.replace(Pc,``);function Ic(e,t,n=`/`){let r,i={},a=``,o=``,s=t.indexOf(`#`),c=t.indexOf(`?`);return c=s>=0&&c>s?-1:c,c>=0&&(r=t.slice(0,c),a=t.slice(c,s>0?s:t.length),i=e(a.slice(1))),s>=0&&(r||=t.slice(0,s),o=t.slice(s,t.length)),r=Wc(r??t,n),{fullPath:r+a+o,path:r,query:i,hash:Nc(o)}}function Lc(e,t){let n=t.query?e(t.query):``;return t.path+(n&&`?`)+n+(t.hash||``)}function Rc(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||`/`}function zc(e,t,n){let r=t.matched.length-1,i=n.matched.length-1;return r>-1&&r===i&&Bc(t.matched[r],n.matched[i])&&Vc(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Bc(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Vc(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Hc(e[n],t[n]))return!1;return!0}function Hc(e,t){return dc(e)?Uc(e,t):dc(t)?Uc(t,e):e?.valueOf()===t?.valueOf()}function Uc(e,t){return dc(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):e.length===1&&e[0]===t}function Wc(e,t){if(e.startsWith(`/`))return e;if(!e)return t;let n=t.split(`/`),r=e.split(`/`),i=r[r.length-1];(i===`..`||i===`.`)&&r.push(``);let a=n.length-1,o,s;for(o=0;o1&&a--;else break;return n.slice(0,a).join(`/`)+`/`+r.slice(o).join(`/`)}var Gc={path:`/`,name:void 0,params:{},query:{},hash:``,fullPath:`/`,matched:[],meta:{},redirectedFrom:void 0},Kc=function(e){return e.pop=`pop`,e.push=`push`,e}({}),qc=function(e){return e.back=`back`,e.forward=`forward`,e.unknown=``,e}({});function Jc(e){if(!e)if(oc){let t=document.querySelector(`base`);e=t&&t.getAttribute(`href`)||`/`,e=e.replace(/^\w+:\/\/[^\/]+/,``)}else e=`/`;return e[0]!==`/`&&e[0]!==`#`&&(e=`/`+e),Fc(e)}var Yc=/^[^#]+#/;function Xc(e,t){return e.replace(Yc,`#`)+t}function Zc(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var Qc=()=>({left:window.scrollX,top:window.scrollY});function $c(e){let t;if(`el`in e){let n=e.el,r=typeof n==`string`&&n.startsWith(`#`),i=typeof n==`string`?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=Zc(i,e)}else t=e;`scrollBehavior`in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left==null?window.scrollX:t.left,t.top==null?window.scrollY:t.top)}function el(e,t){return(history.state?history.state.position-t:-1)+e}var tl=new Map;function nl(e,t){tl.set(e,t)}function rl(e){let t=tl.get(e);return tl.delete(e),t}function il(e){return typeof e==`string`||e&&typeof e==`object`}function al(e){return typeof e==`string`||typeof e==`symbol`}var Z=function(e){return e[e.MATCHER_NOT_FOUND=1]=`MATCHER_NOT_FOUND`,e[e.NAVIGATION_GUARD_REDIRECT=2]=`NAVIGATION_GUARD_REDIRECT`,e[e.NAVIGATION_ABORTED=4]=`NAVIGATION_ABORTED`,e[e.NAVIGATION_CANCELLED=8]=`NAVIGATION_CANCELLED`,e[e.NAVIGATION_DUPLICATED=16]=`NAVIGATION_DUPLICATED`,e}({}),ol=Symbol(``);Z.MATCHER_NOT_FOUND,Z.NAVIGATION_GUARD_REDIRECT,Z.NAVIGATION_ABORTED,Z.NAVIGATION_CANCELLED,Z.NAVIGATION_DUPLICATED;function sl(e,t){return X(Error(),{type:e,[ol]:!0},t)}function cl(e,t){return e instanceof Error&&ol in e&&(t==null||!!(e.type&t))}function ll(e){let t={};if(e===``||e===`?`)return t;let n=(e[0]===`?`?e.slice(1):e).split(`&`);for(let e=0;ee&&kc(e)):[r&&kc(r)]).forEach(e=>{e!==void 0&&(t+=(t.length?`&`:``)+n,e!=null&&(t+=`=`+e))})}return t}function dl(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=dc(r)?r.map(e=>e==null?null:``+e):r==null?r:``+r)}return t}var fl=Symbol(``),pl=Symbol(``),ml=Symbol(``),hl=Symbol(``),gl=Symbol(``);function _l(){let e=[];function t(t){return e.push(t),()=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function vl(e,t,n,r,i,a=e=>e()){let o=r&&(r.enterCallbacks[i]=r.enterCallbacks[i]||[]);return()=>new Promise((s,c)=>{let l=e=>{e===!1?c(sl(Z.NAVIGATION_ABORTED,{from:n,to:t})):e instanceof Error?c(e):il(e)?c(sl(Z.NAVIGATION_GUARD_REDIRECT,{from:t,to:e})):(o&&r.enterCallbacks[i]===o&&typeof e==`function`&&o.push(e),s())},u=a(()=>e.call(r&&r.instances[i],t,n,l)),d=Promise.resolve(u);e.length<3&&(d=d.then(l)),d.catch(e=>c(e))})}function yl(e,t,n,r,i=e=>e()){let a=[];for(let o of e)for(let e in o.components){let s=o.components[e];if(!(t!==`beforeRouteEnter`&&!o.instances[e]))if(sc(s)){let c=(s.__vccOpts||s)[t];c&&a.push(vl(c,n,r,o,e,i))}else{let c=s();a.push(()=>c.then(a=>{if(!a)throw Error(`Couldn't resolve component "${e}" at "${o.path}"`);let s=cc(a)?a.default:a;o.mods[e]=a,o.components[e]=s;let c=(s.__vccOpts||s)[t];return c&&vl(c,n,r,o,e,i)()}))}}return a}function bl(e,t){let n=[],r=[],i=[],a=Math.max(t.matched.length,e.matched.length);for(let o=0;oBc(e,a))?r.push(a):n.push(a));let s=e.matched[o];s&&(t.matched.find(e=>Bc(e,s))||i.push(s))}return[n,r,i]}var xl=()=>location.protocol+`//`+location.host;function Sl(e,t){let{pathname:n,search:r,hash:i}=t,a=e.indexOf(`#`);if(a>-1){let t=i.includes(e.slice(a))?e.slice(a).length:1,n=i.slice(t);return n[0]!==`/`&&(n=`/`+n),Rc(n,``)}return Rc(n,e)+r+i}function Cl(e,t,n,r){let i=[],a=[],o=null,s=({state:a})=>{let s=Sl(e,location),c=n.value,l=t.value,u=0;if(a){if(n.value=s,t.value=a,o&&o===c){o=null;return}u=l?a.position-l.position:0}else r(s);i.forEach(e=>{e(n.value,c,{delta:u,type:Kc.pop,direction:u?u>0?qc.forward:qc.back:qc.unknown})})};function c(){o=n.value}function l(e){i.push(e);let t=()=>{let t=i.indexOf(e);t>-1&&i.splice(t,1)};return a.push(t),t}function u(){if(document.visibilityState===`hidden`){let{history:e}=window;if(!e.state)return;e.replaceState(X({},e.state,{scroll:Qc()}),``)}}function d(){for(let e of a)e();a=[],window.removeEventListener(`popstate`,s),window.removeEventListener(`pagehide`,u),document.removeEventListener(`visibilitychange`,u)}return window.addEventListener(`popstate`,s),window.addEventListener(`pagehide`,u),document.addEventListener(`visibilitychange`,u),{pauseListeners:c,listen:l,destroy:d}}function wl(e,t,n,r=!1,i=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:i?Qc():null}}function Tl(e){let{history:t,location:n}=window,r={value:Sl(e,n)},i={value:t.state};i.value||a(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(r,a,o){let s=e.indexOf(`#`),c=s>-1?(n.host&&document.querySelector(`base`)?e:e.slice(s))+r:xl()+e+r;try{t[o?`replaceState`:`pushState`](a,``,c),i.value=a}catch(e){console.error(e),n[o?`replace`:`assign`](c)}}function o(e,n){a(e,X({},t.state,wl(i.value.back,e,i.value.forward,!0),n,{position:i.value.position}),!0),r.value=e}function s(e,n){let o=X({},i.value,t.state,{forward:e,scroll:Qc()});a(o.current,o,!0),a(e,X({},wl(r.value,e,null),{position:o.position+1},n),!1),r.value=e}return{location:r,state:i,push:s,replace:o}}function El(e){e=Jc(e);let t=Tl(e),n=Cl(e,t.state,t.location,t.replace);function r(e,t=!0){t||n.pauseListeners(),history.go(e)}let i=X({location:``,base:e,go:r,createHref:Xc.bind(null,e)},t,n);return Object.defineProperty(i,`location`,{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,`state`,{enumerable:!0,get:()=>t.state.value}),i}var Dl=function(e){return e[e.Static=0]=`Static`,e[e.Param=1]=`Param`,e[e.Group=2]=`Group`,e}({}),Q=function(e){return e[e.Static=0]=`Static`,e[e.Param=1]=`Param`,e[e.ParamRegExp=2]=`ParamRegExp`,e[e.ParamRegExpEnd=3]=`ParamRegExpEnd`,e[e.EscapeNext=4]=`EscapeNext`,e}(Q||{}),Ol={type:Dl.Static,value:``},kl=/[a-zA-Z0-9_]/;function Al(e){if(!e)return[[]];if(e===`/`)return[[Ol]];if(!e.startsWith(`/`))throw Error(`Invalid path "${e}"`);function t(e){throw Error(`ERR (${n})/"${l}": ${e}`)}let n=Q.Static,r=n,i=[],a;function o(){a&&i.push(a),a=[]}let s=0,c,l=``,u=``;function d(){l&&=(n===Q.Static?a.push({type:Dl.Static,value:l}):n===Q.Param||n===Q.ParamRegExp||n===Q.ParamRegExpEnd?(a.length>1&&(c===`*`||c===`+`)&&t(`A repeatable param (${l}) must be alone in its segment. eg: '/:ids+.`),a.push({type:Dl.Param,value:l,regexp:u,repeatable:c===`*`||c===`+`,optional:c===`*`||c===`?`})):t(`Invalid state to consume buffer`),``)}function f(){l+=c}for(;st.length?t.length===1&&t[0]===$.Static+$.Segment?1:-1:0}function Il(e,t){let n=0,r=e.score,i=t.score;for(;n0&&t[t.length-1]<0}var Rl={strict:!1,end:!0,sensitive:!1};function zl(e,t,n){let r=X(Pl(Al(e.path),n),{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Bl(e,t){let n=[],r=new Map;t=fc(Rl,t);function i(e){return r.get(e)}function a(e,n,r){let i=!r,s=Hl(e);s.aliasOf=r&&r.record;let l=fc(t,e),u=[s];if(`alias`in e){let t=typeof e.alias==`string`?[e.alias]:e.alias;for(let e of t)u.push(Hl(X({},s,{components:r?r.record.components:s.components,path:e,aliasOf:r?r.record:s})))}let d,f;for(let t of u){let{path:u}=t;if(n&&u[0]!==`/`){let e=n.record.path,r=e[e.length-1]===`/`?``:`/`;t.path=n.record.path+(u&&r+u)}if(d=zl(t,n,l),r?r.alias.push(d):(f||=d,f!==d&&f.alias.push(d),i&&e.name&&!Wl(d)&&o(e.name)),Jl(d)&&c(d),s.children){let e=s.children;for(let t=0;t{o(f)}:uc}function o(e){if(al(e)){let t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(o),t.alias.forEach(o))}else{let t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(o),e.alias.forEach(o))}}function s(){return n}function c(e){let t=Kl(e,n);n.splice(t,0,e),e.record.name&&!Wl(e)&&r.set(e.record.name,e)}function l(e,t){let i,a={},o,s;if(`name`in e&&e.name){if(i=r.get(e.name),!i)throw sl(Z.MATCHER_NOT_FOUND,{location:e});s=i.record.name,a=X(Vl(t.params,i.keys.filter(e=>!e.optional).concat(i.parent?i.parent.keys.filter(e=>e.optional):[]).map(e=>e.name)),e.params&&Vl(e.params,i.keys.map(e=>e.name))),o=i.stringify(a)}else if(e.path!=null)o=e.path,i=n.find(e=>e.re.test(o)),i&&(a=i.parse(o),s=i.record.name);else{if(i=t.name?r.get(t.name):n.find(e=>e.re.test(t.path)),!i)throw sl(Z.MATCHER_NOT_FOUND,{location:e,currentLocation:t});s=i.record.name,a=X({},t.params,e.params),o=i.stringify(a)}let c=[],l=i;for(;l;)c.unshift(l.record),l=l.parent;return{name:s,path:o,params:a,matched:c,meta:Gl(c)}}e.forEach(e=>a(e));function u(){n.length=0,r.clear()}return{addRoute:a,resolve:l,removeRoute:o,clearRoutes:u,getRoutes:s,getRecordMatcher:i}}function Vl(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function Hl(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Ul(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,`mods`,{value:{}}),t}function Ul(e){let t={},n=e.props||!1;if(`component`in e)t.default=n;else for(let r in e.components)t[r]=typeof n==`object`?n[r]:n;return t}function Wl(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Gl(e){return e.reduce((e,t)=>X(e,t.meta),{})}function Kl(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;Il(e,t[i])<0?r=i:n=i+1}let i=ql(e);return i&&(r=t.lastIndexOf(i,r-1)),r}function ql(e){let t=e;for(;t=t.parent;)if(Jl(t)&&Il(e,t)===0)return t}function Jl({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Yl(e){let t=h(ml),n=h(hl),r=M(()=>{let n=l(e.to);return t.resolve(n)}),i=M(()=>{let{matched:e}=r.value,{length:t}=e,i=e[t-1],a=n.matched;if(!i||!a.length)return-1;let o=a.findIndex(Bc.bind(null,i));if(o>-1)return o;let s=eu(e[t-2]);return t>1&&eu(i)===s&&a[a.length-1].path!==s?a.findIndex(Bc.bind(null,e[t-2])):o}),a=M(()=>i.value>-1&&$l(n.params,r.value.params)),o=M(()=>i.value>-1&&i.value===n.matched.length-1&&Vc(n.params,r.value.params));function s(n={}){if(Ql(n)){let n=t[l(e.replace)?`replace`:`push`](l(e.to)).catch(uc);return e.viewTransition&&typeof document<`u`&&`startViewTransition`in document&&document.startViewTransition(()=>n),n}return Promise.resolve()}return{route:r,href:M(()=>r.value.href),isActive:a,isExactActive:o,navigate:s}}function Xl(e){return e.length===1?e[0]:e}var Zl=Se({name:`RouterLink`,compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:`page`},viewTransition:Boolean},useLink:Yl,setup(e,{slots:t}){let n=v(Yl(e)),{options:r}=h(ml),i=M(()=>({[tu(e.activeClass,r.linkActiveClass,`router-link-active`)]:n.isActive,[tu(e.exactActiveClass,r.linkExactActiveClass,`router-link-exact-active`)]:n.isExactActive}));return()=>{let r=t.default&&Xl(t.default(n));return e.custom?r:we(`a`,{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},r)}}});function Ql(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function $l(e,t){for(let n in t){let r=t[n],i=e[n];if(typeof r==`string`){if(r!==i)return!1}else if(!dc(i)||i.length!==r.length||r.some((e,t)=>e.valueOf()!==i[t].valueOf()))return!1}return!0}function eu(e){return e?e.aliasOf?e.aliasOf.path:e.path:``}var tu=(e,t,n)=>e??t??n,nu=Se({name:`RouterView`,inheritAttrs:!1,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(e,{attrs:n,slots:r}){let i=h(gl),a=M(()=>e.route||i.value),s=h(pl,0),c=M(()=>{let e=l(s),{matched:t}=a.value,n;for(;(n=t[e])&&!n.components;)e++;return e}),u=M(()=>a.value.matched[c.value]);t(pl,M(()=>c.value+1)),t(fl,u),t(gl,a);let d=o();return m(()=>[d.value,u.value,e.name],([e,t,n],[r,i,a])=>{t&&(t.instances[n]=e,i&&i!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=i.leaveGuards),t.updateGuards.size||(t.updateGuards=i.updateGuards))),e&&t&&(!i||!Bc(t,i)||!r)&&(t.enterCallbacks[n]||[]).forEach(t=>t(e))},{flush:`post`}),()=>{let t=a.value,i=e.name,o=u.value,s=o&&o.components[i];if(!s)return ru(r.default,{Component:s,route:t});let c=o.props[i],l=we(s,X({},c?c===!0?t.params:typeof c==`function`?c(t):c:null,n,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(o.instances[i]=null)},ref:d}));return ru(r.default,{Component:l,route:t})||l}}});function ru(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var iu=nu;function au(e){let t=Bl(e.routes,e),n=e.parseQuery||ll,r=e.stringifyQuery||ul,i=e.history,a=_l(),o=_l(),s=_l(),c=y(Gc),u=Gc;oc&&e.scrollBehavior&&`scrollRestoration`in history&&(history.scrollRestoration=`manual`);let d=lc.bind(null,e=>``+e),f=lc.bind(null,Mc),p=lc.bind(null,Nc);function m(e,n){let r,i;return al(e)?(r=t.getRecordMatcher(e),i=n):i=e,t.addRoute(i,r)}function h(e){let n=t.getRecordMatcher(e);n&&t.removeRoute(n)}function g(){return t.getRoutes().map(e=>e.record)}function v(e){return!!t.getRecordMatcher(e)}function b(e,a){if(a=X({},a||c.value),typeof e==`string`){let r=Ic(n,e,a.path),o=t.resolve({path:r.path},a),s=i.createHref(r.fullPath);return X(r,o,{params:p(o.params),hash:Nc(r.hash),redirectedFrom:void 0,href:s})}let o;if(e.path!=null)o=X({},e,{path:Ic(n,e.path,a.path).path});else{let t=X({},e.params);for(let e in t)t[e]??delete t[e];o=X({},e,{params:f(t)}),a.params=f(a.params)}let s=t.resolve(o,a),l=e.hash||``;s.params=d(p(s.params));let u=Lc(r,X({},e,{hash:Oc(l),path:s.path})),m=i.createHref(u);return X({fullPath:u,hash:l,query:r===ul?dl(e.query):e.query||{}},s,{redirectedFrom:void 0,href:m})}function x(e){return typeof e==`string`?Ic(n,e,c.value.path):X({},e)}function S(e,t){if(u!==e)return sl(Z.NAVIGATION_CANCELLED,{from:t,to:e})}function C(e){return T(e)}function w(e){return C(X(x(e),{replace:!0}))}function ee(e,t){let n=e.matched[e.matched.length-1];if(n&&n.redirect){let{redirect:r}=n,i=typeof r==`function`?r(e,t):r;return typeof i==`string`&&(i=i.includes(`?`)||i.includes(`#`)?i=x(i):{path:i},i.params={}),X({query:e.query,hash:e.hash,params:i.path==null?e.params:{}},i)}}function T(e,t){let n=u=b(e),i=c.value,a=e.state,o=e.force,s=e.replace===!0,l=ee(n,i);if(l)return T(X(x(l),{state:typeof l==`object`?X({},a,l.state):a,force:o,replace:s}),t||n);let d=n;d.redirectedFrom=t;let f;return!o&&zc(r,i,n)&&(f=sl(Z.NAVIGATION_DUPLICATED,{to:d,from:i}),se(i,i,!0,!1)),(f?Promise.resolve(f):ne(d,i)).catch(e=>cl(e)?cl(e,Z.NAVIGATION_GUARD_REDIRECT)?e:oe(e):ae(e,d,i)).then(e=>{if(e){if(cl(e,Z.NAVIGATION_GUARD_REDIRECT))return T(X({replace:s},x(e.to),{state:typeof e.to==`object`?X({},a,e.to.state):a,force:o}),t||d)}else e=D(d,i,!0,s,a);return re(d,i,e),e})}function te(e,t){let n=S(e,t);return n?Promise.reject(n):Promise.resolve()}function E(e){let t=ue.values().next().value;return t&&typeof t.runWithContext==`function`?t.runWithContext(e):e()}function ne(e,t){let n,[r,i,s]=bl(e,t);n=yl(r.reverse(),`beforeRouteLeave`,e,t);for(let i of r)i.leaveGuards.forEach(r=>{n.push(vl(r,e,t))});let c=te.bind(null,e,t);return n.push(c),N(n).then(()=>{n=[];for(let r of a.list())n.push(vl(r,e,t));return n.push(c),N(n)}).then(()=>{n=yl(i,`beforeRouteUpdate`,e,t);for(let r of i)r.updateGuards.forEach(r=>{n.push(vl(r,e,t))});return n.push(c),N(n)}).then(()=>{n=[];for(let r of s)if(r.beforeEnter)if(dc(r.beforeEnter))for(let i of r.beforeEnter)n.push(vl(i,e,t));else n.push(vl(r.beforeEnter,e,t));return n.push(c),N(n)}).then(()=>(e.matched.forEach(e=>e.enterCallbacks={}),n=yl(s,`beforeRouteEnter`,e,t,E),n.push(c),N(n))).then(()=>{n=[];for(let r of o.list())n.push(vl(r,e,t));return n.push(c),N(n)}).catch(e=>cl(e,Z.NAVIGATION_CANCELLED)?e:Promise.reject(e))}function re(e,t,n){s.list().forEach(r=>E(()=>r(e,t,n)))}function D(e,t,n,r,a){let o=S(e,t);if(o)return o;let s=t===Gc,l=oc?history.state:{};n&&(r||s?i.replace(e.fullPath,X({scroll:s&&l&&l.scroll},a)):i.push(e.fullPath,a)),c.value=e,se(e,t,n,s),oe()}let O;function ie(){O||=i.listen((e,t,n)=>{if(!de.listening)return;let r=b(e),a=ee(r,de.currentRoute.value);if(a){T(X(a,{replace:!0,force:!0}),r).catch(uc);return}u=r;let o=c.value;oc&&nl(el(o.fullPath,n.delta),Qc()),ne(r,o).catch(e=>cl(e,Z.NAVIGATION_ABORTED|Z.NAVIGATION_CANCELLED)?e:cl(e,Z.NAVIGATION_GUARD_REDIRECT)?(T(X(x(e.to),{force:!0}),r).then(e=>{cl(e,Z.NAVIGATION_ABORTED|Z.NAVIGATION_DUPLICATED)&&!n.delta&&n.type===Kc.pop&&i.go(-1,!1)}).catch(uc),Promise.reject()):(n.delta&&i.go(-n.delta,!1),ae(e,r,o))).then(e=>{e||=D(r,o,!1),e&&(n.delta&&!cl(e,Z.NAVIGATION_CANCELLED)?i.go(-n.delta,!1):n.type===Kc.pop&&cl(e,Z.NAVIGATION_ABORTED|Z.NAVIGATION_DUPLICATED)&&i.go(-1,!1)),re(r,o,e)}).catch(uc)})}let k=_l(),A=_l(),j;function ae(e,t,n){oe(e);let r=A.list();return r.length?r.forEach(r=>r(e,t,n)):console.error(e),Promise.reject(e)}function M(){return j&&c.value!==Gc?Promise.resolve():new Promise((e,t)=>{k.add([e,t])})}function oe(e){return j||(j=!e,ie(),k.list().forEach(([t,n])=>e?n(e):t()),k.reset()),e}function se(t,n,r,i){let{scrollBehavior:a}=e;if(!oc||!a)return Promise.resolve();let o=!r&&rl(el(t.fullPath,0))||(i||!r)&&history.state&&history.state.scroll||null;return Ce().then(()=>a(t,n,o)).then(e=>e&&$c(e)).catch(e=>ae(e,t,n))}let ce=e=>i.go(e),le,ue=new Set,de={currentRoute:c,listening:!0,addRoute:m,removeRoute:h,clearRoutes:t.clearRoutes,hasRoute:v,getRoutes:g,resolve:b,options:e,push:C,replace:w,go:ce,back:()=>ce(-1),forward:()=>ce(1),beforeEach:a.add,beforeResolve:o.add,afterEach:s.add,onError:A.add,isReady:M,install(e){e.component(`RouterLink`,Zl),e.component(`RouterView`,iu),e.config.globalProperties.$router=de,Object.defineProperty(e.config.globalProperties,`$route`,{enumerable:!0,get:()=>l(c)}),oc&&!le&&c.value===Gc&&(le=!0,C(i.location).catch(e=>{}));let t={};for(let e in Gc)Object.defineProperty(t,e,{get:()=>c.value[e],enumerable:!0});e.provide(ml,de),e.provide(hl,_(t)),e.provide(gl,c);let n=e.unmount;ue.add(e),e.unmount=function(){ue.delete(e),ue.size<1&&(u=Gc,O&&O(),O=null,c.value=Gc,le=!1,j=!1),n()}}};function N(e){return e.reduce((e,t)=>e.then(()=>E(t)),Promise.resolve())}return de}function ou(){return h(ml)}function su(e){return h(hl)}var cu=he(`images`,()=>{let e=o([]),t=o(!1),n=o(null),r=o(0);async function i(){t.value=!0,n.value=null;try{let t=await fetch(`/api/images`);if(!t.ok)throw Error(`Failed to load images`);e.value=await t.json()}catch(e){n.value=e instanceof Error?e.message:`Unknown error`}finally{t.value=!1}}async function a(t,n){let r=new FormData;r.append(`file`,t),n?.original&&r.append(`original`,n.original),n?.cropParams&&r.append(`cropParams`,JSON.stringify(n.cropParams)),n?.stickerState&&r.append(`stickerState`,JSON.stringify(n.stickerState));let i=await fetch(`/api/images`,{method:`POST`,body:r});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.error??`Upload failed`)}let a=await i.json();return e.value.unshift(a),a}async function s(t,n,r){let i=new FormData;i.append(`file`,n),r?.cropParams&&i.append(`cropParams`,JSON.stringify(r.cropParams)),r?.stickerState&&i.append(`stickerState`,JSON.stringify(r.stickerState));let a=await fetch(`/api/images/${t}/reprocess`,{method:`POST`,body:i});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e.error??`Reprocess failed`)}let o=await a.json(),s=e.value.findIndex(e=>e.id===t);return s!==-1&&(e.value[s]=o),o}async function c(t){if(!(await fetch(`/api/images/${t}`,{method:`DELETE`})).ok)throw Error(`Delete failed`);e.value=e.value.filter(e=>e.id!==t)}async function l(t,n,r){let i=r?`POST`:`DELETE`,a=await fetch(`/api/images/${t}/approve/${n}`,{method:i});if(!a.ok)throw Error(`Failed to update approval`);let o=await a.json(),s=e.value.findIndex(e=>e.id===t);s!==-1&&(e.value[s]=o)}async function u(e,t=1,n=20){let r=new URLSearchParams({page:String(t),limit:String(n)});e&&r.set(`status`,e);let i=await fetch(`/api/shared-images?${r}`);if(!i.ok)throw Error(`Failed to load shared images`);return i.json()}async function d(){let e=await fetch(`/api/shared-images/pending-count`);e.ok&&(r.value=(await e.json()).count)}async function f(e,t){let n=await fetch(`/api/shared-images/${e}/approve`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({deviceIds:t})});if(!n.ok)throw Error(`Failed to approve`);return r.value>0&&r.value--,n.json()}async function p(e){let t=await fetch(`/api/shared-images/${e}/decline`,{method:`POST`});if(!t.ok)throw Error(`Failed to decline`);return r.value>0&&r.value--,t.json()}async function m(e,t){let n=await fetch(`/api/images/${e}/share`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({recipientEmail:t})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`Failed to share`)}}return{images:e,loading:t,error:n,pendingCount:r,fetchImages:i,uploadImage:a,reprocessImage:s,deleteImage:c,setApproval:l,fetchSharedImages:u,fetchPendingCount:d,approveShared:f,declineShared:p,shareImage:m}}),lu={class:`bottom-nav`,"aria-label":`Main navigation`},uu={class:`bottom-nav__icon-wrap`,"aria-hidden":`true`},du=[`innerHTML`],fu={key:0,class:`bottom-nav__badge`},pu={class:`bottom-nav__label`},mu=ve(Se({__name:`BottomNav`,setup(e){let t=su(),n=cu(),r=[{name:`home`,label:`Home`,to:`/`,icon:``},{name:`library`,label:`Library`,to:`/library`,icon:``},{name:`shared`,label:`Shared`,to:`/library?tab=shared`,icon:``},{name:`settings`,label:`Settings`,to:`/settings`,icon:``}];function i(e){let n=e.split(`?`)[0];return n===`/`?t.path===`/`:t.path.startsWith(n)}return(e,t)=>{let a=d(`RouterLink`);return ae(),fe(`nav`,lu,[(ae(),fe(de,null,j(r,e=>C(a,{key:e.name,to:e.to,class:re([`bottom-nav__tab`,{"bottom-nav__tab--active":i(e.to)}]),"aria-label":e.label,"aria-current":i(e.to)?`page`:void 0},{default:Ee(()=>[be(`span`,uu,[be(`span`,{class:`bottom-nav__icon`,innerHTML:e.icon},null,8,du),e.name===`shared`&&l(n).pendingCount>0?(ae(),fe(`span`,fu,pe(l(n).pendingCount>9?`9+`:l(n).pendingCount),1)):O(``,!0)]),be(`span`,pu,pe(e.label),1)]),_:2},1032,[`to`,`class`,`aria-label`,`aria-current`])),64))])}}}),[[`__scopeId`,`data-v-d02ff871`]]),hu=0,gu=he(`toast`,()=>{let e=o([]);function t(t,r=`info`){let i=++hu;e.value.push({id:i,message:t,type:r}),setTimeout(()=>n(i),2500)}function n(t){let n=e.value.findIndex(e=>e.id===t);n!==-1&&e.value.splice(n,1)}return{toasts:e,show:t,dismiss:n}}),_u={class:`toast-region`,"aria-live":`polite`,"aria-atomic":`false`},vu=[`onClick`],yu=ve(Se({__name:`BaseToast`,setup(e){let t=gu();return(e,n)=>(ae(),fe(`div`,_u,[C(Ft,{name:`toast`,tag:`ul`,class:`toast-list`},{default:Ee(()=>[(ae(!0),fe(de,null,j(l(t).toasts,e=>(ae(),fe(`li`,{key:e.id,class:re([`toast`,`toast--${e.type}`]),role:`status`},[ie(pe(e.message)+` `,1),be(`button`,{class:`toast__close`,"aria-label":`Dismiss`,onClick:n=>l(t).dismiss(e.id)},` × `,8,vu)],2))),128))]),_:1})]))}}),[[`__scopeId`,`data-v-546af507`]]),bu=he(`auth`,()=>{let e=o(window.__PF_USER__??null),t=M(()=>e.value!==null);function n(t){e.value=t}return{user:e,isAuthenticated:t,setUser:n}}),xu=[{id:`warm-craft`,label:`Warm Craft`,primary:`#c97c3a`,bg:`#fdf6ee`,text:`#3a2e22`},{id:`playful-pop`,label:`Playful Pop`,primary:`#d63aab`,bg:`#fff0fb`,text:`#2d0a28`},{id:`sage-cream`,label:`Sage & Cream`,primary:`#4e7c3a`,bg:`#f6f8f3`,text:`#1e2b1a`},{id:`dusty-mauve`,label:`Dusty Mauve`,primary:`#8e4a84`,bg:`#f6f0f4`,text:`#2a1828`},{id:`ocean-dusk`,label:`Ocean Dusk`,primary:`#1a6ea8`,bg:`#eef3f8`,text:`#0e2030`},{id:`honey-slate`,label:`Honey & Slate`,primary:`#c49a20`,bg:`#f2f2ee`,text:`#1c1c18`}];function Su(){let e=bu(),t=gu();function n(t){document.documentElement.dataset.theme=t,e.user&&(e.user.theme=t)}async function r(e){n(e);try{if(!(await fetch(`/api/user/theme`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({theme:e})})).ok)throw Error(`Failed to save theme`)}catch{t.show(`Could not save theme — try again`,`error`)}}return{THEMES:xu,applyTheme:n,saveTheme:r}}var Cu=Se({__name:`App`,setup(e){let t=su(),n=bu(),{applyTheme:i}=Su();return r(()=>{let e=document.documentElement.dataset.theme;e&&n.user?n.user.theme=e:n.user?.theme&&i(n.user.theme)}),(e,n)=>{let r=d(`RouterView`);return ae(),fe(de,null,[C(r),l(t).meta.hideNav?O(``,!0):(ae(),ne(mu,{key:0})),C(yu)],64)}}}),wu=`modulepreload`,Tu=function(e){return`/build/`+e},Eu={},Du=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=Tu(t,n),t in Eu)return;Eu[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:wu,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Ou=au({history:El(),routes:[{path:`/`,name:`home`,component:()=>Du(()=>import(`./HomeView-Ub9_hNNK.js`),__vite__mapDeps([0,1,2,3,4])),meta:{requiresAuth:!0}},{path:`/library`,name:`library`,component:()=>Du(()=>import(`./LibraryView-Cwch0dhw.js`),__vite__mapDeps([5,1,2,3,6,7,8])),meta:{requiresAuth:!0}},{path:`/upload`,name:`upload`,component:()=>Du(()=>import(`./UploadView-Uqz760jq.js`),__vite__mapDeps([9,1,2,3,6,7,10])),meta:{requiresAuth:!0,hideNav:!0}},{path:`/settings`,name:`settings`,component:()=>Du(()=>import(`./SettingsView-Dbe21KxS.js`),__vite__mapDeps([11,1,12])),meta:{requiresAuth:!0}},{path:`/shared`,redirect:`/library?tab=shared`},{path:`/:pathMatch(.*)*`,redirect:`/`}]});Ou.beforeEach(e=>{let t=bu();if(e.meta.requiresAuth&&!t.isAuthenticated)return window.location.href=`/login`,!1});var ku=an(Cu);ku.use(le()),ku.use(Ou),ku.use(ac),ku.mount(`#app`);export{cu as a,Be as c,en as d,Qt as f,gu as i,qt as l,Su as n,su as o,bu as r,ou as s,xu as t,Kt as u}; \ No newline at end of file +`),t=+this.fontSize(),n=0,r=this.lineHeight()*t,i=this.attrs.width,a=this.attrs.height,o=i!==Ra&&i!==void 0,s=a!==Ra&&a!==void 0,c=this.padding(),l=i-c*2,u=a-c*2,d=0,f=this.wrap(),p=f!==ro&&f!==io,m=this.ellipsis();this.textArr=[],po().font=this._getContextFont();let h=m?this._getTextWidth(ao):0;for(let t=0,i=e.length;tl)for(;a.length>0;){let e=0,t=La(a).length,i=``,o=0;for(;e>>1,c=La(a).slice(0,n+1).join(``),f=this._getTextWidth(c);(m&&s&&d+r>u?f+h:f)<=l?(e=n+1,i=c,o=f):t=n}if(i){if(p){let t=La(a),n=La(i),r=t[n.length],s=r===$a||r===Wa,c;if(s&&o<=l)c=n.length;else{let e=n.lastIndexOf($a),t=n.lastIndexOf(Wa);c=Math.max(e,t)+1}c>0&&(e=c,i=t.slice(0,e).join(``),o=this._getTextWidth(i))}if(i=i.trimRight(),this._addTextLine(i),n=Math.max(n,o),d+=r,this._shouldHandleEllipsis(d)){this._tryToAddEllipsisToLastLine();break}if(a=La(a).slice(e).join(``).trimLeft(),a.length>0&&(c=this._getTextWidth(a),c<=l)){this._addTextLine(a),d+=r,n=Math.max(n,c);break}}else break}else this._addTextLine(a),d+=r,n=Math.max(n,c),this._shouldHandleEllipsis(d)&&tu)break}this.textHeight=t,this.textWidth=n}_shouldHandleEllipsis(e){let t=+this.fontSize(),n=this.lineHeight()*t,r=this.attrs.height,i=r!==Ra&&r!==void 0,a=r-this.padding()*2;return this.wrap()===io||i&&e+n>a}_tryToAddEllipsisToLastLine(){let e=this.attrs.width,t=e!==Ra&&e!==void 0,n=e-this.padding()*2,r=this.ellipsis(),i=this.textArr[this.textArr.length-1];!i||!r||(t&&(this._getTextWidth(i.text+ao)this.pathLength?null:W.getPointAtLengthOfDataArray(e,this.dataArray)}_readDataAttribute(){this.dataArray=W.parsePathData(this.attrs.data),this.pathLength=this._getTextPathLength()}_sceneFunc(e){e.setAttr(`font`,this._getContextFont()),e.setAttr(`textBaseline`,this.textBaseline()),e.setAttr(`textAlign`,`left`),e.save();let t=this.textDecoration(),n=this.fill(),r=this.fontSize(),i=this.glyphInfo,a=t.indexOf(`underline`)!==-1,o=t.indexOf(`line-through`)!==-1;a&&e.beginPath();for(let t=0;t=1){let n=t[0].p0;e.moveTo(n.x,n.y)}for(let n=0;nthis.pathLength&&f-this.pathLength<=c?this.pathLength:f);if(!p)return;let m=W.getLineLength(r.x,r.y,p.x,p.y),h=0;if(s)try{h=s(t[n-1].char,i)*this.fontSize()}catch{h=0}r.x+=h,p.x+=h,this.textWidth+=h;let g=W.getPointOnLine(h+m/2,r.x,r.y,p.x,p.y),_=Math.atan2(p.y-r.y,p.x-r.x);this.glyphInfo.push({transposeX:g.x,transposeY:g.y,text:e[n],rotation:_,p0:r,p1:p,width:m}),d+=u}}getSelfRect(){if(!this.glyphInfo.length)return{x:0,y:0,width:0,height:0};let e=[];this.glyphInfo.forEach(function(t){e.push(t.p0.x),e.push(t.p0.y),e.push(t.p1.x),e.push(t.p1.y)});let t=e[0]||0,n=e[0]||0,r=e[1]||0,i=e[1]||0,a,o;for(let s=0;se+`.${xo}`).join(` `),Co=`nodesRect`,wo=[`widthChange`,`heightChange`,`scaleXChange`,`scaleYChange`,`skewXChange`,`skewYChange`,`rotationChange`,`offsetXChange`,`offsetYChange`,`transformsEnabledChange`,`strokeWidthChange`,`draggableChange`],To={"top-left":-45,"top-center":0,"top-right":45,"middle-right":-90,"middle-left":90,"bottom-left":-135,"bottom-center":180,"bottom-right":135},Eo=`ontouchstart`in P._global;function Do(e,t,n){if(e===`rotater`)return n;t+=I.degToRad(To[e]||0);let r=(I.radToDeg(t)%360+360)%360;return I._inRange(r,337.5,360)||I._inRange(r,0,22.5)?`ns-resize`:I._inRange(r,22.5,67.5)?`nesw-resize`:I._inRange(r,67.5,112.5)?`ew-resize`:I._inRange(r,112.5,157.5)?`nwse-resize`:I._inRange(r,157.5,202.5)?`ns-resize`:I._inRange(r,202.5,247.5)?`nesw-resize`:I._inRange(r,247.5,292.5)?`ew-resize`:I._inRange(r,292.5,337.5)?`nwse-resize`:(I.error(`Transformer has unknown angle for cursor detection: `+r),`pointer`)}var Oo=[`top-left`,`top-center`,`top-right`,`middle-right`,`middle-left`,`bottom-left`,`bottom-center`,`bottom-right`],ko=1e8;function Ao(e){return{x:e.x+e.width/2*Math.cos(e.rotation)+e.height/2*Math.sin(-e.rotation),y:e.y+e.height/2*Math.cos(e.rotation)+e.width/2*Math.sin(e.rotation)}}function jo(e,t,n){let r=n.x+(e.x-n.x)*Math.cos(t)-(e.y-n.y)*Math.sin(t),i=n.y+(e.x-n.x)*Math.sin(t)+(e.y-n.y)*Math.cos(t);return{...e,rotation:e.rotation+t,x:r,y:i}}function Mo(e,t){return jo(e,t,Ao(e))}function No(e,t,n){let r=t;for(let i=0;ie.isAncestorOf(this)?(I.error(`Konva.Transformer cannot be an a child of the node you are trying to attach`),!1):!0);return this._nodes=e=t,e.length===1&&this.useSingleNodeRotation()?this.rotation(e[0].getAbsoluteRotation()):this.rotation(0),this._nodes.forEach(e=>{let t=()=>{this.nodes().length===1&&this.useSingleNodeRotation()&&this.rotation(this.nodes()[0].getAbsoluteRotation()),this._resetTransformCache(),!this._transforming&&!this.isDragging()&&this.update()};if(e._attrsAffectingSize.length){let n=e._attrsAffectingSize.map(e=>e+`Change.`+this._getEventNamespace()).join(` `);e.on(n,t)}e.on(wo.map(e=>e+`.${this._getEventNamespace()}`).join(` `),t),e.on(`absoluteTransformChange.${this._getEventNamespace()}`,t),this._proxyDrag(e)}),this._resetTransformCache(),this.findOne(`.top-left`)&&this.update(),this}_proxyDrag(e){let t;e.on(`dragstart.${this._getEventNamespace()}`,n=>{t=e.getAbsolutePosition(),!this.isDragging()&&e!==this.findOne(`.back`)&&this.startDrag(n,!1)}),e.on(`dragmove.${this._getEventNamespace()}`,n=>{if(!t)return;let r=e.getAbsolutePosition(),i=r.x-t.x,a=r.y-t.y;this.nodes().forEach(t=>{if(t===e||t.isDragging())return;let r=t.getAbsolutePosition();t.setAbsolutePosition({x:r.x+i,y:r.y+a}),t.startDrag(n)}),t=null})}getNodes(){return this._nodes||[]}getActiveAnchor(){return this._movingAnchorName}detach(){this._nodes&&this._nodes.forEach(e=>{e.off(`.`+this._getEventNamespace())}),this._nodes=[],this._resetTransformCache()}_resetTransformCache(){this._clearCache(Co),this._clearCache(`transform`),this._clearSelfAndDescendantCache(`absoluteTransform`)}_getNodeRect(){return this._getCache(Co,this.__getNodeRect)}__getNodeShape(e,t=this.rotation(),n){let r=e.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),i=e.getAbsoluteScale(n),a=e.getAbsolutePosition(n),o=r.x*i.x-e.offsetX()*i.x,s=r.y*i.y-e.offsetY()*i.y,c=(P.getAngle(e.getAbsoluteRotation())+Math.PI*2)%(Math.PI*2);return jo({x:a.x+o*Math.cos(c)+s*Math.sin(-c),y:a.y+s*Math.cos(c)+o*Math.sin(c),width:r.width*i.x,height:r.height*i.y,rotation:c},-P.getAngle(t),{x:0,y:0})}__getNodeRect(){if(!this.getNode())return{x:-ko,y:-ko,width:0,height:0,rotation:0};let e=[];this.nodes().map(t=>{let n=t.getClientRect({skipTransform:!0,skipShadow:!0,skipStroke:this.ignoreStroke()}),r=[{x:n.x,y:n.y},{x:n.x+n.width,y:n.y},{x:n.x+n.width,y:n.y+n.height},{x:n.x,y:n.y+n.height}],i=t.getAbsoluteTransform();r.forEach(function(t){let n=i.point(t);e.push(n)})});let t=new pn;t.rotate(-P.getAngle(this.rotation()));let n=1/0,r=1/0,i=-1/0,a=-1/0;e.forEach(function(e){let o=t.point(e);n===void 0&&(n=i=o.x,r=a=o.y),n=Math.min(n,o.x),r=Math.min(r,o.y),i=Math.max(i,o.x),a=Math.max(a,o.y)}),t.invert();let o=t.point({x:n,y:r});return{x:o.x,y:o.y,width:i-n,height:a-r,rotation:P.getAngle(this.rotation())}}getX(){return this._getNodeRect().x}getY(){return this._getNodeRect().y}getWidth(){return this._getNodeRect().width}getHeight(){return this._getNodeRect().height}_createElements(){this._createBack(),Oo.forEach(e=>{this._createAnchor(e)}),this._createAnchor(`rotater`),this._elementsCreated=!0}_createAnchor(e){let t=new ja({stroke:`rgb(0, 161, 255)`,fill:`white`,strokeWidth:1,name:e+` _anchor`,dragDistance:0,draggable:!0,hitStrokeWidth:Eo?10:`auto`}),n=this;t.on(`mousedown touchstart`,function(e){n._handleMouseDown(e)}),t.on(`dragstart`,e=>{t.stopDrag(),e.cancelBubble=!0}),t.on(`dragend`,e=>{e.cancelBubble=!0}),t.on(`mouseenter`,()=>{let n=Do(e,P.getAngle(this.rotation()),this.rotateAnchorCursor());t.getStage().content&&(t.getStage().content.style.cursor=n),this._cursorChange=!0}),t.on(`mouseout`,()=>{t.getStage().content&&(t.getStage().content.style.cursor=``),this._cursorChange=!1}),this.add(t)}_createBack(){let e=new U({name:`back`,width:0,height:0,sceneFunc(e,t){let n=t.getParent(),r=n.padding(),i=t.width(),a=t.height();if(e.beginPath(),e.rect(-r,-r,i+r*2,a+r*2),n.rotateEnabled()&&n.rotateLineVisible()){let t=n.rotateAnchorAngle(),r=n.rotateAnchorOffset(),o=I.degToRad(t),s=Math.sin(o),c=-Math.cos(o),l=i/2,u=a/2,d=1/0;c<0?d=Math.min(d,-u/c):c>0&&(d=Math.min(d,(a-u)/c)),s<0?d=Math.min(d,-l/s):s>0&&(d=Math.min(d,(i-l)/s));let f=l+s*d,p=u+c*d,m=I._sign(a),h=f+s*r*m,g=p+c*r*m;e.moveTo(f,p),e.lineTo(h,g)}e.fillStrokeShape(t)},hitFunc:(e,t)=>{if(!this.shouldOverdrawWholeArea())return;let n=this.padding();e.beginPath(),e.rect(-n,-n,t.width()+n*2,t.height()+n*2),e.fillStrokeShape(t)}});this.add(e),this._proxyDrag(e),e.on(`dragstart`,e=>{e.cancelBubble=!0}),e.on(`dragmove`,e=>{e.cancelBubble=!0}),e.on(`dragend`,e=>{e.cancelBubble=!0}),this.on(`dragmove`,e=>{this.update()})}_handleMouseDown(e){if(this._transforming)return;this._movingAnchorName=e.target.name().split(` `)[0];let t=this._getNodeRect(),n=t.width,r=t.height,i=Math.sqrt(n**2+r**2);this.sin=Math.abs(r/i),this.cos=Math.abs(n/i),typeof window<`u`&&(window.addEventListener(`mousemove`,this._handleMouseMove),window.addEventListener(`touchmove`,this._handleMouseMove),window.addEventListener(`mouseup`,this._handleMouseUp,!0),window.addEventListener(`touchend`,this._handleMouseUp,!0)),this._transforming=!0;let a=e.target.getAbsolutePosition(),o=e.target.getStage().getPointerPosition();this._anchorDragOffset={x:o.x-a.x,y:o.y-a.y},Po++,this._fire(`transformstart`,{evt:e.evt,target:this.getNode()}),this._nodes.forEach(t=>{t._fire(`transformstart`,{evt:e.evt,target:t})})}_handleMouseMove(e){let t,n,r,i=this.findOne(`.`+this._movingAnchorName),a=i.getStage();a.setPointersPositions(e);let o=a.getPointerPosition(),s={x:o.x-this._anchorDragOffset.x,y:o.y-this._anchorDragOffset.y},c=i.getAbsolutePosition();this.anchorDragBoundFunc()&&(s=this.anchorDragBoundFunc()(c,s,e)),i.setAbsolutePosition(s);let l=i.getAbsolutePosition();if(c.x===l.x&&c.y===l.y)return;if(this._movingAnchorName===`rotater`){let r=this._getNodeRect();t=i.x()-r.width/2,n=-i.y()+r.height/2;let a=P.getAngle(this.rotateAnchorAngle()),o=Math.atan2(-n,t)+Math.PI/2-a;r.height<0&&(o-=Math.PI);let s=P.getAngle(this.rotation())+o,c=P.getAngle(this.rotationSnapTolerance()),l=Mo(r,No(this.rotationSnaps(),s,c)-r.rotation);this._fitNodesInto(l,e);return}let u=this.shiftBehavior(),d;d=u===`inverted`?this.keepRatio()&&!e.shiftKey:u===`none`?this.keepRatio():this.keepRatio()||e.shiftKey;let f=this.centeredScaling()||e.altKey;if(this._movingAnchorName===`top-left`){if(d){let e=f?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(`.bottom-right`).x(),y:this.findOne(`.bottom-right`).y()};r=Math.sqrt((e.x-i.x())**2+(e.y-i.y())**2);let a=this.findOne(`.top-left`).x()>e.x?-1:1,o=this.findOne(`.top-left`).y()>e.y?-1:1;t=r*this.cos*a,n=r*this.sin*o,this.findOne(`.top-left`).x(e.x-t),this.findOne(`.top-left`).y(e.y-n)}}else if(this._movingAnchorName===`top-center`)this.findOne(`.top-left`).y(i.y());else if(this._movingAnchorName===`top-right`){if(d){let e=f?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(`.bottom-left`).x(),y:this.findOne(`.bottom-left`).y()};r=Math.sqrt((i.x()-e.x)**2+(e.y-i.y())**2);let a=this.findOne(`.top-right`).x()e.y?-1:1;t=r*this.cos*a,n=r*this.sin*o,this.findOne(`.top-right`).x(e.x+t),this.findOne(`.top-right`).y(e.y-n)}var p=i.position();this.findOne(`.top-left`).y(p.y),this.findOne(`.bottom-right`).x(p.x)}else if(this._movingAnchorName===`middle-left`)this.findOne(`.top-left`).x(i.x());else if(this._movingAnchorName===`middle-right`)this.findOne(`.bottom-right`).x(i.x());else if(this._movingAnchorName===`bottom-left`){if(d){let e=f?{x:this.width()/2,y:this.height()/2}:{x:this.findOne(`.top-right`).x(),y:this.findOne(`.top-right`).y()};r=Math.sqrt((e.x-i.x())**2+(i.y()-e.y)**2);let a=e.x{var n;t._fire(`transformend`,{evt:e,target:t}),(n=t.getLayer())==null||n.batchDraw()}),this._movingAnchorName=null}}_fitNodesInto(e,t){let n=this._getNodeRect();if(I._inRange(e.width,-this.padding()*2-1,1)){this.update();return}if(I._inRange(e.height,-this.padding()*2-1,1)){this.update();return}let r=new pn;if(r.rotate(P.getAngle(this.rotation())),this._movingAnchorName&&e.width<0&&this._movingAnchorName.indexOf(`left`)>=0){let t=r.point({x:-this.padding()*2,y:0});e.x+=t.x,e.y+=t.y,e.width+=this.padding()*2,this._movingAnchorName=this._movingAnchorName.replace(`left`,`right`),this._anchorDragOffset.x-=t.x,this._anchorDragOffset.y-=t.y}else if(this._movingAnchorName&&e.width<0&&this._movingAnchorName.indexOf(`right`)>=0){let t=r.point({x:this.padding()*2,y:0});this._movingAnchorName=this._movingAnchorName.replace(`right`,`left`),this._anchorDragOffset.x-=t.x,this._anchorDragOffset.y-=t.y,e.width+=this.padding()*2}if(this._movingAnchorName&&e.height<0&&this._movingAnchorName.indexOf(`top`)>=0){let t=r.point({x:0,y:-this.padding()*2});e.x+=t.x,e.y+=t.y,this._movingAnchorName=this._movingAnchorName.replace(`top`,`bottom`),this._anchorDragOffset.x-=t.x,this._anchorDragOffset.y-=t.y,e.height+=this.padding()*2}else if(this._movingAnchorName&&e.height<0&&this._movingAnchorName.indexOf(`bottom`)>=0){let t=r.point({x:0,y:this.padding()*2});this._movingAnchorName=this._movingAnchorName.replace(`bottom`,`top`),this._anchorDragOffset.x-=t.x,this._anchorDragOffset.y-=t.y,e.height+=this.padding()*2}if(this.boundBoxFunc()){let t=this.boundBoxFunc()(n,e);t?e=t:I.warn(`boundBoxFunc returned falsy. You should return new bound rect from it!`)}let i=1e7,a=new pn;a.translate(n.x,n.y),a.rotate(n.rotation),a.scale(n.width/i,n.height/i);let o=new pn,s=e.width/i,c=e.height/i;this.flipEnabled()===!1?(o.translate(e.x,e.y),o.rotate(e.rotation),o.translate(e.width<0?e.width:0,e.height<0?e.height:0),o.scale(Math.abs(s),Math.abs(c))):(o.translate(e.x,e.y),o.rotate(e.rotation),o.scale(s,c));let l=o.multiply(a.invert());this._nodes.forEach(e=>{var t;if(!e.getStage())return;let n=e.getParent().getAbsoluteTransform(),r=e.getTransform().copy();r.translate(e.offsetX(),e.offsetY());let i=new pn;i.multiply(n.copy().invert()).multiply(l).multiply(n).multiply(r);let a=i.decompose();e.setAttrs(a),(t=e.getLayer())==null||t.batchDraw()}),this.rotation(I._getRotation(e.rotation)),this._nodes.forEach(e=>{this._fire(`transform`,{evt:t,target:e}),e._fire(`transform`,{evt:t,target:e})}),this._resetTransformCache(),this.update(),this.getLayer().batchDraw()}forceUpdate(){this._resetTransformCache(),this.update()}_batchChangeChild(e,t){this.findOne(e).setAttrs(t)}update(){var e;let t=this._getNodeRect();this.rotation(I._getRotation(t.rotation));let n=t.width,r=t.height,i=this.enabledAnchors(),a=this.resizeEnabled(),o=this.padding(),s=this.anchorSize(),c=this.find(`._anchor`);c.forEach(e=>{e.setAttrs({width:s,height:s,offsetX:s/2,offsetY:s/2,stroke:this.anchorStroke(),strokeWidth:this.anchorStrokeWidth(),fill:this.anchorFill(),cornerRadius:this.anchorCornerRadius()})}),this._batchChangeChild(`.top-left`,{x:0,y:0,offsetX:s/2+o,offsetY:s/2+o,visible:a&&i.indexOf(`top-left`)>=0}),this._batchChangeChild(`.top-center`,{x:n/2,y:0,offsetY:s/2+o,visible:a&&i.indexOf(`top-center`)>=0}),this._batchChangeChild(`.top-right`,{x:n,y:0,offsetX:s/2-o,offsetY:s/2+o,visible:a&&i.indexOf(`top-right`)>=0}),this._batchChangeChild(`.middle-left`,{x:0,y:r/2,offsetX:s/2+o,visible:a&&i.indexOf(`middle-left`)>=0}),this._batchChangeChild(`.middle-right`,{x:n,y:r/2,offsetX:s/2-o,visible:a&&i.indexOf(`middle-right`)>=0}),this._batchChangeChild(`.bottom-left`,{x:0,y:r,offsetX:s/2+o,offsetY:s/2-o,visible:a&&i.indexOf(`bottom-left`)>=0}),this._batchChangeChild(`.bottom-center`,{x:n/2,y:r,offsetY:s/2-o,visible:a&&i.indexOf(`bottom-center`)>=0}),this._batchChangeChild(`.bottom-right`,{x:n,y:r,offsetX:s/2-o,offsetY:s/2-o,visible:a&&i.indexOf(`bottom-right`)>=0});let l=this.rotateAnchorAngle(),u=this.rotateAnchorOffset(),d=I.degToRad(l),f=Math.sin(d),p=-Math.cos(d),m=n/2,h=r/2,g=1/0;p<0?g=Math.min(g,-h/p):p>0&&(g=Math.min(g,(r-h)/p)),f<0?g=Math.min(g,-m/f):f>0&&(g=Math.min(g,(n-m)/f));let _=m+f*g,v=h+p*g,y=I._sign(r);this._batchChangeChild(`.rotater`,{x:_+f*u*y,y:v+p*u*y-o*p,visible:this.rotateEnabled()}),this._batchChangeChild(`.back`,{width:n,height:r,visible:this.borderEnabled(),stroke:this.borderStroke(),strokeWidth:this.borderStrokeWidth(),dash:this.borderDash(),draggable:this.nodes().some(e=>e.draggable()),x:0,y:0});let b=this.anchorStyleFunc();b&&c.forEach(e=>{b(e)}),(e=this.getLayer())==null||e.batchDraw()}isTransforming(){return this._transforming}stopTransform(){if(this._transforming){this._removeEvents();let e=this.findOne(`.`+this._movingAnchorName);e&&e.stopDrag()}}destroy(){return this.getStage()&&this._cursorChange&&this.getStage().content&&(this.getStage().content.style.cursor=``),Gi.prototype.destroy.call(this),this.detach(),this._removeEvents(),this}add(...e){return this._elementsCreated?(I.error(`You cannot add external nodes to the Transformer. Use tr.nodes([node]) instead.`),this):super.add(...e)}toObject(){return B.prototype.toObject.call(this)}clone(e){return B.prototype.clone.call(this,e)}getClientRect(){return this.nodes().length>0?super.getClientRect():{x:0,y:0,width:0,height:0}}};q.isTransforming=()=>Po>0;function Fo(e){return e instanceof Array||I.warn(`enabledAnchors value should be an array`),e instanceof Array&&e.forEach(function(e){Oo.indexOf(e)===-1&&I.warn(`Unknown anchor name: `+e+`. Available names are: `+Oo.join(`, `))}),e||[]}q.prototype.className=`Transformer`,F(q),z.addGetterSetter(q,`enabledAnchors`,Oo,Fo),z.addGetterSetter(q,`flipEnabled`,!0,or()),z.addGetterSetter(q,`resizeEnabled`,!0),z.addGetterSetter(q,`anchorSize`,10,R()),z.addGetterSetter(q,`rotateEnabled`,!0),z.addGetterSetter(q,`rotateLineVisible`,!0),z.addGetterSetter(q,`rotationSnaps`,[]),z.addGetterSetter(q,`rotateAnchorOffset`,50,R()),z.addGetterSetter(q,`rotateAnchorAngle`,0,R()),z.addGetterSetter(q,`rotateAnchorCursor`,`crosshair`),z.addGetterSetter(q,`rotationSnapTolerance`,5,R()),z.addGetterSetter(q,`borderEnabled`,!0),z.addGetterSetter(q,`anchorStroke`,`rgb(0, 161, 255)`),z.addGetterSetter(q,`anchorStrokeWidth`,1,R()),z.addGetterSetter(q,`anchorFill`,`white`),z.addGetterSetter(q,`anchorCornerRadius`,0,R()),z.addGetterSetter(q,`borderStroke`,`rgb(0, 161, 255)`),z.addGetterSetter(q,`borderStrokeWidth`,1,R()),z.addGetterSetter(q,`borderDash`),z.addGetterSetter(q,`keepRatio`,!0),z.addGetterSetter(q,`shiftBehavior`,`default`),z.addGetterSetter(q,`centeredScaling`,!1),z.addGetterSetter(q,`ignoreStroke`,!1),z.addGetterSetter(q,`padding`,0,R()),z.addGetterSetter(q,`nodes`),z.addGetterSetter(q,`node`),z.addGetterSetter(q,`boundBoxFunc`),z.addGetterSetter(q,`anchorDragBoundFunc`),z.addGetterSetter(q,`anchorStyleFunc`),z.addGetterSetter(q,`shouldOverdrawWholeArea`,!1),z.addGetterSetter(q,`useSingleNodeRotation`,!0),z.backCompat(q,{lineEnabled:`borderEnabled`,rotateHandlerOffset:`rotateAnchorOffset`,enabledHandlers:`enabledAnchors`});var Io=class extends U{_sceneFunc(e){e.beginPath(),e.arc(0,0,this.radius(),0,P.getAngle(this.angle()),this.clockwise()),e.lineTo(0,0),e.closePath(),e.fillStrokeShape(this)}getWidth(){return this.radius()*2}getHeight(){return this.radius()*2}setWidth(e){this.radius(e/2)}setHeight(e){this.radius(e/2)}};Io.prototype.className=`Wedge`,Io.prototype._centroid=!0,Io.prototype._attrsAffectingSize=[`radius`],F(Io),z.addGetterSetter(Io,`radius`,0,R()),z.addGetterSetter(Io,`angle`,0,R()),z.addGetterSetter(Io,`clockwise`,!1),z.backCompat(Io,{angleDeg:`angle`,getAngleDeg:`getAngle`,setAngleDeg:`setAngle`});function Lo(){this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}var Ro=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],zo=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function Bo(e,t){let n=e.data,r=e.width,i=e.height,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,ee=t+t+1,T=r-1,te=i-1,E=t+1,ne=E*(E+1)/2,re=new Lo,D=Ro[t],O=zo[t],ie=null,k=re,A=null,j=null;for(let e=1;e>O,C===0?n[o]=n[o+1]=n[o+2]=0:(C=255/C,n[o]=(c*D>>O)*C,n[o+1]=(l*D>>O)*C,n[o+2]=(u*D>>O)*C),c-=f,l-=p,u-=m,d-=h,f-=A.r,p-=A.g,m-=A.b,h-=A.a,a=s+((a=e+t+1)>O,C>0?(C=255/C,n[a]=(c*D>>O)*C,n[a+1]=(l*D>>O)*C,n[a+2]=(u*D>>O)*C):n[a]=n[a+1]=n[a+2]=0,c-=f,l-=p,u-=m,d-=h,f-=A.r,p-=A.g,m-=A.b,h-=A.a,a=e+((a=t+E)0&&Bo(e,t)};z.addGetterSetter(B,`blurRadius`,0,R(),z.afterSetFilter);var Ho=function(e){let t=this.brightness()*255,n=e.data,r=n.length;for(let e=0;e255?255:i,a=a<0?0:a>255?255:a,o=o<0?0:o>255?255:o,n[e]=i,n[e+1]=a,n[e+2]=o};z.addGetterSetter(B,`contrast`,0,R(),z.afterSetFilter);var Go=function(e){let t=e.data,n=e.width,r=e.height,i=Math.min(1,Math.max(0,this.embossStrength?.call(this)??.5)),a=Math.min(1,Math.max(0,this.embossWhiteLevel?.call(this)??.5)),o={"top-left":315,top:270,"top-right":225,right:180,"bottom-right":135,bottom:90,"bottom-left":45,left:0}[this.embossDirection?.call(this)??`top-left`]??315,s=!!(this.embossBlend?.call(this)??!1),c=i*10,l=a*255,u=o*Math.PI/180,d=Math.cos(u),f=Math.sin(u),p=128/1020*c,m=new Uint8ClampedArray(t),h=new Float32Array(n*r);for(let e=0,n=0;ne<0?0:e>255?255:e;for(let e=1;ei&&(i=a),c=t[e+1],cs&&(s=c),d=t[e+2],du&&(u=d);i===r&&(i=255,r=0),s===o&&(s=255,o=0),u===l&&(u=255,l=0);let p,m,h,g,_,v;if(f>0)p=i+f*(255-i),m=r-f*(r-0),h=s+f*(255-s),g=o-f*(o-0),_=u+f*(255-u),v=l-f*(l-0);else{let e=(i+r)*.5;p=i+f*(i-e),m=r+f*(r-e);let t=(s+o)*.5;h=s+f*(s-t),g=o+f*(o-t);let n=(u+l)*.5;_=u+f*(u-n),v=l+f*(l-n)}for(let e=0;el?f:l;let p=o,m=a,h=360/m*Math.PI/180;for(let e=0;el?f:l;let p=o,m=a,h=n.polarRotation||0,g,_;for(u=0;ut&&(b=y,x=0,S=-1),i=0;i=0&&d=0&&f=0&&d=0&&f=1020?255:0}return o}function cs(e,t,n){let r=[1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9],i=Math.round(Math.sqrt(r.length)),a=Math.floor(i/2),o=[];for(let s=0;s=0&&d=0&&f=n))for(let t=f;t=r)continue;let i=(n*t+e)*4;a+=o[i+0],s+=o[i+1],c+=o[i+2],l+=o[i+3],m+=1}a/=m,s/=m,c/=m,l/=m;for(let e=u;e=n))for(let t=f;t=r)continue;let i=(n*t+e)*4;o[i+0]=a,o[i+1]=s,o[i+2]=c,o[i+3]=l}}};z.addGetterSetter(B,`pixelSize`,8,R(),z.afterSetFilter);var fs=function(e){let t=Math.round(this.levels()*254)+1,n=e.data,r=n.length,i=255/t;for(let e=0;e255?255:e<0?0:Math.round(e)}),z.addGetterSetter(B,`green`,0,function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)}),z.addGetterSetter(B,`blue`,0,er,z.afterSetFilter);var ms=function(e){let t=e.data,n=t.length,r=this.red(),i=this.green(),a=this.blue(),o=this.alpha();for(let e=0;e255?255:e<0?0:Math.round(e)}),z.addGetterSetter(B,`green`,0,function(e){return this._filterUpToDate=!1,e>255?255:e<0?0:Math.round(e)}),z.addGetterSetter(B,`blue`,0,er,z.afterSetFilter),z.addGetterSetter(B,`alpha`,1,function(e){return this._filterUpToDate=!1,e>1?1:e<0?0:e});var hs=function(e){let t=e.data,n=t.length;for(let e=0;e=128&&(t[e]=255-n,t[e+1]=255-r,t[e+2]=255-i)}return e},_s=function(e){let t=this.threshold()*255,n=e.data,r=n.length;for(let e=0;e{i(e.getAttr(r))})}}var Es=`V`;function Ds(e){function t(e){return e?.__konvaNode?e:e?.parent?t(e.parent):(console.error(`vue-konva error: Can not find parent node`),null)}return t(e.parent)}function Os(e){return e.component?e.component.__konvaNode||Os(e.component.subTree):null}function ks(e){let{el:t,component:n}=e,r=Os(e);if(t?.tagName&&n&&!r){let e=t.tagName.toLowerCase();return console.error(`vue-konva error: You are trying to render "${e}" inside your component tree. Looks like it is not a Konva node. You can render only Konva components inside the Stage.`),null}return r}function As(e){let t=e=>!!e&&typeof e==`object`&&`component`in e,n=e=>Array.isArray(e),r=e=>t(e)?[e,...r(e.children)]:n(e)?e.flatMap(r):[];return r(e.children)}function js(e,t){let n=As(e),r=[];n.forEach(e=>{let t=ks(e);t&&r.push(t)});let i=!1;r.forEach((e,t)=>{e.getZIndex()!==t&&(e.setZIndex(t),i=!0)}),i&&ys(t)}var Ms=vs.default?.Stage||vs.Stage,Ns=Se({name:`Stage`,props:{config:{type:Object,default:function(){return{}}},__useStrictMode:{type:Boolean}},inheritAttrs:!1,setup(e,{attrs:t,slots:n,expose:i}){let a=Te();if(!a)return;let s=v({}),c=o(null),l=new Ms({width:e.config.width,height:e.config.height,container:document.createElement(`div`)});a.__konvaNode=l,p();function u(){return a?.__konvaNode}function d(){return a?.__konvaNode}function p(){if(!a)return;let n=s||{},r={...t,...e.config};Ss(a,r,n,e.__useStrictMode),Object.assign(s,r)}return r(()=>{c.value&&l.container(c.value),p(),Ts(l,a)}),f(()=>{p(),js(a.subTree,l),Ts(l,a)}),g(()=>{l.destroy()}),m(()=>e.config,p,{deep:!0}),i({getStage:d,getNode:u}),()=>we(`div`,{ref:c,id:t?.id,accesskey:t?.accesskey,class:t?.class,role:t?.role,style:t?.style,tabindex:t?.tabindex,title:t?.title},n.default?.())}}),Ps=`.vue-konva-event`,Fs={Group:!0,Layer:!0,FastLayer:!0,Label:!0};function J(e,t){return Se({name:e,props:{config:{type:Object,default:function(){return{}}},__useStrictMode:{type:Boolean}},setup(i,{attrs:a,slots:o,expose:s}){let c=Te();if(!c)return;let l=v({}),u=new t;c.__konvaNode=u,c.vnode.__konvaNode=u,h();function d(){return c?.__konvaNode}function p(){return c?.__konvaNode}function h(){if(!c)return;let e={};for(let t in c?.vnode.props)t.slice(0,2)===`on`&&(e[t]=c.vnode.props[t]);let t=l||{},n={...a,...i.config,...e};Ss(c,n,t,i.__useStrictMode),Object.assign(l,n)}r(()=>{let e=Ds(c)?.__konvaNode;e&&`add`in e&&e.add(u),ys(u),Ts(u,c)}),n(()=>{ys(u),u.destroy(),u.off(Ps),u.off(Cs)}),f(()=>{h(),js(c.subTree,u),Ts(u,c)}),m(()=>i.config,h,{deep:!0}),s({getStage:p,getNode:d});let g=Fs.hasOwnProperty(e);return()=>g?o.default?.():null}})}var Y=vs.default||vs,Is=J(`Arc`,Y.Arc),Ls=J(`Arrow`,Y.Arrow),Rs=J(`Circle`,Y.Circle),zs=J(`Ellipse`,Y.Ellipse),Bs=J(`FastLayer`,Y.FastLayer),Vs=J(`Group`,Y.Group),Hs=J(`Image`,Y.Image),Us=J(`Label`,Y.Label),Ws=J(`Layer`,Y.Layer),Gs=J(`Line`,Y.Line),Ks=J(`Path`,Y.Path),qs=J(`Rect`,Y.Rect),Js=J(`RegularPolygon`,Y.RegularPolygon),Ys=J(`Ring`,Y.Ring),Xs=J(`Shape`,Y.Shape),Zs=J(`Sprite`,Y.Sprite),Qs=J(`Star`,Y.Star),$s=J(`Tag`,Y.Tag),ec=J(`Text`,Y.Text),tc=J(`TextPath`,Y.TextPath),nc=J(`Transformer`,Y.Transformer),rc=J(`Wedge`,Y.Wedge),ic=Object.freeze(Object.defineProperty({__proto__:null,Arc:Is,Arrow:Ls,Circle:Rs,Ellipse:zs,FastLayer:Bs,Group:Vs,Image:Hs,Label:Us,Layer:Ws,Line:Gs,Path:Ks,Rect:qs,RegularPolygon:Js,Ring:Ys,Shape:Xs,Sprite:Zs,Star:Qs,Tag:$s,Text:ec,TextPath:tc,Transformer:nc,Wedge:rc},Symbol.toStringTag,{value:`Module`})),ac={install:(e,t)=>{let n=t?.prefix||Es,r=t?.customNodes?Object.entries(t.customNodes).map(([e,t])=>J(e,t)):[];[Ns,...Object.values(ic),...r].forEach(t=>{e.component(`${n}${t.name}`,t)})}},oc=typeof document<`u`;function sc(e){return typeof e==`object`||`displayName`in e||`props`in e||`__vccOpts`in e}function cc(e){return e.__esModule||e[Symbol.toStringTag]===`Module`||e.default&&sc(e.default)}var X=Object.assign;function lc(e,t){let n={};for(let r in t){let i=t[r];n[r]=dc(i)?i.map(e):e(i)}return n}var uc=()=>{},dc=Array.isArray;function fc(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}var pc=/#/g,mc=/&/g,hc=/\//g,gc=/=/g,_c=/\?/g,vc=/\+/g,yc=/%5B/g,bc=/%5D/g,xc=/%5E/g,Sc=/%60/g,Cc=/%7B/g,wc=/%7C/g,Tc=/%7D/g,Ec=/%20/g;function Dc(e){return e==null?``:encodeURI(``+e).replace(wc,`|`).replace(yc,`[`).replace(bc,`]`)}function Oc(e){return Dc(e).replace(Cc,`{`).replace(Tc,`}`).replace(xc,`^`)}function kc(e){return Dc(e).replace(vc,`%2B`).replace(Ec,`+`).replace(pc,`%23`).replace(mc,`%26`).replace(Sc,"`").replace(Cc,`{`).replace(Tc,`}`).replace(xc,`^`)}function Ac(e){return kc(e).replace(gc,`%3D`)}function jc(e){return Dc(e).replace(pc,`%23`).replace(_c,`%3F`)}function Mc(e){return jc(e).replace(hc,`%2F`)}function Nc(e){if(e==null)return null;try{return decodeURIComponent(``+e)}catch{}return``+e}var Pc=/\/$/,Fc=e=>e.replace(Pc,``);function Ic(e,t,n=`/`){let r,i={},a=``,o=``,s=t.indexOf(`#`),c=t.indexOf(`?`);return c=s>=0&&c>s?-1:c,c>=0&&(r=t.slice(0,c),a=t.slice(c,s>0?s:t.length),i=e(a.slice(1))),s>=0&&(r||=t.slice(0,s),o=t.slice(s,t.length)),r=Wc(r??t,n),{fullPath:r+a+o,path:r,query:i,hash:Nc(o)}}function Lc(e,t){let n=t.query?e(t.query):``;return t.path+(n&&`?`)+n+(t.hash||``)}function Rc(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||`/`}function zc(e,t,n){let r=t.matched.length-1,i=n.matched.length-1;return r>-1&&r===i&&Bc(t.matched[r],n.matched[i])&&Vc(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Bc(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Vc(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Hc(e[n],t[n]))return!1;return!0}function Hc(e,t){return dc(e)?Uc(e,t):dc(t)?Uc(t,e):e?.valueOf()===t?.valueOf()}function Uc(e,t){return dc(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):e.length===1&&e[0]===t}function Wc(e,t){if(e.startsWith(`/`))return e;if(!e)return t;let n=t.split(`/`),r=e.split(`/`),i=r[r.length-1];(i===`..`||i===`.`)&&r.push(``);let a=n.length-1,o,s;for(o=0;o1&&a--;else break;return n.slice(0,a).join(`/`)+`/`+r.slice(o).join(`/`)}var Gc={path:`/`,name:void 0,params:{},query:{},hash:``,fullPath:`/`,matched:[],meta:{},redirectedFrom:void 0},Kc=function(e){return e.pop=`pop`,e.push=`push`,e}({}),qc=function(e){return e.back=`back`,e.forward=`forward`,e.unknown=``,e}({});function Jc(e){if(!e)if(oc){let t=document.querySelector(`base`);e=t&&t.getAttribute(`href`)||`/`,e=e.replace(/^\w+:\/\/[^\/]+/,``)}else e=`/`;return e[0]!==`/`&&e[0]!==`#`&&(e=`/`+e),Fc(e)}var Yc=/^[^#]+#/;function Xc(e,t){return e.replace(Yc,`#`)+t}function Zc(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var Qc=()=>({left:window.scrollX,top:window.scrollY});function $c(e){let t;if(`el`in e){let n=e.el,r=typeof n==`string`&&n.startsWith(`#`),i=typeof n==`string`?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=Zc(i,e)}else t=e;`scrollBehavior`in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left==null?window.scrollX:t.left,t.top==null?window.scrollY:t.top)}function el(e,t){return(history.state?history.state.position-t:-1)+e}var tl=new Map;function nl(e,t){tl.set(e,t)}function rl(e){let t=tl.get(e);return tl.delete(e),t}function il(e){return typeof e==`string`||e&&typeof e==`object`}function al(e){return typeof e==`string`||typeof e==`symbol`}var Z=function(e){return e[e.MATCHER_NOT_FOUND=1]=`MATCHER_NOT_FOUND`,e[e.NAVIGATION_GUARD_REDIRECT=2]=`NAVIGATION_GUARD_REDIRECT`,e[e.NAVIGATION_ABORTED=4]=`NAVIGATION_ABORTED`,e[e.NAVIGATION_CANCELLED=8]=`NAVIGATION_CANCELLED`,e[e.NAVIGATION_DUPLICATED=16]=`NAVIGATION_DUPLICATED`,e}({}),ol=Symbol(``);Z.MATCHER_NOT_FOUND,Z.NAVIGATION_GUARD_REDIRECT,Z.NAVIGATION_ABORTED,Z.NAVIGATION_CANCELLED,Z.NAVIGATION_DUPLICATED;function sl(e,t){return X(Error(),{type:e,[ol]:!0},t)}function cl(e,t){return e instanceof Error&&ol in e&&(t==null||!!(e.type&t))}function ll(e){let t={};if(e===``||e===`?`)return t;let n=(e[0]===`?`?e.slice(1):e).split(`&`);for(let e=0;ee&&kc(e)):[r&&kc(r)]).forEach(e=>{e!==void 0&&(t+=(t.length?`&`:``)+n,e!=null&&(t+=`=`+e))})}return t}function dl(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=dc(r)?r.map(e=>e==null?null:``+e):r==null?r:``+r)}return t}var fl=Symbol(``),pl=Symbol(``),ml=Symbol(``),hl=Symbol(``),gl=Symbol(``);function _l(){let e=[];function t(t){return e.push(t),()=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function vl(e,t,n,r,i,a=e=>e()){let o=r&&(r.enterCallbacks[i]=r.enterCallbacks[i]||[]);return()=>new Promise((s,c)=>{let l=e=>{e===!1?c(sl(Z.NAVIGATION_ABORTED,{from:n,to:t})):e instanceof Error?c(e):il(e)?c(sl(Z.NAVIGATION_GUARD_REDIRECT,{from:t,to:e})):(o&&r.enterCallbacks[i]===o&&typeof e==`function`&&o.push(e),s())},u=a(()=>e.call(r&&r.instances[i],t,n,l)),d=Promise.resolve(u);e.length<3&&(d=d.then(l)),d.catch(e=>c(e))})}function yl(e,t,n,r,i=e=>e()){let a=[];for(let o of e)for(let e in o.components){let s=o.components[e];if(!(t!==`beforeRouteEnter`&&!o.instances[e]))if(sc(s)){let c=(s.__vccOpts||s)[t];c&&a.push(vl(c,n,r,o,e,i))}else{let c=s();a.push(()=>c.then(a=>{if(!a)throw Error(`Couldn't resolve component "${e}" at "${o.path}"`);let s=cc(a)?a.default:a;o.mods[e]=a,o.components[e]=s;let c=(s.__vccOpts||s)[t];return c&&vl(c,n,r,o,e,i)()}))}}return a}function bl(e,t){let n=[],r=[],i=[],a=Math.max(t.matched.length,e.matched.length);for(let o=0;oBc(e,a))?r.push(a):n.push(a));let s=e.matched[o];s&&(t.matched.find(e=>Bc(e,s))||i.push(s))}return[n,r,i]}var xl=()=>location.protocol+`//`+location.host;function Sl(e,t){let{pathname:n,search:r,hash:i}=t,a=e.indexOf(`#`);if(a>-1){let t=i.includes(e.slice(a))?e.slice(a).length:1,n=i.slice(t);return n[0]!==`/`&&(n=`/`+n),Rc(n,``)}return Rc(n,e)+r+i}function Cl(e,t,n,r){let i=[],a=[],o=null,s=({state:a})=>{let s=Sl(e,location),c=n.value,l=t.value,u=0;if(a){if(n.value=s,t.value=a,o&&o===c){o=null;return}u=l?a.position-l.position:0}else r(s);i.forEach(e=>{e(n.value,c,{delta:u,type:Kc.pop,direction:u?u>0?qc.forward:qc.back:qc.unknown})})};function c(){o=n.value}function l(e){i.push(e);let t=()=>{let t=i.indexOf(e);t>-1&&i.splice(t,1)};return a.push(t),t}function u(){if(document.visibilityState===`hidden`){let{history:e}=window;if(!e.state)return;e.replaceState(X({},e.state,{scroll:Qc()}),``)}}function d(){for(let e of a)e();a=[],window.removeEventListener(`popstate`,s),window.removeEventListener(`pagehide`,u),document.removeEventListener(`visibilitychange`,u)}return window.addEventListener(`popstate`,s),window.addEventListener(`pagehide`,u),document.addEventListener(`visibilitychange`,u),{pauseListeners:c,listen:l,destroy:d}}function wl(e,t,n,r=!1,i=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:i?Qc():null}}function Tl(e){let{history:t,location:n}=window,r={value:Sl(e,n)},i={value:t.state};i.value||a(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(r,a,o){let s=e.indexOf(`#`),c=s>-1?(n.host&&document.querySelector(`base`)?e:e.slice(s))+r:xl()+e+r;try{t[o?`replaceState`:`pushState`](a,``,c),i.value=a}catch(e){console.error(e),n[o?`replace`:`assign`](c)}}function o(e,n){a(e,X({},t.state,wl(i.value.back,e,i.value.forward,!0),n,{position:i.value.position}),!0),r.value=e}function s(e,n){let o=X({},i.value,t.state,{forward:e,scroll:Qc()});a(o.current,o,!0),a(e,X({},wl(r.value,e,null),{position:o.position+1},n),!1),r.value=e}return{location:r,state:i,push:s,replace:o}}function El(e){e=Jc(e);let t=Tl(e),n=Cl(e,t.state,t.location,t.replace);function r(e,t=!0){t||n.pauseListeners(),history.go(e)}let i=X({location:``,base:e,go:r,createHref:Xc.bind(null,e)},t,n);return Object.defineProperty(i,`location`,{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,`state`,{enumerable:!0,get:()=>t.state.value}),i}var Dl=function(e){return e[e.Static=0]=`Static`,e[e.Param=1]=`Param`,e[e.Group=2]=`Group`,e}({}),Q=function(e){return e[e.Static=0]=`Static`,e[e.Param=1]=`Param`,e[e.ParamRegExp=2]=`ParamRegExp`,e[e.ParamRegExpEnd=3]=`ParamRegExpEnd`,e[e.EscapeNext=4]=`EscapeNext`,e}(Q||{}),Ol={type:Dl.Static,value:``},kl=/[a-zA-Z0-9_]/;function Al(e){if(!e)return[[]];if(e===`/`)return[[Ol]];if(!e.startsWith(`/`))throw Error(`Invalid path "${e}"`);function t(e){throw Error(`ERR (${n})/"${l}": ${e}`)}let n=Q.Static,r=n,i=[],a;function o(){a&&i.push(a),a=[]}let s=0,c,l=``,u=``;function d(){l&&=(n===Q.Static?a.push({type:Dl.Static,value:l}):n===Q.Param||n===Q.ParamRegExp||n===Q.ParamRegExpEnd?(a.length>1&&(c===`*`||c===`+`)&&t(`A repeatable param (${l}) must be alone in its segment. eg: '/:ids+.`),a.push({type:Dl.Param,value:l,regexp:u,repeatable:c===`*`||c===`+`,optional:c===`*`||c===`?`})):t(`Invalid state to consume buffer`),``)}function f(){l+=c}for(;st.length?t.length===1&&t[0]===$.Static+$.Segment?1:-1:0}function Il(e,t){let n=0,r=e.score,i=t.score;for(;n0&&t[t.length-1]<0}var Rl={strict:!1,end:!0,sensitive:!1};function zl(e,t,n){let r=X(Pl(Al(e.path),n),{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Bl(e,t){let n=[],r=new Map;t=fc(Rl,t);function i(e){return r.get(e)}function a(e,n,r){let i=!r,s=Hl(e);s.aliasOf=r&&r.record;let l=fc(t,e),u=[s];if(`alias`in e){let t=typeof e.alias==`string`?[e.alias]:e.alias;for(let e of t)u.push(Hl(X({},s,{components:r?r.record.components:s.components,path:e,aliasOf:r?r.record:s})))}let d,f;for(let t of u){let{path:u}=t;if(n&&u[0]!==`/`){let e=n.record.path,r=e[e.length-1]===`/`?``:`/`;t.path=n.record.path+(u&&r+u)}if(d=zl(t,n,l),r?r.alias.push(d):(f||=d,f!==d&&f.alias.push(d),i&&e.name&&!Wl(d)&&o(e.name)),Jl(d)&&c(d),s.children){let e=s.children;for(let t=0;t{o(f)}:uc}function o(e){if(al(e)){let t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(o),t.alias.forEach(o))}else{let t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(o),e.alias.forEach(o))}}function s(){return n}function c(e){let t=Kl(e,n);n.splice(t,0,e),e.record.name&&!Wl(e)&&r.set(e.record.name,e)}function l(e,t){let i,a={},o,s;if(`name`in e&&e.name){if(i=r.get(e.name),!i)throw sl(Z.MATCHER_NOT_FOUND,{location:e});s=i.record.name,a=X(Vl(t.params,i.keys.filter(e=>!e.optional).concat(i.parent?i.parent.keys.filter(e=>e.optional):[]).map(e=>e.name)),e.params&&Vl(e.params,i.keys.map(e=>e.name))),o=i.stringify(a)}else if(e.path!=null)o=e.path,i=n.find(e=>e.re.test(o)),i&&(a=i.parse(o),s=i.record.name);else{if(i=t.name?r.get(t.name):n.find(e=>e.re.test(t.path)),!i)throw sl(Z.MATCHER_NOT_FOUND,{location:e,currentLocation:t});s=i.record.name,a=X({},t.params,e.params),o=i.stringify(a)}let c=[],l=i;for(;l;)c.unshift(l.record),l=l.parent;return{name:s,path:o,params:a,matched:c,meta:Gl(c)}}e.forEach(e=>a(e));function u(){n.length=0,r.clear()}return{addRoute:a,resolve:l,removeRoute:o,clearRoutes:u,getRoutes:s,getRecordMatcher:i}}function Vl(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function Hl(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Ul(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,`mods`,{value:{}}),t}function Ul(e){let t={},n=e.props||!1;if(`component`in e)t.default=n;else for(let r in e.components)t[r]=typeof n==`object`?n[r]:n;return t}function Wl(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Gl(e){return e.reduce((e,t)=>X(e,t.meta),{})}function Kl(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;Il(e,t[i])<0?r=i:n=i+1}let i=ql(e);return i&&(r=t.lastIndexOf(i,r-1)),r}function ql(e){let t=e;for(;t=t.parent;)if(Jl(t)&&Il(e,t)===0)return t}function Jl({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Yl(e){let t=h(ml),n=h(hl),r=M(()=>{let n=l(e.to);return t.resolve(n)}),i=M(()=>{let{matched:e}=r.value,{length:t}=e,i=e[t-1],a=n.matched;if(!i||!a.length)return-1;let o=a.findIndex(Bc.bind(null,i));if(o>-1)return o;let s=eu(e[t-2]);return t>1&&eu(i)===s&&a[a.length-1].path!==s?a.findIndex(Bc.bind(null,e[t-2])):o}),a=M(()=>i.value>-1&&$l(n.params,r.value.params)),o=M(()=>i.value>-1&&i.value===n.matched.length-1&&Vc(n.params,r.value.params));function s(n={}){if(Ql(n)){let n=t[l(e.replace)?`replace`:`push`](l(e.to)).catch(uc);return e.viewTransition&&typeof document<`u`&&`startViewTransition`in document&&document.startViewTransition(()=>n),n}return Promise.resolve()}return{route:r,href:M(()=>r.value.href),isActive:a,isExactActive:o,navigate:s}}function Xl(e){return e.length===1?e[0]:e}var Zl=Se({name:`RouterLink`,compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:`page`},viewTransition:Boolean},useLink:Yl,setup(e,{slots:t}){let n=v(Yl(e)),{options:r}=h(ml),i=M(()=>({[tu(e.activeClass,r.linkActiveClass,`router-link-active`)]:n.isActive,[tu(e.exactActiveClass,r.linkExactActiveClass,`router-link-exact-active`)]:n.isExactActive}));return()=>{let r=t.default&&Xl(t.default(n));return e.custom?r:we(`a`,{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},r)}}});function Ql(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function $l(e,t){for(let n in t){let r=t[n],i=e[n];if(typeof r==`string`){if(r!==i)return!1}else if(!dc(i)||i.length!==r.length||r.some((e,t)=>e.valueOf()!==i[t].valueOf()))return!1}return!0}function eu(e){return e?e.aliasOf?e.aliasOf.path:e.path:``}var tu=(e,t,n)=>e??t??n,nu=Se({name:`RouterView`,inheritAttrs:!1,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(e,{attrs:n,slots:r}){let i=h(gl),a=M(()=>e.route||i.value),s=h(pl,0),c=M(()=>{let e=l(s),{matched:t}=a.value,n;for(;(n=t[e])&&!n.components;)e++;return e}),u=M(()=>a.value.matched[c.value]);t(pl,M(()=>c.value+1)),t(fl,u),t(gl,a);let d=o();return m(()=>[d.value,u.value,e.name],([e,t,n],[r,i,a])=>{t&&(t.instances[n]=e,i&&i!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=i.leaveGuards),t.updateGuards.size||(t.updateGuards=i.updateGuards))),e&&t&&(!i||!Bc(t,i)||!r)&&(t.enterCallbacks[n]||[]).forEach(t=>t(e))},{flush:`post`}),()=>{let t=a.value,i=e.name,o=u.value,s=o&&o.components[i];if(!s)return ru(r.default,{Component:s,route:t});let c=o.props[i],l=we(s,X({},c?c===!0?t.params:typeof c==`function`?c(t):c:null,n,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(o.instances[i]=null)},ref:d}));return ru(r.default,{Component:l,route:t})||l}}});function ru(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var iu=nu;function au(e){let t=Bl(e.routes,e),n=e.parseQuery||ll,r=e.stringifyQuery||ul,i=e.history,a=_l(),o=_l(),s=_l(),c=y(Gc),u=Gc;oc&&e.scrollBehavior&&`scrollRestoration`in history&&(history.scrollRestoration=`manual`);let d=lc.bind(null,e=>``+e),f=lc.bind(null,Mc),p=lc.bind(null,Nc);function m(e,n){let r,i;return al(e)?(r=t.getRecordMatcher(e),i=n):i=e,t.addRoute(i,r)}function h(e){let n=t.getRecordMatcher(e);n&&t.removeRoute(n)}function g(){return t.getRoutes().map(e=>e.record)}function v(e){return!!t.getRecordMatcher(e)}function b(e,a){if(a=X({},a||c.value),typeof e==`string`){let r=Ic(n,e,a.path),o=t.resolve({path:r.path},a),s=i.createHref(r.fullPath);return X(r,o,{params:p(o.params),hash:Nc(r.hash),redirectedFrom:void 0,href:s})}let o;if(e.path!=null)o=X({},e,{path:Ic(n,e.path,a.path).path});else{let t=X({},e.params);for(let e in t)t[e]??delete t[e];o=X({},e,{params:f(t)}),a.params=f(a.params)}let s=t.resolve(o,a),l=e.hash||``;s.params=d(p(s.params));let u=Lc(r,X({},e,{hash:Oc(l),path:s.path})),m=i.createHref(u);return X({fullPath:u,hash:l,query:r===ul?dl(e.query):e.query||{}},s,{redirectedFrom:void 0,href:m})}function x(e){return typeof e==`string`?Ic(n,e,c.value.path):X({},e)}function S(e,t){if(u!==e)return sl(Z.NAVIGATION_CANCELLED,{from:t,to:e})}function C(e){return T(e)}function w(e){return C(X(x(e),{replace:!0}))}function ee(e,t){let n=e.matched[e.matched.length-1];if(n&&n.redirect){let{redirect:r}=n,i=typeof r==`function`?r(e,t):r;return typeof i==`string`&&(i=i.includes(`?`)||i.includes(`#`)?i=x(i):{path:i},i.params={}),X({query:e.query,hash:e.hash,params:i.path==null?e.params:{}},i)}}function T(e,t){let n=u=b(e),i=c.value,a=e.state,o=e.force,s=e.replace===!0,l=ee(n,i);if(l)return T(X(x(l),{state:typeof l==`object`?X({},a,l.state):a,force:o,replace:s}),t||n);let d=n;d.redirectedFrom=t;let f;return!o&&zc(r,i,n)&&(f=sl(Z.NAVIGATION_DUPLICATED,{to:d,from:i}),se(i,i,!0,!1)),(f?Promise.resolve(f):ne(d,i)).catch(e=>cl(e)?cl(e,Z.NAVIGATION_GUARD_REDIRECT)?e:oe(e):ae(e,d,i)).then(e=>{if(e){if(cl(e,Z.NAVIGATION_GUARD_REDIRECT))return T(X({replace:s},x(e.to),{state:typeof e.to==`object`?X({},a,e.to.state):a,force:o}),t||d)}else e=D(d,i,!0,s,a);return re(d,i,e),e})}function te(e,t){let n=S(e,t);return n?Promise.reject(n):Promise.resolve()}function E(e){let t=ue.values().next().value;return t&&typeof t.runWithContext==`function`?t.runWithContext(e):e()}function ne(e,t){let n,[r,i,s]=bl(e,t);n=yl(r.reverse(),`beforeRouteLeave`,e,t);for(let i of r)i.leaveGuards.forEach(r=>{n.push(vl(r,e,t))});let c=te.bind(null,e,t);return n.push(c),N(n).then(()=>{n=[];for(let r of a.list())n.push(vl(r,e,t));return n.push(c),N(n)}).then(()=>{n=yl(i,`beforeRouteUpdate`,e,t);for(let r of i)r.updateGuards.forEach(r=>{n.push(vl(r,e,t))});return n.push(c),N(n)}).then(()=>{n=[];for(let r of s)if(r.beforeEnter)if(dc(r.beforeEnter))for(let i of r.beforeEnter)n.push(vl(i,e,t));else n.push(vl(r.beforeEnter,e,t));return n.push(c),N(n)}).then(()=>(e.matched.forEach(e=>e.enterCallbacks={}),n=yl(s,`beforeRouteEnter`,e,t,E),n.push(c),N(n))).then(()=>{n=[];for(let r of o.list())n.push(vl(r,e,t));return n.push(c),N(n)}).catch(e=>cl(e,Z.NAVIGATION_CANCELLED)?e:Promise.reject(e))}function re(e,t,n){s.list().forEach(r=>E(()=>r(e,t,n)))}function D(e,t,n,r,a){let o=S(e,t);if(o)return o;let s=t===Gc,l=oc?history.state:{};n&&(r||s?i.replace(e.fullPath,X({scroll:s&&l&&l.scroll},a)):i.push(e.fullPath,a)),c.value=e,se(e,t,n,s),oe()}let O;function ie(){O||=i.listen((e,t,n)=>{if(!de.listening)return;let r=b(e),a=ee(r,de.currentRoute.value);if(a){T(X(a,{replace:!0,force:!0}),r).catch(uc);return}u=r;let o=c.value;oc&&nl(el(o.fullPath,n.delta),Qc()),ne(r,o).catch(e=>cl(e,Z.NAVIGATION_ABORTED|Z.NAVIGATION_CANCELLED)?e:cl(e,Z.NAVIGATION_GUARD_REDIRECT)?(T(X(x(e.to),{force:!0}),r).then(e=>{cl(e,Z.NAVIGATION_ABORTED|Z.NAVIGATION_DUPLICATED)&&!n.delta&&n.type===Kc.pop&&i.go(-1,!1)}).catch(uc),Promise.reject()):(n.delta&&i.go(-n.delta,!1),ae(e,r,o))).then(e=>{e||=D(r,o,!1),e&&(n.delta&&!cl(e,Z.NAVIGATION_CANCELLED)?i.go(-n.delta,!1):n.type===Kc.pop&&cl(e,Z.NAVIGATION_ABORTED|Z.NAVIGATION_DUPLICATED)&&i.go(-1,!1)),re(r,o,e)}).catch(uc)})}let k=_l(),A=_l(),j;function ae(e,t,n){oe(e);let r=A.list();return r.length?r.forEach(r=>r(e,t,n)):console.error(e),Promise.reject(e)}function M(){return j&&c.value!==Gc?Promise.resolve():new Promise((e,t)=>{k.add([e,t])})}function oe(e){return j||(j=!e,ie(),k.list().forEach(([t,n])=>e?n(e):t()),k.reset()),e}function se(t,n,r,i){let{scrollBehavior:a}=e;if(!oc||!a)return Promise.resolve();let o=!r&&rl(el(t.fullPath,0))||(i||!r)&&history.state&&history.state.scroll||null;return Ce().then(()=>a(t,n,o)).then(e=>e&&$c(e)).catch(e=>ae(e,t,n))}let ce=e=>i.go(e),le,ue=new Set,de={currentRoute:c,listening:!0,addRoute:m,removeRoute:h,clearRoutes:t.clearRoutes,hasRoute:v,getRoutes:g,resolve:b,options:e,push:C,replace:w,go:ce,back:()=>ce(-1),forward:()=>ce(1),beforeEach:a.add,beforeResolve:o.add,afterEach:s.add,onError:A.add,isReady:M,install(e){e.component(`RouterLink`,Zl),e.component(`RouterView`,iu),e.config.globalProperties.$router=de,Object.defineProperty(e.config.globalProperties,`$route`,{enumerable:!0,get:()=>l(c)}),oc&&!le&&c.value===Gc&&(le=!0,C(i.location).catch(e=>{}));let t={};for(let e in Gc)Object.defineProperty(t,e,{get:()=>c.value[e],enumerable:!0});e.provide(ml,de),e.provide(hl,_(t)),e.provide(gl,c);let n=e.unmount;ue.add(e),e.unmount=function(){ue.delete(e),ue.size<1&&(u=Gc,O&&O(),O=null,c.value=Gc,le=!1,j=!1),n()}}};function N(e){return e.reduce((e,t)=>e.then(()=>E(t)),Promise.resolve())}return de}function ou(){return h(ml)}function su(e){return h(hl)}var cu=he(`images`,()=>{let e=o([]),t=o(!1),n=o(null),r=o(0);async function i(){t.value=!0,n.value=null;try{let t=await fetch(`/api/images`);if(!t.ok)throw Error(`Failed to load images`);e.value=await t.json()}catch(e){n.value=e instanceof Error?e.message:`Unknown error`}finally{t.value=!1}}async function a(t,n){let r=new FormData;r.append(`file`,t),n?.original&&r.append(`original`,n.original),n?.cropParams&&r.append(`cropParams`,JSON.stringify(n.cropParams)),n?.stickerState&&r.append(`stickerState`,JSON.stringify(n.stickerState)),n?.cropOrientation&&r.append(`cropOrientation`,n.cropOrientation);let i=await fetch(`/api/images`,{method:`POST`,body:r});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.error??`Upload failed`)}let a=await i.json();return e.value.unshift(a),a}async function s(t,n,r){let i=new FormData;i.append(`file`,n),r?.cropParams&&i.append(`cropParams`,JSON.stringify(r.cropParams)),r?.stickerState&&i.append(`stickerState`,JSON.stringify(r.stickerState)),r?.cropOrientation&&i.append(`cropOrientation`,r.cropOrientation);let a=await fetch(`/api/images/${t}/reprocess`,{method:`POST`,body:i});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e.error??`Reprocess failed`)}let o=await a.json(),s=e.value.findIndex(e=>e.id===t);return s!==-1&&(e.value[s]=o),o}async function c(t){if(!(await fetch(`/api/images/${t}`,{method:`DELETE`})).ok)throw Error(`Delete failed`);e.value=e.value.filter(e=>e.id!==t)}async function l(t,n,r){let i=r?`POST`:`DELETE`,a=await fetch(`/api/images/${t}/approve/${n}`,{method:i});if(!a.ok)throw Error(`Failed to update approval`);let o=await a.json(),s=e.value.findIndex(e=>e.id===t);s!==-1&&(e.value[s]=o)}async function u(e,t=1,n=20){let r=new URLSearchParams({page:String(t),limit:String(n)});e&&r.set(`status`,e);let i=await fetch(`/api/shared-images?${r}`);if(!i.ok)throw Error(`Failed to load shared images`);return i.json()}async function d(){let e=await fetch(`/api/shared-images/pending-count`);e.ok&&(r.value=(await e.json()).count)}async function f(e,t){let n=await fetch(`/api/shared-images/${e}/approve`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({deviceIds:t})});if(!n.ok)throw Error(`Failed to approve`);return r.value>0&&r.value--,n.json()}async function p(e){let t=await fetch(`/api/shared-images/${e}/decline`,{method:`POST`});if(!t.ok)throw Error(`Failed to decline`);return r.value>0&&r.value--,t.json()}async function m(e,t){let n=await fetch(`/api/images/${e}/share`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({recipientEmail:t})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`Failed to share`)}}return{images:e,loading:t,error:n,pendingCount:r,fetchImages:i,uploadImage:a,reprocessImage:s,deleteImage:c,setApproval:l,fetchSharedImages:u,fetchPendingCount:d,approveShared:f,declineShared:p,shareImage:m}}),lu={class:`bottom-nav`,"aria-label":`Main navigation`},uu={class:`bottom-nav__icon-wrap`,"aria-hidden":`true`},du=[`innerHTML`],fu={key:0,class:`bottom-nav__badge`},pu={class:`bottom-nav__label`},mu=ve(Se({__name:`BottomNav`,setup(e){let t=su(),n=cu(),r=[{name:`home`,label:`Home`,to:`/`,icon:``},{name:`library`,label:`Library`,to:`/library`,icon:``},{name:`shared`,label:`Shared`,to:`/library?tab=shared`,icon:``},{name:`settings`,label:`Settings`,to:`/settings`,icon:``}];function i(e){let n=e.split(`?`)[0];return n===`/`?t.path===`/`:t.path.startsWith(n)}return(e,t)=>{let a=d(`RouterLink`);return ae(),fe(`nav`,lu,[(ae(),fe(de,null,j(r,e=>C(a,{key:e.name,to:e.to,class:re([`bottom-nav__tab`,{"bottom-nav__tab--active":i(e.to)}]),"aria-label":e.label,"aria-current":i(e.to)?`page`:void 0},{default:Ee(()=>[be(`span`,uu,[be(`span`,{class:`bottom-nav__icon`,innerHTML:e.icon},null,8,du),e.name===`shared`&&l(n).pendingCount>0?(ae(),fe(`span`,fu,pe(l(n).pendingCount>9?`9+`:l(n).pendingCount),1)):O(``,!0)]),be(`span`,pu,pe(e.label),1)]),_:2},1032,[`to`,`class`,`aria-label`,`aria-current`])),64))])}}}),[[`__scopeId`,`data-v-d02ff871`]]),hu=0,gu=he(`toast`,()=>{let e=o([]);function t(t,r=`info`){let i=++hu;e.value.push({id:i,message:t,type:r}),setTimeout(()=>n(i),2500)}function n(t){let n=e.value.findIndex(e=>e.id===t);n!==-1&&e.value.splice(n,1)}return{toasts:e,show:t,dismiss:n}}),_u={class:`toast-region`,"aria-live":`polite`,"aria-atomic":`false`},vu=[`onClick`],yu=ve(Se({__name:`BaseToast`,setup(e){let t=gu();return(e,n)=>(ae(),fe(`div`,_u,[C(Ft,{name:`toast`,tag:`ul`,class:`toast-list`},{default:Ee(()=>[(ae(!0),fe(de,null,j(l(t).toasts,e=>(ae(),fe(`li`,{key:e.id,class:re([`toast`,`toast--${e.type}`]),role:`status`},[ie(pe(e.message)+` `,1),be(`button`,{class:`toast__close`,"aria-label":`Dismiss`,onClick:n=>l(t).dismiss(e.id)},` × `,8,vu)],2))),128))]),_:1})]))}}),[[`__scopeId`,`data-v-546af507`]]),bu=he(`auth`,()=>{let e=o(window.__PF_USER__??null),t=M(()=>e.value!==null);function n(t){e.value=t}return{user:e,isAuthenticated:t,setUser:n}}),xu=[{id:`warm-craft`,label:`Warm Craft`,primary:`#c97c3a`,bg:`#fdf6ee`,text:`#3a2e22`},{id:`playful-pop`,label:`Playful Pop`,primary:`#d63aab`,bg:`#fff0fb`,text:`#2d0a28`},{id:`sage-cream`,label:`Sage & Cream`,primary:`#4e7c3a`,bg:`#f6f8f3`,text:`#1e2b1a`},{id:`dusty-mauve`,label:`Dusty Mauve`,primary:`#8e4a84`,bg:`#f6f0f4`,text:`#2a1828`},{id:`ocean-dusk`,label:`Ocean Dusk`,primary:`#1a6ea8`,bg:`#eef3f8`,text:`#0e2030`},{id:`honey-slate`,label:`Honey & Slate`,primary:`#c49a20`,bg:`#f2f2ee`,text:`#1c1c18`}];function Su(){let e=bu(),t=gu();function n(t){document.documentElement.dataset.theme=t,e.user&&(e.user.theme=t)}async function r(e){n(e);try{if(!(await fetch(`/api/user/theme`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({theme:e})})).ok)throw Error(`Failed to save theme`)}catch{t.show(`Could not save theme — try again`,`error`)}}return{THEMES:xu,applyTheme:n,saveTheme:r}}var Cu=Se({__name:`App`,setup(e){let t=su(),n=bu(),{applyTheme:i}=Su();return r(()=>{let e=document.documentElement.dataset.theme;e&&n.user?n.user.theme=e:n.user?.theme&&i(n.user.theme)}),(e,n)=>{let r=d(`RouterView`);return ae(),fe(de,null,[C(r),l(t).meta.hideNav?O(``,!0):(ae(),ne(mu,{key:0})),C(yu)],64)}}}),wu=`modulepreload`,Tu=function(e){return`/build/`+e},Eu={},Du=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=Tu(t,n),t in Eu)return;Eu[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:wu,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Ou=au({history:El(),routes:[{path:`/`,name:`home`,component:()=>Du(()=>import(`./HomeView-Bfoik_wA.js`),__vite__mapDeps([0,1,2,3,4])),meta:{requiresAuth:!0}},{path:`/library`,name:`library`,component:()=>Du(()=>import(`./LibraryView-Cb_nRiKt.js`),__vite__mapDeps([5,1,2,3,6,7,8])),meta:{requiresAuth:!0}},{path:`/upload`,name:`upload`,component:()=>Du(()=>import(`./UploadView-D4bnhltO.js`),__vite__mapDeps([9,1,2,3,6,7,10])),meta:{requiresAuth:!0,hideNav:!0}},{path:`/settings`,name:`settings`,component:()=>Du(()=>import(`./SettingsView-B067l1Rb.js`),__vite__mapDeps([11,1,12])),meta:{requiresAuth:!0}},{path:`/shared`,redirect:`/library?tab=shared`},{path:`/:pathMatch(.*)*`,redirect:`/`}]});Ou.beforeEach(e=>{let t=bu();if(e.meta.requiresAuth&&!t.isAuthenticated)return window.location.href=`/login`,!1});var ku=an(Cu);ku.use(le()),ku.use(Ou),ku.use(ac),ku.mount(`#app`);export{cu as a,Be as c,en as d,Qt as f,gu as i,qt as l,Su as n,su as o,bu as r,ou as s,xu as t,Kt as u}; \ No newline at end of file diff --git a/public/build/index.html b/public/build/index.html index 47e3713..343083f 100644 --- a/public/build/index.html +++ b/public/build/index.html @@ -5,7 +5,7 @@ frontend - +