react-sync-board 1.4.5 → 1.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("react"),require("react/jsx-runtime"),require("zustand"),require("zustand/traditional"),require("zustand/shallow"),require("@react-hookz/web")):typeof define==`function`&&define.amd?define([`exports`,`react`,`react/jsx-runtime`,`zustand`,`zustand/traditional`,`zustand/shallow`,`@react-hookz/web`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e[`React-sync-board`]={},e.React,e.ReactJSXRuntime,e.zustand,e.zustandTraditional,e.zustandShallow,e.ReactHookzWeb))})(this,function(e,t,n,r,i,a,o){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var s=Object.create,c=Object.defineProperty,l=Object.getOwnPropertyDescriptor,u=Object.getOwnPropertyNames,d=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty,p=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),m=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=u(t),a=0,o=i.length,s;a<o;a++)s=i[a],!f.call(e,s)&&s!==n&&c(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=l(t,s))||r.enumerable});return e},h=(e,t,n)=>(n=e==null?{}:s(d(e)),m(t||!e||!e.__esModule||!f.call(e,`default`)?c(n,`default`,{value:e,enumerable:!0}):n,e));t=h(t,1);var g=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`,_=(e=21)=>{let t=``,n=crypto.getRandomValues(new Uint8Array(e|=0));for(;e--;)t+=g[n[e]&63];return t},v=128,y=e=>typeof e==`string`&&e.length>0&&e.length<=v&&!/[\u0000-\u001f\u007f]/u.test(e),b=(e,t)=>{if(!y(e))throw Error(`Invalid ${t}`)},x=class{constructor(e,t,n=null){this._socket=e,this.userId=n,this.room=t,this.toUnregister=[()=>{this._socket.off(`${this.room}.isMaster`),this._socket.off(`${this.room}.roomJoined`),this._socket.off(`${this.room}._call`)}],this._left=!1,this.registeredRPC=Object.create(null),this._socket.on(`${this.room}._call`,async({callId:t,name:n,params:r})=>{try{if(!Object.hasOwn(this.registeredRPC,n))throw Error(`Function ${n} is not registered`);let i=await this.registeredRPC[n](r);e.emit(`${this.room}._result.${t}`,{ok:i||null})}catch(n){e.emit(`${this.room}._result.${t}`,{err:`${n.message}`})}})}async _callServerRPC(e,t){let n=_();return new Promise((r,i)=>{this._socket.once(`${this.room}._result.${n}`,e=>{Object.hasOwn(e,`ok`)?r(e.ok):i(e.err)}),this._socket.emit(`${this.room}._call`,{callId:n,name:e,params:t})})}leave(){this._left=!0,this.toUnregister.forEach(e=>{e()}),this._socket.emit(`${this.room}.leave`)}publish(e,t,n=!1){b(e,`event name`),this._socket.emit(`${this.room}.publish`,{name:e,params:t,self:n})}subscribe(e,t){if(b(e,`event name`),typeof t!=`function`)throw TypeError(`Invalid callback`);this._socket.on(`${this.room}.${e}`,t);let n=()=>{this._socket.off(`${this.room}.${e}`,t)};return this.toUnregister.push(n),n}async register(e,t,{invoke:n=`single`}={}){if(b(e,`RPC name`),typeof t!=`function`)throw TypeError(`Invalid callback`);if(![`single`,`first`,`last`,`random`].includes(n))throw Error(`Invalid invoke mode`);this.registeredRPC[e]=t,await this._callServerRPC(`register`,{name:e,invoke:n});let r=()=>{if(this.registeredRPC[e]===t)return delete this.registeredRPC[e],this._callServerRPC(`unregister`,{name:e})};return this.toUnregister.push(r),r}async call(e,t){return await this._callServerRPC(`call`,{name:e,params:t})}},S=({socket:e,room:t,onJoined:n=()=>{},onMaster:r=()=>{},userId:i=null})=>{b(t,`room name`),i!=null&&b(i,`user id`);let a=new x(e,t,i);return new Promise(o=>{let s=!0;e.on(`${t}.isMaster`,()=>{a._left||r(t)}),e.on(`${t}.roomJoined`,e=>{a._left||(a.userId=e,s=!1,n(a),o(a))}),e.on(`connect`,()=>{a._left||s||e.emit(`joinSuperSocket`,{room:t,userId:a.userId})}),e.emit(`joinSuperSocket`,{room:t,userId:i})})},C=t.default.createContext(),w=()=>(0,n.jsx)(`div`,{style:{position:`absolute`,top:`0`,bottom:`0`,width:`100%`,display:`flex`,justifyContent:`center`,alignItems:`center`},children:(0,n.jsx)(`h2`,{children:`🌀 Loading...`})}),T=({socket:e,room:r,channel:i=`default`,LoadingComponent:a=w,children:o})=>{let[s,c]=t.default.useState(!1),[l,u]=t.default.useState(!1),[d,f]=t.default.useState(null),p=t.default.useRef(null),m=t.default.useRef(!1),h=(0,t.useContext)(C),g=t.default.useRef(!1);return t.default.useEffect(()=>(m.current=!0,()=>{m.current=!1}),[]),t.default.useEffect(()=>{if(!e)return;let t=()=>{console.log(`Disconnected from ${i}…`),m.current&&(c(!1),u(!1))};return e.on(`disconnect`,t),()=>{e.off(`disconnect`,t)}},[i,e]),t.default.useEffect(()=>{if(e)return e.connected||e.connect(),console.log(`Try to connect to wire ${r} on channel ${i}`),g.current||(g.current=!0,S({socket:e,room:r,onMaster:()=>{console.log(`Is now master on channel ${i}…`),m.current&&u(!0)},onJoined:e=>{console.log(`Connected on channel ${i}…`),p.current=e,m.current&&(f(e),c(!0))}})),()=>{p.current?.leave()}},[i,r,e]),!s||!d?(0,n.jsx)(a,{}):(0,n.jsx)(C.Provider,{value:{...h,[i]:{wire:d,joined:s,isMaster:l,room:r}},children:o})},E=(e=`default`)=>((0,t.useContext)(C)||{})[e],ee=new Set([`grid`,`hexH`,`hexV`]),D=(e,t=0)=>Number.isFinite(Number(e))?Number(e):t,O=e=>{if(!ee.has(e?.type))return null;let t=D(e.size,1);return{...e,size:t>0?t:1,offset:{x:D(e.offset?.x),y:D(e.offset?.y)},show:e.show!==!1,color:e.color||`#000000`,opacity:Math.max(0,Math.min(1,D(e.opacity??.2,.2)))}},te=(e,t)=>O(t)||O(e),ne=(e,t)=>{let n=te(e,t),r=O(t);return!n||r||typeof t?.show!=`boolean`?n:{...n,show:t.show}},re=e=>{let t=getComputedStyle(e),n=(e,n,r,i)=>{let a=parseFloat(t[e]);return Number.isFinite(a)?(t.boxSizing!==`border-box`&&(a+=(parseFloat(t[`padding${n}`])||0)+(parseFloat(t[`padding${r}`])||0)+(parseFloat(t[`border${n}Width`])||0)+(parseFloat(t[`border${r}Width`])||0)),a):i};return{width:n(`width`,`Left`,`Right`,e.offsetWidth),height:n(`height`,`Top`,`Bottom`,e.offsetHeight)}},ie=({type:e,size:t})=>{let n=Math.sqrt(3)*t/2;return e===`grid`?{width:t,height:t,centers:[[t/2,t/2]]}:e===`hexH`?{width:2*n,height:3*t,centers:[[0,0],[n,1.5*t]]}:{width:3*t,height:2*n,centers:[[0,0],[1.5*t,n]]}},ae=(e,t)=>{let{x:n,y:r,width:i,height:a}=e,o=O(t);if(!o||![n,r,i,a].every(Number.isFinite))return{x:n,y:r};let{offset:s}=o,c=n+i/2-s.x,l=r+a/2-s.y,u=ie(o),d,f=1/0;for(let[e,t]of u.centers){let n=Math.round((c-e)/u.width)*u.width+e,r=Math.round((l-t)/u.height)*u.height+t,o=Math.hypot(n-c,r-l);o<f&&(d={x:n+s.x-i/2,y:r+s.y-a/2},f=o)}return d&&Number.isFinite(d.x)&&Number.isFinite(d.y)?d:{x:n,y:r}},k=(e,t)=>e.classList&&e.classList.contains(t),A=(e,t)=>k(e,t)?e:e.parentNode?A(e.parentNode,t):!1,oe=([e,t],[n,r])=>{let i=Math.abs(e-n),a=Math.abs(t-r);return Math.hypot(i,a)},se=(e,t,n)=>{let r=n*Math.PI/180;return[e*Math.cos(r)-t*Math.sin(r),e*Math.sin(r)+t*Math.cos(r)]},j=([e,t],{scale:n,rotate:r,translateX:i,translateY:a})=>se((e-i)/n,(t-a)/n,-r),M=([e,t],{scale:n,rotate:r,translateX:i,translateY:a})=>{let[o,s]=se(e,t,r);return[o*n+i,s*n+a]},N=(e,t)=>e.x>t.left&&e.x<t.left+t.width&&e.y>t.top&&e.y<t.top+t.height,ce=(e,t)=>Array.from(e.querySelectorAll(`.corner`)).every(e=>{let{top:n,left:r}=e.getBoundingClientRect();return N({x:r,y:n},t)}),le=(e,t)=>ce(e,t.getBoundingClientRect()),P=(e,t)=>{try{return document.getElementById(`${e}__${t}`)}catch{console.error(`Error while getting item with id ${t} inside wrapper`,e);return}},F=e=>{let t=e?.dataset?.id;return t||console.error(`getIdFromElem call fails`,e,JSON.stringify(e?.dataset),e?.dataset?.id),t},ue=(e,t)=>{let n=e.reduce((e,n)=>{let r=P(t,n);if(!r)return e||null;let{left:i,right:a,top:o,bottom:s}=r.getBoundingClientRect(),c;return c=e||{left:i,top:o,right:a,bottom:s},c.left=Math.min(i,c.left),c.top=Math.min(o,c.top),c.right=Math.max(a,c.right),c.bottom=Math.max(s,c.bottom),c},null);return n&&(n.width=n.right-n.left,n.height=n.bottom-n.top,n)},de=(e,t,n=null)=>(n===null&&(n=new Set),!Array.isArray(t)||t.length===0?[]:t.map(t=>n.has(t)?[]:(n.add(t),e[t]?[t,...de(e,e[t].linkedItems,n)]:[])).flat()),fe=(e,t,n)=>{let r=new Set(de(e,n));return t.filter(e=>r.has(e))},pe=`#037758.#99092a.#067070.#c6650f.#008726.#3d7004.#348402.#057f58.#b58612.#c44c01.#0a7704.#0e910e.#027377.#c99e02.#054160.#157a01.#b10de2.#0d6289.#bc5d03.#ba0cd1.#d39f10.#0c4c7a.#460782.#a51f10.#cecb10.#9b0943.#607f0c.#007a4b.#bf0daa.#af0ad8`.split(`.`),me=()=>pe[Math.floor(Math.random()*pe.length)],he=({wire:e,storeName:t,noSync:n=[],defaultValue:r},i)=>(a,o,s)=>{a({ready:!1});let c=[];(async()=>{try{let n=await e.call(`${t}_getValue`);a(e=>({...e,...n}))}catch{r!==void 0&&a(r)}c.push(await e.register(`${t}_getValue`,()=>Object.fromEntries(Object.entries(o()).filter(([e,t])=>typeof t!=`function`&&!n.includes(e))),{invoke:`first`})),c.push(e.subscribe(`${t}_call`,([e,t])=>{u[e](...t)})),a({ready:!0})})();let l=i(a,o,s),u={...l},d=Object.fromEntries(Object.entries(l).map(([r,i])=>typeof i==`function`&&!r.startsWith(`get`)&&!n.includes(r)?[r,(...n)=>{let a=i(...n);return e.publish(`${t}_call`,[r,n]),a}]:[r,i]));return d.unsub=()=>{c.forEach(e=>e())},d},ge=t.default.createContext(),_e=(e,t)=>({items:{},getItems:()=>t().items,setItems:t=>e({items:t}),updateItems:(t,n=!1)=>e(e=>n?{items:Object.fromEntries(Object.entries(e.items).map(([e,n])=>t[e]?[e,{...n,...t[e]}]:[e,n]))}:{items:{...e.items,...t}}),moveItems:(t,n)=>e(({items:e})=>{let r={...e};return t.forEach(t=>{let i=e[t];i&&(r[t]={...i,x:(i.x||0)+n.x,y:(i.y||0)+n.y,moving:!0})}),{items:r}})}),ve=(e,t)=>({itemIds:[],setItemIds:t=>e({itemIds:t}),getItemIds:()=>t().itemIds,insert:(t,n)=>e(e=>{let r=[...e.itemIds];return r.splice(t,0,n),{itemIds:r}}),remove:t=>e(e=>{let n=[...e.itemIds];return n.splice(t,1),{itemIds:n}}),updateItemIds:(t,n)=>e(e=>{let r=[...e.itemIds];return r[t]=n,{itemIds:r}}),updateManyItemIds:t=>e(e=>({itemIds:e.itemIds.map((e,n)=>t[n]===void 0?e:t[n])}))}),ye=(e,t)=>({removeItemsById:t=>e(e=>({itemIds:e.itemIds.filter(e=>!t.includes(e)),items:Object.fromEntries(Object.entries(e.items).filter(([e])=>!t.includes(e)))})),getItemList:()=>{let e=t().items;return t().itemIds.map(t=>e[t])},setItemList:t=>e({items:Object.fromEntries(t.map(e=>[e.id,e])),itemIds:t.map(({id:e})=>e)}),insertItems:(t,n)=>e(e=>{let r,i=t.map(({id:e})=>e);if(n){let t=e.itemIds.findIndex(e=>e===n);r=[...e.itemIds],r.splice(t,0,...i)}else r=[...e.itemIds,...i];return{items:{...e.items,...Object.fromEntries(t.map(e=>[e.id,e]))},itemIds:r}})}),be=(e,t)=>({boardConfig:{},getBoardConfig:()=>t().boardConfig,setBoardConfig:t=>e({boardConfig:t}),updateBoardConfig:t=>e(e=>({boardConfig:{...e.boardConfig,...t}}))}),xe=(e,t)=>({session:{},getSessionInfo:()=>t().session,setSessionInfo:t=>e({session:t}),updateSessionInfo:t=>e(e=>({session:{...e.session,...t}}))}),Se=({storeName:e,children:i,defaultValue:a})=>{let{wire:o}=E(`room`),[s,c]=t.default.useState(!1),[l]=t.default.useState(()=>(0,r.createStore)(he({wire:o,storeName:e,defaultValue:a},(...e)=>({..._e(...e),...ve(...e),...ye(...e),...be(...e),...xe(...e)}))));return t.default.useEffect(()=>{let e=l.subscribe(t=>{t.ready&&(e(),c(!0))})},[l]),s?(0,n.jsx)(ge.Provider,{value:l,children:i}):null},I=e=>{let n=(0,t.useContext)(ge);return(0,i.useStoreWithEqualityFn)(n,e,a.shallow)},Ce=()=>{let[e,n]=I(e=>[e.itemIds,e.items]);return t.default.useMemo(()=>e.map(e=>n[e]),[e,n])},we=()=>{let[e,n,r]=I(e=>[e.items,e.itemIds,e.getItemList]),[i,a]=t.default.useState(r()),[,o]=t.default.useTransition();return t.default.useEffect(()=>{let e=r();o(()=>{a(e)})},[e,n,r]),i},Te=5e4,Ee=t.default.createContext(),De=(e,t)=>({config:{itemTemplates:{},actions:{},uid:null,itemExtent:{x:0,y:0,radius:0},boardWrapperRect:{},boardSize:Te},updateConfiguration:t=>e(e=>({config:{...e.config,...t}})),getConfiguration:()=>t().config}),Oe=(e,t)=>({boardState:{movingItems:!1,selecting:!1,zooming:!1,panning:!1,translateX:0,translateY:0,scale:1,rotate:0},updateBoardState:t=>e(e=>({boardState:{...e.boardState,...t}})),getBoardState:()=>t().boardState}),ke=(e,t)=>({interactions:{},getInteractions:()=>t().interactions,register:(t,n)=>e(e=>{let r=[...e.interactions[t]||[]];return r.push(n),{interactions:{...e.interactions,[t]:r}}}),unregister:(t,n)=>e(e=>{let r=(e.interactions[t]||[]).filter(e=>e!==n);return{interactions:{...e.interactions,[t]:r}}}),callInteractions:(e,n)=>{t().interactions[e]&&t().interactions[e].forEach(e=>{setTimeout(()=>e(n),0)})}}),Ae=(e,t)=>({selection:[],setSelection:t=>e(e=>JSON.stringify(e.selection)===JSON.stringify(t)?{}:{selection:t}),getSelection:()=>t().selection,select:t=>e(e=>({selection:[...e.selection,...t]})),unselect:t=>e(e=>({selection:e.selection.filter(e=>!t.includes(e))})),clear:()=>e(e=>e.selection.length>0?{selection:[]}:{}),reverse:()=>e(e=>{let t=[...e.selection];return t.reverse(),{selection:t}}),selectionBox:null,setSelectionBox:t=>e(e=>{let n=e.selectionBox;return!n||!t||n.top!==t.top||n.left!==t.left||n.width!==t.width||n.height!==t.height?{selectionBox:t}:{}})}),je=({children:e})=>{let[i]=t.default.useState(()=>(0,r.createStore)((...e)=>({...De(...e),...Oe(...e),...ke(...e),...Ae(...e)})));return(0,n.jsx)(Ee.Provider,{value:i,children:e})},L=e=>{let n=(0,t.useContext)(Ee);return(0,i.useStoreWithEqualityFn)(n,e,a.shallow)},Me=()=>{let[e]=L(e=>[e.selection]);return e},Ne=()=>{let[e]=L(e=>[e.getSelection]);return e},Pe=1e3,Fe=.8,Ie=!1,R=()=>{let[e,n,r,i,a]=L(e=>[e.getBoardState,e.updateBoardState,e.config.itemExtent,e.getConfiguration,e.updateConfiguration]),s=t.default.useRef([.15,5]),[c]=I(e=>[e.getItemList]),l=t.default.useCallback(()=>{let{translateX:t,translateY:n,scale:r,rotate:i}=e();return{translateX:t,translateY:n,scale:r,rotate:i}},[e]),u=t.default.useCallback((t,n)=>j([t,n],e()),[e]),d=t.default.useCallback((t,n)=>M([t,n],e()),[e]),f=t.default.useCallback((t,n)=>{let{scale:r,rotate:i}=e();return j([t,n],{translateX:0,translateY:0,rotate:i,scale:r})},[e]),p=t.default.useCallback(e=>e>s.current[1]?s.current[1]:e<s.current[0]?s.current[0]:e,[]),m=t.default.useCallback(t=>{let r=e(),{translateX:i,translateY:a,scale:o,rotate:s}={...r,...t(r)};Ie&&console.log(`New expected values: `,i,a,o,s);let c=p(o),l=i,u=a;Ie&&console.log(`New fixed values: `,l,u,c,s),n({translateX:Number.isFinite(l)?l:r.translateX,translateY:Number.isFinite(u)?u:r.translateY,scale:Number.isFinite(c)?c:p(1),rotate:Number.isFinite(s)?s:r.rotate})},[p,e,n]),h=t.default.useCallback(e=>{let t=t=>({...t,...e});typeof e==`function`&&(t=e),m(e=>({...e,...t({translateX:e.translateX,translateY:e.translateY})}))},[m]),g=t.default.useCallback(({to:t,factor:n})=>{let{boardWrapperRect:r}=i(),a=t;a||={x:r.left+r.width/2,y:r.top+r.height/2};let o=e(),s=p(o.scale*n),c=a.x-r.left,l=a.y-r.top,u=c-(c-o.translateX)*s/o.scale,d=l-(l-o.translateY)*s/o.scale;m(e=>({...e,translateX:u,translateY:d,scale:s}))},[p,e,i,m]),_=t.default.useCallback(({x:t,y:n,radius:r})=>{let{rotate:a}=e(),{boardWrapperRect:o}=i(),[s,c,l]=[t||0,n||0,r||2e3],u=o.width/(l*2),d=o.height/(l*2),f=p(Math.min(u,d)*Fe),[h,g]=M([-s,-c],{translateX:o.width/2,translateY:o.height/2,scale:f,rotate:a});m(e=>({...e,translateX:h,translateY:g,scale:f}))},[p,e,i,m]),v=t.default.useCallback(()=>{let{boardWrapperRect:e}=i(),[t,n]=u(e.width/2,e.height/2);return{x:t,y:n}},[u,i]),y=t.default.useCallback(()=>{let e=c(),{uid:t}=i(),n=e.reduce((e,n)=>{let r=P(t,n.id);return r&&(e.left=Math.min(n.x,e.left),e.top=Math.min(n.y,e.top),e.right=Math.max(n.x+r.offsetWidth,e.right),e.bottom=Math.max(n.y+r.offsetHeight,e.bottom)),e},{left:1/0,top:1/0,right:-1/0,bottom:-1/0});if(!Number.isFinite(n.left)){a({itemExtent:{x:0,y:0,radius:Pe}});return}let r={x:(n.right+n.left)/2,y:(n.bottom+n.top)/2};r.radius=Math.max(oe([r.x,r.y],[n.left,n.top]),Pe),a({itemExtent:r})},[i,c,a]),b=t.default.useCallback(e=>{let t=()=>e;typeof e==`function`&&(t=e),m(e=>({...e,rotate:t(e.rotate)})),y(),_(r)},[r,m,y,_]),x=(0,o.useDebouncedCallback)(()=>y(),[y],200);return t.default.useEffect(()=>{window.debugUpdateExtent=()=>y(),window.debugDisplayExtent=()=>console.log(i().itemExtent),window.debugSetDebug=()=>{Ie=!0}},[i,y]),{setDim:m,rotateBoard:b,moveBoard:h,getDim:l,zoomTo:g,zoomToCenter:g,zoomToExtent:_,getCenter:v,updateItemExtent:x,vectorFromWrapperToBoard:f,fromWrapperToBoard:u,fromBoardToWrapper:d}},Le=e=>{let[n,r,i]=L(({register:e,unregister:t,callInteractions:n})=>[e,t,n]);return{register:t.default.useCallback(t=>(n(e,t),()=>{r(e,t)}),[e,n,r]),call:t.default.useCallback(t=>{i(e,t)},[i,e])}},z=()=>{let{call:e}=Le(`place`),{call:n}=Le(`delete`),{getCenter:r,updateItemExtent:i}=R(),[a,o,s,c]=L(e=>[e.clear,e.reverse,e.unselect,e.getConfiguration]),{getBoardConfig:l,getItems:u,getItemIds:d,setItemIds:f,updateItems:p,moveItems:m,removeItemsById:h,getItemList:g,insertItems:_,setItemList:v}=I(({getBoardConfig:e,getItems:t,getItemIds:n,setItemIds:r,updateItems:i,moveItems:a,removeItemsById:o,getItemList:s,insertItems:c,setItemList:l})=>({getBoardConfig:e,getItems:t,getItemIds:n,setItemIds:r,updateItems:i,moveItems:a,removeItemsById:o,getItemList:s,insertItems:c,setItemList:l})),y=t.default.useCallback((e,t,n=!1)=>{let r=t;typeof t==`object`&&(r=()=>t);let a=d().filter(t=>e.includes(t)),o=u(),s=a.map(e=>{let t=o[e];return n?[e,r(t)]:[e,r({...t})]}).filter(([,e])=>e);if(s.length===0)return;let c=Object.fromEntries(s);p(c,n),i()},[d,u,i,p]),b=t.default.useCallback(e=>{v(e),a(),i()},[a,v,i]),x=t.default.useCallback((e,t,n=!1)=>{y([e],t,n)},[y]),S=t.default.useCallback((e,t)=>{m(fe(u(),d(),e),t)},[d,u,m]),C=t.default.useCallback(e=>{let t=d(),n=t.filter(t=>!e.includes(t)),r=t.filter(t=>e.includes(t));f([...n,...r])},[d,f]),w=t.default.useCallback((e,t)=>{let{uid:n}=c();y(e,e=>{let r=P(n,e.id);if(!r)return;let i=te(t,e.grid);if(i)return ae({x:e.x,y:e.y,...re(r)},i)},!0)},[c,y]),T=t.default.useCallback(t=>{let n=fe(u(),d(),t);C(n),y(n,{moving:!1},!0),w(n,l().grid),e(t),i()},[y,e,l,d,u,C,w,i]),E=t.default.useCallback(e=>{f(e)},[f]),ee=t.default.useCallback(e=>{let t=d(),n=t.filter(t=>e.includes(t)),r=t.map(t=>e.includes(t)?n.pop():t);f(r),o()},[d,o,f]),D=t.default.useCallback((e,t)=>{let n=u(),r=Object.fromEntries(t.map((t,r)=>{let i=n[e[r]];return[t,{x:i.x,y:i.y}]}));y(e,e=>r[e.id],!0);let i=Object.fromEntries(e.map((e,n)=>[e,t[n]])),a=d().map(t=>e.includes(t)?i[t]:t);f(a)},[u,y,d,f]),O=t.default.useCallback((e,t)=>{let n=r(),i=e.map((e,t)=>e.x===void 0||e.x===null||e.y===void 0||e.y===null?{...e,x:n.x+2*t,y:n.y+2*t}:e);_(i,t),requestAnimationFrame(()=>{T(e.map(({id:e})=>e))})},[r,_,T]),ne=t.default.useCallback((e,t)=>{O([e],t)},[O]),ie=t.default.useCallback(e=>{s(e),h(e),n(e)},[s,h,n]),oe=t.default.useCallback(e=>{let t=u();return e.map(e=>t[e])},[u]);return{putItemsOnTop:C,batchUpdateItems:y,updateItemOrder:E,moveItems:S,placeItems:T,updateItem:x,swapItems:D,reverseItemsOrder:ee,setItemList:b,pushItem:ne,pushItems:O,removeItems:ie,getItemList:g,findElementUnderPointer:t.default.useCallback(({target:e,clientX:t,clientY:n},{returnLocked:r=!1,passLocked:i=!1}={})=>{if([`INPUT`,`TEXTAREA`].includes(e.tagName))return null;let a=A(e,`item`);if(a){if(k(a,`selected`))return a;if(!i&&k(a,`locked`)&&!k(e,`passthrough`))return r?a:null;if(k(e,`passthrough`)){let e=d(),{uid:r}=c(),o=e.reduce((e,i)=>{let a=P(r,i),o=a.getBoundingClientRect();return N({x:t,y:n},o)&&e.unshift(a),e},[]);for(let e=0;e<o.length;e+=1){let t=o[e];if(t!==a&&(i||!k(t,`locked`)))return t}return null}}return a},[c,d]),getItems:oe}},Re=h(p(((e,t)=>{t.exports=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t==`object`&&typeof n==`object`){if(t.constructor!==n.constructor)return!1;var r,i,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!e(t[i],n[i]))return!1;return!0}if(t instanceof Map&&n instanceof Map){if(t.size!==n.size)return!1;for(i of t.entries())if(!n.has(i[0]))return!1;for(i of t.entries())if(!e(i[1],n.get(i[0])))return!1;return!0}if(t instanceof Set&&n instanceof Set){if(t.size!==n.size)return!1;for(i of t.entries())if(!n.has(i[0]))return!1;return!0}if(ArrayBuffer.isView(t)&&ArrayBuffer.isView(n)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(t[i]!==n[i])return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[i]))return!1;for(i=r;i--!==0;){var o=a[i];if(!e(t[o],n[o]))return!1}return!0}return t!==t&&n!==n}}))(),1),ze=(e,t)=>{if(e.type in t){let n=t[e.type].defaultActions;return typeof n==`function`?n(e):n}return[]},Be=(e,t)=>{let{actions:n=ze(e,t)}=e;return n.map(e=>typeof e==`string`?{name:e}:e)},Ve=()=>{let[e,n]=I(e=>[e.items,e.getItems]),[r,i,a]=L(e=>[e.config.itemTemplates,e.selection,e.getSelection]),[s,c]=t.default.useState([]),l=t.default.useRef(!1),[,u]=t.default.useTransition();t.default.useEffect(()=>(l.current=!0,()=>{l.current=!1}),[]);let d=t.default.useCallback(e=>{let t=n();if(e)return[e,e.map(e=>t[e])];let r=a();return[r,r.map(e=>t[e])]},[n,a]),f=(0,t.useCallback)(()=>{let[e,t]=d();if(e.length>0){if(!l.current)return;let e=t.reduce((e,t)=>{let n=Be(t,r);return e.filter(e=>n.some(t=>(0,Re.default)(e,t)))},Be(t[0],r));u(()=>{c(e)})}else u(()=>{c([])})},[d,r]);return(0,o.useDebouncedEffect)(()=>f(),[e,i,f],100),{availableActions:s}},He=()=>{let[e]=L(e=>[e.selectionBox]);return e},Ue=t.default.createContext(),B=e=>{localStorage.setItem(`user`,JSON.stringify(e))},We=()=>{if(localStorage.user){let e={name:`Player`,color:me(),uid:_(),...JSON.parse(localStorage.user)};return B(e),e}let e={name:`Player`,color:me(),uid:_()};return B(e),e},Ge=e=>(t,n)=>({isSpaceMaster:!1,users:{},getUser:()=>n().users[e],getUsers:()=>n().users,getUserList:()=>Object.values(n().users),getLocalUsers:()=>{if(!n().users[e])return[];let{space:t}=n().users[e];return n().getUserList().filter(({space:e})=>e===t)},addUser:e=>t(t=>({users:{...t.users,[e.id]:e}})),updateUser:(r,i)=>t(t=>{if(!t.users[r])return{};let a={...t.users[r],...i,id:r,uid:t.users[r].uid};return a.id===e&&B(a),setTimeout(()=>n().electSpaceMaster(),100),{users:{...t.users,[r]:a}}}),removeUser:e=>t(t=>{let r={...t.users};return delete r[e],setTimeout(()=>n().electSpaceMaster(),100),{users:r}}),updateCurrentUser:t=>n().updateUser(e,t),joinSpace:t=>n().updateUser(e,{space:t,spaceJoinedTimestamp:Date.now()}),electSpaceMaster:()=>{let r=n().getLocalUsers(),i={uid:null,timestamp:Date.now()};Object.values(r).forEach(({spaceJoinedTimestamp:e,id:t})=>{e<i.timestamp&&(i.id=t,i.timestamp=e)}),t({isSpaceMaster:i.id===e})}}),Ke=e=>({cursors:{},moveCursor:(t,n)=>e(e=>({cursors:{...e.cursors,[t]:n}})),removeCursor:t=>e(e=>{let n={...e.cursors};return delete n[t],{cursors:n}})}),qe=({storeName:e,children:i})=>{let{wire:a,isMaster:o}=E(`room`),[s,c]=t.default.useState(null),[l,u]=t.default.useState(!1),d=t.default.useRef(!1);return t.default.useEffect(()=>{let t=!0,n=[];if(!s&&!d.current)return d.current=!0,(()=>{let n=(0,r.createStore)(he({wire:a,storeName:e,noSync:[`updateCurrentUser`,`joinSpace`,`isSpaceMaster`,`electSpaceMaster`]},(...e)=>({...Ge(a.userId)(...e),...Ke(...e)}),a,e)),i=n.subscribe(e=>{e.ready&&(i(),t&&c(n))})})(),()=>{t=!1,d.current=!1,n.forEach(e=>e())}},[s,e,a,a.userId]),t.default.useEffect(()=>{if(s)return s.getState().addUser({...We(),id:a.userId}),u(!0),()=>{s.getState().removeUser(a.userId)}},[o,s,a]),t.default.useEffect(()=>{if(s){let e=a.subscribe(`userLeave`,e=>{s.getState().removeUser(e)});return()=>{e()}}},[o,s,a]),t.default.useEffect(()=>{o&&s&&s.getState().updateCurrentUser({isMaster:o})},[o,s,a]),l?(0,n.jsx)(Ue.Provider,{value:s,children:i}):null},V=e=>{let n=(0,t.useContext)(Ue);return(0,i.useStoreWithEqualityFn)(n,e,a.shallow)},Je=()=>{let[e,n,r,i,a]=V(e=>[e.isSpaceMaster,e.getUser(),e.users,e.updateCurrentUser,e.joinSpace]),o=t.default.useMemo(()=>Object.values(r),[r]);return{isSpaceMaster:e,currentUser:n,updateCurrentUser:i,users:o,localUsers:t.default.useMemo(()=>{let{space:e}=n;return o.filter(({space:t})=>t===e)},[n,o]),joinSpace:a}},Ye=()=>{let[e,n,r]=I(e=>[e.boardConfig,e.getBoardConfig,e.setBoardConfig]);return[e,t.default.useCallback(e=>{let t=e;typeof e==`object`&&(t=()=>e);let i=n(),a=t(i);r(a)},[n,r])]},Xe=()=>{let[e]=L(e=>[e.boardState]);return e},Ze=()=>{let[e,t,n,r]=I(e=>[e.getSessionInfo,e.setSessionInfo,e.updateSessionInfo,e.session]);return{getSessionInfo:e,setSessionInfo:t,sessionInfo:r,updateSessionInfo:n}},Qe=t.default.createContext(),$e=({user:{name:e,uid:t,color:n},content:r})=>({type:`message`,user:{name:e,uid:t,color:n},content:r,uid:_(),timestamp:new Date().toISOString()}),et=(e,t)=>({messages:[],setMessages:t=>e({messages:t.map(e=>({...e,timestamp:Date.parse(e.timestamp)}))}),addMessage:t=>e(e=>({messages:[...e.messages,{...t,timestamp:Date.parse(t.timestamp)}]})),sendMessage:(e,n)=>{let r=$e({user:e,content:n});r&&t().addMessage(r)}}),tt=({storeName:e,children:i,defaultValue:a=[]})=>{let{wire:o}=E(`room`),[s]=t.default.useState(()=>(0,r.createStore)(he({wire:o,storeName:e,defaultValue:a,noSync:[`sendMessage`]},(...e)=>({...et(...e)}))));return(0,n.jsx)(Qe.Provider,{value:s,children:i})},nt=e=>{let n=(0,t.useContext)(Qe);return(0,i.useStoreWithEqualityFn)(n,e,a.shallow)},rt=()=>{},it=(e=rt)=>{let n=V(e=>e.getUser()),[r,i,a]=nt(e=>[e.messages,e.setMessages,e.sendMessage]);return t.default.useEffect(()=>{r.length&&e()},[r,e]),{messages:r,setMessages:i,sendMessage:t.default.useCallback(e=>{a(n,e)},[n,a])}},at=({children:e,session:n})=>{let r=V(e=>e.joinSpace);return t.default.useEffect(()=>(r(n),()=>{r(null)}),[r,n]),e},ot=({socket:e,room:r,session:i,items:a=[],messages:o=[],LoadingComponent:s,...c})=>{let[l]=t.default.useState(r||_()),[u]=t.default.useState(i||_()),[d]=t.default.useState(()=>({itemIds:a.map(({id:e})=>e),items:Object.fromEntries(a.map(e=>[e.id,e]))}));return E(`room`)?(0,n.jsx)(tt,{storeName:`${u}_messages`,defaultValue:o,children:(0,n.jsx)(je,{children:(0,n.jsx)(Se,{storeName:`${u}_item`,defaultValue:d,children:(0,n.jsx)(at,{...c,session:u})})})}):(0,n.jsx)(T,{room:l,channel:`room`,socket:e,LoadingComponent:s,children:(0,n.jsx)(qe,{storeName:`${l}_users`,children:(0,n.jsx)(tt,{storeName:`${u}_messages`,defaultValue:o,children:(0,n.jsx)(je,{children:(0,n.jsx)(Se,{storeName:`${u}_item`,defaultValue:d,children:(0,n.jsx)(at,{...c,session:u})})})})})})},st=({socket:e,room:r,children:i,LoadingComponent:a})=>{let[o]=t.default.useState(r||_());return(0,n.jsx)(T,{room:o,channel:`room`,socket:e,LoadingComponent:a,children:(0,n.jsx)(qe,{storeName:`${o}_users`,children:i})})},ct={data:``},lt=e=>{if(typeof window==`object`){let t=(e?e.querySelector(`#_goober`):window._goober)||Object.assign(document.createElement(`style`),{innerHTML:` `,id:`_goober`});return t.nonce=window.__nonce__,t.parentNode||(e||document.head).appendChild(t),t.firstChild}return e||ct},ut=/(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g,dt=/\/\*[^]*?\*\/| +/g,ft=/\n+/g,H=(e,t)=>{let n=``,r=``,i=``;for(let a in e){let o=e[a];a[0]==`@`?a[1]==`i`?n=a+` `+o+`;`:r+=a[1]==`f`?H(o,a):a+`{`+H(o,a[1]==`k`?``:t)+`}`:typeof o==`object`?r+=H(o,t?t.replace(/([^,])+/g,e=>a.replace(/([^,]*:\S+\([^)]*\))|([^,])+/g,t=>/&/.test(t)?t.replace(/&/g,e):e?e+` `+t:t)):a):o!=null&&(a=a[1]==`-`?a:a.replace(/[A-Z]/g,`-$&`).toLowerCase(),i+=H.p?H.p(a,o):a+`:`+o+`;`)}return n+(t&&i?t+`{`+i+`}`:i)+r},U={},pt=e=>{if(typeof e==`object`){let t=``;for(let n in e)t+=n+pt(e[n]);return t}return e},mt=(e,t,n,r,i)=>{let a=pt(e),o=U[a]||(U[a]=(e=>{let t=0,n=11;for(;t<e.length;)n=101*n+e.charCodeAt(t++)>>>0;return`go`+n})(a));if(!U[o]){let t=a===e?(e=>{let t,n,r=[{}];for(;t=ut.exec(e.replace(dt,``));)t[4]?r.shift():t[3]?(n=t[3].replace(ft,` `).trim(),r.unshift(r[0][n]=r[0][n]||{})):r[0][t[1]]=t[2].replace(ft,` `).trim();return r[0]})(e):e;U[o]=H(i?{[`@keyframes `+o]:t}:t,n?``:`.`+o)}let s=n&&U.g;return n&&(U.g=U[o]),((e,t,n,r)=>{r?t.data=t.data.replace(r,e):t.data.indexOf(e)===-1&&(t.data=n?e+t.data:t.data+e)})(U[o],t,r,s),o},ht=(e,t,n)=>e.reduce((e,r,i)=>{let a=t[i];if(a&&a.call){let e=a(n),t=e&&e.props&&e.props.className||/^go/.test(e)&&e;a=t?`.`+t:e&&typeof e==`object`?e.props?``:H(e,``):!1===e?``:e}return e+r+(a??``)},``);function W(e){let t=this||{},n=e.call?e(t.p):e;return mt(n.unshift?n.raw?ht(n,[].slice.call(arguments,1),t.p):n.reduce((e,n)=>Object.assign(e,n&&n.call?n(t.p):n),{}):n,lt(t.target),t.g,t.o,t.k)}W.bind({g:1}),W.bind({k:1});function gt(e,t,n,r){H.p=t}var _t=h(p(((e,t)=>{t.exports=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t==`object`&&typeof n==`object`){if(t.constructor!==n.constructor)return!1;var r,i,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!e(t[i],n[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[i]))return!1;for(i=r;i--!==0;){var o=a[i];if(!e(t[o],n[o]))return!1}return!0}return t!==t&&n!==n}}))(),1),G=()=>{let e=navigator.userAgent.toLowerCase();return/mac os ?x 10/.test(e)},vt=(()=>{let e=document.createElement(`iframe`);e.src=`#`,document.body.appendChild(e);let t=e.contentWindow.document;t.open(),t.write(`<!DOCTYPE html><html><head></head><body><span>a</span></body></html>`),t.close();let n=t.body.firstElementChild.offsetHeight;return document.body.removeChild(e),n})(),yt=800,bt=(e,t)=>e[Object.keys(e).map(e=>Number(e)).find(e=>e!==t)],xt=([e,t],[n,r])=>{let i=Math.abs(e-n),a=Math.abs(t-r);return Math.hypot(i,a)},K=()=>{},St=e=>t=>{let{event:n}=t;return n.isPropagationStopped()?null:e(t)},Ct=e=>async(...t)=>{try{await e(...t)}catch(e){console.error(e)}},q=new class{lastPromise=Promise.resolve(!0);add(e,...t){return new Promise((n,r)=>{this.lastPromise=this.lastPromise.then(()=>St(Ct(e))(...t)).then(n).catch(r)})}},J=({children:e,onDrag:r=K,onDragStart:i=K,onDragEnd:a=K,onPan:o=K,onTap:s=K,onLongTap:c=K,onDoubleTap:l=K,onZoom:u,mainAction:d=`drag`,fill:f=!1})=>{let p=t.default.useRef(null),m=t.default.useRef({moving:!1,pointers:{},mainPointer:void 0}),h=e=>{let{deltaX:t,deltaY:n,clientX:r,clientY:i,deltaMode:a,ctrlKey:s,altKey:c,metaKey:l,target:d}=e;if(!(c||s&&!G())){if(G()&&!s)q.add(o,{deltaX:-2*t,deltaY:-2*n,button:1,ctrlKey:s,metaKey:l,target:d,event:e});else{if(u===void 0||!n)return;let t=n;switch(a){case 1:t*=vt;break;case 2:t*=yt}G()&&(t*=2),q.add(u,{scale:t,clientX:r,clientY:i,event:e})}}},g=e=>{let{target:t,button:n,clientX:r,clientY:i,pointerId:a,altKey:o,ctrlKey:s,metaKey:l,isPrimary:u}=e;if(m.current.pointers[a]={clientX:r,clientY:i},u&&(m.current.mainPointer=void 0),m.current.mainPointer!==void 0){if(m.current.mainPointer!==a)try{let{clientX:e,clientY:t}=bt(m.current.pointers,a),n=(e+r)/2,o=(t+i)/2,s=xt([e,t],[r,i]);Object.assign(m.current,{pressed:!0,moving:!1,gestureStart:!1,startX:r,startY:i,prevX:n,prevY:o,startDistance:s,prevDistance:s})}catch(e){console.log(`Error while getting other pointer. Ignoring`,e),m.current.mainPointer}return}m.current.mainPointer=a,Object.assign(m.current,{pressed:!0,moving:!1,gestureStart:!1,startX:r,startY:i,prevX:r,prevY:i,currentButton:n,pointerDownEvent:e,startDistance:0,prevDistance:0,target:t,timeStart:Date.now(),longTapTimeout:setTimeout(async()=>{m.current.noTap=!0,q.add(c,{clientX:r,clientY:i,altKey:o,ctrlKey:s,metaKey:l,target:t,event:e})},750)});try{t.setPointerCapture(a)}catch(e){console.log(`Fail to capture pointer`,e)}},_=e=>{if(m.current.pressed){let{pointerId:t,clientX:n,clientY:a,altKey:s,shiftKey:c,ctrlKey:l,metaKey:f,buttons:h}=e;m.current.pointers[t]={clientX:n,clientY:a},m.current.moving=!0;let g=Object.keys(m.current.pointers).length===2,_,v,y=0;if(g){let{clientX:e,clientY:r}=bt(m.current.pointers,t);_=(e+n)/2,v=(r+a)/2,y=xt([e,r],[n,a])}else _=n,v=a;let b=c||s||l||f||h!==1;d!==`drag`&&(b=!b);let x=!b,S=b;if(x){m.current.gestureStart||(p.current.style.cursor=`move`,m.current.gestureStart=!0,clearTimeout(m.current.longTapTimeout),q.add(i,{deltaX:0,deltaY:0,startX:m.current.startX,startY:m.current.startY,clientX:m.current.startX,clientY:m.current.startY,distanceX:0,distanceY:0,button:m.current.currentButton,altKey:s,shiftKey:c,ctrlKey:l,metaKey:f,target:m.current.target,event:m.current.pointerDownEvent}));let t=_-m.current.prevX,n=v-m.current.prevY,a=_-m.current.startX,o=v-m.current.startY;q.add(r,{deltaX:t,deltaY:n,startX:m.current.startX,startY:m.current.startY,clientX:_,clientY:v,distanceX:a,distanceY:o,button:m.current.currentButton,altKey:s,shiftKey:c,ctrlKey:l,metaKey:f,target:m.current.target,event:e})}if(S){m.current.gestureStart||(p.current.style.cursor=`move`,m.current.gestureStart=!0,clearTimeout(m.current.longTapTimeout));let t=_-m.current.prevX,n=v-m.current.prevY,{target:r}=m.current;if(q.add(o,{deltaX:t,deltaY:n,button:m.current.currentButton,altKey:s,shiftKey:c,ctrlKey:l,metaKey:f,target:r,event:e}),y!==m.current.prevDistance&&u){let t=m.current.prevDistance-y;Math.abs(t)>0&&(q.add(u,{scale:t*3,clientX:_,clientY:v,event:e}),m.current.prevDistance=y)}}m.current.prevX=_,m.current.prevY=v}},v=e=>{let{clientX:t,clientY:n,altKey:r,shiftKey:i,ctrlKey:o,metaKey:c,target:l,pointerId:u}=e;if(m.current.pointers[u]){if(delete m.current.pointers[u],m.current.mainPointer!==u){let{clientX:e,clientY:t}=m.current.pointers[m.current.mainPointer];Object.assign(m.current,{prevX:e,prevY:t,prevDistance:0,startDistance:0});return}for(;Object.keys(m.current.pointers).length>0;){m.current.mainPointer=Number(Object.keys(m.current.pointers)[0]);try{m.current.target.setPointerCapture(m.current.mainPointer);let{clientX:e,clientY:t}=m.current.pointers[m.current.mainPointer];Object.assign(m.current,{prevX:e,prevY:t,prevDistance:0,startDistance:0});return}catch(e){console.log(`Fails to set pointer capture`,e),m.current.mainPointer=void 0,delete m.current.pointers[Object.keys(m.current.pointers)[0]]}}if(m.current.mainPointer=void 0,m.current.pressed=!1,clearTimeout(m.current.longTapTimeout),m.current.moving)m.current.moving=!1,q.add(a,{deltaX:t-m.current.prevX,deltaY:n-m.current.prevY,startX:m.current.startX,startY:m.current.startY,clientX:t,clientY:n,distanceX:t-m.current.startX,distanceY:n-m.current.startY,button:m.current.currentButton,altKey:r,shiftKey:i,ctrlKey:o,metaKey:c,event:e}),p.current.style.cursor=`auto`;else{let a=Date.now();m.current.noTap?m.current.noTap=!1:m.current.timeStart-a<300&&q.add(s,{clientX:t,clientY:n,altKey:r,shiftKey:i,ctrlKey:o,metaKey:c,target:l,event:e})}}};return(0,n.jsx)(`div`,{onWheel:h,onPointerDown:g,onPointerMove:_,onPointerUp:v,onPointerCancel:v,onDoubleClick:e=>{let{clientX:t,clientY:n,altKey:r,shiftKey:i,ctrlKey:a,metaKey:o,target:s}=e;q.add(l,{clientX:t,clientY:n,altKey:r,shiftKey:i,ctrlKey:a,metaKey:o,target:s,event:e})},style:{touchAction:`none`,...f?{position:`absolute`,inset:0}:{}},ref:p,children:e})},Y=({onResize:e,...t})=>{let[r]=L(e=>[e.getBoardState]);return(0,n.jsx)(J,{onDrag:({deltaX:t,deltaY:n,event:i})=>{i.stopPropagation();let{scale:a}=r();e({width:t/a,height:n/a})},children:(0,n.jsx)(`div`,{...t})})},wt=W`
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("react"),require("react/jsx-runtime"),require("zustand"),require("zustand/traditional"),require("zustand/shallow"),require("@react-hookz/web")):typeof define==`function`&&define.amd?define([`exports`,`react`,`react/jsx-runtime`,`zustand`,`zustand/traditional`,`zustand/shallow`,`@react-hookz/web`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e[`React-sync-board`]={},e.React,e.ReactJSXRuntime,e.zustand,e.zustandTraditional,e.zustandShallow,e.ReactHookzWeb))})(this,function(e,t,n,r,i,a,o){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var s=Object.create,c=Object.defineProperty,l=Object.getOwnPropertyDescriptor,u=Object.getOwnPropertyNames,d=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty,p=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),m=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=u(t),a=0,o=i.length,s;a<o;a++)s=i[a],!f.call(e,s)&&s!==n&&c(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=l(t,s))||r.enumerable});return e},h=(e,t,n)=>(n=e==null?{}:s(d(e)),m(t||!e||!e.__esModule||!f.call(e,`default`)?c(n,`default`,{value:e,enumerable:!0}):n,e));t=h(t,1);var g=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`,_=(e=21)=>{let t=``,n=crypto.getRandomValues(new Uint8Array(e|=0));for(;e--;)t+=g[n[e]&63];return t},v=128,y=e=>typeof e==`string`&&e.length>0&&e.length<=v&&!/[\u0000-\u001f\u007f]/u.test(e),b=(e,t)=>{if(!y(e))throw Error(`Invalid ${t}`)},x=class{constructor(e,t,n=null){this._socket=e,this.userId=n,this.room=t,this.toUnregister=[()=>{this._socket.off(`${this.room}.isMaster`),this._socket.off(`${this.room}.roomJoined`),this._socket.off(`${this.room}._call`)}],this._left=!1,this.registeredRPC=Object.create(null),this._socket.on(`${this.room}._call`,async({callId:t,name:n,params:r})=>{try{if(!Object.hasOwn(this.registeredRPC,n))throw Error(`Function ${n} is not registered`);let i=await this.registeredRPC[n](r);e.emit(`${this.room}._result.${t}`,{ok:i||null})}catch(n){e.emit(`${this.room}._result.${t}`,{err:`${n.message}`})}})}async _callServerRPC(e,t){let n=_();return new Promise((r,i)=>{this._socket.once(`${this.room}._result.${n}`,e=>{Object.hasOwn(e,`ok`)?r(e.ok):i(e.err)}),this._socket.emit(`${this.room}._call`,{callId:n,name:e,params:t})})}leave(){this._left=!0,this.toUnregister.forEach(e=>{e()}),this._socket.emit(`${this.room}.leave`)}publish(e,t,n=!1){b(e,`event name`),this._socket.emit(`${this.room}.publish`,{name:e,params:t,self:n})}subscribe(e,t){if(b(e,`event name`),typeof t!=`function`)throw TypeError(`Invalid callback`);this._socket.on(`${this.room}.${e}`,t);let n=()=>{this._socket.off(`${this.room}.${e}`,t)};return this.toUnregister.push(n),n}async register(e,t,{invoke:n=`single`}={}){if(b(e,`RPC name`),typeof t!=`function`)throw TypeError(`Invalid callback`);if(![`single`,`first`,`last`,`random`].includes(n))throw Error(`Invalid invoke mode`);this.registeredRPC[e]=t,await this._callServerRPC(`register`,{name:e,invoke:n});let r=()=>{if(this.registeredRPC[e]===t)return delete this.registeredRPC[e],this._callServerRPC(`unregister`,{name:e})};return this.toUnregister.push(r),r}async call(e,t){return await this._callServerRPC(`call`,{name:e,params:t})}},S=({socket:e,room:t,onJoined:n=()=>{},onMaster:r=()=>{},userId:i=null})=>{b(t,`room name`),i!=null&&b(i,`user id`);let a=new x(e,t,i);return new Promise(o=>{let s=!0;e.on(`${t}.isMaster`,()=>{a._left||r(t)}),e.on(`${t}.roomJoined`,e=>{a._left||(a.userId=e,s=!1,n(a),o(a))}),e.on(`connect`,()=>{a._left||s||e.emit(`joinSuperSocket`,{room:t,userId:a.userId})}),e.emit(`joinSuperSocket`,{room:t,userId:i})})},C=t.default.createContext(),w=()=>(0,n.jsx)(`div`,{style:{position:`absolute`,top:`0`,bottom:`0`,width:`100%`,display:`flex`,justifyContent:`center`,alignItems:`center`},children:(0,n.jsx)(`h2`,{children:`🌀 Loading...`})}),T=({socket:e,room:r,channel:i=`default`,LoadingComponent:a=w,children:o})=>{let[s,c]=t.default.useState(!1),[l,u]=t.default.useState(!1),[d,f]=t.default.useState(null),p=t.default.useRef(null),m=t.default.useRef(!1),h=(0,t.useContext)(C),g=t.default.useRef(!1);return t.default.useEffect(()=>(m.current=!0,()=>{m.current=!1}),[]),t.default.useEffect(()=>{if(!e)return;let t=()=>{console.log(`Disconnected from ${i}…`),m.current&&(c(!1),u(!1))};return e.on(`disconnect`,t),()=>{e.off(`disconnect`,t)}},[i,e]),t.default.useEffect(()=>{if(e)return e.connected||e.connect(),console.log(`Try to connect to wire ${r} on channel ${i}`),g.current||(g.current=!0,S({socket:e,room:r,onMaster:()=>{console.log(`Is now master on channel ${i}…`),m.current&&u(!0)},onJoined:e=>{console.log(`Connected on channel ${i}…`),p.current=e,m.current&&(f(e),c(!0))}})),()=>{p.current?.leave()}},[i,r,e]),!s||!d?(0,n.jsx)(a,{}):(0,n.jsx)(C.Provider,{value:{...h,[i]:{wire:d,joined:s,isMaster:l,room:r}},children:o})},E=(e=`default`)=>((0,t.useContext)(C)||{})[e],ee=new Set([`grid`,`hexH`,`hexV`]),D=(e,t=0)=>Number.isFinite(Number(e))?Number(e):t,O=e=>{if(!ee.has(e?.type))return null;let t=D(e.size,1);return{...e,size:t>0?t:1,offset:{x:D(e.offset?.x),y:D(e.offset?.y)},show:e.show!==!1,color:e.color||`#000000`,opacity:Math.max(0,Math.min(1,D(e.opacity??.2,.2)))}},te=(e,t)=>O(t)||O(e),ne=(e,t)=>{let n=te(e,t),r=O(t);return!n||r||typeof t?.show!=`boolean`?n:{...n,show:t.show}},re=e=>{let t=getComputedStyle(e),n=(e,n,r,i)=>{let a=parseFloat(t[e]);return Number.isFinite(a)?(t.boxSizing!==`border-box`&&(a+=(parseFloat(t[`padding${n}`])||0)+(parseFloat(t[`padding${r}`])||0)+(parseFloat(t[`border${n}Width`])||0)+(parseFloat(t[`border${r}Width`])||0)),a):i};return{width:n(`width`,`Left`,`Right`,e.offsetWidth),height:n(`height`,`Top`,`Bottom`,e.offsetHeight)}},ie=({type:e,size:t})=>{let n=Math.sqrt(3)*t/2;return e===`grid`?{width:t,height:t,centers:[[t/2,t/2]]}:e===`hexH`?{width:2*n,height:3*t,centers:[[0,0],[n,1.5*t]]}:{width:3*t,height:2*n,centers:[[0,0],[1.5*t,n]]}},ae=(e,t)=>{let{x:n,y:r,width:i,height:a}=e,o=O(t);if(!o||![n,r,i,a].every(Number.isFinite))return{x:n,y:r};let{offset:s}=o,c=n+i/2-s.x,l=r+a/2-s.y,u=ie(o),d,f=1/0;for(let[e,t]of u.centers){let n=Math.round((c-e)/u.width)*u.width+e,r=Math.round((l-t)/u.height)*u.height+t,o=Math.hypot(n-c,r-l);o<f&&(d={x:n+s.x-i/2,y:r+s.y-a/2},f=o)}return d&&Number.isFinite(d.x)&&Number.isFinite(d.y)?d:{x:n,y:r}},k=(e,t)=>e.classList&&e.classList.contains(t),A=(e,t)=>k(e,t)?e:e.parentNode?A(e.parentNode,t):!1,oe=([e,t],[n,r])=>{let i=Math.abs(e-n),a=Math.abs(t-r);return Math.hypot(i,a)},se=(e,t,n)=>{let r=n*Math.PI/180;return[e*Math.cos(r)-t*Math.sin(r),e*Math.sin(r)+t*Math.cos(r)]},j=([e,t],{scale:n,rotate:r,translateX:i,translateY:a})=>se((e-i)/n,(t-a)/n,-r),M=([e,t],{scale:n,rotate:r,translateX:i,translateY:a})=>{let[o,s]=se(e,t,r);return[o*n+i,s*n+a]},N=(e,t)=>e.x>t.left&&e.x<t.left+t.width&&e.y>t.top&&e.y<t.top+t.height,ce=(e,t)=>Array.from(e.querySelectorAll(`.corner`)).every(e=>{let{top:n,left:r}=e.getBoundingClientRect();return N({x:r,y:n},t)}),le=(e,t)=>ce(e,t.getBoundingClientRect()),P=(e,t)=>{try{return document.getElementById(`${e}__${t}`)}catch{console.error(`Error while getting item with id ${t} inside wrapper`,e);return}},F=e=>{let t=e?.dataset?.id;return t||console.error(`getIdFromElem call fails`,e,JSON.stringify(e?.dataset),e?.dataset?.id),t},ue=(e,t)=>{let n=e.reduce((e,n)=>{let r=P(t,n);if(!r)return e||null;let{left:i,right:a,top:o,bottom:s}=r.getBoundingClientRect(),c;return c=e||{left:i,top:o,right:a,bottom:s},c.left=Math.min(i,c.left),c.top=Math.min(o,c.top),c.right=Math.max(a,c.right),c.bottom=Math.max(s,c.bottom),c},null);return n&&(n.width=n.right-n.left,n.height=n.bottom-n.top,n)},de=(e,t,n=null)=>(n===null&&(n=new Set),!Array.isArray(t)||t.length===0?[]:t.map(t=>n.has(t)?[]:(n.add(t),e[t]?[t,...de(e,e[t].linkedItems,n)]:[])).flat()),fe=(e,t,n)=>{let r=new Set(de(e,n));return t.filter(e=>r.has(e))},pe=`#037758.#99092a.#067070.#c6650f.#008726.#3d7004.#348402.#057f58.#b58612.#c44c01.#0a7704.#0e910e.#027377.#c99e02.#054160.#157a01.#b10de2.#0d6289.#bc5d03.#ba0cd1.#d39f10.#0c4c7a.#460782.#a51f10.#cecb10.#9b0943.#607f0c.#007a4b.#bf0daa.#af0ad8`.split(`.`),me=()=>pe[Math.floor(Math.random()*pe.length)],he=({wire:e,storeName:t,noSync:n=[],defaultValue:r},i)=>(a,o,s)=>{a({ready:!1});let c=[];(async()=>{try{let n=await e.call(`${t}_getValue`);a(e=>({...e,...n}))}catch{r!==void 0&&a(r)}c.push(await e.register(`${t}_getValue`,()=>Object.fromEntries(Object.entries(o()).filter(([e,t])=>typeof t!=`function`&&!n.includes(e))),{invoke:`first`})),c.push(e.subscribe(`${t}_call`,([e,t])=>{u[e](...t)})),a({ready:!0})})();let l=i(a,o,s),u={...l},d=Object.fromEntries(Object.entries(l).map(([r,i])=>typeof i==`function`&&!r.startsWith(`get`)&&!n.includes(r)?[r,(...n)=>{let a=i(...n);return e.publish(`${t}_call`,[r,n]),a}]:[r,i]));return d.unsub=()=>{c.forEach(e=>e())},d},ge=t.default.createContext(),_e=(e,t)=>({items:{},getItems:()=>t().items,setItems:t=>e({items:t}),updateItems:(t,n=!1)=>e(e=>n?{items:Object.fromEntries(Object.entries(e.items).map(([e,n])=>t[e]?[e,{...n,...t[e]}]:[e,n]))}:{items:{...e.items,...t}}),moveItems:(t,n)=>e(({items:e})=>{let r={...e};return t.forEach(t=>{let i=e[t];i&&(r[t]={...i,x:(i.x||0)+n.x,y:(i.y||0)+n.y,moving:!0})}),{items:r}})}),ve=(e,t)=>({itemIds:[],setItemIds:t=>e({itemIds:t}),getItemIds:()=>t().itemIds,insert:(t,n)=>e(e=>{let r=[...e.itemIds];return r.splice(t,0,n),{itemIds:r}}),remove:t=>e(e=>{let n=[...e.itemIds];return n.splice(t,1),{itemIds:n}}),updateItemIds:(t,n)=>e(e=>{let r=[...e.itemIds];return r[t]=n,{itemIds:r}}),updateManyItemIds:t=>e(e=>({itemIds:e.itemIds.map((e,n)=>t[n]===void 0?e:t[n])}))}),ye=(e,t)=>({removeItemsById:t=>e(e=>({itemIds:e.itemIds.filter(e=>!t.includes(e)),items:Object.fromEntries(Object.entries(e.items).filter(([e])=>!t.includes(e)))})),getItemList:()=>{let e=t().items;return t().itemIds.map(t=>e[t])},setItemList:t=>e({items:Object.fromEntries(t.map(e=>[e.id,e])),itemIds:t.map(({id:e})=>e)}),insertItems:(t,n)=>e(e=>{let r,i=t.map(({id:e})=>e);if(n){let t=e.itemIds.findIndex(e=>e===n);r=[...e.itemIds],r.splice(t,0,...i)}else r=[...e.itemIds,...i];return{items:{...e.items,...Object.fromEntries(t.map(e=>[e.id,e]))},itemIds:r}})}),be=(e,t)=>({boardConfig:{},getBoardConfig:()=>t().boardConfig,setBoardConfig:t=>e({boardConfig:t}),updateBoardConfig:t=>e(e=>({boardConfig:{...e.boardConfig,...t}}))}),xe=(e,t)=>({session:{},getSessionInfo:()=>t().session,setSessionInfo:t=>e({session:t}),updateSessionInfo:t=>e(e=>({session:{...e.session,...t}}))}),Se=({storeName:e,children:i,defaultValue:a})=>{let{wire:o}=E(`room`),[s,c]=t.default.useState(!1),[l]=t.default.useState(()=>(0,r.createStore)(he({wire:o,storeName:e,defaultValue:a},(...e)=>({..._e(...e),...ve(...e),...ye(...e),...be(...e),...xe(...e)}))));return t.default.useEffect(()=>{let e=l.subscribe(t=>{t.ready&&(e(),c(!0))})},[l]),s?(0,n.jsx)(ge.Provider,{value:l,children:i}):null},I=e=>{let n=(0,t.useContext)(ge);return(0,i.useStoreWithEqualityFn)(n,e,a.shallow)},Ce=()=>{let[e,n]=I(e=>[e.itemIds,e.items]);return t.default.useMemo(()=>e.map(e=>n[e]),[e,n])},we=()=>{let[e,n,r]=I(e=>[e.items,e.itemIds,e.getItemList]),[i,a]=t.default.useState(r()),[,o]=t.default.useTransition();return t.default.useEffect(()=>{let e=r();o(()=>{a(e)})},[e,n,r]),i},Te=5e4,Ee=t.default.createContext(),De=(e,t)=>({config:{itemTemplates:{},actions:{},uid:null,itemExtent:{x:0,y:0,radius:0},boardWrapperRect:{},boardSize:Te},updateConfiguration:t=>e(e=>({config:{...e.config,...t}})),getConfiguration:()=>t().config}),Oe=(e,t)=>({boardState:{movingItems:!1,selecting:!1,zooming:!1,panning:!1,translateX:0,translateY:0,scale:1,rotate:0},updateBoardState:t=>e(e=>({boardState:{...e.boardState,...t}})),getBoardState:()=>t().boardState}),ke=(e,t)=>({interactions:{},getInteractions:()=>t().interactions,register:(t,n)=>e(e=>{let r=[...e.interactions[t]||[]];return r.push(n),{interactions:{...e.interactions,[t]:r}}}),unregister:(t,n)=>e(e=>{let r=(e.interactions[t]||[]).filter(e=>e!==n);return{interactions:{...e.interactions,[t]:r}}}),callInteractions:(e,n)=>{t().interactions[e]&&t().interactions[e].forEach(e=>{setTimeout(()=>e(n),0)})}}),Ae=(e,t)=>({selection:[],setSelection:t=>e(e=>JSON.stringify(e.selection)===JSON.stringify(t)?{}:{selection:t}),getSelection:()=>t().selection,select:t=>e(e=>({selection:[...e.selection,...t]})),unselect:t=>e(e=>({selection:e.selection.filter(e=>!t.includes(e))})),clear:()=>e(e=>e.selection.length>0?{selection:[]}:{}),reverse:()=>e(e=>{let t=[...e.selection];return t.reverse(),{selection:t}}),selectionBox:null,setSelectionBox:t=>e(e=>{let n=e.selectionBox;return!n||!t||n.top!==t.top||n.left!==t.left||n.width!==t.width||n.height!==t.height?{selectionBox:t}:{}})}),je=({children:e})=>{let[i]=t.default.useState(()=>(0,r.createStore)((...e)=>({...De(...e),...Oe(...e),...ke(...e),...Ae(...e)})));return(0,n.jsx)(Ee.Provider,{value:i,children:e})},L=e=>{let n=(0,t.useContext)(Ee);return(0,i.useStoreWithEqualityFn)(n,e,a.shallow)},Me=()=>{let[e]=L(e=>[e.selection]);return e},Ne=()=>{let[e]=L(e=>[e.getSelection]);return e},Pe=1e3,Fe=.8,Ie=!1,R=()=>{let[e,n,r,i,a]=L(e=>[e.getBoardState,e.updateBoardState,e.config.itemExtent,e.getConfiguration,e.updateConfiguration]),s=t.default.useRef([.15,5]),[c]=I(e=>[e.getItemList]),l=t.default.useCallback(()=>{let{translateX:t,translateY:n,scale:r,rotate:i}=e();return{translateX:t,translateY:n,scale:r,rotate:i}},[e]),u=t.default.useCallback((t,n)=>j([t,n],e()),[e]),d=t.default.useCallback((t,n)=>M([t,n],e()),[e]),f=t.default.useCallback((t,n)=>{let{scale:r,rotate:i}=e();return j([t,n],{translateX:0,translateY:0,rotate:i,scale:r})},[e]),p=t.default.useCallback(e=>e>s.current[1]?s.current[1]:e<s.current[0]?s.current[0]:e,[]),m=t.default.useCallback(t=>{let r=e(),{translateX:i,translateY:a,scale:o,rotate:s}={...r,...t(r)};Ie&&console.log(`New expected values: `,i,a,o,s);let c=p(o),l=i,u=a;Ie&&console.log(`New fixed values: `,l,u,c,s),n({translateX:Number.isFinite(l)?l:r.translateX,translateY:Number.isFinite(u)?u:r.translateY,scale:Number.isFinite(c)?c:p(1),rotate:Number.isFinite(s)?s:r.rotate})},[p,e,n]),h=t.default.useCallback(e=>{let t=t=>({...t,...e});typeof e==`function`&&(t=e),m(e=>({...e,...t({translateX:e.translateX,translateY:e.translateY})}))},[m]),g=t.default.useCallback(({to:t,factor:n})=>{let{boardWrapperRect:r}=i(),a=t;a||={x:r.left+r.width/2,y:r.top+r.height/2};let o=e(),s=p(o.scale*n),c=a.x-r.left,l=a.y-r.top,u=c-(c-o.translateX)*s/o.scale,d=l-(l-o.translateY)*s/o.scale;m(e=>({...e,translateX:u,translateY:d,scale:s}))},[p,e,i,m]),_=t.default.useCallback(({x:t,y:n,radius:r})=>{let{rotate:a}=e(),{boardWrapperRect:o}=i(),[s,c,l]=[t||0,n||0,r||2e3],u=o.width/(l*2),d=o.height/(l*2),f=p(Math.min(u,d)*Fe),[h,g]=M([-s,-c],{translateX:o.width/2,translateY:o.height/2,scale:f,rotate:a});m(e=>({...e,translateX:h,translateY:g,scale:f}))},[p,e,i,m]),v=t.default.useCallback(()=>{let{boardWrapperRect:e}=i(),[t,n]=u(e.width/2,e.height/2);return{x:t,y:n}},[u,i]),y=t.default.useCallback(()=>{let e=c(),{uid:t}=i(),n=e.reduce((e,n)=>{let r=P(t,n.id);return r&&(e.left=Math.min(n.x,e.left),e.top=Math.min(n.y,e.top),e.right=Math.max(n.x+r.offsetWidth,e.right),e.bottom=Math.max(n.y+r.offsetHeight,e.bottom)),e},{left:1/0,top:1/0,right:-1/0,bottom:-1/0});if(!Number.isFinite(n.left)){a({itemExtent:{x:0,y:0,radius:Pe}});return}let r={x:(n.right+n.left)/2,y:(n.bottom+n.top)/2};r.radius=Math.max(oe([r.x,r.y],[n.left,n.top]),Pe),a({itemExtent:r})},[i,c,a]),b=t.default.useCallback(e=>{let t=()=>e;typeof e==`function`&&(t=e),m(e=>({...e,rotate:t(e.rotate)})),y(),_(r)},[r,m,y,_]),x=(0,o.useDebouncedCallback)(()=>y(),[y],200);return t.default.useEffect(()=>{window.debugUpdateExtent=()=>y(),window.debugDisplayExtent=()=>console.log(i().itemExtent),window.debugSetDebug=()=>{Ie=!0}},[i,y]),{setDim:m,rotateBoard:b,moveBoard:h,getDim:l,zoomTo:g,zoomToCenter:g,zoomToExtent:_,getCenter:v,updateItemExtent:x,vectorFromWrapperToBoard:f,fromWrapperToBoard:u,fromBoardToWrapper:d}},Le=e=>{let[n,r,i]=L(({register:e,unregister:t,callInteractions:n})=>[e,t,n]);return{register:t.default.useCallback(t=>(n(e,t),()=>{r(e,t)}),[e,n,r]),call:t.default.useCallback(t=>{i(e,t)},[i,e])}},z=()=>{let{call:e}=Le(`place`),{call:n}=Le(`delete`),{getCenter:r,updateItemExtent:i}=R(),[a,o,s,c]=L(e=>[e.clear,e.reverse,e.unselect,e.getConfiguration]),{getBoardConfig:l,getItems:u,getItemIds:d,setItemIds:f,updateItems:p,moveItems:m,removeItemsById:h,getItemList:g,insertItems:_,setItemList:v}=I(({getBoardConfig:e,getItems:t,getItemIds:n,setItemIds:r,updateItems:i,moveItems:a,removeItemsById:o,getItemList:s,insertItems:c,setItemList:l})=>({getBoardConfig:e,getItems:t,getItemIds:n,setItemIds:r,updateItems:i,moveItems:a,removeItemsById:o,getItemList:s,insertItems:c,setItemList:l})),y=t.default.useCallback((e,t,n=!1)=>{let r=t;typeof t==`object`&&(r=()=>t);let a=d().filter(t=>e.includes(t)),o=u(),s=a.map(e=>{let t=o[e];return n?[e,r(t)]:[e,r({...t})]}).filter(([,e])=>e);if(s.length===0)return;let c=Object.fromEntries(s);p(c,n),i()},[d,u,i,p]),b=t.default.useCallback(e=>{v(e),a(),i()},[a,v,i]),x=t.default.useCallback((e,t,n=!1)=>{y([e],t,n)},[y]),S=t.default.useCallback((e,t)=>{m(fe(u(),d(),e),t)},[d,u,m]),C=t.default.useCallback(e=>{let t=d(),n=t.filter(t=>!e.includes(t)),r=t.filter(t=>e.includes(t));f([...n,...r])},[d,f]),w=t.default.useCallback((e,t)=>{let{uid:n}=c();y(e,e=>{let r=P(n,e.id);if(!r)return;let i=te(t,e.grid);if(i)return ae({x:e.x,y:e.y,...re(r)},i)},!0)},[c,y]),T=t.default.useCallback(t=>{let n=fe(u(),d(),t);C(n),y(n,{moving:!1},!0),w(n,l().grid),e(t),i()},[y,e,l,d,u,C,w,i]),E=t.default.useCallback(e=>{f(e)},[f]),ee=t.default.useCallback(e=>{let t=d(),n=t.filter(t=>e.includes(t)),r=t.map(t=>e.includes(t)?n.pop():t);f(r),o()},[d,o,f]),D=t.default.useCallback((e,t)=>{let n=u(),r=Object.fromEntries(t.map((t,r)=>{let i=n[e[r]];return[t,{x:i.x,y:i.y}]}));y(e,e=>r[e.id],!0);let i=Object.fromEntries(e.map((e,n)=>[e,t[n]])),a=d().map(t=>e.includes(t)?i[t]:t);f(a)},[u,y,d,f]),O=t.default.useCallback((e,t)=>{let n=r(),i=e.map((e,t)=>e.x===void 0||e.x===null||e.y===void 0||e.y===null?{...e,x:n.x+2*t,y:n.y+2*t}:e);_(i,t),requestAnimationFrame(()=>{T(e.map(({id:e})=>e))})},[r,_,T]),ne=t.default.useCallback((e,t)=>{O([e],t)},[O]),ie=t.default.useCallback(e=>{s(e),h(e),n(e)},[s,h,n]),oe=t.default.useCallback(e=>{let t=u();return e.map(e=>t[e])},[u]);return{putItemsOnTop:C,batchUpdateItems:y,updateItemOrder:E,moveItems:S,placeItems:T,updateItem:x,swapItems:D,reverseItemsOrder:ee,setItemList:b,pushItem:ne,pushItems:O,removeItems:ie,getItemList:g,findElementUnderPointer:t.default.useCallback(({target:e,clientX:t,clientY:n},{returnLocked:r=!1,passLocked:i=!1}={})=>{if([`INPUT`,`TEXTAREA`].includes(e.tagName))return null;let a=A(e,`item`);if(a){if(k(a,`selected`))return a;if(!i&&k(a,`locked`)&&!k(e,`passthrough`))return r?a:null;if(k(e,`passthrough`)){let e=d(),{uid:r}=c(),o=e.reduce((e,i)=>{let a=P(r,i),o=a.getBoundingClientRect();return N({x:t,y:n},o)&&e.unshift(a),e},[]);for(let e=0;e<o.length;e+=1){let t=o[e];if(t!==a&&(i||!k(t,`locked`)))return t}return null}}return a},[c,d]),getItems:oe}},Re=h(p(((e,t)=>{t.exports=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t==`object`&&typeof n==`object`){if(t.constructor!==n.constructor)return!1;var r,i,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!e(t[i],n[i]))return!1;return!0}if(t instanceof Map&&n instanceof Map){if(t.size!==n.size)return!1;for(i of t.entries())if(!n.has(i[0]))return!1;for(i of t.entries())if(!e(i[1],n.get(i[0])))return!1;return!0}if(t instanceof Set&&n instanceof Set){if(t.size!==n.size)return!1;for(i of t.entries())if(!n.has(i[0]))return!1;return!0}if(ArrayBuffer.isView(t)&&ArrayBuffer.isView(n)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(t[i]!==n[i])return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[i]))return!1;for(i=r;i--!==0;){var o=a[i];if(!e(t[o],n[o]))return!1}return!0}return t!==t&&n!==n}}))(),1),ze=(e,t)=>{if(e.type in t){let n=t[e.type].defaultActions;return typeof n==`function`?n(e):n}return[]},Be=(e,t)=>{let{actions:n=ze(e,t)}=e;return n.map(e=>typeof e==`string`?{name:e}:e)},Ve=()=>{let[e,n]=I(e=>[e.items,e.getItems]),[r,i,a]=L(e=>[e.config.itemTemplates,e.selection,e.getSelection]),[s,c]=t.default.useState([]),l=t.default.useRef(!1),[,u]=t.default.useTransition();t.default.useEffect(()=>(l.current=!0,()=>{l.current=!1}),[]);let d=t.default.useCallback(e=>{let t=n();if(e)return[e,e.map(e=>t[e])];let r=a();return[r,r.map(e=>t[e])]},[n,a]),f=(0,t.useCallback)(()=>{let[e,t]=d();if(e.length>0){if(!l.current)return;let e=t.reduce((e,t)=>{let n=Be(t,r);return e.filter(e=>n.some(t=>(0,Re.default)(e,t)))},Be(t[0],r));u(()=>{c(e)})}else u(()=>{c([])})},[d,r]);return(0,o.useDebouncedEffect)(()=>f(),[e,i,f],100),{availableActions:s}},He=()=>{let[e]=L(e=>[e.selectionBox]);return e},Ue=t.default.createContext(),B=e=>{localStorage.setItem(`user`,JSON.stringify(e))},We=()=>{if(localStorage.user){let e={name:`Player`,color:me(),uid:_(),...JSON.parse(localStorage.user)};return B(e),e}let e={name:`Player`,color:me(),uid:_()};return B(e),e},Ge=e=>(t,n)=>({isSpaceMaster:!1,users:{},getUser:()=>n().users[e],getUsers:()=>n().users,getUserList:()=>Object.values(n().users),getLocalUsers:()=>{if(!n().users[e])return[];let{space:t}=n().users[e];return n().getUserList().filter(({space:e})=>e===t)},addUser:e=>t(t=>({users:{...t.users,[e.id]:e}})),updateUser:(r,i)=>t(t=>{if(!t.users[r])return{};let a={...t.users[r],...i,id:r,uid:t.users[r].uid};return a.id===e&&B(a),setTimeout(()=>n().electSpaceMaster(),100),{users:{...t.users,[r]:a}}}),removeUser:e=>t(t=>{let r={...t.users};return delete r[e],setTimeout(()=>n().electSpaceMaster(),100),{users:r}}),updateCurrentUser:t=>n().updateUser(e,t),joinSpace:t=>n().updateUser(e,{space:t,spaceJoinedTimestamp:Date.now()}),electSpaceMaster:()=>{let r=n().getLocalUsers(),i={uid:null,timestamp:Date.now()};Object.values(r).forEach(({spaceJoinedTimestamp:e,id:t})=>{e<i.timestamp&&(i.id=t,i.timestamp=e)}),t({isSpaceMaster:i.id===e})}}),Ke=e=>({cursors:{},moveCursor:(t,n)=>e(e=>({cursors:{...e.cursors,[t]:n}})),removeCursor:t=>e(e=>{let n={...e.cursors};return delete n[t],{cursors:n}})}),qe=({storeName:e,children:i})=>{let{wire:a,isMaster:o}=E(`room`),[s,c]=t.default.useState(null),[l,u]=t.default.useState(!1),d=t.default.useRef(!1);return t.default.useEffect(()=>{let t=!0,n=[];if(!s&&!d.current)return d.current=!0,(()=>{let n=(0,r.createStore)(he({wire:a,storeName:e,noSync:[`updateCurrentUser`,`joinSpace`,`isSpaceMaster`,`electSpaceMaster`]},(...e)=>({...Ge(a.userId)(...e),...Ke(...e)}),a,e)),i=n.subscribe(e=>{e.ready&&(i(),t&&c(n))})})(),()=>{t=!1,d.current=!1,n.forEach(e=>e())}},[s,e,a,a.userId]),t.default.useEffect(()=>{if(s)return s.getState().addUser({...We(),id:a.userId}),u(!0),()=>{s.getState().removeUser(a.userId)}},[o,s,a]),t.default.useEffect(()=>{if(s){let e=a.subscribe(`userLeave`,e=>{s.getState().removeUser(e)});return()=>{e()}}},[o,s,a]),t.default.useEffect(()=>{o&&s&&s.getState().updateCurrentUser({isMaster:o})},[o,s,a]),l?(0,n.jsx)(Ue.Provider,{value:s,children:i}):null},V=e=>{let n=(0,t.useContext)(Ue);return(0,i.useStoreWithEqualityFn)(n,e,a.shallow)},Je=()=>{let[e,n,r,i,a]=V(e=>[e.isSpaceMaster,e.getUser(),e.users,e.updateCurrentUser,e.joinSpace]),o=t.default.useMemo(()=>Object.values(r),[r]);return{isSpaceMaster:e,currentUser:n,updateCurrentUser:i,users:o,localUsers:t.default.useMemo(()=>{let{space:e}=n;return o.filter(({space:t})=>t===e)},[n,o]),joinSpace:a}},Ye=()=>{let[e,n,r]=I(e=>[e.boardConfig,e.getBoardConfig,e.setBoardConfig]);return[e,t.default.useCallback(e=>{let t=e;typeof e==`object`&&(t=()=>e);let i=n(),a=t(i);r(a)},[n,r])]},Xe=()=>{let[e]=L(e=>[e.boardState]);return e},Ze=()=>{let[e,t,n,r]=I(e=>[e.getSessionInfo,e.setSessionInfo,e.updateSessionInfo,e.session]);return{getSessionInfo:e,setSessionInfo:t,sessionInfo:r,updateSessionInfo:n}},Qe=t.default.createContext(),$e=({user:{name:e,uid:t,color:n},content:r})=>({type:`message`,user:{name:e,uid:t,color:n},content:r,uid:_(),timestamp:new Date().toISOString()}),et=(e,t)=>({messages:[],setMessages:t=>e({messages:t.map(e=>({...e,timestamp:Date.parse(e.timestamp)}))}),addMessage:t=>e(e=>({messages:[...e.messages,{...t,timestamp:Date.parse(t.timestamp)}]})),sendMessage:(e,n)=>{let r=$e({user:e,content:n});r&&t().addMessage(r)}}),tt=({storeName:e,children:i,defaultValue:a=[]})=>{let{wire:o}=E(`room`),[s]=t.default.useState(()=>(0,r.createStore)(he({wire:o,storeName:e,defaultValue:a,noSync:[`sendMessage`]},(...e)=>({...et(...e)}))));return(0,n.jsx)(Qe.Provider,{value:s,children:i})},nt=e=>{let n=(0,t.useContext)(Qe);return(0,i.useStoreWithEqualityFn)(n,e,a.shallow)},rt=()=>{},it=(e=rt)=>{let n=V(e=>e.getUser()),[r,i,a]=nt(e=>[e.messages,e.setMessages,e.sendMessage]);return t.default.useEffect(()=>{r.length&&e()},[r,e]),{messages:r,setMessages:i,sendMessage:t.default.useCallback(e=>{a(n,e)},[n,a])}},at=({children:e,session:n})=>{let r=V(e=>e.joinSpace);return t.default.useEffect(()=>(r(n),()=>{r(null)}),[r,n]),e},ot=({socket:e,room:r,session:i,items:a=[],messages:o=[],LoadingComponent:s,...c})=>{let[l]=t.default.useState(r||_()),[u]=t.default.useState(i||_()),[d]=t.default.useState(()=>({itemIds:a.map(({id:e})=>e),items:Object.fromEntries(a.map(e=>[e.id,e]))}));return E(`room`)?(0,n.jsx)(tt,{storeName:`${u}_messages`,defaultValue:o,children:(0,n.jsx)(je,{children:(0,n.jsx)(Se,{storeName:`${u}_item`,defaultValue:d,children:(0,n.jsx)(at,{...c,session:u})})})}):(0,n.jsx)(T,{room:l,channel:`room`,socket:e,LoadingComponent:s,children:(0,n.jsx)(qe,{storeName:`${l}_users`,children:(0,n.jsx)(tt,{storeName:`${u}_messages`,defaultValue:o,children:(0,n.jsx)(je,{children:(0,n.jsx)(Se,{storeName:`${u}_item`,defaultValue:d,children:(0,n.jsx)(at,{...c,session:u})})})})})})},st=({socket:e,room:r,children:i,LoadingComponent:a})=>{let[o]=t.default.useState(r||_());return(0,n.jsx)(T,{room:o,channel:`room`,socket:e,LoadingComponent:a,children:(0,n.jsx)(qe,{storeName:`${o}_users`,children:i})})},ct={data:``},lt=e=>{if(typeof window==`object`){let t=(e?e.querySelector(`#_goober`):window._goober)||Object.assign(document.createElement(`style`),{innerHTML:` `,id:`_goober`});return t.nonce=window.__nonce__,t.parentNode||(e||document.head).appendChild(t),t.firstChild}return e||ct},ut=/(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g,dt=/\/\*[^]*?\*\/| +/g,ft=/\n+/g,H=(e,t)=>{let n=``,r=``,i=``;for(let a in e){let o=e[a];a[0]==`@`?a[1]==`i`?n=a+` `+o+`;`:r+=a[1]==`f`?H(o,a):a+`{`+H(o,a[1]==`k`?``:t)+`}`:typeof o==`object`?r+=H(o,t?t.replace(/([^,])+/g,e=>a.replace(/([^,]*:\S+\([^)]*\))|([^,])+/g,t=>/&/.test(t)?t.replace(/&/g,e):e?e+` `+t:t)):a):o!=null&&(a=a[1]==`-`?a:a.replace(/[A-Z]/g,`-$&`).toLowerCase(),i+=H.p?H.p(a,o):a+`:`+o+`;`)}return n+(t&&i?t+`{`+i+`}`:i)+r},U={},pt=e=>{if(typeof e==`object`){let t=``;for(let n in e)t+=n+pt(e[n]);return t}return e},mt=(e,t,n,r,i)=>{let a=pt(e),o=U[a]||(U[a]=(e=>{let t=0,n=11;for(;t<e.length;)n=101*n+e.charCodeAt(t++)>>>0;return`go`+n})(a));if(!U[o]){let t=a===e?(e=>{let t,n,r=[{}];for(;t=ut.exec(e.replace(dt,``));)t[4]?r.shift():t[3]?(n=t[3].replace(ft,` `).trim(),r.unshift(r[0][n]=r[0][n]||{})):r[0][t[1]]=t[2].replace(ft,` `).trim();return r[0]})(e):e;U[o]=H(i?{[`@keyframes `+o]:t}:t,n?``:`.`+o)}let s=n&&U.g;return n&&(U.g=U[o]),((e,t,n,r)=>{r?t.data=t.data.replace(r,e):t.data.indexOf(e)===-1&&(t.data=n?e+t.data:t.data+e)})(U[o],t,r,s),o},ht=(e,t,n)=>e.reduce((e,r,i)=>{let a=t[i];if(a&&a.call){let e=a(n),t=e&&e.props&&e.props.className||/^go/.test(e)&&e;a=t?`.`+t:e&&typeof e==`object`?e.props?``:H(e,``):!1===e?``:e}return e+r+(a??``)},``);function W(e){let t=this||{},n=e.call?e(t.p):e;return mt(n.unshift?n.raw?ht(n,[].slice.call(arguments,1),t.p):n.reduce((e,n)=>Object.assign(e,n&&n.call?n(t.p):n),{}):n,lt(t.target),t.g,t.o,t.k)}W.bind({g:1}),W.bind({k:1});function gt(e,t,n,r){H.p=t}var _t=h(p(((e,t)=>{t.exports=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t==`object`&&typeof n==`object`){if(t.constructor!==n.constructor)return!1;var r,i,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!e(t[i],n[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[i]))return!1;for(i=r;i--!==0;){var o=a[i];if(!e(t[o],n[o]))return!1}return!0}return t!==t&&n!==n}}))(),1),G=()=>{let e=navigator.userAgent.toLowerCase();return/mac os ?x 10/.test(e)},vt=(()=>{let e=document.createElement(`iframe`);e.src=`#`,document.body.appendChild(e);let t=e.contentWindow.document;t.open(),t.write(`<!DOCTYPE html><html><head></head><body><span>a</span></body></html>`),t.close();let n=t.body.firstElementChild.offsetHeight;return document.body.removeChild(e),n})(),yt=800,bt=(e,t)=>e[Object.keys(e).map(e=>Number(e)).find(e=>e!==t)],xt=([e,t],[n,r])=>{let i=Math.abs(e-n),a=Math.abs(t-r);return Math.hypot(i,a)},K=()=>{},St=e=>t=>{let{event:n}=t;return n.isPropagationStopped()?null:e(t)},Ct=e=>async(...t)=>{try{await e(...t)}catch(e){console.error(e)}},q=new class{lastPromise=Promise.resolve(!0);add(e,...t){return new Promise((n,r)=>{this.lastPromise=this.lastPromise.then(()=>St(Ct(e))(...t)).then(n).catch(r)})}},J=({children:e,onDrag:r=K,onDragStart:i=K,onDragEnd:a=K,onPan:o=K,onTap:s=K,onLongTap:c=K,onDoubleTap:l=K,onZoom:u,mainAction:d=`drag`,fill:f=!1})=>{let p=t.default.useRef(null),m=t.default.useRef({moving:!1,pointers:{},mainPointer:void 0}),h=e=>{let{deltaX:t,deltaY:n,clientX:r,clientY:i,deltaMode:a,ctrlKey:s,altKey:c,metaKey:l,target:d}=e;if(!(c||s&&!G())){if(G()&&!s)q.add(o,{deltaX:-2*t,deltaY:-2*n,button:1,ctrlKey:s,metaKey:l,target:d,event:e});else{if(u===void 0||!n)return;let t=n;switch(a){case 1:t*=vt;break;case 2:t*=yt}G()&&(t*=2),q.add(u,{scale:t,clientX:r,clientY:i,event:e})}}},g=e=>{let{target:t,button:n,clientX:r,clientY:i,pointerId:a,altKey:o,ctrlKey:s,metaKey:l,isPrimary:u}=e;if(m.current.pointers[a]={clientX:r,clientY:i},u&&(m.current.mainPointer=void 0),m.current.mainPointer!==void 0){if(m.current.mainPointer!==a)try{let{clientX:e,clientY:t}=bt(m.current.pointers,a),n=(e+r)/2,o=(t+i)/2,s=xt([e,t],[r,i]);Object.assign(m.current,{pressed:!0,moving:!1,gestureStart:!1,startX:r,startY:i,prevX:n,prevY:o,startDistance:s,prevDistance:s})}catch(e){console.log(`Error while getting other pointer. Ignoring`,e),m.current.mainPointer}return}m.current.mainPointer=a,Object.assign(m.current,{pressed:!0,moving:!1,gestureStart:!1,startX:r,startY:i,prevX:r,prevY:i,currentButton:n,pointerDownEvent:e,startDistance:0,prevDistance:0,target:t,timeStart:Date.now(),longTapTimeout:setTimeout(async()=>{m.current.noTap=!0,q.add(c,{clientX:r,clientY:i,altKey:o,ctrlKey:s,metaKey:l,target:t,event:e})},750)});try{t.setPointerCapture(a)}catch(e){console.log(`Fail to capture pointer`,e)}},_=e=>{if(m.current.pressed){let{pointerId:t,clientX:n,clientY:a,altKey:s,shiftKey:c,ctrlKey:l,metaKey:f,buttons:h}=e;m.current.pointers[t]={clientX:n,clientY:a},m.current.moving=!0;let g=Object.keys(m.current.pointers).length===2,_,v,y=0;if(g){let{clientX:e,clientY:r}=bt(m.current.pointers,t);_=(e+n)/2,v=(r+a)/2,y=xt([e,r],[n,a])}else _=n,v=a;let b=c||s||l||f||h!==1;d!==`drag`&&(b=!b);let x=!b,S=b;if(x){m.current.gestureStart||(p.current.style.cursor=`move`,m.current.gestureStart=!0,clearTimeout(m.current.longTapTimeout),q.add(i,{deltaX:0,deltaY:0,startX:m.current.startX,startY:m.current.startY,clientX:m.current.startX,clientY:m.current.startY,distanceX:0,distanceY:0,button:m.current.currentButton,altKey:s,shiftKey:c,ctrlKey:l,metaKey:f,target:m.current.target,event:m.current.pointerDownEvent}));let t=_-m.current.prevX,n=v-m.current.prevY,a=_-m.current.startX,o=v-m.current.startY;q.add(r,{deltaX:t,deltaY:n,startX:m.current.startX,startY:m.current.startY,clientX:_,clientY:v,distanceX:a,distanceY:o,button:m.current.currentButton,altKey:s,shiftKey:c,ctrlKey:l,metaKey:f,target:m.current.target,event:e})}if(S){m.current.gestureStart||(p.current.style.cursor=`move`,m.current.gestureStart=!0,clearTimeout(m.current.longTapTimeout));let t=_-m.current.prevX,n=v-m.current.prevY,{target:r}=m.current;if(q.add(o,{deltaX:t,deltaY:n,button:m.current.currentButton,altKey:s,shiftKey:c,ctrlKey:l,metaKey:f,target:r,event:e}),y!==m.current.prevDistance&&u){let t=m.current.prevDistance-y;Math.abs(t)>0&&(q.add(u,{scale:t*3,clientX:_,clientY:v,event:e}),m.current.prevDistance=y)}}m.current.prevX=_,m.current.prevY=v}},v=e=>{let{clientX:t,clientY:n,altKey:r,shiftKey:i,ctrlKey:o,metaKey:c,target:l,pointerId:u}=e;if(m.current.pointers[u]){if(delete m.current.pointers[u],m.current.mainPointer!==u){let{clientX:e,clientY:t}=m.current.pointers[m.current.mainPointer];Object.assign(m.current,{prevX:e,prevY:t,prevDistance:0,startDistance:0});return}for(;Object.keys(m.current.pointers).length>0;){m.current.mainPointer=Number(Object.keys(m.current.pointers)[0]);try{m.current.target.setPointerCapture(m.current.mainPointer);let{clientX:e,clientY:t}=m.current.pointers[m.current.mainPointer];Object.assign(m.current,{prevX:e,prevY:t,prevDistance:0,startDistance:0});return}catch(e){console.log(`Fails to set pointer capture`,e),m.current.mainPointer=void 0,delete m.current.pointers[Object.keys(m.current.pointers)[0]]}}if(m.current.mainPointer=void 0,m.current.pressed=!1,clearTimeout(m.current.longTapTimeout),m.current.moving)m.current.moving=!1,q.add(a,{deltaX:t-m.current.prevX,deltaY:n-m.current.prevY,startX:m.current.startX,startY:m.current.startY,clientX:t,clientY:n,distanceX:t-m.current.startX,distanceY:n-m.current.startY,button:m.current.currentButton,altKey:r,shiftKey:i,ctrlKey:o,metaKey:c,event:e}),p.current.style.cursor=`auto`;else{let a=Date.now();m.current.noTap?m.current.noTap=!1:m.current.timeStart-a<300&&q.add(s,{clientX:t,clientY:n,altKey:r,shiftKey:i,ctrlKey:o,metaKey:c,target:l,event:e})}}};return(0,n.jsx)(`div`,{onWheel:h,onPointerDown:g,onPointerMove:_,onPointerUp:v,onPointerCancel:v,onDoubleClick:e=>{let{clientX:t,clientY:n,altKey:r,shiftKey:i,ctrlKey:a,metaKey:o,target:s}=e;q.add(l,{clientX:t,clientY:n,altKey:r,shiftKey:i,ctrlKey:a,metaKey:o,target:s,event:e})},onDragStart:e=>{e.preventDefault()},style:{touchAction:`none`,...f?{position:`absolute`,inset:0}:{}},ref:p,children:e})},Y=({onResize:e,...t})=>{let[r]=L(e=>[e.getBoardState]);return(0,n.jsx)(J,{onDrag:({deltaX:t,deltaY:n,event:i})=>{i.stopPropagation();let{scale:a}=r();e({width:t/a,height:n/a})},children:(0,n.jsx)(`div`,{...t})})},wt=W`
|
|
2
2
|
display: inline-block;
|
|
3
3
|
transition: transform 150ms;
|
|
4
4
|
user-select: none;
|