react-sync-board 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/react-sync-board.js +1071 -1062
- package/dist/react-sync-board.js.map +1 -1
- package/dist/react-sync-board.umd.cjs +17 -17
- package/dist/react-sync-board.umd.cjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(U,d){typeof exports=="object"&&typeof module<"u"?d(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],d):(U=typeof globalThis<"u"?globalThis:U||self,d(U["React-sync-board"]={},U.React))})(this,function(U,d){"use strict";var ns=Object.defineProperty;var os=(U,d,
|
|
1
|
+
(function(U,d){typeof exports=="object"&&typeof module<"u"?d(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],d):(U=typeof globalThis<"u"?globalThis:U||self,d(U["React-sync-board"]={},U.React))})(this,function(U,d){"use strict";var ns=Object.defineProperty;var os=(U,d,pe)=>d in U?ns(U,d,{enumerable:!0,configurable:!0,writable:!0,value:pe}):U[d]=pe;var ar=(U,d,pe)=>(os(U,typeof d!="symbol"?d+"":d,pe),pe);function pe(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Ce={},cr={get exports(){return Ce},set exports(e){Ce=e}},we={};/**
|
|
2
2
|
* @license React
|
|
3
3
|
* react-jsx-runtime.production.min.js
|
|
4
4
|
*
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* This source code is licensed under the MIT license found in the
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
|
9
|
-
*/var
|
|
9
|
+
*/var gt;function ur(){if(gt)return we;gt=1;var e=d,t=Symbol.for("react.element"),r=Symbol.for("react.fragment"),n=Object.prototype.hasOwnProperty,o=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,s={key:!0,ref:!0,__self:!0,__source:!0};function c(u,l,p){var f,a={},h=null,b=null;p!==void 0&&(h=""+p),l.key!==void 0&&(h=""+l.key),l.ref!==void 0&&(b=l.ref);for(f in l)n.call(l,f)&&!s.hasOwnProperty(f)&&(a[f]=l[f]);if(u&&u.defaultProps)for(f in l=u.defaultProps,l)a[f]===void 0&&(a[f]=l[f]);return{$$typeof:t,type:u,key:h,ref:b,props:a,_owner:o.current}}return we.Fragment=r,we.jsx=c,we.jsxs=c,we}var xe={};/**
|
|
10
10
|
* @license React
|
|
11
11
|
* react-jsx-runtime.development.js
|
|
12
12
|
*
|
|
@@ -14,17 +14,17 @@
|
|
|
14
14
|
*
|
|
15
15
|
* This source code is licensed under the MIT license found in the
|
|
16
16
|
* LICENSE file in the root directory of this source tree.
|
|
17
|
-
*/var
|
|
18
|
-
`+
|
|
17
|
+
*/var ht;function lr(){return ht||(ht=1,process.env.NODE_ENV!=="production"&&function(){var e=d,t=Symbol.for("react.element"),r=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),c=Symbol.for("react.provider"),u=Symbol.for("react.context"),l=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),f=Symbol.for("react.suspense_list"),a=Symbol.for("react.memo"),h=Symbol.for("react.lazy"),b=Symbol.for("react.offscreen"),v=Symbol.iterator,E="@@iterator";function O(i){if(i===null||typeof i!="object")return null;var _=v&&i[v]||i[E];return typeof _=="function"?_:null}var y=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function w(i){{for(var _=arguments.length,I=new Array(_>1?_-1:0),R=1;R<_;R++)I[R-1]=arguments[R];x("error",i,I)}}function x(i,_,I){{var R=y.ReactDebugCurrentFrame,X=R.getStackAddendum();X!==""&&(_+="%s",I=I.concat([X]));var F=I.map(function(Y){return String(Y)});F.unshift("Warning: "+_),Function.prototype.apply.call(console[i],console,F)}}var m=!1,C=!1,g=!1,S=!1,T=!1,P;P=Symbol.for("react.module.reference");function D(i){return!!(typeof i=="string"||typeof i=="function"||i===n||i===s||T||i===o||i===p||i===f||S||i===b||m||C||g||typeof i=="object"&&i!==null&&(i.$$typeof===h||i.$$typeof===a||i.$$typeof===c||i.$$typeof===u||i.$$typeof===l||i.$$typeof===P||i.getModuleId!==void 0))}function j(i,_,I){var R=i.displayName;if(R)return R;var X=_.displayName||_.name||"";return X!==""?I+"("+X+")":I}function L(i){return i.displayName||"Context"}function N(i){if(i==null)return null;if(typeof i.tag=="number"&&w("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof i=="function")return i.displayName||i.name||null;if(typeof i=="string")return i;switch(i){case n:return"Fragment";case r:return"Portal";case s:return"Profiler";case o:return"StrictMode";case p:return"Suspense";case f:return"SuspenseList"}if(typeof i=="object")switch(i.$$typeof){case u:var _=i;return L(_)+".Consumer";case c:var I=i;return L(I._context)+".Provider";case l:return j(i,i.render,"ForwardRef");case a:var R=i.displayName||null;return R!==null?R:N(i.type)||"Memo";case h:{var X=i,F=X._payload,Y=X._init;try{return N(Y(F))}catch{return null}}}return null}var V=Object.assign,Z=0,M,$,B,W,A,K,H;function te(){}te.__reactDisabledLog=!0;function ce(){{if(Z===0){M=console.log,$=console.info,B=console.warn,W=console.error,A=console.group,K=console.groupCollapsed,H=console.groupEnd;var i={configurable:!0,enumerable:!0,value:te,writable:!0};Object.defineProperties(console,{info:i,log:i,warn:i,error:i,group:i,groupCollapsed:i,groupEnd:i})}Z++}}function de(){{if(Z--,Z===0){var i={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:V({},i,{value:M}),info:V({},i,{value:$}),warn:V({},i,{value:B}),error:V({},i,{value:W}),group:V({},i,{value:A}),groupCollapsed:V({},i,{value:K}),groupEnd:V({},i,{value:H})})}Z<0&&w("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var ue=y.ReactCurrentDispatcher,Se;function be(i,_,I){{if(Se===void 0)try{throw Error()}catch(X){var R=X.stack.trim().match(/\n( *(at )?)/);Se=R&&R[1]||""}return`
|
|
18
|
+
`+Se+i}}var ut=!1,Ue;{var Ro=typeof WeakMap=="function"?WeakMap:Map;Ue=new Ro}function Kt(i,_){if(!i||ut)return"";{var I=Ue.get(i);if(I!==void 0)return I}var R;ut=!0;var X=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var F;F=ue.current,ue.current=null,ce();try{if(_){var Y=function(){throw Error()};if(Object.defineProperty(Y.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(Y,[])}catch(le){R=le}Reflect.construct(i,[],Y)}else{try{Y.call()}catch(le){R=le}i.call(Y.prototype)}}else{try{throw Error()}catch(le){R=le}i()}}catch(le){if(le&&R&&typeof le.stack=="string"){for(var z=le.stack.split(`
|
|
19
19
|
`),ee=R.stack.split(`
|
|
20
|
-
`),G=z.length-1,J=ee.length-1;G>=1&&J>=0&&z[G]!==ee[J];)J--;for(;G>=1&&J>=0;G--,J--)if(z[G]!==ee[J]){if(G!==1||J!==1)do if(G--,J--,J<0||z[G]!==ee[J]){var
|
|
21
|
-
`+z[G].replace(" at new "," at ");return i.displayName&&
|
|
20
|
+
`),G=z.length-1,J=ee.length-1;G>=1&&J>=0&&z[G]!==ee[J];)J--;for(;G>=1&&J>=0;G--,J--)if(z[G]!==ee[J]){if(G!==1||J!==1)do if(G--,J--,J<0||z[G]!==ee[J]){var re=`
|
|
21
|
+
`+z[G].replace(" at new "," at ");return i.displayName&&re.includes("<anonymous>")&&(re=re.replace("<anonymous>",i.displayName)),typeof i=="function"&&Ue.set(i,re),re}while(G>=1&&J>=0);break}}}finally{ut=!1,ue.current=F,de(),Error.prepareStackTrace=X}var Ee=i?i.displayName||i.name:"",ir=Ee?be(Ee):"";return typeof i=="function"&&Ue.set(i,ir),ir}function $o(i,_,I){return Kt(i,!1)}function Ao(i){var _=i.prototype;return!!(_&&_.isReactComponent)}function We(i,_,I){if(i==null)return"";if(typeof i=="function")return Kt(i,Ao(i));if(typeof i=="string")return be(i);switch(i){case p:return be("Suspense");case f:return be("SuspenseList")}if(typeof i=="object")switch(i.$$typeof){case l:return $o(i.render);case a:return We(i.type,_,I);case h:{var R=i,X=R._payload,F=R._init;try{return We(F(X),_,I)}catch{}}}return""}var Ve=Object.prototype.hasOwnProperty,Ht={},qt=y.ReactDebugCurrentFrame;function Fe(i){if(i){var _=i._owner,I=We(i.type,i._source,_?_.type:null);qt.setExtraStackFrame(I)}else qt.setExtraStackFrame(null)}function Lo(i,_,I,R,X){{var F=Function.call.bind(Ve);for(var Y in i)if(F(i,Y)){var z=void 0;try{if(typeof i[Y]!="function"){var ee=Error((R||"React class")+": "+I+" type `"+Y+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof i[Y]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw ee.name="Invariant Violation",ee}z=i[Y](_,Y,R,I,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(G){z=G}z&&!(z instanceof Error)&&(Fe(X),w("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",R||"React class",I,Y,typeof z),Fe(null)),z instanceof Error&&!(z.message in Ht)&&(Ht[z.message]=!0,Fe(X),w("Failed %s type: %s",I,z.message),Fe(null))}}}var zo=Array.isArray;function lt(i){return zo(i)}function Yo(i){{var _=typeof Symbol=="function"&&Symbol.toStringTag,I=_&&i[Symbol.toStringTag]||i.constructor.name||"Object";return I}}function Bo(i){try{return Gt(i),!1}catch{return!0}}function Gt(i){return""+i}function Jt(i){if(Bo(i))return w("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",Yo(i)),Gt(i)}var je=y.ReactCurrentOwner,No={key:!0,ref:!0,__self:!0,__source:!0},Zt,Qt,ft;ft={};function Xo(i){if(Ve.call(i,"ref")){var _=Object.getOwnPropertyDescriptor(i,"ref").get;if(_&&_.isReactWarning)return!1}return i.ref!==void 0}function Uo(i){if(Ve.call(i,"key")){var _=Object.getOwnPropertyDescriptor(i,"key").get;if(_&&_.isReactWarning)return!1}return i.key!==void 0}function Wo(i,_){if(typeof i.ref=="string"&&je.current&&_&&je.current.stateNode!==_){var I=N(je.current.type);ft[I]||(w('Component "%s" contains the string ref "%s". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref',N(je.current.type),i.ref),ft[I]=!0)}}function Vo(i,_){{var I=function(){Zt||(Zt=!0,w("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",_))};I.isReactWarning=!0,Object.defineProperty(i,"key",{get:I,configurable:!0})}}function Fo(i,_){{var I=function(){Qt||(Qt=!0,w("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",_))};I.isReactWarning=!0,Object.defineProperty(i,"ref",{get:I,configurable:!0})}}var Ko=function(i,_,I,R,X,F,Y){var z={$$typeof:t,type:i,key:_,ref:I,props:Y,_owner:F};return z._store={},Object.defineProperty(z._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(z,"_self",{configurable:!1,enumerable:!1,writable:!1,value:R}),Object.defineProperty(z,"_source",{configurable:!1,enumerable:!1,writable:!1,value:X}),Object.freeze&&(Object.freeze(z.props),Object.freeze(z)),z};function Ho(i,_,I,R,X){{var F,Y={},z=null,ee=null;I!==void 0&&(Jt(I),z=""+I),Uo(_)&&(Jt(_.key),z=""+_.key),Xo(_)&&(ee=_.ref,Wo(_,X));for(F in _)Ve.call(_,F)&&!No.hasOwnProperty(F)&&(Y[F]=_[F]);if(i&&i.defaultProps){var G=i.defaultProps;for(F in G)Y[F]===void 0&&(Y[F]=G[F])}if(z||ee){var J=typeof i=="function"?i.displayName||i.name||"Unknown":i;z&&Vo(Y,J),ee&&Fo(Y,J)}return Ko(i,z,ee,X,R,je.current,Y)}}var dt=y.ReactCurrentOwner,er=y.ReactDebugCurrentFrame;function _e(i){if(i){var _=i._owner,I=We(i.type,i._source,_?_.type:null);er.setExtraStackFrame(I)}else er.setExtraStackFrame(null)}var pt;pt=!1;function mt(i){return typeof i=="object"&&i!==null&&i.$$typeof===t}function tr(){{if(dt.current){var i=N(dt.current.type);if(i)return`
|
|
22
22
|
|
|
23
|
-
Check the render method of \``+i+"`."}return""}}function qo(i){{if(i!==void 0){var _=i.fileName.replace(/^.*[\\\/]/,""),
|
|
23
|
+
Check the render method of \``+i+"`."}return""}}function qo(i){{if(i!==void 0){var _=i.fileName.replace(/^.*[\\\/]/,""),I=i.lineNumber;return`
|
|
24
24
|
|
|
25
|
-
Check your code at `+_+":"+
|
|
25
|
+
Check your code at `+_+":"+I+"."}return""}}var rr={};function Go(i){{var _=tr();if(!_){var I=typeof i=="string"?i:i.displayName||i.name;I&&(_=`
|
|
26
26
|
|
|
27
|
-
Check the top-level render call using <`+
|
|
27
|
+
Check the top-level render call using <`+I+">.")}return _}}function nr(i,_){{if(!i._store||i._store.validated||i.key!=null)return;i._store.validated=!0;var I=Go(_);if(rr[I])return;rr[I]=!0;var R="";i&&i._owner&&i._owner!==dt.current&&(R=" It was passed a child from "+N(i._owner.type)+"."),_e(i),w('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',I,R),_e(null)}}function or(i,_){{if(typeof i!="object")return;if(lt(i))for(var I=0;I<i.length;I++){var R=i[I];mt(R)&&nr(R,_)}else if(mt(i))i._store&&(i._store.validated=!0);else if(i){var X=O(i);if(typeof X=="function"&&X!==i.entries)for(var F=X.call(i),Y;!(Y=F.next()).done;)mt(Y.value)&&nr(Y.value,_)}}}function Jo(i){{var _=i.type;if(_==null||typeof _=="string")return;var I;if(typeof _=="function")I=_.propTypes;else if(typeof _=="object"&&(_.$$typeof===l||_.$$typeof===a))I=_.propTypes;else return;if(I){var R=N(_);Lo(I,i.props,"prop",R,i)}else if(_.PropTypes!==void 0&&!pt){pt=!0;var X=N(_);w("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",X||"Unknown")}typeof _.getDefaultProps=="function"&&!_.getDefaultProps.isReactClassApproved&&w("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function Zo(i){{for(var _=Object.keys(i.props),I=0;I<_.length;I++){var R=_[I];if(R!=="children"&&R!=="key"){_e(i),w("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",R),_e(null);break}}i.ref!==null&&(_e(i),w("Invalid attribute `ref` supplied to `React.Fragment`."),_e(null))}}function sr(i,_,I,R,X,F){{var Y=D(i);if(!Y){var z="";(i===void 0||typeof i=="object"&&i!==null&&Object.keys(i).length===0)&&(z+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var ee=qo(X);ee?z+=ee:z+=tr();var G;i===null?G="null":lt(i)?G="array":i!==void 0&&i.$$typeof===t?(G="<"+(N(i.type)||"Unknown")+" />",z=" Did you accidentally export a JSX literal instead of a component?"):G=typeof i,w("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",G,z)}var J=Ho(i,_,I,X,F);if(J==null)return J;if(Y){var re=_.children;if(re!==void 0)if(R)if(lt(re)){for(var Ee=0;Ee<re.length;Ee++)or(re[Ee],i);Object.freeze&&Object.freeze(re)}else w("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else or(re,i)}return i===n?Zo(J):Jo(J),J}}function Qo(i,_,I){return sr(i,_,I,!0)}function es(i,_,I){return sr(i,_,I,!1)}var ts=es,rs=Qo;xe.Fragment=n,xe.jsx=ts,xe.jsxs=rs}()),xe}(function(e){process.env.NODE_ENV==="production"?e.exports=ur():e.exports=lr()})(cr);const fr=Ce.Fragment,k=Ce.jsx,se=Ce.jsxs;let dr=(e=21)=>crypto.getRandomValues(new Uint8Array(e)).reduce((t,r)=>(r&=63,r<36?t+=r.toString(36):r<62?t+=(r-26).toString(36).toUpperCase():r>62?t+="-":t+="_",t),"");class pr{constructor(t,r,n=null){this._socket=t,this.userId=n,this.room=r,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={},this._socket.on(`${this.room}._call`,async({callId:o,name:s,params:c})=>{try{const u=await this.registeredRPC[s](c);t.emit(`${this.room}._result.${o}`,{ok:u||null})}catch(u){t.emit(`${this.room}._result.${o}`,{err:`${u.message}`})}})}async _callServerRPC(t,r){const n=dr();return new Promise((o,s)=>{this._socket.once(`${this.room}._result.${n}`,c=>{c.hasOwnProperty("ok")?o(c.ok):s(c.err)}),this._socket.emit(`${this.room}._call`,{callId:n,name:t,params:r})})}leave(){this._left=!0,this.toUnregister.forEach(t=>{t()}),this._socket.emit(`${this.room}.leave`)}publish(t,r,n=!1){this._socket.emit(`${this.room}.publish`,{name:t,params:r,self:n})}subscribe(t,r){this._socket.on(`${this.room}.${t}`,r);const n=()=>{this._socket.off(`${this.room}.${t}`,r)};return this.toUnregister.push(n),n}async register(t,r,{invoke:n="single"}={}){this.registeredRPC[t]=r,await this._callServerRPC("register",{name:t,invoke:n});const o=()=>{if(this.registeredRPC[t]===r)return delete this.registeredRPC[t],this._callServerRPC("unregister",{name:t})};return this.toUnregister.push(o),o}async call(t,r){return await this._callServerRPC("call",{name:t,params:r})}}const mr=({socket:e,room:t,onJoined:r=()=>{},onMaster:n=()=>{},userId:o=null})=>{const s=new pr(e,t,o);return new Promise(c=>{let u=!0;e.on(`${t}.isMaster`,()=>{s._left||n(t)}),e.on(`${t}.roomJoined`,l=>{s._left||(s.userId=l,u=!1,r(s),c(s))}),e.on("connect",()=>{s._left||u||e.emit("joinSuperSocket",{room:t,userId:s.userId})}),e.emit("joinSuperSocket",{room:t,userId:o})})},Ke=d.createContext(),gr=()=>k("div",{style:{position:"absolute",top:"0",bottom:"0",width:"100%",display:"flex",justifyContent:"center",alignItems:"center"},children:k("h2",{children:"🌀 Loading..."})}),vt=({socket:e,room:t,channel:r="default",LoadingComponent:n=gr,children:o})=>{const[s,c]=d.useState(!1),[u,l]=d.useState(!1),[p,f]=d.useState(null),a=d.useRef(null),h=d.useRef(!1),b=d.useContext(Ke),v=d.useRef(!1);return d.useEffect(()=>(h.current=!0,()=>{h.current=!1}),[]),d.useEffect(()=>{if(!e)return null;const E=()=>{console.log(`Disconnected from ${r}…`),h.current&&(c(!1),l(!1))};return e.on("disconnect",E),()=>{e.off("disconnect",E)}},[r,e]),d.useEffect(()=>e?(e.connected||e.connect(),console.log(`Try to connect to wire ${t} on channel ${r}`),v.current||(v.current=!0,mr({socket:e,room:t,onMaster:()=>{console.log(`Is now master on channel ${r}…`),h.current&&l(!0)},onJoined:E=>{console.log(`Connected on channel ${r}…`),a.current=E,h.current&&(f(E),c(!0))}})),()=>{var E;(E=a.current)==null||E.leave()}):null,[r,t,e]),!s||!p?k(n,{}):k(Ke.Provider,{value:{...b,[r]:{wire:p,joined:s,isMaster:u,room:t}},children:o})},Ie=(e="default")=>(d.useContext(Ke)||{})[e],yt=e=>{let t;const r=new Set,n=(l,p)=>{const f=typeof l=="function"?l(t):l;if(!Object.is(f,t)){const a=t;t=p??typeof f!="object"?f:Object.assign({},t,f),r.forEach(h=>h(t,a))}},o=()=>t,u={setState:n,getState:o,subscribe:l=>(r.add(l),()=>r.delete(l)),destroy:()=>{({BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0}&&"production")!=="production"&&console.warn("[DEPRECATED] The destroy method will be unsupported in the future version. You should use unsubscribe function returned by subscribe. Everything will be garbage collected if store is garbage collected."),r.clear()}};return t=e(n,o,u),u},De=e=>e?yt(e):yt;var He={},hr={get exports(){return He},set exports(e){He=e}},qe={},Re={},vr={get exports(){return Re},set exports(e){Re=e}},Ge={};/**
|
|
28
28
|
* @license React
|
|
29
29
|
* use-sync-external-store-shim.production.min.js
|
|
30
30
|
*
|
|
@@ -32,7 +32,7 @@ Check the top-level render call using <`+O+">.")}return _}}function nr(i,_){{if(
|
|
|
32
32
|
*
|
|
33
33
|
* This source code is licensed under the MIT license found in the
|
|
34
34
|
* LICENSE file in the root directory of this source tree.
|
|
35
|
-
*/var
|
|
35
|
+
*/var St;function yr(){if(St)return Ge;St=1;var e=d;function t(a,h){return a===h&&(a!==0||1/a===1/h)||a!==a&&h!==h}var r=typeof Object.is=="function"?Object.is:t,n=e.useState,o=e.useEffect,s=e.useLayoutEffect,c=e.useDebugValue;function u(a,h){var b=h(),v=n({inst:{value:b,getSnapshot:h}}),E=v[0].inst,O=v[1];return s(function(){E.value=b,E.getSnapshot=h,l(E)&&O({inst:E})},[a,b,h]),o(function(){return l(E)&&O({inst:E}),a(function(){l(E)&&O({inst:E})})},[a]),c(b),b}function l(a){var h=a.getSnapshot;a=a.value;try{var b=h();return!r(a,b)}catch{return!0}}function p(a,h){return h()}var f=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?p:u;return Ge.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:f,Ge}var Je={};/**
|
|
36
36
|
* @license React
|
|
37
37
|
* use-sync-external-store-shim.development.js
|
|
38
38
|
*
|
|
@@ -40,7 +40,7 @@ Check the top-level render call using <`+O+">.")}return _}}function nr(i,_){{if(
|
|
|
40
40
|
*
|
|
41
41
|
* This source code is licensed under the MIT license found in the
|
|
42
42
|
* LICENSE file in the root directory of this source tree.
|
|
43
|
-
*/var
|
|
43
|
+
*/var bt;function Sr(){return bt||(bt=1,process.env.NODE_ENV!=="production"&&function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var e=d,t=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function r(x){{for(var m=arguments.length,C=new Array(m>1?m-1:0),g=1;g<m;g++)C[g-1]=arguments[g];n("error",x,C)}}function n(x,m,C){{var g=t.ReactDebugCurrentFrame,S=g.getStackAddendum();S!==""&&(m+="%s",C=C.concat([S]));var T=C.map(function(P){return String(P)});T.unshift("Warning: "+m),Function.prototype.apply.call(console[x],console,T)}}function o(x,m){return x===m&&(x!==0||1/x===1/m)||x!==x&&m!==m}var s=typeof Object.is=="function"?Object.is:o,c=e.useState,u=e.useEffect,l=e.useLayoutEffect,p=e.useDebugValue,f=!1,a=!1;function h(x,m,C){f||e.startTransition!==void 0&&(f=!0,r("You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."));var g=m();if(!a){var S=m();s(g,S)||(r("The result of getSnapshot should be cached to avoid an infinite loop"),a=!0)}var T=c({inst:{value:g,getSnapshot:m}}),P=T[0].inst,D=T[1];return l(function(){P.value=g,P.getSnapshot=m,b(P)&&D({inst:P})},[x,g,m]),u(function(){b(P)&&D({inst:P});var j=function(){b(P)&&D({inst:P})};return x(j)},[x]),p(g),g}function b(x){var m=x.getSnapshot,C=x.value;try{var g=m();return!s(C,g)}catch{return!0}}function v(x,m,C){return m()}var E=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",O=!E,y=O?v:h,w=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:y;Je.useSyncExternalStore=w,typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)}()),Je}var _t;function Et(){return _t||(_t=1,function(e){process.env.NODE_ENV==="production"?e.exports=yr():e.exports=Sr()}(vr)),Re}/**
|
|
44
44
|
* @license React
|
|
45
45
|
* use-sync-external-store-shim/with-selector.production.min.js
|
|
46
46
|
*
|
|
@@ -48,7 +48,7 @@ Check the top-level render call using <`+O+">.")}return _}}function nr(i,_){{if(
|
|
|
48
48
|
*
|
|
49
49
|
* This source code is licensed under the MIT license found in the
|
|
50
50
|
* LICENSE file in the root directory of this source tree.
|
|
51
|
-
*/var
|
|
51
|
+
*/var Ct;function br(){if(Ct)return qe;Ct=1;var e=d,t=Et();function r(p,f){return p===f&&(p!==0||1/p===1/f)||p!==p&&f!==f}var n=typeof Object.is=="function"?Object.is:r,o=t.useSyncExternalStore,s=e.useRef,c=e.useEffect,u=e.useMemo,l=e.useDebugValue;return qe.useSyncExternalStoreWithSelector=function(p,f,a,h,b){var v=s(null);if(v.current===null){var E={hasValue:!1,value:null};v.current=E}else E=v.current;v=u(function(){function y(g){if(!w){if(w=!0,x=g,g=h(g),b!==void 0&&E.hasValue){var S=E.value;if(b(S,g))return m=S}return m=g}if(S=m,n(x,g))return S;var T=h(g);return b!==void 0&&b(S,T)?S:(x=g,m=T)}var w=!1,x,m,C=a===void 0?null:a;return[function(){return y(f())},C===null?void 0:function(){return y(C())}]},[f,a,h,b]);var O=o(p,v[0],v[1]);return c(function(){E.hasValue=!0,E.value=O},[O]),l(O),O},qe}var Ze={};/**
|
|
52
52
|
* @license React
|
|
53
53
|
* use-sync-external-store-shim/with-selector.development.js
|
|
54
54
|
*
|
|
@@ -56,7 +56,7 @@ Check the top-level render call using <`+O+">.")}return _}}function nr(i,_){{if(
|
|
|
56
56
|
*
|
|
57
57
|
* This source code is licensed under the MIT license found in the
|
|
58
58
|
* LICENSE file in the root directory of this source tree.
|
|
59
|
-
*/var Ct;function br(){return Ct||(Ct=1,process.env.NODE_ENV!=="production"&&function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var e=d,t=bt();function r(f,a){return f===a&&(f!==0||1/f===1/a)||f!==f&&a!==a}var n=typeof Object.is=="function"?Object.is:r,o=t.useSyncExternalStore,s=e.useRef,c=e.useEffect,u=e.useMemo,l=e.useDebugValue;function m(f,a,h,S,v){var b=s(null),I;b.current===null?(I={hasValue:!1,value:null},b.current=I):I=b.current;var E=u(function(){var C=!1,g,y,k=function(A){if(!C){C=!0,g=A;var B=S(A);if(v!==void 0&&I.hasValue){var V=I.value;if(v(V,B))return y=V,V}return y=B,B}var T=g,$=y;if(n(T,A))return $;var L=S(A);return v!==void 0&&v($,L)?$:(g=A,y=L,L)},M=h===void 0?null:h,j=function(){return k(a())},D=M===null?void 0:function(){return k(M())};return[j,D]},[a,h,S,v]),w=E[0],x=E[1],p=o(f,w,x);return c(function(){I.hasValue=!0,I.value=p},[p]),l(p),p}Ze.useSyncExternalStoreWithSelector=m,typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)}()),Ze}(function(e){process.env.NODE_ENV==="production"?e.exports=_r():e.exports=br()})(hr);const Er=me(He),{useSyncExternalStoreWithSelector:Cr}=Er;function $e(e,t=e.getState,r){const n=Cr(e.subscribe,e.getState,e.getServerState||e.getState,t,r);return d.useDebugValue(n),n}const ve=(e,t)=>e.classList&&e.classList.contains(t),Oe=(e,t)=>ve(e,t)?e:e.parentNode?Oe(e.parentNode,t):!1,Ae=([e,t],[r,n])=>{const o=Math.abs(e-r),s=Math.abs(t-n);return Math.hypot(o,s)},wt=(e,t,r)=>{const n=r*Math.PI/180,o=e*Math.cos(n)-t*Math.sin(n),s=e*Math.sin(n)+t*Math.cos(n);return[o,s]},Qe=([e,t],{scale:r,rotate:n,translateX:o,translateY:s})=>{const c=(e-o)/r,u=(t-s)/r;return wt(c,u,-n)},Le=([e,t],{scale:r,rotate:n,translateX:o,translateY:s})=>{const[c,u]=wt(e,t,n);return[c*r+o,u*r+s]},xt=(e,t,r,n)=>{const o=e.x,s=e.y,c=t.x,u=t.y,l=r.x,m=r.y,f=c-o,a=u-s,h=o-l,S=s-m,v=f*f+a*a,b=2*(h*f+S*a),I=h*h+S*S-n*n,E=b*b-4*v*I;if(E<0)return[];const w=(-b+Math.sqrt(E))/(2*v),x=(-b-Math.sqrt(E))/(2*v),p=[];return w>=0&&w<=1&&p.push({x:o+w*f,y:s+w*a}),x>=0&&x<=1&&p.push({x:o+x*f,y:s+x*a}),p},et=(e,t)=>e.x>t.left&&e.x<t.left+t.width&&e.y>t.top&&e.y<t.top+t.height,wr=(e,t)=>Array.from(e.querySelectorAll(".corner")).every(n=>{const{top:o,left:s}=n.getBoundingClientRect();return et({x:s,y:o},t)}),xr=(e,t)=>{const r=t.getBoundingClientRect();return wr(e,r)},ze=(e,t)=>{const n=e.getElementsByClassName(`item ${t}`)[0];return n||console.error(`Missing item ${t}`),n},Te=e=>{var r,n;const t=(r=e==null?void 0:e.dataset)==null?void 0:r.id;return t||console.error("getIdFromElem call fails",e,JSON.stringify(e==null?void 0:e.dataset),(n=e==null?void 0:e.dataset)==null?void 0:n.id),t},Ir=(e,t=document)=>{const r=e.reduce((n,o)=>{const s=ze(t,o);if(!s)return n||null;const{left:c,right:u,top:l,bottom:m}=s.getBoundingClientRect();let f;return n?f=n:f={left:c,top:l,right:u,bottom:m},f.left=Math.min(c,f.left),f.top=Math.min(l,f.top),f.right=Math.max(u,f.right),f.bottom=Math.max(m,f.bottom),f},null);return r&&(r.width=r.right-r.left,r.height=r.bottom-r.top,r)},Or=({x:e,y:t,width:r,height:n},{type:o="grid",size:s=1,offset:c={x:0,y:0}})=>{const[u,l]=[e+r/2-c.x,t+n/2-c.y];let m,f,a,h,S,v,b,I,E,w;const x=s/1.1547;switch(o){case"grid":m=Math.round(u/s)*s,f=Math.round(l/s)*s;break;case"hexH":a=2*x,h=3*s,S=Math.round(u/a)*a,b=Math.round(l/h)*h,v=S>u?S-x:S+x,I=b>l?b-1.5*s:b+1.5*s,E=Math.hypot(S-u,b-l),w=Math.hypot(v-u,I-l),E<w?(m=S,f=b):(m=v,f=I);break;case"hexV":a=3*s,h=2*x,S=Math.round(u/a)*a,b=Math.round(l/h)*h,v=S>u?S-1.5*s:S+1.5*s,I=b>l?b-x:b+x,E=Math.hypot(S-u,b-l),w=Math.hypot(v-u,I-l),E<w?(m=S,f=b):(m=v,f=I);break;default:m=e+r/2,f=t+n/2}return{x:m+c.x-r/2,y:f+c.y-n/2}},It=["#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"],Ot=()=>It[Math.floor(Math.random()*It.length)],Tr=!1,tt=({wire:e,storeName:t,noSync:r=[],defaultValue:n},o)=>(s,c,u)=>{s({ready:!1});const l=[];(async()=>{try{const S=await e.call(`${t}_getValue`);Tr&&console.log("init from peer with value",S),s(v=>({...v,...S}))}catch{n!==void 0&&s(n)}l.push(await e.register(`${t}_getValue`,()=>Object.fromEntries(Object.entries(c()).filter(([S,v])=>typeof v!="function"&&!r.includes(S))),{invoke:"first"})),l.push(e.subscribe(`${t}_call`,([S,v])=>{a[S](...v)})),s({ready:!0})})();const f=o(s,c,u),a={...f},h=Object.fromEntries(Object.entries(f).map(([S,v])=>typeof v=="function"&&!S.startsWith("get")&&!r.includes(S)?[S,(...I)=>{const E=v(...I);return e.publish(`${t}_call`,[S,I]),E}]:[S,v]));return h.unsub=()=>{l.forEach(S=>S())},h};function Ye(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[n,o]of e)if(!Object.is(o,t.get(n)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const n of e)if(!t.has(n))return!1;return!0}const r=Object.keys(e);if(r.length!==Object.keys(t).length)return!1;for(let n=0;n<r.length;n++)if(!Object.prototype.hasOwnProperty.call(t,r[n])||!Object.is(e[r[n]],t[r[n]]))return!1;return!0}const Tt=d.createContext(),kr=(e,t)=>({items:{},getItems:()=>t().items,setItems:r=>e({items:r}),updateItems:r=>e(n=>({items:{...n.items,...r}})),moveItems:(r,n)=>e(({items:o})=>{const s={...o};return r.forEach(c=>{const u=o[c];u&&(s[c]={...u,x:(u.x||0)+n.x,y:(u.y||0)+n.y,moving:!0})}),{items:s}})}),Pr=(e,t)=>({itemIds:[],setItemIds:r=>e({itemIds:r}),getItemIds:()=>t().itemIds,insert:(r,n)=>e(o=>{const s=[...o.itemIds];return s.splice(r,0,n),{itemIds:s}}),remove:r=>e(n=>{const o=[...n.itemIds];return o.splice(r,1),{itemIds:o}}),updateItemIds:(r,n)=>e(o=>{const s=[...o.itemIds];return s[r]=n,{items:s}}),updateManyItemIds:r=>e(n=>({items:n.itemIds.map((o,s)=>r[s]!==void 0?r[s]:o)}))}),Mr=(e,t)=>({removeItemsById:r=>e(n=>({itemIds:n.itemIds.filter(o=>!r.includes(o)),items:Object.fromEntries(Object.entries(n.items).filter(([o])=>!r.includes(o)))})),getItemList:()=>{const r=t().items;return t().itemIds.map(n=>r[n])},setItemList:r=>e({items:Object.fromEntries(r.map(n=>[n.id,n])),itemIds:r.map(({id:n})=>n)}),insertItems:(r,n)=>e(o=>{let s;const c=r.map(({id:u})=>u);if(n){const u=o.itemIds.findIndex(l=>l===n);s=[...o.itemIds],s.splice(u,0,...c)}else s=[...o.itemIds,...c];return{items:{...o.items,...Object.fromEntries(r.map(u=>[u.id,u]))},itemIds:s}})}),Dr=(e,t)=>({boardConfig:{},getBoardConfig:()=>t().boardConfig,setBoardConfig:r=>e({boardConfig:r}),updateBoardConfig:r=>e(n=>({boardConfig:{...n.boardConfig,...r}}))}),jr=(e,t)=>({session:{},getSessionInfo:()=>t().session,setSessionInfo:r=>e({session:r}),updateSessionInfo:r=>e(n=>({session:{...n.session,...r}}))}),kt=({storeName:e,children:t,defaultValue:r})=>{const{wire:n}=Ie("room"),[o,s]=d.useState(!1),[c]=d.useState(()=>je(tt({wire:n,storeName:e,defaultValue:r},(...u)=>({...kr(...u),...Pr(...u),...Mr(...u),...Dr(...u),...jr(...u)}))));return d.useEffect(()=>{const u=c.subscribe(l=>{l.ready&&(u(),s(!0))})},[c]),o?P(Tt.Provider,{value:c,children:t}):null},ie=(e,t)=>{const r=d.useContext(Tt);return $e(r,e,t||Ye)},Rr=()=>{const[e,t]=ie(n=>[n.itemIds,n.items]);return d.useMemo(()=>e.map(n=>t[n]),[e,t])},$r=()=>{const[e,t,r]=ie(c=>[c.items,c.itemIds,c.getItemList]),[n,o]=d.useState(r()),[,s]=d.useTransition();return d.useEffect(()=>{const c=r();s(()=>{o(c)})},[e,t,r]),n},Pt=5e4,Mt=d.createContext(),Ar=(e,t)=>({config:{itemTemplates:{},actions:{},uid:null,itemExtent:{x:0,y:0,radius:0},boardWrapperRect:{},boardSize:Pt},updateConfiguration:r=>e(n=>({config:{...n.config,...r}})),getConfiguration:()=>t().config}),Lr=(e,t)=>({boardState:{movingItems:!1,selecting:!1,zooming:!1,panning:!1,translateX:0,translateY:0,scale:1,rotate:0},updateBoardState:r=>e(n=>({boardState:{...n.boardState,...r}})),getBoardState:()=>t().boardState}),zr=(e,t)=>({interactions:{},getInteractions:()=>t().interactions,register:(r,n)=>e(o=>{const s=[...o.interactions[r]||[]];return s.push(n),{interactions:{...o.interaction,[r]:s}}}),unregister:(r,n)=>e(o=>{const s=(o.interactions[r]||[]).filter(c=>c!==n);return{interactions:{...o.interaction,[r]:s}}}),callInteractions:(r,n)=>{t().interactions[r]&&t().interactions[r].forEach(o=>{o(n)})}}),Yr=(e,t)=>({selection:[],setSelection:r=>e(n=>JSON.stringify(n.selection)!==JSON.stringify(r)?{selection:r}:{}),getSelection:()=>t().selection,select:r=>e(n=>({selection:[...n.selection,...r]})),unselect:r=>e(n=>({selection:n.selection.filter(o=>!r.includes(o))})),clear:()=>e(r=>r.selection.length>0?{selection:[]}:{}),reverse:()=>e(r=>{const n=[...r.selection];return n.reverse(),{selection:n}}),selectionBox:null,setSelectionBox:r=>e(n=>{const o=n.selectionBox;return!o||!r||o.top!==r.top||o.left!==r.left||o.width!==r.width||o.height!==r.height?{selectionBox:r}:{}})}),Dt=({children:e})=>{const[t]=d.useState(()=>je((...r)=>({...Ar(...r),...Lr(...r),...zr(...r),...Yr(...r)})));return P(Mt.Provider,{value:t,children:e})},Z=(e,t)=>{const r=d.useContext(Mt);return $e(r,e,t||Ye)},Br=()=>{const[e]=Z(t=>[t.selection]);return e};function rt(e){const t=d.useRef(e);return t.current=e,d.useMemo(()=>Object.freeze({get current(){return t.current}}),[])}function Nr(e){const t=rt(e);d.useEffect(()=>()=>{t.current()},[])}function nt(e,t,r,n=0){const o=d.useRef(),s=d.useRef(),c=d.useRef(),u=()=>{o.current&&(clearTimeout(o.current),o.current=void 0),s.current&&(clearTimeout(s.current),s.current=void 0)};return Nr(u),d.useMemo(()=>{const l=()=>{if(!c.current)return;const f=c.current;c.current=void 0,e.apply(f.this,f.args),u()},m=function(...f){o.current&&clearTimeout(o.current),c.current={args:f,this:this},o.current=setTimeout(l,r),n>0&&!s.current&&(s.current=setTimeout(l,n))};return Object.defineProperties(m,{length:{value:e.length},name:{value:`${e.name||"anonymous"}__debounced__${r}`}}),m},[r,n,...t])}const Xr=100,Ur=1e3,Wr=.8,Vr=({x:e,y:t,scale:r,rotate:n,itemExtent:o,boardWrapperRect:s,boardSize:c})=>{let[u,l]=[e,t];const m=Qe([s.width/2,s.height/2],{translateX:u,translateY:l,scale:r,rotate:n}),f={x:o.x+c/2,y:o.y+c/2},a={x:c/2,y:c/2},h=Ae(m,[f.x,f.y]),S=Math.min(s.width,s.height),v=o.radius+S/2/r-Xr/r;if(h>v){const E=xt({x:m[0],y:m[1]},f,f,v-1/r)[0],[w,x]=Le([-E.x,-E.y],{translateX:s.width/2,translateY:s.height/2,scale:r,rotate:n});u=w,l=x}const b=Ae(m,[a.x,a.y]),I=c/2-Ae([0,0],[s.width,s.height])/r;if(b>I){const E=xt({x:m[0],y:m[1]},a,a,I-1/r)[0];if(E){const[w,x]=Le([-E.x,-E.y],{translateX:s.width/2,translateY:s.height/2,scale:r,rotate:n});u=w,l=x}}return[u,l]},ye=()=>{const[e,t,r,n,o]=Z(p=>[p.getBoardState,p.updateBoardState,p.config.itemExtent,p.getConfiguration,p.updateConfiguration]),s=d.useRef([.15,5]),[c]=ie(p=>[p.getItemList]),u=d.useCallback(()=>{const{translateX:p,translateY:C,scale:g,rotate:y}=e();return{translateX:p,translateY:C,scale:g,rotate:y}},[e]),l=d.useCallback((p,C)=>Qe([p,C],e()),[e]),m=d.useCallback((p,C)=>Le([p,C],e()),[e]),f=d.useCallback((p,C)=>{const{scale:g,rotate:y}=e();return Qe([p,C],{translateX:0,translateY:0,rotate:y,scale:g})},[e]),a=d.useCallback(p=>p>s.current[1]?s.current[1]:p<s.current[0]?s.current[0]:p,[]),h=d.useCallback(p=>{const{itemExtent:C,boardWrapperRect:g,boardSize:y}=n(),k=e(),{translateX:M,translateY:j,scale:D,rotate:A}={...k,...p(k)},B=a(D);let[V,T]=[M,j];(M!==k.translateX||j!==k.translateY)&&([V,T]=Vr({x:M,y:j,scale:B,rotate:A,itemExtent:C,boardWrapperRect:g,boardSize:y})),t({translateX:V,translateY:T,scale:B,rotate:A})},[a,e,n,t]),S=d.useCallback(p=>{let C=g=>({...g,...p});typeof p=="function"&&(C=p),h(g=>({...g,...C({translateX:g.translateX,translateY:g.translateY})}))},[h]),v=d.useCallback(({to:p,factor:C})=>{const{boardWrapperRect:g}=n();let y=p;y||(y={x:g.left+g.width/2,y:g.top+g.height/2});const k=e(),M=a(k.scale*C),j=y.x-g.left,D=y.y-g.top,A=j-(j-k.translateX)*M/k.scale,B=D-(D-k.translateY)*M/k.scale;h(V=>({...V,translateX:A,translateY:B,scale:M}))},[a,e,n,h]),b=d.useCallback(({x:p,y:C,radius:g})=>{const{rotate:y}=e(),{boardWrapperRect:k,boardSize:M}=n(),j=k.width/(g*2),D=k.height/(g*2),A=a(Math.min(j,D)*Wr),[B,V]=Le([-M/2-p,-M/2-C],{translateX:k.width/2,translateY:k.height/2,scale:A,rotate:y});h(T=>({...T,translateX:B,translateY:V,scale:A}))},[a,e,n,h]),I=d.useCallback(()=>{const{boardWrapperRect:p,boardSize:C}=n(),[g,y]=l(p.width/2,p.height/2);return{x:g-C/2,y:y-C/2}},[l,n]),E=d.useCallback(()=>{const p=c(),{boardWrapper:C,boardSize:g}=n(),y=p.reduce((M,j)=>{const D=ze(C,j.id);return M.left=Math.min(j.x,M.left),M.top=Math.min(j.y,M.top),M.right=Math.max(j.x+D.offsetWidth,M.right),M.bottom=Math.max(j.y+D.offsetHeight,M.bottom),M},{left:g/2,top:g/2,right:-g/2,bottom:-g/2}),k={x:(y.right+y.left)/2,y:(y.bottom+y.top)/2};k.radius=Math.max(Ae([k.x,k.y],[y.left,y.top]),Ur),o({itemExtent:k})},[n,c,o]),w=d.useCallback(p=>{let C=()=>p;typeof p=="function"&&(C=p),h(g=>({...g,rotate:C(g.rotate)})),E(),b(r)},[r,h,E,b]),x=nt(()=>E(),[E],200);return{setDim:h,rotateBoard:w,moveBoard:S,getDim:u,zoomTo:v,zoomToCenter:v,zoomToExtent:b,getCenter:I,updateItemExtent:x,vectorFromWrapperToBoard:f,fromWrapperToBoard:l,fromBoardToWrapper:m}},jt=e=>{const[t,r,n]=Z(({register:c,unregister:u,callInteractions:l})=>[c,u,l]),o=d.useCallback(c=>(t(e,c),()=>{r(e,c)}),[e,t,r]),s=d.useCallback(c=>{n(e,c)},[n,e]);return{register:o,call:s}},Be=()=>{const{call:e}=jt("place"),{getCenter:t,updateItemExtent:r}=ye(),[n,o,s,c]=Z(T=>[T.clear,T.reverse,T.unselect,T.getConfiguration]),{getItems:u,getItemIds:l,setItemIds:m,updateItems:f,moveItems:a,removeItemsById:h,getItemList:S,insertItems:v,setItemList:b}=ie(({getItems:T,getItemIds:$,setItemIds:L,updateItems:W,moveItems:N,removeItemsById:K,getItemList:Q,insertItems:re,setItemList:ne})=>({getItems:T,getItemIds:$,setItemIds:L,updateItems:W,moveItems:N,removeItemsById:K,getItemList:Q,insertItems:re,setItemList:ne})),I=d.useCallback((T,$)=>{let L=$;typeof $=="object"&&(L=()=>$);const W=l().filter(Q=>T.includes(Q)),N=u(),K=Object.fromEntries(W.map(Q=>[Q,L({...N[Q]})]));f(K),r()},[l,u,r,f]),E=d.useCallback(T=>{b(T),n(),r()},[n,b,r]),w=d.useCallback((T,$)=>{I([T],$)},[I]),x=d.useCallback((T,$)=>{a(T,$),r()},[a,r]),p=d.useCallback(T=>{const $=l(),L=$.filter(N=>!T.includes(N)),W=$.filter(N=>T.includes(N));m([...L,...W])},[l,m]),C=d.useCallback((T,{type:$,size:L}={})=>{const{boardWrapper:W}=c(),N={},K=u();T.forEach(Q=>{const re=K[Q],ne=ze(W,Q);if(!ne)return;const oe={type:$||"grid",size:L||1,offset:{x:0,y:0},...re.grid},H=Or({x:re.x,y:re.y,width:ne.clientWidth,height:ne.clientHeight},oe);N[Q]={...re,...H}}),f(N)},[c,u,f]),g=d.useCallback((T,$)=>{p(T),I(T,L=>{const W={...L};return delete W.moving,W}),C(T,$),e(T),r()},[I,e,p,C,r]),y=d.useCallback(T=>{m(T)},[m]),k=d.useCallback(T=>{const $=l(),L=$.filter(N=>T.includes(N)),W=$.map(N=>T.includes(N)?L.pop():N);m(W),o()},[l,o,m]),M=d.useCallback((T,$)=>{const L=u(),W=T.map(H=>L[H]),N=$.map(H=>L[H]),K=$.reduce((H,te)=>(H[te]=W.shift(),H),{}),Q=N.reduce((H,te)=>{const pe=K[te.id],_e={...te,x:pe.x,y:pe.y};return H[te.id]=_e,H},{});f(Q);const re=T.reduce((H,te)=>(H[te]=$.shift(),H),{}),oe=l().map(H=>T.includes(H)?re[H]:H);m(oe)},[u,f,l,m]),j=d.useCallback((T,$)=>{const L=t(),W=T.map((N,K)=>!N.x||!N.y?{...N,x:L.x+2*K,y:L.y+2*K}:N);v(W,$),r()},[t,v,r]),D=d.useCallback((T,$)=>{j([T],$)},[j]),A=d.useCallback(T=>{s(T),h(T)},[s,h]),B=d.useCallback(T=>{const $=u();return T.map(L=>$[L])},[u]),V=d.useCallback(({target:T,clientX:$,clientY:L},{returnLocked:W=!1,passLocked:N=!1}={})=>{if(["INPUT","TEXTAREA"].includes(T.tagName))return null;const K=Oe(T,"item");if(K){if(ve(K,"selected"))return K;if(!N&&ve(K,"locked")&&!ve(T,"passthrough"))return W?K:null;if(ve(T,"passthrough")){const Q=l(),{boardWrapper:re}=c(),ne=Q.reduce((oe,H)=>{const te=ze(re,H),pe=te.getBoundingClientRect();return et({x:$,y:L},pe)&&oe.unshift(te),oe},[]);for(let oe=0;oe<ne.length;oe+=1){const H=ne[oe];if(H!==K&&(N||!ve(H,"locked")))return H}return null}}return K},[c,l]);return{putItemsOnTop:p,batchUpdateItems:I,updateItemOrder:y,moveItems:x,placeItems:g,updateItem:w,swapItems:M,reverseItemsOrder:k,setItemList:E,pushItem:D,pushItems:j,removeItems:A,getItemList:S,findElementUnderPointer:V,getItems:B}};var Fr=function e(t,r){if(t===r)return!0;if(t&&r&&typeof t=="object"&&typeof r=="object"){if(t.constructor!==r.constructor)return!1;var n,o,s;if(Array.isArray(t)){if(n=t.length,n!=r.length)return!1;for(o=n;o--!==0;)if(!e(t[o],r[o]))return!1;return!0}if(t instanceof Map&&r instanceof Map){if(t.size!==r.size)return!1;for(o of t.entries())if(!r.has(o[0]))return!1;for(o of t.entries())if(!e(o[1],r.get(o[0])))return!1;return!0}if(t instanceof Set&&r instanceof Set){if(t.size!==r.size)return!1;for(o of t.entries())if(!r.has(o[0]))return!1;return!0}if(ArrayBuffer.isView(t)&&ArrayBuffer.isView(r)){if(n=t.length,n!=r.length)return!1;for(o=n;o--!==0;)if(t[o]!==r[o])return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if(s=Object.keys(t),n=s.length,n!==Object.keys(r).length)return!1;for(o=n;o--!==0;)if(!Object.prototype.hasOwnProperty.call(r,s[o]))return!1;for(o=n;o--!==0;){var c=s[o];if(!e(t[c],r[c]))return!1}return!0}return t!==t&&r!==r};function Kr(e,t,r,n=0){d.useEffect(nt(e,t,r,n),t)}const Hr=(e,t)=>{if(e.type in t){const r=t[e.type].defaultActions;return typeof r=="function"?r(e):r}return[]},Rt=(e,t)=>{const{actions:r=Hr(e,t)}=e;return r.map(n=>typeof n=="string"?{name:n}:n)},qr=()=>{const[e,t]=ie(a=>[a.items,a.getItems]),[r,n,o]=Z(a=>[a.config.itemTemplates,a.selection,a.getSelection]),[s,c]=d.useState([]),u=d.useRef(!1),[,l]=d.useTransition();d.useEffect(()=>(u.current=!0,()=>{u.current=!1}),[]);const m=d.useCallback(a=>{const h=t();if(a)return[a,a.map(v=>h[v])];const S=o();return[S,S.map(v=>h[v])]},[t,o]),f=d.useCallback(()=>{const[a,h]=m();if(a.length>0){if(!u.current)return;const S=h.reduce((v,b)=>{const I=Rt(b,r);return v.filter(E=>I.some(w=>Fr(E,w)))},Rt(h[0],r));l(()=>{c(S)})}else l(()=>{c([])})},[m,r]);return Kr(()=>f(),[e,n,f],100),{availableActions:s}},Gr=()=>{const[e]=Z(t=>[t.selectionBox]);return e};let ge=(e=21)=>crypto.getRandomValues(new Uint8Array(e)).reduce((t,r)=>(r&=63,r<36?t+=r.toString(36):r<62?t+=(r-26).toString(36).toUpperCase():r>62?t+="-":t+="_",t),"");const $t=d.createContext(),ot=e=>{localStorage.setItem("user",JSON.stringify(e))},Jr=()=>{if(localStorage.user){const t={name:"Player",color:Ot(),uid:ge(),...JSON.parse(localStorage.user)};return ot(t),t}const e={name:"Player",color:Ot(),uid:ge()};return ot(e),e},Zr=e=>(t,r)=>({isSpaceMaster:!1,users:{},getUser:()=>r().users[e],getUsers:()=>r().users,getUserList:()=>Object.values(r().users),getLocalUsers:()=>{if(!r().users[e])return[];const{space:n}=r().users[e];return r().getUserList().filter(({space:o})=>o===n)},addUser:n=>t(o=>({users:{...o.users,[n.id]:n}})),updateUser:(n,o)=>t(s=>{if(!s.users[n])return{};const c={...s.users[n],...o,id:n,uid:s.users[n].uid};return c.id===e&&ot(c),setTimeout(()=>r().electSpaceMaster(),100),{users:{...s.users,[n]:c}}}),removeUser:n=>t(o=>{const s={...o.users};return delete s[n],setTimeout(()=>r().electSpaceMaster(),100),{users:s}}),updateCurrentUser:n=>r().updateUser(e,n),joinSpace:n=>r().updateUser(e,{space:n,spaceJoinedTimestamp:Date.now()}),electSpaceMaster:()=>{const n=r().getLocalUsers(),o={uid:null,timestamp:Date.now()};Object.values(n).forEach(({spaceJoinedTimestamp:s,id:c})=>{s<o.timestamp&&(o.id=c,o.timestamp=s)}),t({isSpaceMaster:o.id===e})}}),Qr=e=>({cursors:{},moveCursor:(t,r)=>e(n=>({cursors:{...n.cursors,[t]:r}})),removeCursor:t=>e(r=>{const n={...r.cursors};return delete n[t],{cursors:n}})}),At=({storeName:e,children:t})=>{const{wire:r,isMaster:n}=Ie("room"),[o,s]=d.useState(null),[c,u]=d.useState(!1),l=d.useRef(!1);return d.useEffect(()=>{let m=!0;const f=[];if(!o&&!l.current)return l.current=!0,(()=>{const h=je(tt({wire:r,storeName:e,noSync:["updateCurrentUser","joinSpace","isSpaceMaster","electSpaceMaster"]},(...v)=>({...Zr(r.userId)(...v),...Qr(...v)}))),S=h.subscribe(v=>{v.ready&&(S(),m&&s(h))})})(),()=>{m=!1,l.current=!1,f.forEach(h=>h())}},[o,e,r,r.userId]),d.useEffect(()=>{if(o)return o.getState().addUser({...Jr(),id:r.userId}),u(!0),()=>{o.getState().removeUser(r.userId)}},[n,o,r]),d.useEffect(()=>{if(o){const m=r.subscribe("userLeave",f=>{o.getState().removeUser(f)});return()=>{m()}}},[n,o,r]),d.useEffect(()=>{n&&o&&o.getState().updateCurrentUser({isMaster:n})},[n,o,r]),c?P($t.Provider,{value:o,children:t}):null},Se=(e,t)=>{const r=d.useContext($t);return $e(r,e,t||Ye)},en=()=>{const[e,t,r,n,o]=Se(u=>[u.isSpaceMaster,u.getUser(),u.users,u.updateCurrentUser,u.joinSpace]),s=d.useMemo(()=>Object.values(r),[r]),c=d.useMemo(()=>{const{space:u}=t;return s.filter(({space:l})=>l===u)},[t,s]);return{isSpaceMaster:e,currentUser:t,updateCurrentUser:n,users:s,localUsers:c,joinSpace:o}},tn=()=>{const[e,t,r]=ie(o=>[o.boardConfig,o.getBoardConfig,o.setBoardConfig]),n=d.useCallback(o=>{let s=o;typeof o=="object"&&(s=()=>o);const c=t(),u=s(c);r(u)},[t,r]);return[e,n]},rn=()=>{const[e]=Z(t=>[t.boardState]);return e},nn=()=>{const[e,t,r,n]=ie(o=>[o.getSessionInfo,o.setSessionInfo,o.updateSessionInfo,o.session]);return{getSessionInfo:e,setSessionInfo:t,sessionInfo:n,updateSessionInfo:r}},Lt=d.createContext(),on=({user:{name:e,uid:t,color:r},content:n})=>({type:"message",user:{name:e,uid:t,color:r},content:n,uid:ge(),timestamp:new Date().toISOString()}),sn=(e,t)=>({messages:[],setMessages:r=>e({messages:r.map(n=>({...n,timestamp:Date.parse(n.timestamp)}))}),addMessage:r=>e(n=>({messages:[...n.messages,{...r,timestamp:Date.parse(r.timestamp)}]})),sendMessage:(r,n)=>{const o=on({user:r,content:n});o&&t().addMessage(o)}}),zt=({storeName:e,children:t,defaultValue:r=[]})=>{const{wire:n}=Ie("room"),[o]=d.useState(()=>je(tt({wire:n,storeName:e,defaultValue:r,noSync:["sendMessage"]},(...s)=>({...sn(...s)}))));return P(Lt.Provider,{value:o,children:t})},an=(e,t)=>{const r=d.useContext(Lt);return $e(r,e,t||Ye)},cn=()=>{},un=(e=cn)=>{const t=Se(c=>c.getUser()),[r,n,o]=an(c=>[c.messages,c.setMessages,c.sendMessage]);d.useEffect(()=>{r.length&&e()},[r,e]);const s=d.useCallback(c=>{o(t,c)},[t,o]);return{messages:r,setMessages:n,sendMessage:s}},Yt=({children:e,session:t})=>{const r=Se(n=>n.joinSpace);return d.useEffect(()=>(r(t),()=>{r(null)}),[r,t]),e},ln=({socket:e,room:t,session:r,items:n=[],messages:o=[],LoadingComponent:s,...c})=>{const[u]=d.useState(t||ge()),[l]=d.useState(r||ge()),[m]=d.useState(()=>({itemIds:n.map(({id:a})=>a),items:Object.fromEntries(n.map(a=>[a.id,a]))}));return Ie("room")?P(zt,{storeName:`${l}_messages`,defaultValue:o,children:P(Dt,{children:P(kt,{storeName:`${l}_item`,defaultValue:m,children:P(Yt,{...c,session:l})})})}):P(ht,{room:u,channel:"room",socket:e,LoadingComponent:s,children:P(At,{storeName:`${u}_users`,children:P(zt,{storeName:`${l}_messages`,defaultValue:o,children:P(Dt,{children:P(kt,{storeName:`${l}_item`,defaultValue:m,children:P(Yt,{...c,session:l})})})})})})},fn=({socket:e,room:t,children:r,LoadingComponent:n})=>{const[o]=d.useState(t||ge());return P(ht,{room:o,channel:"room",socket:e,LoadingComponent:n,children:P(At,{storeName:`${o}_users`,children:r})})},st=()=>{const e=navigator.userAgent.toLowerCase();return/mac os ?x 10/.test(e)},dn=(()=>{const e=document.createElement("iframe");e.src="#",document.body.appendChild(e);const t=e.contentWindow.document;t.open(),t.write("<!DOCTYPE html><html><head></head><body><span>a</span></body></html>"),t.close();const r=t.body.firstElementChild.offsetHeight;return document.body.removeChild(e),r})(),pn=800,Bt=(e,t)=>{const r=Object.keys(e).map(n=>Number(n)).find(n=>n!==t);return e[r]},Nt=([e,t],[r,n])=>{const o=Math.abs(e-r),s=Math.abs(t-n);return Math.hypot(o,s)},he=()=>{},mn=e=>t=>{const{event:r}=t;return r.isPropagationStopped()?null:e(t)},gn=e=>async(...t)=>{try{await e(...t)}catch(r){console.error(r)}};class hn{constructor(){ar(this,"lastPromise",Promise.resolve(!0))}add(t,...r){return new Promise((n,o)=>{this.lastPromise=this.lastPromise.then(()=>mn(gn(t))(...r)).then(n).catch(o)})}}const ae=new hn,Ne=({children:e,onDrag:t=he,onDragStart:r=he,onDragEnd:n=he,onPan:o=he,onTap:s=he,onLongTap:c=he,onDoubleTap:u=he,onZoom:l,mainAction:m="drag"})=>{const f=d.useRef(null),a=d.useRef({moving:!1,pointers:{},mainPointer:void 0}),h=E=>{const{deltaX:w,deltaY:x,clientX:p,clientY:C,deltaMode:g,ctrlKey:y,altKey:k,metaKey:M,target:j}=E;if(!(k||y&&!st()))if(st()&&!y)ae.add(o,{deltaX:-2*w,deltaY:-2*x,button:1,ctrlKey:y,metaKey:M,target:j,event:E});else{if(l===void 0||!x)return;let D=x;switch(g){case 1:D*=dn;break;case 2:D*=pn;break}st()&&(D*=2),ae.add(l,{scale:D,clientX:p,clientY:C,event:E})}},S=E=>{const{target:w,button:x,clientX:p,clientY:C,pointerId:g,altKey:y,ctrlKey:k,metaKey:M,isPrimary:j}=E;if(a.current.pointers[g]={clientX:p,clientY:C},j&&(a.current.mainPointer=void 0),a.current.mainPointer!==void 0){if(a.current.mainPointer!==g)try{const{clientX:D,clientY:A}=Bt(a.current.pointers,g),B=(D+p)/2,V=(A+C)/2,T=Nt([D,A],[p,C]);Object.assign(a.current,{pressed:!0,moving:!1,gestureStart:!1,startX:p,startY:C,prevX:B,prevY:V,startDistance:T,prevDistance:T})}catch(D){console.log("Error while getting other pointer. Ignoring",D),a.current.mainPointer}return}a.current.mainPointer=g,Object.assign(a.current,{pressed:!0,moving:!1,gestureStart:!1,startX:p,startY:C,prevX:p,prevY:C,currentButton:x,pointerDownEvent:E,startDistance:0,prevDistance:0,target:w,timeStart:Date.now(),longTapTimeout:setTimeout(async()=>{a.current.noTap=!0,ae.add(c,{clientX:p,clientY:C,altKey:y,ctrlKey:k,metaKey:M,target:w,event:E})},750)});try{w.setPointerCapture(g)}catch(D){console.log("Fail to capture pointer",D)}},v=E=>{if(a.current.pressed){const{pointerId:w,clientX:x,clientY:p,altKey:C,shiftKey:g,ctrlKey:y,metaKey:k,buttons:M}=E;a.current.pointers[w]={clientX:x,clientY:p},a.current.moving=!0;const j=Object.keys(a.current.pointers).length===2;let D,A,B=0;if(j){const{clientX:L,clientY:W}=Bt(a.current.pointers,w);D=(L+x)/2,A=(W+p)/2,B=Nt([L,W],[x,p])}else D=x,A=p;let V=g||C||y||k||M!==1;m!=="drag"&&(V=!V);const T=!V,$=V;if(T){a.current.gestureStart||(f.current.style.cursor="move",a.current.gestureStart=!0,clearTimeout(a.current.longTapTimeout),ae.add(r,{deltaX:0,deltaY:0,startX:a.current.startX,startY:a.current.startY,clientX:a.current.startX,clientY:a.current.startY,distanceX:0,distanceY:0,button:a.current.currentButton,altKey:C,shiftKey:g,ctrlKey:y,metaKey:k,target:a.current.target,event:a.current.pointerDownEvent}));const L=D-a.current.prevX,W=A-a.current.prevY,N=D-a.current.startX,K=A-a.current.startY;ae.add(t,{deltaX:L,deltaY:W,startX:a.current.startX,startY:a.current.startY,clientX:D,clientY:A,distanceX:N,distanceY:K,button:a.current.currentButton,altKey:C,shiftKey:g,ctrlKey:y,metaKey:k,target:a.current.target,event:E})}if($){a.current.gestureStart||(f.current.style.cursor="move",a.current.gestureStart=!0,clearTimeout(a.current.longTapTimeout));const L=D-a.current.prevX,W=A-a.current.prevY,{target:N}=a.current;if(ae.add(o,{deltaX:L,deltaY:W,button:a.current.currentButton,altKey:C,shiftKey:g,ctrlKey:y,metaKey:k,target:N,event:E}),B!==a.current.prevDistance&&l){const K=a.current.prevDistance-B;Math.abs(K)>0&&(ae.add(l,{scale:K*3,clientX:D,clientY:A,event:E}),a.current.prevDistance=B)}}a.current.prevX=D,a.current.prevY=A}},b=E=>{const{clientX:w,clientY:x,altKey:p,shiftKey:C,ctrlKey:g,metaKey:y,target:k,pointerId:M}=E;if(a.current.pointers[M]){if(delete a.current.pointers[M],a.current.mainPointer!==M){const{clientX:j,clientY:D}=a.current.pointers[a.current.mainPointer];Object.assign(a.current,{prevX:j,prevY:D,prevDistance:0,startDistance:0});return}for(;Object.keys(a.current.pointers).length>0;){a.current.mainPointer=Number(Object.keys(a.current.pointers)[0]);try{a.current.target.setPointerCapture(a.current.mainPointer);const{clientX:j,clientY:D}=a.current.pointers[a.current.mainPointer];Object.assign(a.current,{prevX:j,prevY:D,prevDistance:0,startDistance:0});return}catch(j){console.log("Fails to set pointer capture",j),a.current.mainPointer=void 0,delete a.current.pointers[Object.keys(a.current.pointers)[0]]}}if(a.current.mainPointer=void 0,a.current.pressed=!1,clearTimeout(a.current.longTapTimeout),a.current.moving)a.current.moving=!1,ae.add(n,{deltaX:w-a.current.prevX,deltaY:x-a.current.prevY,startX:a.current.startX,startY:a.current.startY,clientX:w,clientY:x,distanceX:w-a.current.startX,distanceY:x-a.current.startY,button:a.current.currentButton,altKey:p,shiftKey:C,ctrlKey:g,metaKey:y,event:E}),f.current.style.cursor="auto";else{const j=Date.now();a.current.noTap?a.current.noTap=!1:a.current.timeStart-j<300&&ae.add(s,{clientX:w,clientY:x,altKey:p,shiftKey:C,ctrlKey:g,metaKey:y,target:k,event:E})}}};return P("div",{onWheel:h,onPointerDown:S,onPointerMove:v,onPointerUp:b,onPointerOut:b,onPointerLeave:b,onPointerCancel:b,onDoubleClick:E=>{const{clientX:w,clientY:x,altKey:p,shiftKey:C,ctrlKey:g,metaKey:y,target:k}=E;ae.add(u,{clientX:w,clientY:x,altKey:p,shiftKey:C,ctrlKey:g,metaKey:y,target:k,event:E})},style:{touchAction:"none"},ref:f,children:e})},it=({onResize:e,...t})=>{const[r]=Z(o=>[o.getBoardState]);return P(Ne,{onDrag:({deltaX:o,deltaY:s,event:c})=>{c.stopPropagation();const{scale:u}=r();e({width:o/u,height:s/u})},children:P("div",{...t})})};let vn={data:""},yn=e=>typeof window=="object"?((e?e.querySelector("#_goober"):window._goober)||Object.assign((e||document.head).appendChild(document.createElement("style")),{innerHTML:" ",id:"_goober"})).firstChild:e||vn,Sn=/(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g,_n=/\/\*[^]*?\*\/| +/g,Xt=/\n+/g,de=(e,t)=>{let r="",n="",o="";for(let s in e){let c=e[s];s[0]=="@"?s[1]=="i"?r=s+" "+c+";":n+=s[1]=="f"?de(c,s):s+"{"+de(c,s[1]=="k"?"":t)+"}":typeof c=="object"?n+=de(c,t?t.replace(/([^,])+/g,u=>s.replace(/(^:.*)|([^,])+/g,l=>/&/.test(l)?l.replace(/&/g,u):u?u+" "+l:l)):s):c!=null&&(s=/^--/.test(s)?s:s.replace(/[A-Z]/g,"-$&").toLowerCase(),o+=de.p?de.p(s,c):s+":"+c+";")}return r+(t&&o?t+"{"+o+"}":o)+n},ue={},Ut=e=>{if(typeof e=="object"){let t="";for(let r in e)t+=r+Ut(e[r]);return t}return e},bn=(e,t,r,n,o)=>{let s=Ut(e),c=ue[s]||(ue[s]=(l=>{let m=0,f=11;for(;m<l.length;)f=101*f+l.charCodeAt(m++)>>>0;return"go"+f})(s));if(!ue[c]){let l=s!==e?e:(m=>{let f,a,h=[{}];for(;f=Sn.exec(m.replace(_n,""));)f[4]?h.shift():f[3]?(a=f[3].replace(Xt," ").trim(),h.unshift(h[0][a]=h[0][a]||{})):h[0][f[1]]=f[2].replace(Xt," ").trim();return h[0]})(e);ue[c]=de(o?{["@keyframes "+c]:l}:l,r?"":"."+c)}let u=r&&ue.g?ue.g:null;return r&&(ue.g=ue[c]),((l,m,f,a)=>{a?m.data=m.data.replace(a,l):m.data.indexOf(l)===-1&&(m.data=f?l+m.data:m.data+l)})(ue[c],t,n,u),c},En=(e,t,r)=>e.reduce((n,o,s)=>{let c=t[s];if(c&&c.call){let u=c(r),l=u&&u.props&&u.props.className||/^go/.test(u)&&u;c=l?"."+l:u&&typeof u=="object"?u.props?"":de(u,""):u===!1?"":u}return n+o+(c??"")},"");function q(e){let t=this||{},r=e.call?e(t.p):e;return bn(r.unshift?r.raw?En(r,[].slice.call(arguments,1),t.p):r.reduce((n,o)=>Object.assign(n,o&&o.call?o(t.p):o),{}):r,yn(t.target),t.g,t.o,t.k)}q.bind({g:1}),q.bind({k:1});function Cn(e,t,r,n){de.p=t}var wn=function e(t,r){if(t===r)return!0;if(t&&r&&typeof t=="object"&&typeof r=="object"){if(t.constructor!==r.constructor)return!1;var n,o,s;if(Array.isArray(t)){if(n=t.length,n!=r.length)return!1;for(o=n;o--!==0;)if(!e(t[o],r[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if(s=Object.keys(t),n=s.length,n!==Object.keys(r).length)return!1;for(o=n;o--!==0;)if(!Object.prototype.hasOwnProperty.call(r,s[o]))return!1;for(o=n;o--!==0;){var c=s[o];if(!e(t[c],r[c]))return!1}return!0}return t!==t&&r!==r};const xn=q`
|
|
59
|
+
*/var wt;function _r(){return wt||(wt=1,process.env.NODE_ENV!=="production"&&function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var e=d,t=Et();function r(f,a){return f===a&&(f!==0||1/f===1/a)||f!==f&&a!==a}var n=typeof Object.is=="function"?Object.is:r,o=t.useSyncExternalStore,s=e.useRef,c=e.useEffect,u=e.useMemo,l=e.useDebugValue;function p(f,a,h,b,v){var E=s(null),O;E.current===null?(O={hasValue:!1,value:null},E.current=O):O=E.current;var y=u(function(){var C=!1,g,S,T=function(L){if(!C){C=!0,g=L;var N=b(L);if(v!==void 0&&O.hasValue){var V=O.value;if(v(V,N))return S=V,V}return S=N,N}var Z=g,M=S;if(n(Z,L))return M;var $=b(L);return v!==void 0&&v(M,$)?M:(g=L,S=$,$)},P=h===void 0?null:h,D=function(){return T(a())},j=P===null?void 0:function(){return T(P())};return[D,j]},[a,h,b,v]),w=y[0],x=y[1],m=o(f,w,x);return c(function(){O.hasValue=!0,O.value=m},[m]),l(m),m}Ze.useSyncExternalStoreWithSelector=p,typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)}()),Ze}(function(e){process.env.NODE_ENV==="production"?e.exports=br():e.exports=_r()})(hr);const Er=pe(He),{useSyncExternalStoreWithSelector:Cr}=Er;function $e(e,t=e.getState,r){const n=Cr(e.subscribe,e.getState,e.getServerState||e.getState,t,r);return d.useDebugValue(n),n}const he=(e,t)=>e.classList&&e.classList.contains(t),Oe=(e,t)=>he(e,t)?e:e.parentNode?Oe(e.parentNode,t):!1,Ae=([e,t],[r,n])=>{const o=Math.abs(e-r),s=Math.abs(t-n);return Math.hypot(o,s)},xt=(e,t,r)=>{const n=r*Math.PI/180,o=e*Math.cos(n)-t*Math.sin(n),s=e*Math.sin(n)+t*Math.cos(n);return[o,s]},Qe=([e,t],{scale:r,rotate:n,translateX:o,translateY:s})=>{const c=(e-o)/r,u=(t-s)/r;return xt(c,u,-n)},Le=([e,t],{scale:r,rotate:n,translateX:o,translateY:s})=>{const[c,u]=xt(e,t,n);return[c*r+o,u*r+s]},It=(e,t,r,n)=>{const o=e.x,s=e.y,c=t.x,u=t.y,l=r.x,p=r.y,f=c-o,a=u-s,h=o-l,b=s-p,v=f*f+a*a,E=2*(h*f+b*a),O=h*h+b*b-n*n,y=E*E-4*v*O;if(y<0)return[];const w=(-E+Math.sqrt(y))/(2*v),x=(-E-Math.sqrt(y))/(2*v),m=[];return w>=0&&w<=1&&m.push({x:o+w*f,y:s+w*a}),x>=0&&x<=1&&m.push({x:o+x*f,y:s+x*a}),m},et=(e,t)=>e.x>t.left&&e.x<t.left+t.width&&e.y>t.top&&e.y<t.top+t.height,wr=(e,t)=>Array.from(e.querySelectorAll(".corner")).every(n=>{const{top:o,left:s}=n.getBoundingClientRect();return et({x:s,y:o},t)}),xr=(e,t)=>{const r=t.getBoundingClientRect();return wr(e,r)},ze=(e,t)=>{const n=e.getElementsByClassName(`item ${t}`)[0];return n||console.error(`Missing item ${t}`),n},Te=e=>{var r,n;const t=(r=e==null?void 0:e.dataset)==null?void 0:r.id;return t||console.error("getIdFromElem call fails",e,JSON.stringify(e==null?void 0:e.dataset),(n=e==null?void 0:e.dataset)==null?void 0:n.id),t},Ir=(e,t=document)=>{const r=e.reduce((n,o)=>{const s=ze(t,o);if(!s)return n||null;const{left:c,right:u,top:l,bottom:p}=s.getBoundingClientRect();let f;return n?f=n:f={left:c,top:l,right:u,bottom:p},f.left=Math.min(c,f.left),f.top=Math.min(l,f.top),f.right=Math.max(u,f.right),f.bottom=Math.max(p,f.bottom),f},null);return r&&(r.width=r.right-r.left,r.height=r.bottom-r.top,r)},Or=({x:e,y:t,width:r,height:n},{type:o="grid",size:s=1,offset:c={x:0,y:0}})=>{const[u,l]=[e+r/2-c.x,t+n/2-c.y];let p,f,a,h,b,v,E,O,y,w;const x=s/1.1547;switch(o){case"grid":p=Math.round(u/s)*s,f=Math.round(l/s)*s;break;case"hexH":a=2*x,h=3*s,b=Math.round(u/a)*a,E=Math.round(l/h)*h,v=b>u?b-x:b+x,O=E>l?E-1.5*s:E+1.5*s,y=Math.hypot(b-u,E-l),w=Math.hypot(v-u,O-l),y<w?(p=b,f=E):(p=v,f=O);break;case"hexV":a=3*s,h=2*x,b=Math.round(u/a)*a,E=Math.round(l/h)*h,v=b>u?b-1.5*s:b+1.5*s,O=E>l?E-x:E+x,y=Math.hypot(b-u,E-l),w=Math.hypot(v-u,O-l),y<w?(p=b,f=E):(p=v,f=O);break;default:p=e+r/2,f=t+n/2}return{x:p+c.x-r/2,y:f+c.y-n/2}},Ot=["#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"],Tt=()=>Ot[Math.floor(Math.random()*Ot.length)],Tr=!1,tt=({wire:e,storeName:t,noSync:r=[],defaultValue:n},o)=>(s,c,u)=>{s({ready:!1});const l=[];(async()=>{try{const b=await e.call(`${t}_getValue`);Tr&&console.log("init from peer with value",b),s(v=>({...v,...b}))}catch{n!==void 0&&s(n)}l.push(await e.register(`${t}_getValue`,()=>Object.fromEntries(Object.entries(c()).filter(([b,v])=>typeof v!="function"&&!r.includes(b))),{invoke:"first"})),l.push(e.subscribe(`${t}_call`,([b,v])=>{a[b](...v)})),s({ready:!0})})();const f=o(s,c,u),a={...f},h=Object.fromEntries(Object.entries(f).map(([b,v])=>typeof v=="function"&&!b.startsWith("get")&&!r.includes(b)?[b,(...O)=>{const y=v(...O);return e.publish(`${t}_call`,[b,O]),y}]:[b,v]));return h.unsub=()=>{l.forEach(b=>b())},h};function Ye(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[n,o]of e)if(!Object.is(o,t.get(n)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const n of e)if(!t.has(n))return!1;return!0}const r=Object.keys(e);if(r.length!==Object.keys(t).length)return!1;for(let n=0;n<r.length;n++)if(!Object.prototype.hasOwnProperty.call(t,r[n])||!Object.is(e[r[n]],t[r[n]]))return!1;return!0}const kt=d.createContext(),kr=(e,t)=>({items:{},getItems:()=>t().items,setItems:r=>e({items:r}),updateItems:r=>e(n=>({items:{...n.items,...r}})),moveItems:(r,n)=>e(({items:o})=>{const s={...o};return r.forEach(c=>{const u=o[c];u&&(s[c]={...u,x:(u.x||0)+n.x,y:(u.y||0)+n.y,moving:!0})}),{items:s}})}),Pr=(e,t)=>({itemIds:[],setItemIds:r=>e({itemIds:r}),getItemIds:()=>t().itemIds,insert:(r,n)=>e(o=>{const s=[...o.itemIds];return s.splice(r,0,n),{itemIds:s}}),remove:r=>e(n=>{const o=[...n.itemIds];return o.splice(r,1),{itemIds:o}}),updateItemIds:(r,n)=>e(o=>{const s=[...o.itemIds];return s[r]=n,{items:s}}),updateManyItemIds:r=>e(n=>({items:n.itemIds.map((o,s)=>r[s]!==void 0?r[s]:o)}))}),Mr=(e,t)=>({removeItemsById:r=>e(n=>({itemIds:n.itemIds.filter(o=>!r.includes(o)),items:Object.fromEntries(Object.entries(n.items).filter(([o])=>!r.includes(o)))})),getItemList:()=>{const r=t().items;return t().itemIds.map(n=>r[n])},setItemList:r=>e({items:Object.fromEntries(r.map(n=>[n.id,n])),itemIds:r.map(({id:n})=>n)}),insertItems:(r,n)=>e(o=>{let s;const c=r.map(({id:u})=>u);if(n){const u=o.itemIds.findIndex(l=>l===n);s=[...o.itemIds],s.splice(u,0,...c)}else s=[...o.itemIds,...c];return{items:{...o.items,...Object.fromEntries(r.map(u=>[u.id,u]))},itemIds:s}})}),jr=(e,t)=>({boardConfig:{},getBoardConfig:()=>t().boardConfig,setBoardConfig:r=>e({boardConfig:r}),updateBoardConfig:r=>e(n=>({boardConfig:{...n.boardConfig,...r}}))}),Dr=(e,t)=>({session:{},getSessionInfo:()=>t().session,setSessionInfo:r=>e({session:r}),updateSessionInfo:r=>e(n=>({session:{...n.session,...r}}))}),Pt=({storeName:e,children:t,defaultValue:r})=>{const{wire:n}=Ie("room"),[o,s]=d.useState(!1),[c]=d.useState(()=>De(tt({wire:n,storeName:e,defaultValue:r},(...u)=>({...kr(...u),...Pr(...u),...Mr(...u),...jr(...u),...Dr(...u)}))));return d.useEffect(()=>{const u=c.subscribe(l=>{l.ready&&(u(),s(!0))})},[c]),o?k(kt.Provider,{value:c,children:t}):null},ne=(e,t)=>{const r=d.useContext(kt);return $e(r,e,t||Ye)},Rr=()=>{const[e,t]=ne(n=>[n.itemIds,n.items]);return d.useMemo(()=>e.map(n=>t[n]),[e,t])},$r=()=>{const[e,t,r]=ne(c=>[c.items,c.itemIds,c.getItemList]),[n,o]=d.useState(r()),[,s]=d.useTransition();return d.useEffect(()=>{const c=r();s(()=>{o(c)})},[e,t,r]),n},Mt=5e4,jt=d.createContext(),Ar=(e,t)=>({config:{itemTemplates:{},actions:{},uid:null,itemExtent:{x:0,y:0,radius:0},boardWrapperRect:{},boardSize:Mt},updateConfiguration:r=>e(n=>({config:{...n.config,...r}})),getConfiguration:()=>t().config}),Lr=(e,t)=>({boardState:{movingItems:!1,selecting:!1,zooming:!1,panning:!1,translateX:0,translateY:0,scale:1,rotate:0},updateBoardState:r=>e(n=>({boardState:{...n.boardState,...r}})),getBoardState:()=>t().boardState}),zr=(e,t)=>({interactions:{},getInteractions:()=>t().interactions,register:(r,n)=>e(o=>{const s=[...o.interactions[r]||[]];return s.push(n),{interactions:{...o.interactions,[r]:s}}}),unregister:(r,n)=>e(o=>{const s=(o.interactions[r]||[]).filter(c=>c!==n);return{interactions:{...o.interactions,[r]:s}}}),callInteractions:(r,n)=>{t().interactions[r]&&t().interactions[r].forEach(o=>{o(n)})}}),Yr=(e,t)=>({selection:[],setSelection:r=>e(n=>JSON.stringify(n.selection)!==JSON.stringify(r)?{selection:r}:{}),getSelection:()=>t().selection,select:r=>e(n=>({selection:[...n.selection,...r]})),unselect:r=>e(n=>({selection:n.selection.filter(o=>!r.includes(o))})),clear:()=>e(r=>r.selection.length>0?{selection:[]}:{}),reverse:()=>e(r=>{const n=[...r.selection];return n.reverse(),{selection:n}}),selectionBox:null,setSelectionBox:r=>e(n=>{const o=n.selectionBox;return!o||!r||o.top!==r.top||o.left!==r.left||o.width!==r.width||o.height!==r.height?{selectionBox:r}:{}})}),Dt=({children:e})=>{const[t]=d.useState(()=>De((...r)=>({...Ar(...r),...Lr(...r),...zr(...r),...Yr(...r)})));return k(jt.Provider,{value:t,children:e})},Q=(e,t)=>{const r=d.useContext(jt);return $e(r,e,t||Ye)},Br=()=>{const[e]=Q(t=>[t.selection]);return e};function rt(e){const t=d.useRef(e);return t.current=e,d.useMemo(()=>Object.freeze({get current(){return t.current}}),[])}function Nr(e){const t=rt(e);d.useEffect(()=>()=>{t.current()},[])}function nt(e,t,r,n=0){const o=d.useRef(),s=d.useRef(),c=d.useRef(),u=()=>{o.current&&(clearTimeout(o.current),o.current=void 0),s.current&&(clearTimeout(s.current),s.current=void 0)};return Nr(u),d.useMemo(()=>{const l=()=>{if(!c.current)return;const f=c.current;c.current=void 0,e.apply(f.this,f.args),u()},p=function(...f){o.current&&clearTimeout(o.current),c.current={args:f,this:this},o.current=setTimeout(l,r),n>0&&!s.current&&(s.current=setTimeout(l,n))};return Object.defineProperties(p,{length:{value:e.length},name:{value:`${e.name||"anonymous"}__debounced__${r}`}}),p},[r,n,...t])}const Xr=100,Ur=1e3,Wr=.8,Vr=({x:e,y:t,scale:r,rotate:n,itemExtent:o,boardWrapperRect:s,boardSize:c})=>{let[u,l]=[e,t];const p=Qe([s.width/2,s.height/2],{translateX:u,translateY:l,scale:r,rotate:n}),f={x:o.x+c/2,y:o.y+c/2},a={x:c/2,y:c/2},h=Ae(p,[f.x,f.y]),b=Math.min(s.width,s.height),v=o.radius+b/2/r-Xr/r;if(h>v){const y=It({x:p[0],y:p[1]},f,f,v-1/r)[0],[w,x]=Le([-y.x,-y.y],{translateX:s.width/2,translateY:s.height/2,scale:r,rotate:n});u=w,l=x}const E=Ae(p,[a.x,a.y]),O=c/2-Ae([0,0],[s.width,s.height])/r;if(E>O){const y=It({x:p[0],y:p[1]},a,a,O-1/r)[0];if(y){const[w,x]=Le([-y.x,-y.y],{translateX:s.width/2,translateY:s.height/2,scale:r,rotate:n});u=w,l=x}}return[u,l]},ve=()=>{const[e,t,r,n,o]=Q(m=>[m.getBoardState,m.updateBoardState,m.config.itemExtent,m.getConfiguration,m.updateConfiguration]),s=d.useRef([.15,5]),[c]=ne(m=>[m.getItemList]),u=d.useCallback(()=>{const{translateX:m,translateY:C,scale:g,rotate:S}=e();return{translateX:m,translateY:C,scale:g,rotate:S}},[e]),l=d.useCallback((m,C)=>Qe([m,C],e()),[e]),p=d.useCallback((m,C)=>Le([m,C],e()),[e]),f=d.useCallback((m,C)=>{const{scale:g,rotate:S}=e();return Qe([m,C],{translateX:0,translateY:0,rotate:S,scale:g})},[e]),a=d.useCallback(m=>m>s.current[1]?s.current[1]:m<s.current[0]?s.current[0]:m,[]),h=d.useCallback(m=>{const{itemExtent:C,boardWrapperRect:g,boardSize:S}=n(),T=e(),{translateX:P,translateY:D,scale:j,rotate:L}={...T,...m(T)},N=a(j);let[V,Z]=[P,D];(P!==T.translateX||D!==T.translateY)&&([V,Z]=Vr({x:P,y:D,scale:N,rotate:L,itemExtent:C,boardWrapperRect:g,boardSize:S})),t({translateX:V,translateY:Z,scale:N,rotate:L})},[a,e,n,t]),b=d.useCallback(m=>{let C=g=>({...g,...m});typeof m=="function"&&(C=m),h(g=>({...g,...C({translateX:g.translateX,translateY:g.translateY})}))},[h]),v=d.useCallback(({to:m,factor:C})=>{const{boardWrapperRect:g}=n();let S=m;S||(S={x:g.left+g.width/2,y:g.top+g.height/2});const T=e(),P=a(T.scale*C),D=S.x-g.left,j=S.y-g.top,L=D-(D-T.translateX)*P/T.scale,N=j-(j-T.translateY)*P/T.scale;h(V=>({...V,translateX:L,translateY:N,scale:P}))},[a,e,n,h]),E=d.useCallback(({x:m,y:C,radius:g})=>{const{rotate:S}=e(),{boardWrapperRect:T,boardSize:P}=n(),D=T.width/(g*2),j=T.height/(g*2),L=a(Math.min(D,j)*Wr),[N,V]=Le([-P/2-m,-P/2-C],{translateX:T.width/2,translateY:T.height/2,scale:L,rotate:S});h(Z=>({...Z,translateX:N,translateY:V,scale:L}))},[a,e,n,h]),O=d.useCallback(()=>{const{boardWrapperRect:m,boardSize:C}=n(),[g,S]=l(m.width/2,m.height/2);return{x:g-C/2,y:S-C/2}},[l,n]),y=d.useCallback(()=>{const m=c(),{boardWrapper:C,boardSize:g}=n(),S=m.reduce((P,D)=>{const j=ze(C,D.id);return P.left=Math.min(D.x,P.left),P.top=Math.min(D.y,P.top),P.right=Math.max(D.x+j.offsetWidth,P.right),P.bottom=Math.max(D.y+j.offsetHeight,P.bottom),P},{left:g/2,top:g/2,right:-g/2,bottom:-g/2}),T={x:(S.right+S.left)/2,y:(S.bottom+S.top)/2};T.radius=Math.max(Ae([T.x,T.y],[S.left,S.top]),Ur),o({itemExtent:T})},[n,c,o]),w=d.useCallback(m=>{let C=()=>m;typeof m=="function"&&(C=m),h(g=>({...g,rotate:C(g.rotate)})),y(),E(r)},[r,h,y,E]),x=nt(()=>y(),[y],200);return{setDim:h,rotateBoard:w,moveBoard:b,getDim:u,zoomTo:v,zoomToCenter:v,zoomToExtent:E,getCenter:O,updateItemExtent:x,vectorFromWrapperToBoard:f,fromWrapperToBoard:l,fromBoardToWrapper:p}},ot=e=>{const[t,r,n]=Q(({register:c,unregister:u,callInteractions:l})=>[c,u,l]),o=d.useCallback(c=>(t(e,c),()=>{r(e,c)}),[e,t,r]),s=d.useCallback(c=>{n(e,c)},[n,e]);return{register:o,call:s}},Be=()=>{const{call:e}=ot("place"),{call:t}=ot("delete"),{getCenter:r,updateItemExtent:n}=ve(),[o,s,c,u]=Q(M=>[M.clear,M.reverse,M.unselect,M.getConfiguration]),{getItems:l,getItemIds:p,setItemIds:f,updateItems:a,moveItems:h,removeItemsById:b,getItemList:v,insertItems:E,setItemList:O}=ne(({getItems:M,getItemIds:$,setItemIds:B,updateItems:W,moveItems:A,removeItemsById:K,getItemList:H,insertItems:te,setItemList:ce})=>({getItems:M,getItemIds:$,setItemIds:B,updateItems:W,moveItems:A,removeItemsById:K,getItemList:H,insertItems:te,setItemList:ce})),y=d.useCallback((M,$)=>{let B=$;typeof $=="object"&&(B=()=>$);const W=p().filter(H=>M.includes(H)),A=l(),K=Object.fromEntries(W.map(H=>[H,B({...A[H]})]));a(K),n()},[p,l,n,a]),w=d.useCallback(M=>{O(M),o(),n()},[o,O,n]),x=d.useCallback((M,$)=>{y([M],$)},[y]),m=d.useCallback((M,$)=>{const B=l(),W=M.map(A=>[A,...B[A].linkedItems||[]]).flat();h(W,$),n()},[l,h,n]),C=d.useCallback(M=>{const $=p(),B=$.filter(A=>!M.includes(A)),W=$.filter(A=>M.includes(A));f([...B,...W])},[p,f]),g=d.useCallback((M,{type:$,size:B}={})=>{const{boardWrapper:W}=u();y(M,A=>{const K=ze(W,A.id);if(!K)return;const H={type:$||"grid",size:B||1,offset:{x:0,y:0},...A.grid},te=Or({x:A.x,y:A.y,width:K.clientWidth,height:K.clientHeight},H);return{...A,...te}})},[u,y]),S=d.useCallback((M,$)=>{const B=l(),W=M.map(A=>[A,...B[A].linkedItems||[]]).flat();C(W),y(W,A=>{const K={...A};return delete K.moving,K}),g(W,$),e(M),n()},[y,e,l,C,g,n]),T=d.useCallback(M=>{f(M)},[f]),P=d.useCallback(M=>{const $=p(),B=$.filter(A=>M.includes(A)),W=$.map(A=>M.includes(A)?B.pop():A);f(W),s()},[p,s,f]),D=d.useCallback((M,$)=>{const B=l(),W=Object.fromEntries($.map((H,te)=>{const ce=B[M[te]];return[H,{x:ce.x,y:ce.y}]}));y(M,H=>({...H,...W[H.id]}));const A=Object.fromEntries(M.map((H,te)=>[H,$[te]])),K=p().map(H=>M.includes(H)?A[H]:H);f(K)},[l,y,p,f]),j=d.useCallback((M,$)=>{const B=r(),W=M.map((A,K)=>!A.x||!A.y?{...A,x:B.x+2*K,y:B.y+2*K}:A);E(W,$),n()},[r,E,n]),L=d.useCallback((M,$)=>{j([M],$)},[j]),N=d.useCallback(M=>{c(M),b(M),t(M)},[c,b,t]),V=d.useCallback(M=>{const $=l();return M.map(B=>$[B])},[l]),Z=d.useCallback(({target:M,clientX:$,clientY:B},{returnLocked:W=!1,passLocked:A=!1}={})=>{if(["INPUT","TEXTAREA"].includes(M.tagName))return null;const K=Oe(M,"item");if(K){if(he(K,"selected"))return K;if(!A&&he(K,"locked")&&!he(M,"passthrough"))return W?K:null;if(he(M,"passthrough")){const H=p(),{boardWrapper:te}=u(),ce=H.reduce((de,ue)=>{const Se=ze(te,ue),be=Se.getBoundingClientRect();return et({x:$,y:B},be)&&de.unshift(Se),de},[]);for(let de=0;de<ce.length;de+=1){const ue=ce[de];if(ue!==K&&(A||!he(ue,"locked")))return ue}return null}}return K},[u,p]);return{putItemsOnTop:C,batchUpdateItems:y,updateItemOrder:T,moveItems:m,placeItems:S,updateItem:x,swapItems:D,reverseItemsOrder:P,setItemList:w,pushItem:L,pushItems:j,removeItems:N,getItemList:v,findElementUnderPointer:Z,getItems:V}};var Fr=function e(t,r){if(t===r)return!0;if(t&&r&&typeof t=="object"&&typeof r=="object"){if(t.constructor!==r.constructor)return!1;var n,o,s;if(Array.isArray(t)){if(n=t.length,n!=r.length)return!1;for(o=n;o--!==0;)if(!e(t[o],r[o]))return!1;return!0}if(t instanceof Map&&r instanceof Map){if(t.size!==r.size)return!1;for(o of t.entries())if(!r.has(o[0]))return!1;for(o of t.entries())if(!e(o[1],r.get(o[0])))return!1;return!0}if(t instanceof Set&&r instanceof Set){if(t.size!==r.size)return!1;for(o of t.entries())if(!r.has(o[0]))return!1;return!0}if(ArrayBuffer.isView(t)&&ArrayBuffer.isView(r)){if(n=t.length,n!=r.length)return!1;for(o=n;o--!==0;)if(t[o]!==r[o])return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if(s=Object.keys(t),n=s.length,n!==Object.keys(r).length)return!1;for(o=n;o--!==0;)if(!Object.prototype.hasOwnProperty.call(r,s[o]))return!1;for(o=n;o--!==0;){var c=s[o];if(!e(t[c],r[c]))return!1}return!0}return t!==t&&r!==r};function Kr(e,t,r,n=0){d.useEffect(nt(e,t,r,n),t)}const Hr=(e,t)=>{if(e.type in t){const r=t[e.type].defaultActions;return typeof r=="function"?r(e):r}return[]},Rt=(e,t)=>{const{actions:r=Hr(e,t)}=e;return r.map(n=>typeof n=="string"?{name:n}:n)},qr=()=>{const[e,t]=ne(a=>[a.items,a.getItems]),[r,n,o]=Q(a=>[a.config.itemTemplates,a.selection,a.getSelection]),[s,c]=d.useState([]),u=d.useRef(!1),[,l]=d.useTransition();d.useEffect(()=>(u.current=!0,()=>{u.current=!1}),[]);const p=d.useCallback(a=>{const h=t();if(a)return[a,a.map(v=>h[v])];const b=o();return[b,b.map(v=>h[v])]},[t,o]),f=d.useCallback(()=>{const[a,h]=p();if(a.length>0){if(!u.current)return;const b=h.reduce((v,E)=>{const O=Rt(E,r);return v.filter(y=>O.some(w=>Fr(y,w)))},Rt(h[0],r));l(()=>{c(b)})}else l(()=>{c([])})},[p,r]);return Kr(()=>f(),[e,n,f],100),{availableActions:s}},Gr=()=>{const[e]=Q(t=>[t.selectionBox]);return e};let me=(e=21)=>crypto.getRandomValues(new Uint8Array(e)).reduce((t,r)=>(r&=63,r<36?t+=r.toString(36):r<62?t+=(r-26).toString(36).toUpperCase():r>62?t+="-":t+="_",t),"");const $t=d.createContext(),st=e=>{localStorage.setItem("user",JSON.stringify(e))},Jr=()=>{if(localStorage.user){const t={name:"Player",color:Tt(),uid:me(),...JSON.parse(localStorage.user)};return st(t),t}const e={name:"Player",color:Tt(),uid:me()};return st(e),e},Zr=e=>(t,r)=>({isSpaceMaster:!1,users:{},getUser:()=>r().users[e],getUsers:()=>r().users,getUserList:()=>Object.values(r().users),getLocalUsers:()=>{if(!r().users[e])return[];const{space:n}=r().users[e];return r().getUserList().filter(({space:o})=>o===n)},addUser:n=>t(o=>({users:{...o.users,[n.id]:n}})),updateUser:(n,o)=>t(s=>{if(!s.users[n])return{};const c={...s.users[n],...o,id:n,uid:s.users[n].uid};return c.id===e&&st(c),setTimeout(()=>r().electSpaceMaster(),100),{users:{...s.users,[n]:c}}}),removeUser:n=>t(o=>{const s={...o.users};return delete s[n],setTimeout(()=>r().electSpaceMaster(),100),{users:s}}),updateCurrentUser:n=>r().updateUser(e,n),joinSpace:n=>r().updateUser(e,{space:n,spaceJoinedTimestamp:Date.now()}),electSpaceMaster:()=>{const n=r().getLocalUsers(),o={uid:null,timestamp:Date.now()};Object.values(n).forEach(({spaceJoinedTimestamp:s,id:c})=>{s<o.timestamp&&(o.id=c,o.timestamp=s)}),t({isSpaceMaster:o.id===e})}}),Qr=e=>({cursors:{},moveCursor:(t,r)=>e(n=>({cursors:{...n.cursors,[t]:r}})),removeCursor:t=>e(r=>{const n={...r.cursors};return delete n[t],{cursors:n}})}),At=({storeName:e,children:t})=>{const{wire:r,isMaster:n}=Ie("room"),[o,s]=d.useState(null),[c,u]=d.useState(!1),l=d.useRef(!1);return d.useEffect(()=>{let p=!0;const f=[];if(!o&&!l.current)return l.current=!0,(()=>{const h=De(tt({wire:r,storeName:e,noSync:["updateCurrentUser","joinSpace","isSpaceMaster","electSpaceMaster"]},(...v)=>({...Zr(r.userId)(...v),...Qr(...v)}))),b=h.subscribe(v=>{v.ready&&(b(),p&&s(h))})})(),()=>{p=!1,l.current=!1,f.forEach(h=>h())}},[o,e,r,r.userId]),d.useEffect(()=>{if(o)return o.getState().addUser({...Jr(),id:r.userId}),u(!0),()=>{o.getState().removeUser(r.userId)}},[n,o,r]),d.useEffect(()=>{if(o){const p=r.subscribe("userLeave",f=>{o.getState().removeUser(f)});return()=>{p()}}},[n,o,r]),d.useEffect(()=>{n&&o&&o.getState().updateCurrentUser({isMaster:n})},[n,o,r]),c?k($t.Provider,{value:o,children:t}):null},ye=(e,t)=>{const r=d.useContext($t);return $e(r,e,t||Ye)},en=()=>{const[e,t,r,n,o]=ye(u=>[u.isSpaceMaster,u.getUser(),u.users,u.updateCurrentUser,u.joinSpace]),s=d.useMemo(()=>Object.values(r),[r]),c=d.useMemo(()=>{const{space:u}=t;return s.filter(({space:l})=>l===u)},[t,s]);return{isSpaceMaster:e,currentUser:t,updateCurrentUser:n,users:s,localUsers:c,joinSpace:o}},tn=()=>{const[e,t,r]=ne(o=>[o.boardConfig,o.getBoardConfig,o.setBoardConfig]),n=d.useCallback(o=>{let s=o;typeof o=="object"&&(s=()=>o);const c=t(),u=s(c);r(u)},[t,r]);return[e,n]},rn=()=>{const[e]=Q(t=>[t.boardState]);return e},nn=()=>{const[e,t,r,n]=ne(o=>[o.getSessionInfo,o.setSessionInfo,o.updateSessionInfo,o.session]);return{getSessionInfo:e,setSessionInfo:t,sessionInfo:n,updateSessionInfo:r}},Lt=d.createContext(),on=({user:{name:e,uid:t,color:r},content:n})=>({type:"message",user:{name:e,uid:t,color:r},content:n,uid:me(),timestamp:new Date().toISOString()}),sn=(e,t)=>({messages:[],setMessages:r=>e({messages:r.map(n=>({...n,timestamp:Date.parse(n.timestamp)}))}),addMessage:r=>e(n=>({messages:[...n.messages,{...r,timestamp:Date.parse(r.timestamp)}]})),sendMessage:(r,n)=>{const o=on({user:r,content:n});o&&t().addMessage(o)}}),zt=({storeName:e,children:t,defaultValue:r=[]})=>{const{wire:n}=Ie("room"),[o]=d.useState(()=>De(tt({wire:n,storeName:e,defaultValue:r,noSync:["sendMessage"]},(...s)=>({...sn(...s)}))));return k(Lt.Provider,{value:o,children:t})},an=(e,t)=>{const r=d.useContext(Lt);return $e(r,e,t||Ye)},cn=()=>{},un=(e=cn)=>{const t=ye(c=>c.getUser()),[r,n,o]=an(c=>[c.messages,c.setMessages,c.sendMessage]);d.useEffect(()=>{r.length&&e()},[r,e]);const s=d.useCallback(c=>{o(t,c)},[t,o]);return{messages:r,setMessages:n,sendMessage:s}},Yt=({children:e,session:t})=>{const r=ye(n=>n.joinSpace);return d.useEffect(()=>(r(t),()=>{r(null)}),[r,t]),e},ln=({socket:e,room:t,session:r,items:n=[],messages:o=[],LoadingComponent:s,...c})=>{const[u]=d.useState(t||me()),[l]=d.useState(r||me()),[p]=d.useState(()=>({itemIds:n.map(({id:a})=>a),items:Object.fromEntries(n.map(a=>[a.id,a]))}));return Ie("room")?k(zt,{storeName:`${l}_messages`,defaultValue:o,children:k(Dt,{children:k(Pt,{storeName:`${l}_item`,defaultValue:p,children:k(Yt,{...c,session:l})})})}):k(vt,{room:u,channel:"room",socket:e,LoadingComponent:s,children:k(At,{storeName:`${u}_users`,children:k(zt,{storeName:`${l}_messages`,defaultValue:o,children:k(Dt,{children:k(Pt,{storeName:`${l}_item`,defaultValue:p,children:k(Yt,{...c,session:l})})})})})})},fn=({socket:e,room:t,children:r,LoadingComponent:n})=>{const[o]=d.useState(t||me());return k(vt,{room:o,channel:"room",socket:e,LoadingComponent:n,children:k(At,{storeName:`${o}_users`,children:r})})},it=()=>{const e=navigator.userAgent.toLowerCase();return/mac os ?x 10/.test(e)},dn=(()=>{const e=document.createElement("iframe");e.src="#",document.body.appendChild(e);const t=e.contentWindow.document;t.open(),t.write("<!DOCTYPE html><html><head></head><body><span>a</span></body></html>"),t.close();const r=t.body.firstElementChild.offsetHeight;return document.body.removeChild(e),r})(),pn=800,Bt=(e,t)=>{const r=Object.keys(e).map(n=>Number(n)).find(n=>n!==t);return e[r]},Nt=([e,t],[r,n])=>{const o=Math.abs(e-r),s=Math.abs(t-n);return Math.hypot(o,s)},ge=()=>{},mn=e=>t=>{const{event:r}=t;return r.isPropagationStopped()?null:e(t)},gn=e=>async(...t)=>{try{await e(...t)}catch(r){console.error(r)}};class hn{constructor(){ar(this,"lastPromise",Promise.resolve(!0))}add(t,...r){return new Promise((n,o)=>{this.lastPromise=this.lastPromise.then(()=>mn(gn(t))(...r)).then(n).catch(o)})}}const oe=new hn,Ne=({children:e,onDrag:t=ge,onDragStart:r=ge,onDragEnd:n=ge,onPan:o=ge,onTap:s=ge,onLongTap:c=ge,onDoubleTap:u=ge,onZoom:l,mainAction:p="drag"})=>{const f=d.useRef(null),a=d.useRef({moving:!1,pointers:{},mainPointer:void 0}),h=y=>{const{deltaX:w,deltaY:x,clientX:m,clientY:C,deltaMode:g,ctrlKey:S,altKey:T,metaKey:P,target:D}=y;if(!(T||S&&!it()))if(it()&&!S)oe.add(o,{deltaX:-2*w,deltaY:-2*x,button:1,ctrlKey:S,metaKey:P,target:D,event:y});else{if(l===void 0||!x)return;let j=x;switch(g){case 1:j*=dn;break;case 2:j*=pn;break}it()&&(j*=2),oe.add(l,{scale:j,clientX:m,clientY:C,event:y})}},b=y=>{const{target:w,button:x,clientX:m,clientY:C,pointerId:g,altKey:S,ctrlKey:T,metaKey:P,isPrimary:D}=y;if(a.current.pointers[g]={clientX:m,clientY:C},D&&(a.current.mainPointer=void 0),a.current.mainPointer!==void 0){if(a.current.mainPointer!==g)try{const{clientX:j,clientY:L}=Bt(a.current.pointers,g),N=(j+m)/2,V=(L+C)/2,Z=Nt([j,L],[m,C]);Object.assign(a.current,{pressed:!0,moving:!1,gestureStart:!1,startX:m,startY:C,prevX:N,prevY:V,startDistance:Z,prevDistance:Z})}catch(j){console.log("Error while getting other pointer. Ignoring",j),a.current.mainPointer}return}a.current.mainPointer=g,Object.assign(a.current,{pressed:!0,moving:!1,gestureStart:!1,startX:m,startY:C,prevX:m,prevY:C,currentButton:x,pointerDownEvent:y,startDistance:0,prevDistance:0,target:w,timeStart:Date.now(),longTapTimeout:setTimeout(async()=>{a.current.noTap=!0,oe.add(c,{clientX:m,clientY:C,altKey:S,ctrlKey:T,metaKey:P,target:w,event:y})},750)});try{w.setPointerCapture(g)}catch(j){console.log("Fail to capture pointer",j)}},v=y=>{if(a.current.pressed){const{pointerId:w,clientX:x,clientY:m,altKey:C,shiftKey:g,ctrlKey:S,metaKey:T,buttons:P}=y;a.current.pointers[w]={clientX:x,clientY:m},a.current.moving=!0;const D=Object.keys(a.current.pointers).length===2;let j,L,N=0;if(D){const{clientX:$,clientY:B}=Bt(a.current.pointers,w);j=($+x)/2,L=(B+m)/2,N=Nt([$,B],[x,m])}else j=x,L=m;let V=g||C||S||T||P!==1;p!=="drag"&&(V=!V);const Z=!V,M=V;if(Z){a.current.gestureStart||(f.current.style.cursor="move",a.current.gestureStart=!0,clearTimeout(a.current.longTapTimeout),oe.add(r,{deltaX:0,deltaY:0,startX:a.current.startX,startY:a.current.startY,clientX:a.current.startX,clientY:a.current.startY,distanceX:0,distanceY:0,button:a.current.currentButton,altKey:C,shiftKey:g,ctrlKey:S,metaKey:T,target:a.current.target,event:a.current.pointerDownEvent}));const $=j-a.current.prevX,B=L-a.current.prevY,W=j-a.current.startX,A=L-a.current.startY;oe.add(t,{deltaX:$,deltaY:B,startX:a.current.startX,startY:a.current.startY,clientX:j,clientY:L,distanceX:W,distanceY:A,button:a.current.currentButton,altKey:C,shiftKey:g,ctrlKey:S,metaKey:T,target:a.current.target,event:y})}if(M){a.current.gestureStart||(f.current.style.cursor="move",a.current.gestureStart=!0,clearTimeout(a.current.longTapTimeout));const $=j-a.current.prevX,B=L-a.current.prevY,{target:W}=a.current;if(oe.add(o,{deltaX:$,deltaY:B,button:a.current.currentButton,altKey:C,shiftKey:g,ctrlKey:S,metaKey:T,target:W,event:y}),N!==a.current.prevDistance&&l){const A=a.current.prevDistance-N;Math.abs(A)>0&&(oe.add(l,{scale:A*3,clientX:j,clientY:L,event:y}),a.current.prevDistance=N)}}a.current.prevX=j,a.current.prevY=L}},E=y=>{const{clientX:w,clientY:x,altKey:m,shiftKey:C,ctrlKey:g,metaKey:S,target:T,pointerId:P}=y;if(a.current.pointers[P]){if(delete a.current.pointers[P],a.current.mainPointer!==P){const{clientX:D,clientY:j}=a.current.pointers[a.current.mainPointer];Object.assign(a.current,{prevX:D,prevY:j,prevDistance:0,startDistance:0});return}for(;Object.keys(a.current.pointers).length>0;){a.current.mainPointer=Number(Object.keys(a.current.pointers)[0]);try{a.current.target.setPointerCapture(a.current.mainPointer);const{clientX:D,clientY:j}=a.current.pointers[a.current.mainPointer];Object.assign(a.current,{prevX:D,prevY:j,prevDistance:0,startDistance:0});return}catch(D){console.log("Fails to set pointer capture",D),a.current.mainPointer=void 0,delete a.current.pointers[Object.keys(a.current.pointers)[0]]}}if(a.current.mainPointer=void 0,a.current.pressed=!1,clearTimeout(a.current.longTapTimeout),a.current.moving)a.current.moving=!1,oe.add(n,{deltaX:w-a.current.prevX,deltaY:x-a.current.prevY,startX:a.current.startX,startY:a.current.startY,clientX:w,clientY:x,distanceX:w-a.current.startX,distanceY:x-a.current.startY,button:a.current.currentButton,altKey:m,shiftKey:C,ctrlKey:g,metaKey:S,event:y}),f.current.style.cursor="auto";else{const D=Date.now();a.current.noTap?a.current.noTap=!1:a.current.timeStart-D<300&&oe.add(s,{clientX:w,clientY:x,altKey:m,shiftKey:C,ctrlKey:g,metaKey:S,target:T,event:y})}}};return k("div",{onWheel:h,onPointerDown:b,onPointerMove:v,onPointerUp:E,onPointerOut:E,onPointerLeave:E,onPointerCancel:E,onDoubleClick:y=>{const{clientX:w,clientY:x,altKey:m,shiftKey:C,ctrlKey:g,metaKey:S,target:T}=y;oe.add(u,{clientX:w,clientY:x,altKey:m,shiftKey:C,ctrlKey:g,metaKey:S,target:T,event:y})},style:{touchAction:"none"},ref:f,children:e})},at=({onResize:e,...t})=>{const[r]=Q(o=>[o.getBoardState]);return k(Ne,{onDrag:({deltaX:o,deltaY:s,event:c})=>{c.stopPropagation();const{scale:u}=r();e({width:o/u,height:s/u})},children:k("div",{...t})})};let vn={data:""},yn=e=>typeof window=="object"?((e?e.querySelector("#_goober"):window._goober)||Object.assign((e||document.head).appendChild(document.createElement("style")),{innerHTML:" ",id:"_goober"})).firstChild:e||vn,Sn=/(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g,bn=/\/\*[^]*?\*\/| +/g,Xt=/\n+/g,fe=(e,t)=>{let r="",n="",o="";for(let s in e){let c=e[s];s[0]=="@"?s[1]=="i"?r=s+" "+c+";":n+=s[1]=="f"?fe(c,s):s+"{"+fe(c,s[1]=="k"?"":t)+"}":typeof c=="object"?n+=fe(c,t?t.replace(/([^,])+/g,u=>s.replace(/(^:.*)|([^,])+/g,l=>/&/.test(l)?l.replace(/&/g,u):u?u+" "+l:l)):s):c!=null&&(s=/^--/.test(s)?s:s.replace(/[A-Z]/g,"-$&").toLowerCase(),o+=fe.p?fe.p(s,c):s+":"+c+";")}return r+(t&&o?t+"{"+o+"}":o)+n},ie={},Ut=e=>{if(typeof e=="object"){let t="";for(let r in e)t+=r+Ut(e[r]);return t}return e},_n=(e,t,r,n,o)=>{let s=Ut(e),c=ie[s]||(ie[s]=(l=>{let p=0,f=11;for(;p<l.length;)f=101*f+l.charCodeAt(p++)>>>0;return"go"+f})(s));if(!ie[c]){let l=s!==e?e:(p=>{let f,a,h=[{}];for(;f=Sn.exec(p.replace(bn,""));)f[4]?h.shift():f[3]?(a=f[3].replace(Xt," ").trim(),h.unshift(h[0][a]=h[0][a]||{})):h[0][f[1]]=f[2].replace(Xt," ").trim();return h[0]})(e);ie[c]=fe(o?{["@keyframes "+c]:l}:l,r?"":"."+c)}let u=r&&ie.g?ie.g:null;return r&&(ie.g=ie[c]),((l,p,f,a)=>{a?p.data=p.data.replace(a,l):p.data.indexOf(l)===-1&&(p.data=f?l+p.data:p.data+l)})(ie[c],t,n,u),c},En=(e,t,r)=>e.reduce((n,o,s)=>{let c=t[s];if(c&&c.call){let u=c(r),l=u&&u.props&&u.props.className||/^go/.test(u)&&u;c=l?"."+l:u&&typeof u=="object"?u.props?"":fe(u,""):u===!1?"":u}return n+o+(c??"")},"");function q(e){let t=this||{},r=e.call?e(t.p):e;return _n(r.unshift?r.raw?En(r,[].slice.call(arguments,1),t.p):r.reduce((n,o)=>Object.assign(n,o&&o.call?o(t.p):o),{}):r,yn(t.target),t.g,t.o,t.k)}q.bind({g:1}),q.bind({k:1});function Cn(e,t,r,n){fe.p=t}var wn=function e(t,r){if(t===r)return!0;if(t&&r&&typeof t=="object"&&typeof r=="object"){if(t.constructor!==r.constructor)return!1;var n,o,s;if(Array.isArray(t)){if(n=t.length,n!=r.length)return!1;for(o=n;o--!==0;)if(!e(t[o],r[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if(s=Object.keys(t),n=s.length,n!==Object.keys(r).length)return!1;for(o=n;o--!==0;)if(!Object.prototype.hasOwnProperty.call(r,s[o]))return!1;for(o=n;o--!==0;){var c=s[o];if(!e(t[c],r[c]))return!1}return!0}return t!==t&&r!==r};const xn=q`
|
|
60
60
|
display: inline-block;
|
|
61
61
|
transition: transform 150ms;
|
|
62
62
|
user-select: none;
|
|
@@ -85,7 +85,7 @@ Check the top-level render call using <`+O+">.")}return _}}function nr(i,_){{if(
|
|
|
85
85
|
`,Mn=q`
|
|
86
86
|
top: 50%;
|
|
87
87
|
left: 50%;
|
|
88
|
-
`,
|
|
88
|
+
`,ct=q`
|
|
89
89
|
position: absolute;
|
|
90
90
|
|
|
91
91
|
width: 10px;
|
|
@@ -93,11 +93,11 @@ Check the top-level render call using <`+O+">.")}return _}}function nr(i,_){{if(
|
|
|
93
93
|
border: 2px solid #db5034;
|
|
94
94
|
background-color: #db5034;
|
|
95
95
|
cursor: move;
|
|
96
|
-
`,
|
|
96
|
+
`,jn=q`
|
|
97
97
|
cursor: ew-resize;
|
|
98
98
|
right: -6px;
|
|
99
99
|
top: calc(50% - 5px);
|
|
100
|
-
`,
|
|
100
|
+
`,Dn=q`
|
|
101
101
|
cursor: ns-resize;
|
|
102
102
|
bottom: -6px;
|
|
103
103
|
left: calc(50% - 5px);
|
|
@@ -105,5 +105,5 @@ Check the top-level render call using <`+O+">.")}return _}}function nr(i,_){{if(
|
|
|
105
105
|
cursor: nwse-resize;
|
|
106
106
|
bottom: -6px;
|
|
107
107
|
right: -6px;
|
|
108
|
-
`,$n=({onReload:e})=>ce("div",{className:`syncboard-error-item ${q({width:"100px",display:"flex",flexDirection:"column",justifyContent:"center",textAlign:"center",color:"red"})}`,children:["Sorry, this item seems broken.",P("button",{onClick:e,children:"Reload it"})]});class An extends d.Component{constructor(t){super(t),this.state={hasError:!1,itemId:t.itemId},this.onReload=this.onReload.bind(this)}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(t){console.error(`Error for item ${this.state.itemId}`,t,this.props.state)}onReload(){this.setState({hasError:!1})}render(){const{ErrorComponent:t}=this.props;return this.state.hasError?P(t,{onReload:this.onReload}):this.props.children}}const Ln=e=>{e.target.className=""},zn=({width:e,height:t,actualWidth:r,actualHeight:n,prevState:o,keepRatio:s})=>{let{width:c,height:u}=o;if([c,u]=[parseFloat(c),parseFloat(u)],(!c||Number.isNaN(Number(c)))&&(c=r),(!u||Number.isNaN(Number(u)))&&(u=n),s){const l=c/u;return{...o,width:(c+e).toFixed(1),height:(u+t/l).toFixed(1)}}return{...o,width:(c+e).toFixed(1),height:(u+t).toFixed(1)}},Yn={w:!0,h:!0,b:!0},Bn=({setState:e,state:{type:t,rotation:r=0,id:n,locked:o,extraClasses:s,...c}={},animate:u="hvr-pop",isSelected:l,itemMap:m,showResizeHandle:f=!0})=>{var g;const a=d.useRef(null),{component:h=()=>null,resizeDirections:S=Yn,resize:v=zn}=m[t],b=d.useCallback(y=>e(n,y),[e,n]);d.useEffect(()=>{a.current.className=u},[u]);const I=["item",n,xn];o&&I.push("locked"),l&&(I.push("selected"),I.push(In));const E=I.join(" "),w=({width:y=0,height:k=0,keepRatio:M})=>{b(j=>{const{offsetWidth:D,offsetHeight:A}=a.current;return v({prevState:j,width:y,height:k,actualHeight:A,actualWidth:D,keepRatio:M})})},x=({width:y})=>{w({width:y})},p=({height:y})=>{w({height:y})},C=({width:y})=>{w({height:y,width:y,keepRatio:!0})};return P("div",{style:{transform:`rotate(${r}deg`},"data-id":n,className:E,children:ce("div",{style:{display:"flex"},ref:a,onAnimationEnd:Ln,onKeyDown:y=>y.stopPropagation(),onKeyUp:y=>y.stopPropagation(),children:[P(An,{itemId:n,state:c,ErrorComponent:((g=m==null?void 0:m.error)==null?void 0:g.component)||$n,children:P(h,{...c,id:n,setState:b})}),P("div",{className:`corner ${ke} ${On}`}),P("div",{className:`corner ${ke} ${Tn}`}),P("div",{className:`corner ${ke} ${Pn}`}),P("div",{className:`corner ${ke} ${kn}`}),P("div",{className:`center ${ke} ${Mn}`}),f&&ce(fr,{children:[S.b&&P(it,{className:`${at} ${Rn}`,onResize:C}),S.h&&P(it,{className:`${at} ${jn}`,onResize:p}),S.w&&P(it,{className:`${at} ${Dn}`,onResize:x})]})]})})},Nn=d.memo(Bn,({state:e,setState:t,isSelected:r,showResizeHandle:n},{state:o,setState:s,isSelected:c,showResizeHandle:u})=>r===c&&n===u&&t===s&&wn(e,o)),Xn=e=>e,Un=({state:e={},getCurrentUser:t,className:r,...n})=>{if(!n.itemMap[e.type])return null;const{stateHook:o=Xn}=n.itemMap[e.type],{x:s=0,y:c=0,layer:u=0,moving:l,...m}=o(e,{getCurrentUser:t}),f=(u+4)*10+100+(l?5:0);return P("div",{className:r,style:{transform:`translate(${s}px, ${c}px)`,zIndex:f},children:P(Nn,{...n,showResizeHandle:n.isSelected&&n.showResizeHandle,state:m})})},Wn=d.memo(Un),Vn=()=>{const{updateItem:e}=Be(),[t,r]=ie(m=>[m.itemIds,m.items]),[n,o,s,c]=Z(m=>[m.config.boardSize,m.config.showResizeHandle,m.config.itemTemplates,m.selection]),[u]=Se(m=>[m.getUser]),l=q({position:"absolute",top:`${n/2}px`,left:`${n/2}px`,display:"inline-block"});return t.map(m=>P(Wn,{state:r[m],setState:e,isSelected:c.includes(m),itemMap:s,boardSize:n,getCurrentUser:u,showResizeHandle:o,className:l},m))};function Fn(e=!1){const t=d.useRef(e),r=d.useCallback(()=>t.current,[]);return d.useEffect(()=>(t.current=!0,()=>{t.current=!1}),[]),r}function Kn(e,...t){e&&e.addEventListener&&e.addEventListener(...t)}function Hn(e,...t){e&&e.removeEventListener&&e.removeEventListener(...t)}const qn=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);function le(e,...t){const r=Fn(),n=rt(t[1]),o=d.useMemo(()=>function(...s){r()&&(typeof n.current=="function"?n.current.apply(this,s):typeof n.current.handleEvent=="function"&&n.current.handleEvent.apply(this,s))},[]);d.useEffect(()=>{const s=e&&qn(e,"current")?e.current:e;if(!s)return;const c=t.slice(2);return Kn(s,t[0],o,...c),()=>Hn(s,t[0],o,...c)},[e,t[0]])}const Gn=q({zIndex:210,position:"absolute",backgroundColor:"hsla(0, 40%, 50%, 10%)",border:"2px solid hsl(0, 55%, 40%)"}),Jn=(e,t,r=!1)=>{const n=t.getElementsByClassName("selector");if(!n.length)return[];const o=n[0];return Array.from(t.getElementsByClassName("item")).filter(s=>{const c=Te(s),u=e[c];return!u||!r&&u.locked?!1:xr(s,o)}).map(s=>Te(s))},Zn=({children:e,moveFirst:t})=>{const[r,n,o,s,c,u]=Z(g=>[g.getSelection,g.clear,g.setSelection,g.select,g.getConfiguration,g.getBoardState,g.updateBoardState]),{findElementUnderPointer:l}=Be(),[m]=ie(g=>[g.getItems]),[f,a]=d.useState({}),[,h]=d.useTransition(),[S,v]=d.useState(!1),b=d.useRef(null),I=d.useRef({moving:!1});return le(document,"keydown",g=>{g.key==="l"&&v(!0)}),le(document,"keyup",g=>{g.key==="l"&&v(!1)}),d.useEffect(()=>(n(),()=>{n()}),[n]),d.useEffect(()=>{if(I.current.moving){const g=m(),{boardWrapper:y}=c(),k=Jn(g,y,S);h(()=>{o(k)})}},[c,m,f,o,S]),P(Ne,{onDragStart:async g=>{await l(g)||(I.current.moving=!0,h(()=>{u({selecting:!0})}),b.current.style.cursor="crosshair")},onDrag:({distanceY:g,distanceX:y,startX:k,startY:M})=>{if(I.current.moving){const{top:j,left:D}=b.current.getBoundingClientRect(),A=k-D,B=M-j;y>0?(I.current.left=A,I.current.width=y):(I.current.left=A+y,I.current.width=-y),g>0?(I.current.top=B,I.current.height=g):(I.current.top=B+g,I.current.height=-g),a({...I.current,moving:!0})}},onDragEnd:()=>{I.current.moving&&(h(()=>{u({selecting:!1})}),I.current.moving=!1,a({moving:!1}),b.current.style.cursor="auto")},onTap:g=>{const{target:y,ctrlKey:k,metaKey:M}=g,j=l(g);if(!j&&Oe(y,"board"))n();else{const D=Te(j);if(!D){n();return}const A=r();j&&!A.includes(D)&&(k||M?s([D]):o([D]))}},onLongTap:({target:g})=>{const y=Oe(g,"item");if(y){const k=Te(y);o([k])}},mainAction:t?"pan":"drag",children:ce("div",{ref:b,children:[f.moving&&P("div",{style:{transform:`translate(${f.left}px, ${f.top}px)`,height:`${f.height}px`,width:`${f.width}px`},className:`selector ${Gn}`}),e]})})},Qn=({children:e})=>{const{moveItems:t,placeItems:r,findElementUnderPointer:n}=Be(),{vectorFromWrapperToBoard:o}=ye(),[s,c,u,l,m]=Z(E=>[E.select,E.setSelection,E.getSelection,E.getBoardState,E.updateBoardState]),[f]=ie(E=>[E.getBoardConfig]),a=d.useRef({}),h=d.useRef({items:[]}),S=E=>{const{ctrlKey:w,metaKey:x,event:p}=E,C=n(E);if(C){p.stopPropagation();const g=u();h.current.items=g;const y=Te(C);g.includes(y)||(w||x?(h.current.items=[...g,y],s([y])):(h.current.items=[y],c([y]))),Object.assign(a.current,{moving:!0})}},v=({deltaX:E,deltaY:w,event:x})=>{if(a.current.moving){x.stopPropagation();const{movingItems:p}=l(),[C,g]=o(E,w);t(h.current.items,{x:C,y:g},!0),p||m({movingItems:!0})}},b=()=>{if(a.current.moving){const{gridSize:E=1}=f(),w=E||1;a.current={moving:!1},r(h.current.items,{type:"grid",size:w}),m({movingItems:!1})}};return le(document,"keydown",E=>{if(["INPUT","TEXTAREA"].includes(E.target.tagName))return;const w=u();if(w.length){const{gridSize:x=1}=f();let p=0,C=0;switch(E.key){case"ArrowLeft":p=-10;break;case"ArrowRight":p=10;break;case"ArrowUp":C=-10;break;case"ArrowDown":C=10;break}if(p||C){E.shiftKey&&(p*=5,C*=5),(E.ctrlKey||E.altKey||E.metaKey)&&(p/=10,C/=10);const[g,y]=o(p,C);t(w,{x:g,y},!0),r(w,{type:"grid",size:x||1}),E.preventDefault()}}}),P(Ne,{onDragStart:S,onDrag:v,onDragEnd:b,children:e})},eo=e=>{const t=d.useRef({hover:!1,x:0,y:0});return le(e.current,"mousemove",n=>{const{clientX:o,clientY:s}=n;t.current.x=o,t.current.y=s}),le(e.current,"mouseenter",()=>{t.current.hover=!0}),le(e.current,"mouseleave",()=>{t.current.hover=!1}),d.useCallback(()=>t.current,[])},to=[...Array(5).keys()].map(e=>`Digit${e+1}`),ro=()=>{const[e,t]=d.useState({}),[r,n]=Z(o=>[o.getBoardState,o.updateBoardState]);return le(document,"keydown",o=>{if(!["INPUT","TEXTAREA"].includes(o.target.tagName)&&to.includes(o.code)){const s=o.code,{translateX:c,translateY:u,scale:l}=r();o.altKey||o.metaKey||o.ctrlKey||o.shiftKey?t(m=>({...m,[s]:{translateX:c,translateY:u,scale:l}})):e[s]&&n(e[s]),o.preventDefault()}}),null},no=({children:e,moveFirst:t=!1})=>{const r=d.useRef(null),[n,o,s,c,u]=Z(p=>[{translateX:p.boardState.translateX,translateY:p.boardState.translateY,scale:p.boardState.scale,rotate:p.boardState.rotate},p.config.itemExtent,p.getConfiguration,p.updateBoardState,p.getSelection]),{zoomToCenter:l,zoomToExtent:m,moveBoard:f}=ye(),[a,h]=d.useState(!1),S=d.useRef({}),v=eo(r);ro();const b=d.useCallback(()=>{const{itemExtent:p}=s();m(p)},[s,m]);d.useEffect(()=>{!a&&o.radius&&(b(),h(!0))},[b,a,o]);const I=({clientX:p,clientY:C,scale:g})=>{l({to:{x:p,y:C},factor:1-g/500}),clearTimeout(S.current.zoom),S.current.zoom=setTimeout(()=>{c({zooming:!1})},200),c({zooming:!0})},E=({deltaX:p,deltaY:C})=>{f(({translateX:g,translateY:y})=>({translateX:g+p,translateY:y+C})),clearTimeout(S.current.pan),S.current.pan=setTimeout(()=>{c({panning:!1})},200),c({panning:!0})},w=p=>{if(["INPUT","TEXTAREA"].includes(p.target.tagName))return;let C=0,g=0,y=1;switch(p.key){case"ArrowLeft":C=-10;break;case"ArrowRight":C=10;break;case"ArrowUp":g=-10;break;case"ArrowDown":g=10;break;case"PageUp":y=1.2;break;case"PageDown":y=.8;break}if(C||g||y!==1){const k=u();if(y===1&&k.length)return;p.shiftKey&&(C*=5,g*=5),(p.ctrlKey||p.altKey||p.metaKey)&&(C/=5,g/=5),f(({translateX:M,translateY:j})=>({translateX:M+C,translateY:j+g})),l({factor:y}),p.preventDefault()}p.key===" "&&!p.repeat&&v().hover&&l({factor:3,to:v()})},x=p=>{["INPUT","TEXTAREA"].includes(p.target.tagName)||p.key===" "&&v().hover&&l({factor:1/3,to:v()})};return le(document,"keydown",w),le(document,"keyup",x),P(Ne,{onPan:E,onZoom:I,mainAction:t?"pan":"drag",children:P("div",{style:{display:"inline-block",transformOrigin:"top left",transform:`translate(${n.translateX}px, ${n.translateY}px) rotate(${n.rotate}deg) scale(${n.scale})`},className:`board-pane${n.scale<.5?" board-pane__far":""}`,ref:r,children:e})})},oo=q({position:"absolute",top:0,left:0,zIndex:210,backgroundColor:"hsla(0, 40%, 50%, 0%)",border:"2px dashed hsl(20, 55%, 40%)",pointerEvents:"none"}),so=()=>{const[e,t,r,n,o,{translateX:s,translateY:c,scale:u}]=Z(a=>[a.selection,a.getSelection,a.selectionBox,a.setSelectionBox,a.getConfiguration,{translateX:a.boardState.translateX,translateY:a.boardState.translateY,scale:a.boardState.scale}]),[l]=ie(a=>[a.items]),m=d.useCallback(()=>{const a=t(),{boardWrapperRect:h,boardWrapper:S}=o();if(a.length===0){n(null);return}const v=Ir(a,S);if(!v){n(null);return}const{left:b,top:I,width:E,height:w}=v,x={left:b-h.left,top:I-h.top,height:w,width:E};n(x)},[o,t,n]),f=nt(m,[m],300);return d.useEffect(()=>{m(),f()},[e,l,s,c,u,m,f]),!r||e.length<2?null:P("div",{style:{transform:`translate(${r.left}px, ${r.top}px)`,height:`${r.height}px`,width:`${r.width}px`},className:`selection ${oo}`})},io=()=>{const[e]=Z(t=>[t.boardState.movingItems]);return e?null:P(so,{})},ao=typeof window<"u"&&typeof navigator<"u"&&typeof document<"u";let Xe;function co(){if(!ao)return;if(Xe)return Xe;const e=new Map,t=new ResizeObserver(r=>{r.forEach(n=>{var o;return(o=e.get(n.target))==null?void 0:o.forEach(s=>setTimeout(()=>s(n),0))})});return Xe={observer:t,subscribe:(r,n)=>{let o=e.get(r);o||(o=new Set,e.set(r,o),t.observe(r)),o.add(n)},unsubscribe:(r,n)=>{const o=e.get(r);o&&(o.delete(n),o.size||(e.delete(r),t.unobserve(r)))}},Xe}function uo(e,t,r=!0){const n=r&&co(),o=rt(t),s=e&&"current"in e?e.current:e;d.useEffect(()=>{const c=e&&"current"in e?e.current:e;if(!n||!c)return;let u=!0;const l=(...m)=>{u&&o.current(...m)};return n.subscribe(c,l),()=>{u=!1,n.unsubscribe(c,l)}},[s,n])}function Wt(e,t,r){return Math.min(Math.max(e,r),t)}class lo extends Error{constructor(t){super(`Failed to parse color: "${t}"`)}}var Pe=lo;function fo(e){if(typeof e!="string")throw new Pe(e);if(e.trim().toLowerCase()==="transparent")return[0,0,0,0];let t=e.trim();t=_o.test(e)?go(e):e;const r=ho.exec(t);if(r){const c=Array.from(r).slice(1);return[...c.slice(0,3).map(u=>parseInt(Me(u,2),16)),parseInt(Me(c[3]||"f",2),16)/255]}const n=vo.exec(t);if(n){const c=Array.from(n).slice(1);return[...c.slice(0,3).map(u=>parseInt(u,16)),parseInt(c[3]||"ff",16)/255]}const o=yo.exec(t);if(o){const c=Array.from(o).slice(1);return[...c.slice(0,3).map(u=>parseInt(u,10)),parseFloat(c[3]||"1")]}const s=So.exec(t);if(s){const[c,u,l,m]=Array.from(s).slice(1).map(parseFloat);if(Wt(0,100,u)!==u)throw new Pe(e);if(Wt(0,100,l)!==l)throw new Pe(e);return[...bo(c,u,l),Number.isNaN(m)?1:m]}throw new Pe(e)}function po(e){let t=5381,r=e.length;for(;r;)t=t*33^e.charCodeAt(--r);return(t>>>0)%2341}const Vt=e=>parseInt(e.replace(/_/g,""),36),mo="1q29ehhb 1n09sgk7 1kl1ekf_ _yl4zsno 16z9eiv3 1p29lhp8 _bd9zg04 17u0____ _iw9zhe5 _to73___ _r45e31e _7l6g016 _jh8ouiv _zn3qba8 1jy4zshs 11u87k0u 1ro9yvyo 1aj3xael 1gz9zjz0 _3w8l4xo 1bf1ekf_ _ke3v___ _4rrkb__ 13j776yz _646mbhl _nrjr4__ _le6mbhl 1n37ehkb _m75f91n _qj3bzfz 1939yygw 11i5z6x8 _1k5f8xs 1509441m 15t5lwgf _ae2th1n _tg1ugcv 1lp1ugcv 16e14up_ _h55rw7n _ny9yavn _7a11xb_ 1ih442g9 _pv442g9 1mv16xof 14e6y7tu 1oo9zkds 17d1cisi _4v9y70f _y98m8kc 1019pq0v 12o9zda8 _348j4f4 1et50i2o _8epa8__ _ts6senj 1o350i2o 1mi9eiuo 1259yrp0 1ln80gnw _632xcoy 1cn9zldc _f29edu4 1n490c8q _9f9ziet 1b94vk74 _m49zkct 1kz6s73a 1eu9dtog _q58s1rz 1dy9sjiq __u89jo3 _aj5nkwg _ld89jo3 13h9z6wx _qa9z2ii _l119xgq _bs5arju 1hj4nwk9 1qt4nwk9 1ge6wau6 14j9zlcw 11p1edc_ _ms1zcxe _439shk6 _jt9y70f _754zsow 1la40eju _oq5p___ _x279qkz 1fa5r3rv _yd2d9ip _424tcku _8y1di2_ _zi2uabw _yy7rn9h 12yz980_ __39ljp6 1b59zg0x _n39zfzp 1fy9zest _b33k___ _hp9wq92 1il50hz4 _io472ub _lj9z3eo 19z9ykg0 _8t8iu3a 12b9bl4a 1ak5yw0o _896v4ku _tb8k8lv _s59zi6t _c09ze0p 1lg80oqn 1id9z8wb _238nba5 1kq6wgdi _154zssg _tn3zk49 _da9y6tc 1sg7cv4f _r12jvtt 1gq5fmkz 1cs9rvci _lp9jn1c _xw1tdnb 13f9zje6 16f6973h _vo7ir40 _bt5arjf _rc45e4t _hr4e100 10v4e100 _hc9zke2 _w91egv_ _sj2r1kk 13c87yx8 _vqpds__ _ni8ggk8 _tj9yqfb 1ia2j4r4 _7x9b10u 1fc9ld4j 1eq9zldr _5j9lhpx _ez9zl6o _md61fzm".split(" ").reduce((e,t)=>{const r=Vt(t.substring(0,3)),n=Vt(t.substring(3)).toString(16);let o="";for(let s=0;s<6-n.length;s++)o+="0";return e[r]=`${o}${n}`,e},{});function go(e){const t=e.toLowerCase().trim(),r=mo[po(t)];if(!r)throw new Pe(e);return`#${r}`}const Me=(e,t)=>Array.from(Array(t)).map(()=>e).join(""),ho=new RegExp(`^#${Me("([a-f0-9])",3)}([a-f0-9])?$`,"i"),vo=new RegExp(`^#${Me("([a-f0-9]{2})",3)}([a-f0-9]{2})?$`,"i"),yo=new RegExp(`^rgba?\\(\\s*(\\d+)\\s*${Me(",\\s*(\\d+)\\s*",2)}(?:,\\s*([\\d.]+))?\\s*\\)$`,"i"),So=/^hsla?\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%(?:\s*,\s*([\d.]+))?\s*\)$/i,_o=/^[a-z]+$/i,Ft=e=>Math.round(e*255),bo=(e,t,r)=>{let n=r/100;if(t===0)return[n,n,n].map(Ft);const o=(e%360+360)%360/60,s=(1-Math.abs(2*n-1))*(t/100),c=s*(1-Math.abs(o%2-1));let u=0,l=0,m=0;o>=0&&o<1?(u=s,l=c):o>=1&&o<2?(u=c,l=s):o>=2&&o<3?(l=s,m=c):o>=3&&o<4?(l=c,m=s):o>=4&&o<5?(u=c,m=s):o>=5&&o<6&&(u=s,m=c);const f=n-s/2,a=u+f,h=l+f,S=m+f;return[a,h,S].map(Ft)};function Eo(e){if(e==="transparent")return 0;function t(s){const c=s/255;return c<=.03928?c/12.92:Math.pow((c+.055)/1.055,2.4)}const[r,n,o]=fo(e);return .2126*t(r)+.7152*t(n)+.0722*t(o)}function Co(e){return Eo(e)>.179}const wo=q({display:"flex",flexDirection:"row",alignItems:"center",zIndex:210,pointerEvents:"none"}),xo=q({fontWeight:"bold",padding:"0 0.5em",borderRadius:"2px",maxWidth:"5em",overflow:"hidden",textOverflow:"ellipsis",marginLeft:"-0.5em",marginTop:"1.7em",whitespace:"nowrap",pointerEvents:"none"}),Io=({color:e="#666",size:t=40,text:r})=>{const n=Co(e)?"#222":"#EEE";return ce("div",{className:wo,children:[ce("svg",{version:"1.1",xmlns:"http://www.w3.org/2000/svg",viewBox:"1064.7701 445.5539 419.8101 717.0565",width:t,height:t,children:[P("path",{d:"m 1197.1015,869.718 -62.2719,-154.49286 133.3276,-9.05842 -257.6915,-253.12748 1.2392,356.98609 88.2465,-79.47087 61.702,152.78366 z",style:{fill:n}}),P("path",{d:"m 1193.0939,861.12419 -62.2719,-154.49286 133.3276,-9.05842 -257.6915,-253.12748 1.2392,356.98609 88.2465,-79.47087 61.702,152.78366 z",style:{fill:"white",stroke:"#111",strokeWidth:20}})]}),P("div",{style:{color:n,backgroundColor:e},className:xo,children:r})]})},Oo=d.memo(Io),To=q({top:0,left:0,zIndex:210,position:"fixed",pointerEvents:"none"}),ko=({pos:e,...t})=>P("div",{className:To,style:{transform:`translate(${e.x-6}px, ${e.y-15}px)`},children:P(Oo,{...t})}),Po=({children:e})=>{const[t]=Z(v=>[v.getConfiguration]),{fromWrapperToBoard:r,fromBoardToWrapper:n}=ye(),[o,s,c,u]=Se(v=>[v.getUser(),v.getLocalUsers(),v.cursors,v.users]),[l,m]=Se(v=>[v.moveCursor,v.removeCursor]),{boardWrapperRect:f}=t(),a=({clientX:v,clientY:b})=>{const[I,E]=r(v-f.left,b-f.top);l(o.id,{x:I,y:E})},h=()=>{m(o.id)},S=s.reduce((v,b)=>(b.id!==o.id&&c[b.id]&&(v[b.id]=c[b.id]),v),{});return ce("div",{onPointerMove:a,onPointerLeave:h,children:[e,Object.entries(S).map(([v,b])=>{const[I,E]=n(b.x,b.y),w={x:I+f.left,y:E+f.top};return et(w,f)?P(ko,{pos:w,text:u[v].name,color:u[v].color},v):null})]})},Mo=({children:e})=>e,Do={overflow:"hidden",position:"absolute",inset:0},jo=({moveFirst:e=!0,style:t,wrapperStyle:r,itemTemplates:n={},boardSize:o=Pt,children:s,showResizeHandle:c=!1,Wrapper:u=Mo})=>{const l=d.useRef(null),[m,f]=Z(v=>[v.config.uid,v.updateConfiguration]),{updateItemExtent:a}=ye(),h={userSelect:"none",width:`${o}px`,height:`${o}px`,backgroundColor:"#333",...t};d.useEffect(()=>{const v=b=>{Oe(b.target,"board")&&b.preventDefault()};return document.body.addEventListener("wheel",v,{passive:!1}),()=>{document.body.removeEventListener("wheel",v)}},[]),d.useEffect(()=>{f({boardWrapper:l.current})},[f]),d.useEffect(()=>{m||f({uid:ge()})},[m,f]),d.useEffect(()=>{f({itemTemplates:n,boardSize:o,showResizeHandle:c})},[n,o,c,f]),d.useEffect(()=>{f({boardWrapperRect:l.current.getBoundingClientRect()}),a(),setTimeout(a,2e3)},[f,a]),uo(l,()=>{l.current&&f({boardWrapperRect:l.current.getBoundingClientRect()})});const S=q({...Do,...r});return ce("div",{ref:l,id:m,className:`sync-board ${S}`,children:[P(Po,{children:P(Zn,{moveFirst:e,children:P(no,{moveFirst:e,children:P(Qn,{moveFirst:e,children:P(u,{children:ce("div",{onContextMenu:v=>{v.preventDefault()},style:h,className:"board",children:[P(Vn,{}),s]})})})})})}),P(io,{})]})};Cn(d.createElement),U.Board=jo,U.BoardWrapper=ln,U.RoomWrapper=fn,U.useAvailableActions=qr,U.useBoardConfig=tn,U.useBoardPosition=ye,U.useBoardState=rn,U.useDebouncedItems=$r,U.useItemActions=Be,U.useItemInteraction=jt,U.useItems=Rr,U.useMessage=un,U.useSelectedItems=Br,U.useSelectionBox=Gr,U.useSessionInfo=nn,U.useUsers=en,U.useWire=Ie,Object.defineProperty(U,Symbol.toStringTag,{value:"Module"})});
|
|
108
|
+
`,$n=({onReload:e})=>se("div",{className:`syncboard-error-item ${q({width:"100px",display:"flex",flexDirection:"column",justifyContent:"center",textAlign:"center",color:"red"})}`,children:["Sorry, this item seems broken.",k("button",{onClick:e,children:"Reload it"})]});class An extends d.Component{constructor(t){super(t),this.state={hasError:!1,itemId:t.itemId},this.onReload=this.onReload.bind(this)}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(t){console.error(`Error for item ${this.state.itemId}`,t,this.props.state)}onReload(){this.setState({hasError:!1})}render(){const{ErrorComponent:t}=this.props;return this.state.hasError?k(t,{onReload:this.onReload}):this.props.children}}const Ln=e=>{e.target.className=""},zn=({width:e,height:t,actualWidth:r,actualHeight:n,prevState:o,keepRatio:s})=>{let{width:c,height:u}=o;if([c,u]=[parseFloat(c),parseFloat(u)],(!c||Number.isNaN(Number(c)))&&(c=r),(!u||Number.isNaN(Number(u)))&&(u=n),s){const l=c/u;return{...o,width:(c+e).toFixed(1),height:(u+t/l).toFixed(1)}}return{...o,width:(c+e).toFixed(1),height:(u+t).toFixed(1)}},Yn={w:!0,h:!0,b:!0},Bn=({setState:e,state:{type:t,rotation:r=0,id:n,locked:o,extraClasses:s,...c}={},animate:u="hvr-pop",isSelected:l,itemMap:p,showResizeHandle:f=!0})=>{var g;const a=d.useRef(null),{component:h=()=>null,resizeDirections:b=Yn,resize:v=zn}=p[t],E=d.useCallback(S=>e(n,S),[e,n]);d.useEffect(()=>{a.current.className=u},[u]);const O=["item",n,xn];o&&O.push("locked"),l&&(O.push("selected"),O.push(In));const y=O.join(" "),w=({width:S=0,height:T=0,keepRatio:P})=>{E(D=>{const{offsetWidth:j,offsetHeight:L}=a.current;return v({prevState:D,width:S,height:T,actualHeight:L,actualWidth:j,keepRatio:P})})},x=({width:S})=>{w({width:S})},m=({height:S})=>{w({height:S})},C=({width:S})=>{w({height:S,width:S,keepRatio:!0})};return k("div",{style:{transform:`rotate(${r}deg`},"data-id":n,className:y,children:se("div",{style:{display:"flex"},ref:a,onAnimationEnd:Ln,onKeyDown:S=>S.stopPropagation(),onKeyUp:S=>S.stopPropagation(),children:[k(An,{itemId:n,state:c,ErrorComponent:((g=p==null?void 0:p.error)==null?void 0:g.component)||$n,children:k(h,{...c,id:n,setState:E})}),k("div",{className:`corner ${ke} ${On}`}),k("div",{className:`corner ${ke} ${Tn}`}),k("div",{className:`corner ${ke} ${Pn}`}),k("div",{className:`corner ${ke} ${kn}`}),k("div",{className:`center ${ke} ${Mn}`}),f&&se(fr,{children:[b.b&&k(at,{className:`${ct} ${Rn}`,onResize:C}),b.h&&k(at,{className:`${ct} ${Dn}`,onResize:m}),b.w&&k(at,{className:`${ct} ${jn}`,onResize:x})]})]})})},Nn=d.memo(Bn,({state:e,setState:t,isSelected:r,showResizeHandle:n},{state:o,setState:s,isSelected:c,showResizeHandle:u})=>r===c&&n===u&&t===s&&wn(e,o)),Xn=e=>e,Un=({state:e={},getCurrentUser:t,className:r,...n})=>{if(!n.itemMap[e.type])return null;const{stateHook:o=Xn}=n.itemMap[e.type],{x:s=0,y:c=0,layer:u=0,moving:l,...p}=o(e,{getCurrentUser:t}),f=(u+4)*10+100+(l?5:0);return k("div",{className:r,style:{transform:`translate(${s}px, ${c}px)`,zIndex:f},children:k(Nn,{...n,showResizeHandle:n.isSelected&&n.showResizeHandle,state:p})})},Wn=d.memo(Un),Vn=()=>{const{updateItem:e}=Be(),[t,r]=ne(p=>[p.itemIds,p.items]),[n,o,s,c]=Q(p=>[p.config.boardSize,p.config.showResizeHandle,p.config.itemTemplates,p.selection]),[u]=ye(p=>[p.getUser]),l=q({position:"absolute",top:`${n/2}px`,left:`${n/2}px`,display:"inline-block"});return t.map(p=>k(Wn,{state:r[p],setState:e,isSelected:c.includes(p),itemMap:s,boardSize:n,getCurrentUser:u,showResizeHandle:o,className:l},p))};function Fn(e=!1){const t=d.useRef(e),r=d.useCallback(()=>t.current,[]);return d.useEffect(()=>(t.current=!0,()=>{t.current=!1}),[]),r}function Kn(e,...t){e&&e.addEventListener&&e.addEventListener(...t)}function Hn(e,...t){e&&e.removeEventListener&&e.removeEventListener(...t)}const qn=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);function ae(e,...t){const r=Fn(),n=rt(t[1]),o=d.useMemo(()=>function(...s){r()&&(typeof n.current=="function"?n.current.apply(this,s):typeof n.current.handleEvent=="function"&&n.current.handleEvent.apply(this,s))},[]);d.useEffect(()=>{const s=e&&qn(e,"current")?e.current:e;if(!s)return;const c=t.slice(2);return Kn(s,t[0],o,...c),()=>Hn(s,t[0],o,...c)},[e,t[0]])}const Gn=q({zIndex:210,position:"absolute",backgroundColor:"hsla(0, 40%, 50%, 10%)",border:"2px solid hsl(0, 55%, 40%)"}),Jn=(e,t,r=!1)=>{const n=t.getElementsByClassName("selector");if(!n.length)return[];const o=n[0];return Array.from(t.getElementsByClassName("item")).filter(s=>{const c=Te(s),u=e[c];return!u||!r&&u.locked?!1:xr(s,o)}).map(s=>Te(s))},Zn=({children:e,moveFirst:t})=>{const[r,n,o,s,c,u]=Q(g=>[g.getSelection,g.clear,g.setSelection,g.select,g.getConfiguration,g.getBoardState,g.updateBoardState]),{findElementUnderPointer:l}=Be(),[p]=ne(g=>[g.getItems]),[f,a]=d.useState({}),[,h]=d.useTransition(),[b,v]=d.useState(!1),E=d.useRef(null),O=d.useRef({moving:!1});return ae(document,"keydown",g=>{g.key==="l"&&v(!0)}),ae(document,"keyup",g=>{g.key==="l"&&v(!1)}),d.useEffect(()=>(n(),()=>{n()}),[n]),d.useEffect(()=>{if(O.current.moving){const g=p(),{boardWrapper:S}=c(),T=Jn(g,S,b);h(()=>{o(T)})}},[c,p,f,o,b]),k(Ne,{onDragStart:async g=>{await l(g)||(O.current.moving=!0,h(()=>{u({selecting:!0})}),E.current.style.cursor="crosshair")},onDrag:({distanceY:g,distanceX:S,startX:T,startY:P})=>{if(O.current.moving){const{top:D,left:j}=E.current.getBoundingClientRect(),L=T-j,N=P-D;S>0?(O.current.left=L,O.current.width=S):(O.current.left=L+S,O.current.width=-S),g>0?(O.current.top=N,O.current.height=g):(O.current.top=N+g,O.current.height=-g),a({...O.current,moving:!0})}},onDragEnd:()=>{O.current.moving&&(h(()=>{u({selecting:!1})}),O.current.moving=!1,a({moving:!1}),E.current.style.cursor="auto")},onTap:g=>{const{target:S,ctrlKey:T,metaKey:P}=g,D=l(g);if(!D&&Oe(S,"board"))n();else{const j=Te(D);if(!j){n();return}const L=r();D&&!L.includes(j)&&(T||P?s([j]):o([j]))}},onLongTap:({target:g})=>{const S=Oe(g,"item");if(S){const T=Te(S);o([T])}},mainAction:t?"pan":"drag",children:se("div",{ref:E,children:[f.moving&&k("div",{style:{transform:`translate(${f.left}px, ${f.top}px)`,height:`${f.height}px`,width:`${f.width}px`},className:`selector ${Gn}`}),e]})})},Qn=({children:e})=>{const{moveItems:t,placeItems:r,findElementUnderPointer:n}=Be(),{vectorFromWrapperToBoard:o}=ve(),[s,c,u,l,p]=Q(y=>[y.select,y.setSelection,y.getSelection,y.getBoardState,y.updateBoardState]),[f]=ne(y=>[y.getBoardConfig]),a=d.useRef({}),h=d.useRef({items:[]}),b=y=>{const{ctrlKey:w,metaKey:x,event:m}=y,C=n(y);if(C){m.stopPropagation();const g=u();h.current.items=g;const S=Te(C);g.includes(S)||(w||x?(h.current.items=[...g,S],s([S])):(h.current.items=[S],c([S]))),Object.assign(a.current,{moving:!0})}},v=({deltaX:y,deltaY:w,event:x})=>{if(a.current.moving){x.stopPropagation();const{movingItems:m}=l(),[C,g]=o(y,w);t(h.current.items,{x:C,y:g},!0),m||p({movingItems:!0})}},E=()=>{if(a.current.moving){const{gridSize:y=1}=f(),w=y||1;a.current={moving:!1},r(h.current.items,{type:"grid",size:w}),p({movingItems:!1})}};return ae(document,"keydown",y=>{if(["INPUT","TEXTAREA"].includes(y.target.tagName))return;const w=u();if(w.length){const{gridSize:x=1}=f();let m=0,C=0;switch(y.key){case"ArrowLeft":m=-10;break;case"ArrowRight":m=10;break;case"ArrowUp":C=-10;break;case"ArrowDown":C=10;break}if(m||C){y.shiftKey&&(m*=5,C*=5),(y.ctrlKey||y.altKey||y.metaKey)&&(m/=10,C/=10);const[g,S]=o(m,C);t(w,{x:g,y:S},!0),r(w,{type:"grid",size:x||1}),y.preventDefault()}}}),k(Ne,{onDragStart:b,onDrag:v,onDragEnd:E,children:e})},eo=e=>{const t=d.useRef({hover:!1,x:0,y:0});return ae(e.current,"mousemove",n=>{const{clientX:o,clientY:s}=n;t.current.x=o,t.current.y=s}),ae(e.current,"mouseenter",()=>{t.current.hover=!0}),ae(e.current,"mouseleave",()=>{t.current.hover=!1}),d.useCallback(()=>t.current,[])},to=[...Array(5).keys()].map(e=>`Digit${e+1}`),ro=()=>{const[e,t]=d.useState({}),[r,n]=Q(o=>[o.getBoardState,o.updateBoardState]);return ae(document,"keydown",o=>{if(!["INPUT","TEXTAREA"].includes(o.target.tagName)&&to.includes(o.code)){const s=o.code,{translateX:c,translateY:u,scale:l}=r();o.altKey||o.metaKey||o.ctrlKey||o.shiftKey?t(p=>({...p,[s]:{translateX:c,translateY:u,scale:l}})):e[s]&&n(e[s]),o.preventDefault()}}),null},no=({children:e,moveFirst:t=!1})=>{const r=d.useRef(null),[n,o,s,c,u]=Q(m=>[{translateX:m.boardState.translateX,translateY:m.boardState.translateY,scale:m.boardState.scale,rotate:m.boardState.rotate},m.config.itemExtent,m.getConfiguration,m.updateBoardState,m.getSelection]),{zoomToCenter:l,zoomToExtent:p,moveBoard:f}=ve(),[a,h]=d.useState(!1),b=d.useRef({}),v=eo(r);ro();const E=d.useCallback(()=>{const{itemExtent:m}=s();p(m)},[s,p]);d.useEffect(()=>{!a&&o.radius&&(E(),h(!0))},[E,a,o]);const O=({clientX:m,clientY:C,scale:g})=>{l({to:{x:m,y:C},factor:1-g/500}),clearTimeout(b.current.zoom),b.current.zoom=setTimeout(()=>{c({zooming:!1})},200),c({zooming:!0})},y=({deltaX:m,deltaY:C})=>{f(({translateX:g,translateY:S})=>({translateX:g+m,translateY:S+C})),clearTimeout(b.current.pan),b.current.pan=setTimeout(()=>{c({panning:!1})},200),c({panning:!0})},w=m=>{if(["INPUT","TEXTAREA"].includes(m.target.tagName))return;let C=0,g=0,S=1;switch(m.key){case"ArrowLeft":C=-10;break;case"ArrowRight":C=10;break;case"ArrowUp":g=-10;break;case"ArrowDown":g=10;break;case"PageUp":S=1.2;break;case"PageDown":S=.8;break}if(C||g||S!==1){const T=u();if(S===1&&T.length)return;m.shiftKey&&(C*=5,g*=5),(m.ctrlKey||m.altKey||m.metaKey)&&(C/=5,g/=5),f(({translateX:P,translateY:D})=>({translateX:P+C,translateY:D+g})),l({factor:S}),m.preventDefault()}m.key===" "&&!m.repeat&&v().hover&&l({factor:3,to:v()})},x=m=>{["INPUT","TEXTAREA"].includes(m.target.tagName)||m.key===" "&&v().hover&&l({factor:1/3,to:v()})};return ae(document,"keydown",w),ae(document,"keyup",x),k(Ne,{onPan:y,onZoom:O,mainAction:t?"pan":"drag",children:k("div",{style:{display:"inline-block",transformOrigin:"top left",transform:`translate(${n.translateX}px, ${n.translateY}px) rotate(${n.rotate}deg) scale(${n.scale})`},className:`board-pane${n.scale<.5?" board-pane__far":""}`,ref:r,children:e})})},oo=q({position:"absolute",top:0,left:0,zIndex:210,backgroundColor:"hsla(0, 40%, 50%, 0%)",border:"2px dashed hsl(20, 55%, 40%)",pointerEvents:"none"}),so=()=>{const[e,t,r,n,o,{translateX:s,translateY:c,scale:u}]=Q(a=>[a.selection,a.getSelection,a.selectionBox,a.setSelectionBox,a.getConfiguration,{translateX:a.boardState.translateX,translateY:a.boardState.translateY,scale:a.boardState.scale}]),[l]=ne(a=>[a.items]),p=d.useCallback(()=>{const a=t(),{boardWrapperRect:h,boardWrapper:b}=o();if(a.length===0){n(null);return}const v=Ir(a,b);if(!v){n(null);return}const{left:E,top:O,width:y,height:w}=v,x={left:E-h.left,top:O-h.top,height:w,width:y};n(x)},[o,t,n]),f=nt(p,[p],300);return d.useEffect(()=>{p(),f()},[e,l,s,c,u,p,f]),!r||e.length<2?null:k("div",{style:{transform:`translate(${r.left}px, ${r.top}px)`,height:`${r.height}px`,width:`${r.width}px`},className:`selection ${oo}`})},io=()=>{const[e]=Q(t=>[t.boardState.movingItems]);return e?null:k(so,{})},ao=typeof window<"u"&&typeof navigator<"u"&&typeof document<"u";let Xe;function co(){if(!ao)return;if(Xe)return Xe;const e=new Map,t=new ResizeObserver(r=>{r.forEach(n=>{var o;return(o=e.get(n.target))==null?void 0:o.forEach(s=>setTimeout(()=>s(n),0))})});return Xe={observer:t,subscribe:(r,n)=>{let o=e.get(r);o||(o=new Set,e.set(r,o),t.observe(r)),o.add(n)},unsubscribe:(r,n)=>{const o=e.get(r);o&&(o.delete(n),o.size||(e.delete(r),t.unobserve(r)))}},Xe}function uo(e,t,r=!0){const n=r&&co(),o=rt(t),s=e&&"current"in e?e.current:e;d.useEffect(()=>{const c=e&&"current"in e?e.current:e;if(!n||!c)return;let u=!0;const l=(...p)=>{u&&o.current(...p)};return n.subscribe(c,l),()=>{u=!1,n.unsubscribe(c,l)}},[s,n])}function Wt(e,t,r){return Math.min(Math.max(e,r),t)}class lo extends Error{constructor(t){super(`Failed to parse color: "${t}"`)}}var Pe=lo;function fo(e){if(typeof e!="string")throw new Pe(e);if(e.trim().toLowerCase()==="transparent")return[0,0,0,0];let t=e.trim();t=bo.test(e)?go(e):e;const r=ho.exec(t);if(r){const c=Array.from(r).slice(1);return[...c.slice(0,3).map(u=>parseInt(Me(u,2),16)),parseInt(Me(c[3]||"f",2),16)/255]}const n=vo.exec(t);if(n){const c=Array.from(n).slice(1);return[...c.slice(0,3).map(u=>parseInt(u,16)),parseInt(c[3]||"ff",16)/255]}const o=yo.exec(t);if(o){const c=Array.from(o).slice(1);return[...c.slice(0,3).map(u=>parseInt(u,10)),parseFloat(c[3]||"1")]}const s=So.exec(t);if(s){const[c,u,l,p]=Array.from(s).slice(1).map(parseFloat);if(Wt(0,100,u)!==u)throw new Pe(e);if(Wt(0,100,l)!==l)throw new Pe(e);return[..._o(c,u,l),Number.isNaN(p)?1:p]}throw new Pe(e)}function po(e){let t=5381,r=e.length;for(;r;)t=t*33^e.charCodeAt(--r);return(t>>>0)%2341}const Vt=e=>parseInt(e.replace(/_/g,""),36),mo="1q29ehhb 1n09sgk7 1kl1ekf_ _yl4zsno 16z9eiv3 1p29lhp8 _bd9zg04 17u0____ _iw9zhe5 _to73___ _r45e31e _7l6g016 _jh8ouiv _zn3qba8 1jy4zshs 11u87k0u 1ro9yvyo 1aj3xael 1gz9zjz0 _3w8l4xo 1bf1ekf_ _ke3v___ _4rrkb__ 13j776yz _646mbhl _nrjr4__ _le6mbhl 1n37ehkb _m75f91n _qj3bzfz 1939yygw 11i5z6x8 _1k5f8xs 1509441m 15t5lwgf _ae2th1n _tg1ugcv 1lp1ugcv 16e14up_ _h55rw7n _ny9yavn _7a11xb_ 1ih442g9 _pv442g9 1mv16xof 14e6y7tu 1oo9zkds 17d1cisi _4v9y70f _y98m8kc 1019pq0v 12o9zda8 _348j4f4 1et50i2o _8epa8__ _ts6senj 1o350i2o 1mi9eiuo 1259yrp0 1ln80gnw _632xcoy 1cn9zldc _f29edu4 1n490c8q _9f9ziet 1b94vk74 _m49zkct 1kz6s73a 1eu9dtog _q58s1rz 1dy9sjiq __u89jo3 _aj5nkwg _ld89jo3 13h9z6wx _qa9z2ii _l119xgq _bs5arju 1hj4nwk9 1qt4nwk9 1ge6wau6 14j9zlcw 11p1edc_ _ms1zcxe _439shk6 _jt9y70f _754zsow 1la40eju _oq5p___ _x279qkz 1fa5r3rv _yd2d9ip _424tcku _8y1di2_ _zi2uabw _yy7rn9h 12yz980_ __39ljp6 1b59zg0x _n39zfzp 1fy9zest _b33k___ _hp9wq92 1il50hz4 _io472ub _lj9z3eo 19z9ykg0 _8t8iu3a 12b9bl4a 1ak5yw0o _896v4ku _tb8k8lv _s59zi6t _c09ze0p 1lg80oqn 1id9z8wb _238nba5 1kq6wgdi _154zssg _tn3zk49 _da9y6tc 1sg7cv4f _r12jvtt 1gq5fmkz 1cs9rvci _lp9jn1c _xw1tdnb 13f9zje6 16f6973h _vo7ir40 _bt5arjf _rc45e4t _hr4e100 10v4e100 _hc9zke2 _w91egv_ _sj2r1kk 13c87yx8 _vqpds__ _ni8ggk8 _tj9yqfb 1ia2j4r4 _7x9b10u 1fc9ld4j 1eq9zldr _5j9lhpx _ez9zl6o _md61fzm".split(" ").reduce((e,t)=>{const r=Vt(t.substring(0,3)),n=Vt(t.substring(3)).toString(16);let o="";for(let s=0;s<6-n.length;s++)o+="0";return e[r]=`${o}${n}`,e},{});function go(e){const t=e.toLowerCase().trim(),r=mo[po(t)];if(!r)throw new Pe(e);return`#${r}`}const Me=(e,t)=>Array.from(Array(t)).map(()=>e).join(""),ho=new RegExp(`^#${Me("([a-f0-9])",3)}([a-f0-9])?$`,"i"),vo=new RegExp(`^#${Me("([a-f0-9]{2})",3)}([a-f0-9]{2})?$`,"i"),yo=new RegExp(`^rgba?\\(\\s*(\\d+)\\s*${Me(",\\s*(\\d+)\\s*",2)}(?:,\\s*([\\d.]+))?\\s*\\)$`,"i"),So=/^hsla?\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%(?:\s*,\s*([\d.]+))?\s*\)$/i,bo=/^[a-z]+$/i,Ft=e=>Math.round(e*255),_o=(e,t,r)=>{let n=r/100;if(t===0)return[n,n,n].map(Ft);const o=(e%360+360)%360/60,s=(1-Math.abs(2*n-1))*(t/100),c=s*(1-Math.abs(o%2-1));let u=0,l=0,p=0;o>=0&&o<1?(u=s,l=c):o>=1&&o<2?(u=c,l=s):o>=2&&o<3?(l=s,p=c):o>=3&&o<4?(l=c,p=s):o>=4&&o<5?(u=c,p=s):o>=5&&o<6&&(u=s,p=c);const f=n-s/2,a=u+f,h=l+f,b=p+f;return[a,h,b].map(Ft)};function Eo(e){if(e==="transparent")return 0;function t(s){const c=s/255;return c<=.03928?c/12.92:Math.pow((c+.055)/1.055,2.4)}const[r,n,o]=fo(e);return .2126*t(r)+.7152*t(n)+.0722*t(o)}function Co(e){return Eo(e)>.179}const wo=q({display:"flex",flexDirection:"row",alignItems:"center",zIndex:210,pointerEvents:"none"}),xo=q({fontWeight:"bold",padding:"0 0.5em",borderRadius:"2px",maxWidth:"5em",overflow:"hidden",textOverflow:"ellipsis",marginLeft:"-0.5em",marginTop:"1.7em",whitespace:"nowrap",pointerEvents:"none"}),Io=({color:e="#666",size:t=40,text:r})=>{const n=Co(e)?"#222":"#EEE";return se("div",{className:wo,children:[se("svg",{version:"1.1",xmlns:"http://www.w3.org/2000/svg",viewBox:"1064.7701 445.5539 419.8101 717.0565",width:t,height:t,children:[k("path",{d:"m 1197.1015,869.718 -62.2719,-154.49286 133.3276,-9.05842 -257.6915,-253.12748 1.2392,356.98609 88.2465,-79.47087 61.702,152.78366 z",style:{fill:n}}),k("path",{d:"m 1193.0939,861.12419 -62.2719,-154.49286 133.3276,-9.05842 -257.6915,-253.12748 1.2392,356.98609 88.2465,-79.47087 61.702,152.78366 z",style:{fill:"white",stroke:"#111",strokeWidth:20}})]}),k("div",{style:{color:n,backgroundColor:e},className:xo,children:r})]})},Oo=d.memo(Io),To=q({top:0,left:0,zIndex:210,position:"fixed",pointerEvents:"none"}),ko=({pos:e,...t})=>k("div",{className:To,style:{transform:`translate(${e.x-6}px, ${e.y-15}px)`},children:k(Oo,{...t})}),Po=({children:e})=>{const[t]=Q(v=>[v.getConfiguration]),{fromWrapperToBoard:r,fromBoardToWrapper:n}=ve(),[o,s,c,u]=ye(v=>[v.getUser(),v.getLocalUsers(),v.cursors,v.users]),[l,p]=ye(v=>[v.moveCursor,v.removeCursor]),{boardWrapperRect:f}=t(),a=({clientX:v,clientY:E})=>{const[O,y]=r(v-f.left,E-f.top);l(o.id,{x:O,y})},h=()=>{p(o.id)},b=s.reduce((v,E)=>(E.id!==o.id&&c[E.id]&&(v[E.id]=c[E.id]),v),{});return se("div",{onPointerMove:a,onPointerLeave:h,children:[e,Object.entries(b).map(([v,E])=>{const[O,y]=n(E.x,E.y),w={x:O+f.left,y:y+f.top};return et(w,f)?k(ko,{pos:w,text:u[v].name,color:u[v].color},v):null})]})},Mo=({children:e})=>e,jo={overflow:"hidden",position:"absolute",inset:0},Do=({moveFirst:e=!0,style:t,wrapperStyle:r,itemTemplates:n={},boardSize:o=Mt,children:s,showResizeHandle:c=!1,Wrapper:u=Mo})=>{const l=d.useRef(null),[p,f]=Q(v=>[v.config.uid,v.updateConfiguration]),{updateItemExtent:a}=ve(),h={userSelect:"none",width:`${o}px`,height:`${o}px`,backgroundColor:"#333",...t};d.useEffect(()=>{const v=E=>{Oe(E.target,"board")&&E.preventDefault()};return document.body.addEventListener("wheel",v,{passive:!1}),()=>{document.body.removeEventListener("wheel",v)}},[]),d.useEffect(()=>{f({boardWrapper:l.current})},[f]),d.useEffect(()=>{p||f({uid:me()})},[p,f]),d.useEffect(()=>{f({itemTemplates:n,boardSize:o,showResizeHandle:c})},[n,o,c,f]),d.useEffect(()=>{f({boardWrapperRect:l.current.getBoundingClientRect()}),a(),setTimeout(a,2e3)},[f,a]),uo(l,()=>{l.current&&f({boardWrapperRect:l.current.getBoundingClientRect()})});const b=q({...jo,...r});return se("div",{ref:l,id:p,className:`sync-board ${b}`,children:[k(Po,{children:k(Zn,{moveFirst:e,children:k(no,{moveFirst:e,children:k(Qn,{moveFirst:e,children:k(u,{children:se("div",{onContextMenu:v=>{v.preventDefault()},style:h,className:"board",children:[k(Vn,{}),s]})})})})})}),k(io,{})]})};Cn(d.createElement),U.Board=Do,U.BoardWrapper=ln,U.RoomWrapper=fn,U.useAvailableActions=qr,U.useBoardConfig=tn,U.useBoardPosition=ve,U.useBoardState=rn,U.useDebouncedItems=$r,U.useItemActions=Be,U.useItemInteraction=ot,U.useItems=Rr,U.useMessage=un,U.useSelectedItems=Br,U.useSelectionBox=Gr,U.useSessionInfo=nn,U.useUsers=en,U.useWire=Ie,Object.defineProperty(U,Symbol.toStringTag,{value:"Module"})});
|
|
109
109
|
//# sourceMappingURL=react-sync-board.umd.cjs.map
|