@100mslive/hms-whiteboard 0.0.6-alpha.0 → 0.0.6-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ErrorFallback.js +1 -1
- package/dist/ErrorFallback.js.map +1 -1
- package/dist/Whiteboard.js +1 -1
- package/dist/Whiteboard.js.map +1 -1
- package/dist/hooks/StoreClient.d.ts +2 -2
- package/dist/hooks/StoreClient.js +1 -1
- package/dist/hooks/StoreClient.js.map +1 -1
- package/dist/hooks/useCollaboration.js +1 -1
- package/dist/hooks/useCollaboration.js.map +1 -1
- package/dist/index.cjs.js +2 -2
- package/dist/index.cjs.js.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/package.json +3 -2
- package/src/ErrorFallback.tsx +169 -0
- package/src/Whiteboard.tsx +60 -0
- package/src/grpc/sessionstore.client.ts +174 -0
- package/src/grpc/sessionstore.ts +1128 -0
- package/src/hooks/StoreClient.ts +136 -0
- package/src/hooks/default_store.ts +141 -0
- package/src/hooks/useCollaboration.ts +257 -0
- package/src/hooks/useSessionStore.ts +32 -0
- package/src/hooks/useSetEditorPermissions.tsx +38 -0
- package/src/index.css +26 -0
- package/src/index.ts +2 -0
- package/src/utils.ts +22 -0
package/dist/ErrorFallback.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__awaiter as e}from"./node_modules/tslib/tslib.es6.mjs.js";import t,{useRef as r,useState as n,useLayoutEffect as o,useEffect as l}from"react";import"./node_modules/@tldraw/state/dist-esm/lib/core/capture.mjs.js";import"./node_modules/@tldraw/state/dist-esm/lib/core/helpers.mjs.js";import{useValue as a}from"./node_modules/@tldraw/state/dist-esm/lib/react/useValue.mjs.js";import{hardResetEditor as s}from"@tldraw/tldraw";import c from"./node_modules/classnames/index.js";const m=({error:m,editor:d,refresh:i})=>{const u=r(null),[_,p]=n("production"!==process.env.NODE_ENV),[E,h]=n(!1),[b,
|
|
1
|
+
import{__awaiter as e}from"./node_modules/tslib/tslib.es6.mjs.js";import t,{useRef as r,useState as n,useLayoutEffect as o,useEffect as l}from"react";import"./node_modules/@tldraw/state/dist-esm/lib/core/capture.mjs.js";import"./node_modules/@tldraw/state/dist-esm/lib/core/helpers.mjs.js";import{useValue as a}from"./node_modules/@tldraw/state/dist-esm/lib/react/useValue.mjs.js";import{hardResetEditor as s}from"@tldraw/tldraw";import c from"./node_modules/classnames/index.js";const m=({error:m,editor:d,refresh:i})=>{const u=r(null),[_,p]=n("production"!==process.env.NODE_ENV),[E,h]=n(!1),[b,y]=n(!1),f=m instanceof Error?m.message:String(m),g=m instanceof Error?m.stack:null,v=a("isDarkMode",(()=>{try{if(d)return d.user.getIsDarkMode()}catch(e){}return null}),[d]),[,k]=n(null);o((()=>{var e;null!==v&&k(v);let t=null===(e=u.current)||void 0===e?void 0:e.parentElement,r=!1;for(;t;){if(t.classList.contains("tl-theme__dark")||t.classList.contains("tl-theme__light")){r=!0;break}t=t.parentElement}k(r?null:window.matchMedia("(prefers-color-scheme: dark)").matches)}),[v]),l((()=>{if(E){const e=setTimeout((()=>{h(!1)}),2e3);return()=>clearTimeout(e)}}),[E]);return t.createElement("div",{ref:u,className:c("tl-container tl-error-boundary","tl-theme__light"),style:{position:"static"}},t.createElement("div",{className:"tl-error-boundary__overlay"}),t.createElement("div",{className:c("tl-modal","tl-error-boundary__content",{"tl-error-boundary__content__expanded":_&&!b})},b?t.createElement(t.Fragment,null,t.createElement("h2",null,"Are you sure?"),t.createElement("p",null,"Resetting your data will delete your drawing and cannot be undone."),t.createElement("div",{className:"tl-error-boundary__content__actions"},t.createElement("button",{onClick:()=>y(!1)},"Cancel"),t.createElement("button",{className:"tl-error-boundary__reset",onClick:()=>e(void 0,void 0,void 0,(function*(){s()}))},"Reset data"))):t.createElement(t.Fragment,null,t.createElement("h2",null,"Something's gone wrong."),t.createElement("p",null,"Sorry, we encountered an error. Please refresh the page to continue. If you keep seeing this error, you can ",t.createElement("a",{href:"https://discord.gg/pTge2BwDBq"},"ask for help on Discord"),"."),_&&t.createElement("div",{className:"tl-error-boundary__content__error"},t.createElement("pre",null,t.createElement("code",null,null!=g?g:f)),t.createElement("button",{onClick:()=>{const e=document.createElement("textarea");e.value=null!=g?g:f,document.body.appendChild(e),e.select(),document.execCommand("copy"),e.remove(),h(!0)}},E?"Copied!":"Copy")),t.createElement("div",{className:"tl-error-boundary__content__actions"},t.createElement("button",{onClick:()=>p(!_)},_?"Hide details":"Show details"),t.createElement("div",{className:"tl-error-boundary__content__actions__group"},t.createElement("button",{className:"tl-error-boundary__refresh",onClick:i},"Refresh"))))))};export{m as ErrorFallback};
|
|
2
2
|
//# sourceMappingURL=ErrorFallback.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorFallback.js","sources":["../src/ErrorFallback.tsx"],"sourcesContent":[null],"names":["ErrorFallback","error","editor","refresh","containerRef","useRef","shouldShowError","setShouldShowError","useState","process","env","NODE_ENV","didCopy","setDidCopy","shouldShowResetConfirmation","setShouldShowResetConfirmation","errorMessage","Error","message","String","errorStack","stack","isDarkModeFromApp","useValue","user","
|
|
1
|
+
{"version":3,"file":"ErrorFallback.js","sources":["../src/ErrorFallback.tsx"],"sourcesContent":[null],"names":["ErrorFallback","error","editor","refresh","containerRef","useRef","shouldShowError","setShouldShowError","useState","process","env","NODE_ENV","didCopy","setDidCopy","shouldShowResetConfirmation","setShouldShowResetConfirmation","errorMessage","Error","message","String","errorStack","stack","isDarkModeFromApp","useValue","user","getIsDarkMode","_a","setIsDarkMode","useLayoutEffect","parent","current","parentElement","foundParentThemeClass","classList","contains","window","matchMedia","matches","useEffect","timeout","setTimeout","clearTimeout","React","createElement","ref","className","classNames","style","position","Fragment","onClick","__awaiter","href","textarea","document","value","body","appendChild","select","execCommand","remove"],"mappings":"geAKA,MAQaA,EAA0C,EAAGC,QAAOC,SAAQC,cACjE,MAAAC,EAAeC,EAAuB,OACrCC,EAAiBC,GAAsBC,EAAkC,eAAzBC,QAAQC,IAAIC,WAC5DC,EAASC,GAAcL,GAAS,IAChCM,EAA6BC,GAAkCP,GAAS,GAEzEQ,EAAef,aAAiBgB,MAAQhB,EAAMiB,QAAUC,OAAOlB,GAC/DmB,EAAanB,aAAiBgB,MAAQhB,EAAMoB,MAAQ,KAEpDC,EAAoBC,EACxB,cACA,KACM,IACF,GAAIrB,EACK,OAAAA,EAAOsB,KAAKC,sBAErBC,GAGF,CACO,OAAA,IAAA,GAET,CAACxB,KAEG,CAGJyB,GACEnB,EAAyB,MAC7BoB,GAAgB,WAEY,OAAtBN,GACFK,EAAcL,GAKZ,IAAAO,EAA6B,QAApBH,EAAAtB,EAAa0B,eAAO,IAAAJ,OAAA,EAAAA,EAAEK,cAC/BC,GAAwB,EAC5B,KAAOH,GAAQ,CACT,GAAAA,EAAOI,UAAUC,SAAS,mBAAqBL,EAAOI,UAAUC,SAAS,mBAAoB,CACvEF,GAAA,EACxB,KACF,CACAH,EAASA,EAAOE,aAClB,CAEEJ,EADEK,EACY,KAMFG,OAAOC,WAAW,gCAAgCC,QAAO,GACtE,CAACf,IAEJgB,GAAU,KACR,GAAI1B,EAAS,CACL,MAAA2B,EAAUC,YAAW,KACzB3B,GAAW,EAAK,GACf,KACI,MAAA,IAAM4B,aAAaF,EAC5B,IACC,CAAC3B,IAgBJ,OACE8B,EACEC,cAAA,MAAA,CAAAC,IAAKxC,EACLyC,UAAWC,EACT,iCAMA,mBAEFC,MAAO,CAAEC,SAAU,WAEnBN,EAAKC,cAAA,MAAA,CAAAE,UAAU,+BAgBfH,EAAAC,cAAA,MAAA,CACEE,UAAWC,EAAW,WAAY,6BAA8B,CAC9D,uCAAwCxC,IAAoBQ,KAG7DA,EACC4B,EAAAC,cAAAD,EAAAO,SAAA,KACEP,EAAsBC,cAAA,KAAA,KAAA,iBACtBD,EAAyEC,cAAA,IAAA,KAAA,sEACzED,EAAKC,cAAA,MAAA,CAAAE,UAAU,uCACbH,EAAQC,cAAA,SAAA,CAAAO,QAAS,IAAMnC,GAA+B,IAAuB,UAC7E2B,EAAAC,cAAA,SAAA,CAAQE,UAAU,2BAA2BK,QA7CjC,IAAWC,OAAA,OAAA,OAAA,GAAA,oBA+Cd,gBAIbT,EAAAC,cAAAD,EAAAO,SAAA,KACEP,EAAqCC,cAAA,KAAA,KAAA,2BACrCD,EAAAC,cAAA,IAAA,oHAEMD,EAAGC,cAAA,IAAA,CAAAS,KA1ID,iCA0I+C,2BACnD,KACH9C,GACCoC,EAAKC,cAAA,MAAA,CAAAE,UAAU,qCACbH,EAAAC,cAAA,MAAA,KACED,EAAOC,cAAA,OAAA,KAAAvB,QAAAA,EAAcJ,IAEvB0B,EAAAC,cAAA,SAAA,CAAQO,QAxEJ,KACV,MAAAG,EAAWC,SAASX,cAAc,YACxCU,EAASE,MAAQnC,QAAAA,EAAcJ,EACtBsC,SAAAE,KAAKC,YAAYJ,GAC1BA,EAASK,SACTJ,SAASK,YAAY,QACrBN,EAASO,SACT/C,GAAW,EAAI,GAiE0BD,EAAU,UAAY,SAGvD8B,EAAKC,cAAA,MAAA,CAAAE,UAAU,uCACbH,EAAQC,cAAA,SAAA,CAAAO,QAAS,IAAM3C,GAAoBD,IACxCA,EAAkB,eAAiB,gBAEtCoC,EAAKC,cAAA,MAAA,CAAAE,UAAU,8CACbH,EAAAC,cAAA,SAAA,CAAQE,UAAU,6BAA6BK,QAAS/C,GAE/C,eAKb"}
|
package/dist/Whiteboard.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import e,{useState as o}from"react";import{Tldraw as t}from"@tldraw/tldraw";import{ErrorFallback as r}from"./ErrorFallback.js";import{useCollaboration as n}from"./hooks/useCollaboration.js";function a(t){const[r,n]=o(Date.now()+t.token);return e.createElement(i,Object.assign({key:r,refresh:()=>n(Date.now()+t.token)},t))}function i({endpoint:a,token:i,zoomToContent:s,transparentCanvas:l,onMount:c,refresh:d}){var m,u;const[f,p]=o(),k=n({endpoint:a,token:i,editor:f,zoomToContent:s});return"synced-remote"===k.status&&"offline"===k.connectionStatus?e.createElement(r,{error:Error("Network connection lost"),editor:f,refresh:d}):e.createElement(t,{className:l?"transparent-canvas":"",autoFocus:!0,store:k,onMount:e=>{p(e),window.editor=e,null==c||c({store:k.store,editor:e})},components:{ErrorFallback:({error:o,editor:t})=>e.createElement(r,{editor:t,error:o,refresh:d})},hideUi:null===(m=null==f?void 0:f.getInstanceState())||void 0===m?void 0:m.isReadonly,initialState:(null===(u=null==f?void 0:f.getInstanceState())||void 0===u?void 0:u.isReadonly)?"hand":"select"})}export{a as Whiteboard};
|
|
2
2
|
//# sourceMappingURL=Whiteboard.js.map
|
package/dist/Whiteboard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Whiteboard.js","sources":["../src/Whiteboard.tsx"],"sourcesContent":[null],"names":["Whiteboard","props","key","setKey","useState","Date","now","token","React","createElement","CollaborativeEditor","Object","assign","refresh","endpoint","zoomToContent","transparentCanvas","onMount","editor","setEditor","store","useCollaboration","
|
|
1
|
+
{"version":3,"file":"Whiteboard.js","sources":["../src/Whiteboard.tsx"],"sourcesContent":[null],"names":["Whiteboard","props","key","setKey","useState","Date","now","token","React","createElement","CollaborativeEditor","Object","assign","refresh","endpoint","zoomToContent","transparentCanvas","onMount","editor","setEditor","store","useCollaboration","status","connectionStatus","ErrorFallback","error","Error","Tldraw","className","autoFocus","window","components","hideUi","_a","getInstanceState","isReadonly","initialState","_b"],"mappings":"8LAaM,SAAUA,EAAWC,GACnB,MAACC,EAAKC,GAAUC,EAASC,KAAKC,MAAQL,EAAMM,OAElD,OAAOC,EAAAC,cAACC,EAAmBC,OAAAC,OAAA,CAACV,MAAUW,QAAS,IAAMV,EAAOE,KAAKC,MAAQL,EAAMM,QAAYN,GAC7F,CAEA,SAASS,GAAoBI,SAC3BA,EACAP,MAAAA,EAAAQ,cACAA,oBACAC,EACAC,QAAAA,EAAAJ,QACAA,YAEA,MAAOK,EAAQC,GAAaf,IACtBgB,EAAQC,EAAiB,CAC7BP,WACAP,QACAW,SACAH,kBAUF,MAAqB,kBAAjBK,EAAME,QAAyD,YAA3BF,EAAMG,iBACrCf,gBAACgB,EAAa,CAACC,MAAOC,MAAM,2BAA4BR,SAAgBL,YAI/EL,EAACC,cAAAkB,EACC,CAAAC,UAAWZ,EAAoB,qBAAuB,GACtDa,WACA,EAAAT,QACAH,QAhBiBC,IACnBC,EAAUD,GAEVY,OAAOZ,OAASA,EAChBD,SAAAA,EAAU,CAAEG,MAAOA,EAAMA,MAAOF,OAAAA,GAAQ,EAatCa,WAAY,CACVP,cAAe,EAAGC,QAAOP,OAAAA,KAAaV,EAACC,cAAAe,GAAcN,OAAQA,EAAQO,QAAcZ,aAErFmB,OAAoC,QAA5BC,EAAAf,aAAA,EAAAA,EAAQgB,0BAAoB,IAAAD,OAAA,EAAAA,EAAAE,WACpCC,sBAAcC,EAAAnB,eAAAA,EAAQgB,yCAAoBC,YAAa,OAAS,UAGtE"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
interface OpenCallbacks<T> {
|
|
2
2
|
handleOpen: (values: T[]) => void;
|
|
3
3
|
handleChange: (key: string, value?: T) => void;
|
|
4
|
-
handleError: (error: Error) => void;
|
|
4
|
+
handleError: (error: Error, isTerminal?: boolean) => void;
|
|
5
5
|
}
|
|
6
6
|
export declare class SessionStore<T> {
|
|
7
7
|
private storeClient;
|
|
8
|
-
private abortController;
|
|
9
8
|
constructor(endpoint: string, token: string);
|
|
10
9
|
open({ handleOpen, handleChange, handleError }: OpenCallbacks<T>): Promise<() => void>;
|
|
11
10
|
set(key: string, value?: T): import("@protobuf-ts/runtime-rpc").UnaryCall<import("../grpc/sessionstore").SetRequest, import("../grpc/sessionstore").SetResponse>;
|
|
12
11
|
get(key: string): Promise<T | undefined>;
|
|
13
12
|
getKeysCount(): Promise<number>;
|
|
14
13
|
delete(key: string): import("@protobuf-ts/runtime-rpc").UnaryCall<import("../grpc/sessionstore").DeleteRequest, import("../grpc/sessionstore").DeleteResponse>;
|
|
14
|
+
private getKeysCountWithDelay;
|
|
15
15
|
}
|
|
16
16
|
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__awaiter as e}from"../node_modules/tslib/tslib.es6.mjs.js";import{GrpcWebFetchTransport as t}from"@protobuf-ts/grpcweb-transport";import{Value_Type as o}from"../grpc/sessionstore.js";import{StoreClient as
|
|
1
|
+
import{__awaiter as e}from"../node_modules/tslib/tslib.es6.mjs.js";import{GrpcWebFetchTransport as t}from"@protobuf-ts/grpcweb-transport";import{Value_Type as o}from"../grpc/sessionstore.js";import{StoreClient as n}from"../grpc/sessionstore.client.js";const r=["network error","failed to fetch"];class s{constructor(e,o){const r=new t({baseUrl:e,meta:{Authorization:`Bearer ${o}`}});this.storeClient=new n(r)}open(t){return e(this,arguments,void 0,(function*({handleOpen:e,handleChange:t,handleError:o}){const n=new AbortController,s=this.storeClient.open({changeId:"",select:[]},{abort:n.signal});let i;const a=[];s.responses.onMessage((o=>{var n;if(o.value){if("str"===(null===(n=o.value)||void 0===n?void 0:n.data.oneofKind)){const n=JSON.parse(o.value.data.str);a.length===i?t(o.key,n):(a.push(n),a.length===i&&e(a))}}else t(o.key)})),s.responses.onError((s=>{const i=r.includes(s.message.toLowerCase()),a="network error"===s.message.toLowerCase(),l=()=>{n.abort("closing to open new conn"),this.open({handleOpen:e,handleChange:t,handleError:o}),window.removeEventListener("online",l)};i&&(a&&l(),window.addEventListener("online",l)),s.message.includes("abort")||o(s,!i)}));try{i=yield this.getKeysCountWithDelay(),e(i?a:[])}catch(e){const t=r.includes(e.message.toLowerCase());o(e,t)}return()=>{n.abort("client whiteboard abort")}}))}set(e,t){const n=t?JSON.stringify(t):void 0;return this.storeClient.set({key:e,value:n?{data:{str:n,oneofKind:"str"},type:o.STRING}:{data:{oneofKind:void 0},type:o.NONE}})}get(t){return e(this,void 0,void 0,(function*(){var e;const{response:o}=yield this.storeClient.get({key:t});if("str"===(null===(e=o.value)||void 0===e?void 0:e.data.oneofKind))return JSON.parse(o.value.data.str)}))}getKeysCount(){return e(this,void 0,void 0,(function*(){const{response:e}=yield this.storeClient.count({});return Number(e.count)}))}delete(e){return this.storeClient.delete({key:e})}getKeysCountWithDelay(){return e(this,void 0,void 0,(function*(){for(let e=0;e<3;e++)try{return yield new Promise((e=>setTimeout(e,200))),yield this.getKeysCount()}catch(t){if(console.warn(t),"peer not found"!==t.message||2===e)throw t}}))}}export{s as SessionStore};
|
|
2
2
|
//# sourceMappingURL=StoreClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreClient.js","sources":["../../src/hooks/StoreClient.ts"],"sourcesContent":[null],"names":["SessionStore","constructor","endpoint","token","
|
|
1
|
+
{"version":3,"file":"StoreClient.js","sources":["../../src/hooks/StoreClient.ts"],"sourcesContent":[null],"names":["RETRY_ERROR_MESSAGES","SessionStore","constructor","endpoint","token","transport","GrpcWebFetchTransport","baseUrl","meta","Authorization","this","storeClient","StoreClient","open","_a","__awaiter","arguments","handleOpen","handleChange","handleError","abortController","AbortController","call","changeId","select","abort","signal","count","initialValues","responses","onMessage","message","value","data","oneofKind","record","JSON","parse","str","length","key","push","onError","error","canRecover","includes","toLowerCase","shouldRetryInstantly","openCallback","window","removeEventListener","addEventListener","getKeysCountWithDelay","set","valueStr","stringify","type","Value_Type","STRING","NONE","get","response","getKeysCount","Number","delete","i","Promise","resolve","setTimeout","console","warn","MAX_RETRIES"],"mappings":"4PAUA,MACMA,EAAuB,CAAC,gBAAiB,yBAElCC,EAGX,WAAAC,CAAYC,EAAkBC,GACtB,MAAAC,EAAY,IAAIC,EAAsB,CAC1CC,QAASJ,EACTK,KAAM,CAAEC,cAAe,UAAUL,OAG9BM,KAAAC,YAAc,IAAIC,EAAYP,EACrC,CAEM,IAAAQ,CAAIC,GAAC,OAAAC,EAAAL,KAAAM,eAAA,GAAA,WAAAC,WAAEA,EAAAC,aAAYA,EAAcC,YAAAA,IAC/B,MAAAC,EAAkB,IAAIC,gBACtBC,EAAOZ,KAAKC,YAAYE,KAC5B,CACEU,SAAU,GACVC,OAAQ,IAEV,CAAEC,MAAOL,EAAgBM,SAE3B,IAAIC,EACJ,MAAMC,EAAqB,GAEtBN,EAAAO,UAAUC,WAAoBC,UACjC,GAAIA,EAAQC,OACNlB,GAAkC,SAArB,QAAbA,EAAAiB,EAAQC,aAAK,IAAAlB,OAAA,EAAAA,EAAEmB,KAAKC,WAAqB,CAC3C,MAAMC,EAASC,KAAKC,MAAMN,EAAQC,MAAMC,KAAKK,KACzCV,EAAcW,SAAWZ,EACdT,EAAAa,EAAQS,IAAKL,IAE1BP,EAAca,KAAKN,GACfP,EAAcW,SAAWZ,GAC3BV,EAAWW,GAGjB,OAEAV,EAAaa,EAAQS,IACvB,IAGGlB,EAAAO,UAAUa,SAAgBC,IAC7B,MAAMC,EAAa5C,EAAqB6C,SAASF,EAAMZ,QAAQe,eACzDC,EAAuD,kBAAhCJ,EAAMZ,QAAQe,cAErCE,EAAe,KACnB5B,EAAgBK,MAAM,4BACtBf,KAAKG,KAAK,CAAEI,aAAYC,eAAcC,gBAC/B8B,OAAAC,oBAAoB,SAAUF,EAAY,EAE/CJ,IACFG,GAAwBC,IACjBC,OAAAE,iBAAiB,SAAUH,IAG/BL,EAAMZ,QAAQc,SAAS,UACd1B,EAAAwB,GAAQC,EACtB,IAGE,IACMjB,QAAMjB,KAAK0C,wBACRnC,EAAAU,EAAQC,EAAgB,UAC5Be,GACP,MAAMC,EAAa5C,EAAqB6C,SAAUF,EAA2BZ,QAAQe,eACrF3B,EAAYwB,EAA2BC,EACzC,CAEA,MAAO,KACLxB,EAAgBK,MAzEW,0BAyEmB,CAChD,GACD,CAED,GAAA4B,CAAIb,EAAaR,GACf,MAAMsB,EAAWtB,EAAQI,KAAKmB,UAAUvB,QAAS,EAC1C,OAAAtB,KAAKC,YAAY0C,IAAI,CAC1Bb,MACAR,MAAOsB,EACH,CACErB,KAAM,CAAEK,IAAKgB,EAAUpB,UAAW,OAClCsB,KAAMC,EAAWC,QAEnB,CACEzB,KAAM,CAAEC,eAAW,GACnBsB,KAAMC,EAAWE,OAG3B,CAEM,GAAAC,CAAIpB,kDACF,MAAAqB,SAAEA,SAAmBnD,KAAKC,YAAYiD,IAAI,CAAEpB,QAE9C,GAAmC,SAArB,QAAd1B,EAAA+C,EAAS7B,aAAK,IAAAlB,OAAA,EAAAA,EAAEmB,KAAKC,WACvB,OAAOE,KAAKC,MAAMwB,EAAS7B,MAAMC,KAAKK,IACxC,GACD,CAEK,YAAAwB,4CACE,MAAAD,SAAEA,SAAmBnD,KAAKC,YAAYgB,MAAM,CAAA,GAC3C,OAAAoC,OAAOF,EAASlC,MAAK,GAC7B,CAED,OAAOa,GACL,OAAO9B,KAAKC,YAAYqD,OAAO,CAAExB,OACnC,CAEc,qBAAAY,4CAGZ,IAAA,IAASa,EAAI,EAAGA,EAFI,EAEaA,IAC3B,IAEK,aADD,IAAIC,SAAQC,GAAWC,WAAWD,EAH9B,aAIGzD,KAAKoD,qBACXnB,GAEP,GADA0B,QAAQC,KAAK3B,GAC+B,mBAAvCA,EAA2BZ,SAAsCwC,IAANN,EACxD,MAAAtB,CAEV,CACF,GACD"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useState as e,useCallback as t,useEffect as o}from"react";import{createTLStore as n,defaultShapeUtils as r,transact as s,TLINSTANCE_ID as a,throttle as i,debounce as u}from"@tldraw/tldraw";import{DEFAULT_STORE as
|
|
1
|
+
import{useState as e,useCallback as t,useEffect as o}from"react";import{createTLStore as n,defaultShapeUtils as r,transact as s,TLINSTANCE_ID as a,throttle as i,debounce as u}from"@tldraw/tldraw";import{DEFAULT_STORE as c}from"./default_store.js";import{useSessionStore as d}from"./useSessionStore.js";import{useSetEditorPermissions as l}from"./useSetEditorPermissions.js";import{CURRENT_PAGE_KEY as m,SHAPES_THROTTLE_TIME as p,PAGES_DEBOUNCE_TIME as h}from"../utils.js";const f=["camera","document","instance","instance_page_state","page"];function g({endpoint:g,token:v,editor:j,shapeUtils:E=[],zoomToContent:O=!1}){const[b]=e((()=>{const e=n({shapeUtils:[...r,...E]});return e.loadSnapshot(c),e})),[C,y]=e(null==j?void 0:j.getCurrentPage()),[S,R]=e({status:"loading"}),k=t(((e,t)=>{R(t?{error:e,status:"error"}:{store:b,status:"synced-remote",connectionStatus:"offline"})}),[b]),P=d({token:v,endpoint:g,handleError:k}),w=l({token:v,editor:j,zoomToContent:O,handleError:k}),z=t((e=>{if(!P)return;if(f.every((t=>e.filter((e=>e.typeName===t)).length>0)))b.mergeRemoteChanges((()=>{b.clear(),b.put(e)}));else for(const e of b.allRecords())P.set(e.id,e);R({store:b,status:"synced-remote",connectionStatus:"online"})}),[b,P]),T=t(((e,t)=>{b.mergeRemoteChanges((()=>{if(!t)return b.remove([e]);e===m?y(t):s((()=>{b.put([t]),e===a&&b.put([Object.assign(Object.assign({},t),{canMoveCamera:!!O,isReadonly:!w.includes("write")})])}))}))}),[b,w,O]);return o((()=>{if(!P)return;R({status:"loading"});const e=[];return P.open({handleOpen:z,handleChange:T,handleError:k}).then((t=>e.push(t))),e.push(b.listen(i((function({changes:e}){Object.values(e.added).forEach((e=>{P.set(e.id,e)})),Object.values(e.updated).forEach((([,e])=>{P.set(e.id,e)})),Object.values(e.removed).forEach((e=>{P.delete(e.id)}))}),p),{source:"user",scope:"document"})),()=>{e.forEach((e=>e())),e.length=0}}),[b,P,T,z,k]),o((()=>{if(!j||!P)return;const e=[];return e.push(b.listen(u((({changes:e})=>{Object.keys(e.updated).forEach((e=>{if(!e.includes("instance"))return;const t=null==j?void 0:j.getCurrentPage();(null==t?void 0:t.id)!==(null==C?void 0:C.id)&&(P.get(a).then((e=>{e&&(null==P||P.set(e.id,Object.assign(Object.assign({},e),{currentPageId:null==t?void 0:t.id})))})),y(t))}))}),h),{source:"user",scope:"session"})),()=>{e.forEach((e=>e())),e.length=0}}),[C,j,P,b]),o((()=>{var e;j&&(null===(e=j.getInstanceState())||void 0===e?void 0:e.isReadonly)&&O&&b.listen((()=>{j.zoomToFit()}),{source:"remote",scope:"document"})}),[j,b,O]),S}export{g as useCollaboration};
|
|
2
2
|
//# sourceMappingURL=useCollaboration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCollaboration.js","sources":["../../src/hooks/useCollaboration.ts"],"sourcesContent":[null],"names":["FULL_SYNC_REQUIRED_RECORD_TYPES","useCollaboration","endpoint","token","editor","shapeUtils","zoomToContent","store","useState","createTLStore","defaultShapeUtils","loadSnapshot","DEFAULT_STORE","currentPage","setCurrentPage","getCurrentPage","storeWithStatus","setStoreWithStatus","status","handleError","useCallback","error","sessionStore","useSessionStore","permissions","useSetEditorPermissions","handleOpen","initialRecords","every","type","filter","record","typeName","length","
|
|
1
|
+
{"version":3,"file":"useCollaboration.js","sources":["../../src/hooks/useCollaboration.ts"],"sourcesContent":[null],"names":["FULL_SYNC_REQUIRED_RECORD_TYPES","useCollaboration","endpoint","token","editor","shapeUtils","zoomToContent","store","useState","createTLStore","defaultShapeUtils","loadSnapshot","DEFAULT_STORE","currentPage","setCurrentPage","getCurrentPage","storeWithStatus","setStoreWithStatus","status","handleError","useCallback","error","isTerminal","connectionStatus","sessionStore","useSessionStore","permissions","useSetEditorPermissions","handleOpen","initialRecords","every","type","filter","record","typeName","length","mergeRemoteChanges","clear","put","allRecords","set","id","handleChange","key","value","remove","CURRENT_PAGE_KEY","transact","TLINSTANCE_ID","Object","assign","canMoveCamera","isReadonly","includes","useEffect","unsubs","open","then","push","unsub","listen","throttle","changes","values","added","forEach","updated","removed","delete","SHAPES_THROTTLE_TIME","source","scope","fn","debounce","keys","newPage","get","instance","currentPageId","PAGES_DEBOUNCE_TIME","_a","getInstanceState","zoomToFit"],"mappings":"udAsBA,MAAMA,EAA0D,CAC9D,SACA,WACA,WACA,sBACA,iBAGcC,GAAiBC,SAC/BA,EAAAC,MACAA,EACAC,OAAAA,EAAAC,WACAA,EAAa,GAAAC,cACbA,GAAgB,IAQhB,MAAOC,GAASC,GAAS,KACvB,MAAMD,EAAQE,EAAc,CAC1BJ,WAAY,IAAIK,KAAsBL,KAGjCE,OADPA,EAAMI,aAAaC,GACZL,CAAAA,KAGFM,EAAaC,GAAkBN,EAA6BJ,aAAA,EAAAA,EAAQW,mBAEpEC,EAAiBC,GAAsBT,EAA4B,CACxEU,OAAQ,YAGJC,EAAcC,GAClB,CAACC,EAAcC,KACbL,EACEK,EACI,CACED,QACAH,OAAQ,SAEV,CACEX,QACAW,OAAQ,gBACRK,iBAAkB,WACnB,GAGT,CAAChB,IAGGiB,EAAeC,EAAgB,CAAEtB,QAAOD,WAAUiB,gBAClDO,EAAcC,EAAwB,CAAExB,QAAOC,SAAQE,gBAAea,gBAEtES,EAAaR,GAChBS,IACC,IAAKL,EACH,OAQF,GAH+BxB,EAAgC8B,OAC7DC,GAAQF,EAAeG,QAAiBC,GAAAA,EAAOC,WAAaH,IAAMI,OAAS,IAI3E5B,EAAM6B,oBAAmB,KAEvB7B,EAAM8B,QACN9B,EAAM+B,IAAIT,EAAc,SAKf,IAAA,MAAAI,KAAU1B,EAAMgC,aACZf,EAAAgB,IAAIP,EAAOQ,GAAIR,GAGbhB,EAAA,CACjBV,QACAW,OAAQ,gBACRK,iBAAkB,UACnB,GAEH,CAAChB,EAAOiB,IAGJkB,EAAetB,GACnB,CAACuB,EAAaC,KAEZrC,EAAM6B,oBAAmB,KACvB,IAAKQ,EACH,OAAOrC,EAAMsC,OAAO,CAACF,IAEnBA,IAAQG,EACVhC,EAAe8B,GAEfG,GAAS,KACDxC,EAAA+B,IAAI,CAACM,IACPD,IAAQK,GACVzC,EAAM+B,IAAI,CACRW,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EAAKN,GAAO,CAAAO,gBAAiB7C,EAAe8C,YAAa1B,EAAY2B,SAAS,YAElF,GAEJ,GACD,GAEH,CAAC9C,EAAOmB,EAAapB,IA0HhB,OAvHPgD,GAAU,KACR,IAAK9B,EAAc,OAEAP,EAAA,CAAEC,OAAQ,YAE7B,MAAMqC,EAAyB,GA6D/B,OA1DA/B,EACGgC,KAAK,CACJ5B,aACAc,eACAvB,gBAEDsC,SAAcF,EAAOG,KAAKC,KAGtBJ,EAAAG,KACLnD,EAAMqD,OACJC,GAAS,UAAkCC,QAAEA,IAC3Cb,OAAOc,OAAOD,EAAQE,OAAOC,SAAiBhC,IAC/BT,EAAAgB,IAAIP,EAAOQ,GAAIR,EAAM,IAG7BgB,OAAAc,OAAOD,EAAQI,SAASD,SAAQ,EAAI,CAAAhC,MAC5BT,EAAAgB,IAAIP,EAAOQ,GAAIR,EAAM,IAGpCgB,OAAOc,OAAOD,EAAQK,SAASF,SAAiBhC,IACjCT,EAAA4C,OAAOnC,EAAOQ,GAAE,GAC9B,GACA4B,GACH,CAAEC,OAAQ,OAAQC,MAAO,cAkCtB,KACEhB,EAAAU,SAAcO,GAAAA,MACrBjB,EAAOpB,OAAS,CAAA,CAClB,GACC,CAAC5B,EAAOiB,EAAckB,EAAcd,EAAYT,IAEnDmC,GAAU,KACJ,IAAClD,IAAWoB,EAAc,OAE9B,MAAM+B,EAAyB,GA0B/B,OAxBAA,EAAOG,KACLnD,EAAMqD,OACJa,GAAS,EAAGX,cACVb,OAAOyB,KAAKZ,EAAQI,SAASD,SAActB,IAEzC,IAAKA,EAAIU,SAAS,YAChB,OAEF,MAAMsB,EAAUvE,eAAAA,EAAQW,kBAEpB4D,aAAA,EAAAA,EAASlC,OAAO5B,aAAA,EAAAA,EAAa4B,MAC/BjB,EAAaoD,IAAI5B,GAAeS,MAAgBoB,IAC1CA,IACUrD,SAAZA,EAAcgB,IAAIqC,EAASpC,GAAIQ,OAAAC,OAAAD,OAAAC,OAAA,GAAK2B,GAAU,CAAAC,cAAeH,aAAA,EAAAA,EAASlC,MACxE,IAEF3B,EAAe6D,GACjB,GACD,GACAI,GACH,CAAET,OAAQ,OAAQC,MAAO,aAItB,KACEhB,EAAAU,SAAcO,GAAAA,MACrBjB,EAAOpB,OAAS,CAAA,CAClB,GACC,CAACtB,EAAaT,EAAQoB,EAAcjB,IAGvC+C,GAAU,WACHlD,IAAsC,QAA3B4E,EAAA5E,EAAO6E,0BAAoB,IAAAD,OAAA,EAAAA,EAAA5B,aAAe9C,GAE1DC,EAAMqD,QACJ,KACExD,EAAO8E,WAAS,GAElB,CAAEZ,OAAQ,SAAUC,MAAO,YAAY,GAExC,CAACnE,EAAQG,EAAOD,IAEZU,CACT"}
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@tldraw/tldraw"),n=require("@protobuf-ts/grpcweb-transport"),r=require("@protobuf-ts/runtime"),s=require("@protobuf-ts/runtime-rpc");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=a(e);function o(e,t,n,r){return new(n||(n=Promise))((function(s,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function o(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,o)}l((r=r.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class l{arraySize=0;array=Array(8);set=null;get isEmpty(){if(this.array)return 0===this.arraySize;if(this.set)return 0===this.set.size;throw new Error("no set or array")}add(e){if(this.array){return-1===this.array.indexOf(e)&&(this.arraySize<8?(this.array[this.arraySize]=e,this.arraySize++,!0):(this.set=new Set(this.array),this.array=null,this.set.add(e),!0))}if(this.set)return!this.set.has(e)&&(this.set.add(e),!0);throw new Error("no set or array")}remove(e){if(this.array){const t=this.array.indexOf(e);return-1!==t&&(this.array[t]=void 0,this.arraySize--,t!==this.arraySize&&(this.array[t]=this.array[this.arraySize],this.array[this.arraySize]=void 0),!0)}if(this.set)return!!this.set.has(e)&&(this.set.delete(e),!0);throw new Error("no set or array")}visit(e){if(this.array)for(let t=0;t<this.arraySize;t++){const n=this.array[t];void 0!==n&&e(n)}else{if(!this.set)throw new Error("no set or array");this.set.forEach(e)}}}const c=Symbol("RESET_VALUE");class d{constructor(e){this.capacity=e,this.buffer=new Array(e)}index=0;buffer;pushEntry(e,t,n){void 0!==n&&(n!==c?(this.buffer[this.index]=[e,t,n],this.index=(this.index+1)%this.capacity):this.clear())}clear(){this.index=0,this.buffer.fill(void 0)}getChangesSince(e){const{index:t,capacity:n,buffer:r}=this;for(let s=0;s<n;s++){const a=(t-1+n-s)%n,i=r[a];if(!i)return c;const[o,l]=i;if(0===s&&e>=l)return[];if(o<=e&&e<l){const e=s+1,t=new Array(e);for(let s=0;s<e;s++)t[s]=r[(a+s)%n][2];return t}}return c}}function u(e){return e&&"object"==typeof e&&"parents"in e}function h(e){for(let t=0,n=e.parents.length;t<n;t++)if(e.parents[t].__unsafe__getWithoutCapture(),e.parents[t].lastChangedEpoch!==e.parentEpochs[t])return!0;return!1}const p=(e,t)=>{if(e.children.remove(t)&&e.children.isEmpty&&u(e))for(let t=0,n=e.parents.length;t<n;t++)p(e.parents[t],e)},f=(e,t)=>{if(e.children.add(t)&&u(e))for(let t=0,n=e.parents.length;t<n;t++)f(e.parents[t],e)};function g(e,t){return e===t||Object.is(e,t)||Boolean(e&&t&&"function"==typeof e.equals&&e.equals(t))}const y=Object.freeze([]),m=Symbol.for("__@tldraw/state__"),w=globalThis;w[m]?console.error('Multiple versions of @tldraw/state detected. This will cause unexpected behavior. Please add "resolutions" (yarn/pnpm) or "overrides" (npm) in your package.json to ensure only one version of @tldraw/state is loaded.'):w[m]=!0;class k{constructor(e,t){this.below=e,this.child=t}offset=0;numNewParents=0;maybeRemoved}let b=null;function v(e){b=new k(b,e)}function T(){const e=b;b=e.below;if(e.numNewParents>0||e.offset!==e.child.parents.length){for(let t=e.offset;t<e.child.parents.length;t++){const n=e.child.parents[t];e.child.parents.indexOf(n)>=e.offset&&p(n,e.child)}if(e.child.parents.length=e.offset,e.child.parentEpochs.length=e.offset,b?.maybeRemoved)for(let t=0;t<b.maybeRemoved.length;t++){const n=b.maybeRemoved[t];-1===e.child.parents.indexOf(n)&&p(n,e.child)}}}const E=-1;let _=!1;let S=!1;const N=Symbol("UNINITIALIZED");class U{constructor(e,t){this.value=e,this.diff=t}}class R{constructor(e,t,n){this.name=e,this.derive=t,n?.historyLength&&(this.historyBuffer=new d(n.historyLength)),this.computeDiff=n?.computeDiff,this.isEqual=n?.isEqual??g}lastChangedEpoch=E;lastTraversedEpoch=E;lastCheckedEpoch=E;parents=[];parentEpochs=[];children=new l;get isActivelyListening(){return!this.children.isEmpty}historyBuffer;state=N;computeDiff;isEqual;__unsafe__getWithoutCapture(){const e=this.lastChangedEpoch===E;if(!(e||0!==this.lastCheckedEpoch&&h(this)))return this.lastCheckedEpoch=0,this.state;try{v(this);const t=this.derive(this.state,this.lastCheckedEpoch),n=t instanceof U?t.value:t;if(this.state===N||!this.isEqual(n,this.state)){if(this.historyBuffer&&!e){const e=t instanceof U?t.diff:void 0;this.historyBuffer.pushEntry(this.lastChangedEpoch,0,e??this.computeDiff?.(this.state,n,this.lastCheckedEpoch,0)??c)}this.lastChangedEpoch=0,this.state=n}return this.lastCheckedEpoch=0,this.state}finally{T()}}get(){const e=this.__unsafe__getWithoutCapture();return function(e){if(b){const t=b.child.parents.indexOf(e);if(t<0&&(b.numNewParents++,b.child.isActivelyListening&&f(e,b.child)),t<0||t>=b.offset){if(t!==b.offset&&t>0){const e=b.child.parents[b.offset];b.maybeRemoved?-1===b.maybeRemoved.indexOf(e)&&b.maybeRemoved.push(e):b.maybeRemoved=[e]}b.child.parents[b.offset]=e,b.child.parentEpochs[b.offset]=e.lastChangedEpoch,b.offset++}}}(this),e}get value(){return _||(_=!0,console.warn("Using Signal.value is deprecated and will be removed in the near future. Please use Signal.get() instead.")),this.get()}getDiffSince(e){return this.get(),e>=this.lastChangedEpoch?y:this.historyBuffer?.getChangesSince(e)??c}}function C(e={},t,n,r){return r.get?(S||(S=!0,console.warn("Using `@computed` as a decorator for getters is deprecated and will be removed in the near future. Please refactor to use `@computed` as a decorator for methods.\n\n// Before\n@computed\nget foo() {\n\treturn 'foo'\n}\n\n// After\n@computed\ngetFoo() {\n\treturn 'foo'\n}\n")),function(e={},t,n,r){const s=r.get,a=Symbol.for("__@tldraw/state__computed__"+n);return r.get=function(){let t=this[a];return t||(t=new R(n,s.bind(this),e),Object.defineProperty(this,a,{enumerable:!1,configurable:!1,writable:!1,value:t})),t.get()},r}(e,0,n,r)):function(e={},t,n,r){const s=r.value,a=Symbol.for("__@tldraw/state__computed__"+n);return r.value=function(){let t=this[a];return t||(t=new R(n,s.bind(this),e),Object.defineProperty(this,a,{enumerable:!1,configurable:!1,writable:!1,value:t})),t.get()},r.value[
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@tldraw/tldraw"),n=require("@protobuf-ts/grpcweb-transport"),r=require("@protobuf-ts/runtime"),s=require("@protobuf-ts/runtime-rpc");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=a(e);function o(e,t,n,r){return new(n||(n=Promise))((function(s,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function o(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,o)}l((r=r.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class l{arraySize=0;array=Array(8);set=null;get isEmpty(){if(this.array)return 0===this.arraySize;if(this.set)return 0===this.set.size;throw new Error("no set or array")}add(e){if(this.array){return-1===this.array.indexOf(e)&&(this.arraySize<8?(this.array[this.arraySize]=e,this.arraySize++,!0):(this.set=new Set(this.array),this.array=null,this.set.add(e),!0))}if(this.set)return!this.set.has(e)&&(this.set.add(e),!0);throw new Error("no set or array")}remove(e){if(this.array){const t=this.array.indexOf(e);return-1!==t&&(this.array[t]=void 0,this.arraySize--,t!==this.arraySize&&(this.array[t]=this.array[this.arraySize],this.array[this.arraySize]=void 0),!0)}if(this.set)return!!this.set.has(e)&&(this.set.delete(e),!0);throw new Error("no set or array")}visit(e){if(this.array)for(let t=0;t<this.arraySize;t++){const n=this.array[t];void 0!==n&&e(n)}else{if(!this.set)throw new Error("no set or array");this.set.forEach(e)}}}const c=Symbol("RESET_VALUE");class d{constructor(e){this.capacity=e,this.buffer=new Array(e)}index=0;buffer;pushEntry(e,t,n){void 0!==n&&(n!==c?(this.buffer[this.index]=[e,t,n],this.index=(this.index+1)%this.capacity):this.clear())}clear(){this.index=0,this.buffer.fill(void 0)}getChangesSince(e){const{index:t,capacity:n,buffer:r}=this;for(let s=0;s<n;s++){const a=(t-1+n-s)%n,i=r[a];if(!i)return c;const[o,l]=i;if(0===s&&e>=l)return[];if(o<=e&&e<l){const e=s+1,t=new Array(e);for(let s=0;s<e;s++)t[s]=r[(a+s)%n][2];return t}}return c}}function u(e){return e&&"object"==typeof e&&"parents"in e}function h(e){for(let t=0,n=e.parents.length;t<n;t++)if(e.parents[t].__unsafe__getWithoutCapture(),e.parents[t].lastChangedEpoch!==e.parentEpochs[t])return!0;return!1}const p=(e,t)=>{if(e.children.remove(t)&&e.children.isEmpty&&u(e))for(let t=0,n=e.parents.length;t<n;t++)p(e.parents[t],e)},f=(e,t)=>{if(e.children.add(t)&&u(e))for(let t=0,n=e.parents.length;t<n;t++)f(e.parents[t],e)};function g(e,t){return e===t||Object.is(e,t)||Boolean(e&&t&&"function"==typeof e.equals&&e.equals(t))}const y=Object.freeze([]),m=Symbol.for("__@tldraw/state__"),w=globalThis;w[m]?console.error('Multiple versions of @tldraw/state detected. This will cause unexpected behavior. Please add "resolutions" (yarn/pnpm) or "overrides" (npm) in your package.json to ensure only one version of @tldraw/state is loaded.'):w[m]=!0;class k{constructor(e,t){this.below=e,this.child=t}offset=0;numNewParents=0;maybeRemoved}let b=null;function v(e){b=new k(b,e)}function T(){const e=b;b=e.below;if(e.numNewParents>0||e.offset!==e.child.parents.length){for(let t=e.offset;t<e.child.parents.length;t++){const n=e.child.parents[t];e.child.parents.indexOf(n)>=e.offset&&p(n,e.child)}if(e.child.parents.length=e.offset,e.child.parentEpochs.length=e.offset,b?.maybeRemoved)for(let t=0;t<b.maybeRemoved.length;t++){const n=b.maybeRemoved[t];-1===e.child.parents.indexOf(n)&&p(n,e.child)}}}const E=-1;let _=!1;let S=!1;const N=Symbol("UNINITIALIZED");class U{constructor(e,t){this.value=e,this.diff=t}}class R{constructor(e,t,n){this.name=e,this.derive=t,n?.historyLength&&(this.historyBuffer=new d(n.historyLength)),this.computeDiff=n?.computeDiff,this.isEqual=n?.isEqual??g}lastChangedEpoch=E;lastTraversedEpoch=E;lastCheckedEpoch=E;parents=[];parentEpochs=[];children=new l;get isActivelyListening(){return!this.children.isEmpty}historyBuffer;state=N;computeDiff;isEqual;__unsafe__getWithoutCapture(){const e=this.lastChangedEpoch===E;if(!(e||0!==this.lastCheckedEpoch&&h(this)))return this.lastCheckedEpoch=0,this.state;try{v(this);const t=this.derive(this.state,this.lastCheckedEpoch),n=t instanceof U?t.value:t;if(this.state===N||!this.isEqual(n,this.state)){if(this.historyBuffer&&!e){const e=t instanceof U?t.diff:void 0;this.historyBuffer.pushEntry(this.lastChangedEpoch,0,e??this.computeDiff?.(this.state,n,this.lastCheckedEpoch,0)??c)}this.lastChangedEpoch=0,this.state=n}return this.lastCheckedEpoch=0,this.state}finally{T()}}get(){const e=this.__unsafe__getWithoutCapture();return function(e){if(b){const t=b.child.parents.indexOf(e);if(t<0&&(b.numNewParents++,b.child.isActivelyListening&&f(e,b.child)),t<0||t>=b.offset){if(t!==b.offset&&t>0){const e=b.child.parents[b.offset];b.maybeRemoved?-1===b.maybeRemoved.indexOf(e)&&b.maybeRemoved.push(e):b.maybeRemoved=[e]}b.child.parents[b.offset]=e,b.child.parentEpochs[b.offset]=e.lastChangedEpoch,b.offset++}}}(this),e}get value(){return _||(_=!0,console.warn("Using Signal.value is deprecated and will be removed in the near future. Please use Signal.get() instead.")),this.get()}getDiffSince(e){return this.get(),e>=this.lastChangedEpoch?y:this.historyBuffer?.getChangesSince(e)??c}}function C(e={},t,n,r){return r.get?(S||(S=!0,console.warn("Using `@computed` as a decorator for getters is deprecated and will be removed in the near future. Please refactor to use `@computed` as a decorator for methods.\n\n// Before\n@computed\nget foo() {\n\treturn 'foo'\n}\n\n// After\n@computed\ngetFoo() {\n\treturn 'foo'\n}\n")),function(e={},t,n,r){const s=r.get,a=Symbol.for("__@tldraw/state__computed__"+n);return r.get=function(){let t=this[a];return t||(t=new R(n,s.bind(this),e),Object.defineProperty(this,a,{enumerable:!1,configurable:!1,writable:!1,value:t})),t.get()},r}(e,0,n,r)):function(e={},t,n,r){const s=r.value,a=Symbol.for("__@tldraw/state__computed__"+n);return r.value=function(){let t=this[a];return t||(t=new R(n,s.bind(this),e),Object.defineProperty(this,a,{enumerable:!1,configurable:!1,writable:!1,value:t})),t.get()},r.value[W]=!0,r}(e,0,n,r)}const W="@@__isComputedMethod__@@";class F{constructor(e,t,n){this.name=e,this.runEffect=t,this._scheduleEffect=n?.scheduleEffect}_isActivelyListening=!1;get isActivelyListening(){return this._isActivelyListening}lastTraversedEpoch=E;lastReactedEpoch=E;_scheduleCount=0;get scheduleCount(){return this._scheduleCount}parentEpochs=[];parents=[];_scheduleEffect;maybeScheduleEffect(){this._isActivelyListening&&0!==this.lastReactedEpoch&&(!this.parents.length||h(this)?this.scheduleEffect():this.lastReactedEpoch=0)}scheduleEffect(){this._scheduleCount++,this._scheduleEffect?this._scheduleEffect(this.maybeExecute):this.execute()}maybeExecute=()=>{this._isActivelyListening&&this.execute()};attach(){this._isActivelyListening=!0;for(let e=0,t=this.parents.length;e<t;e++)f(this.parents[e],this)}detach(){this._isActivelyListening=!1;for(let e=0,t=this.parents.length;e<t;e++)p(this.parents[e],this)}execute(){try{v(this);const e=this.runEffect(this.lastReactedEpoch);return this.lastReactedEpoch=0,e}finally{T()}}}function x(){const t=arguments,n=3===t.length?t[2]:[t[0]],r=3===t.length?t[0]:`useValue(${t[0].name})`,s=e.useRef(!0);s.current=!0;const a=e.useMemo((()=>1===t.length?t[0]:function(){if(1===arguments.length){const e=arguments[0];return(t,n,r)=>C(e,0,n,r)}return"string"==typeof arguments[0]?new R(arguments[0],arguments[1],arguments[2]):C(void 0,0,arguments[1],arguments[2])}(r,(()=>{if(s.current)return t[1]();try{return t[1]()}catch{return{}}}))),n);try{const{subscribe:t,getSnapshot:n}=e.useMemo((()=>({subscribe:e=>function(e,t,n){const r=new F(e,t,n);return r.attach(),r.scheduleEffect(),()=>{r.detach()}}(`useValue(${r})`,(()=>{a.get(),e()})),getSnapshot:()=>a.get()})),[a]);return e.useSyncExternalStore(t,n,n)}finally{s.current=!1}}var O,B={exports:{}};
|
|
2
2
|
/*!
|
|
3
3
|
Copyright (c) 2018 Jed Watson.
|
|
4
4
|
Licensed under the MIT License (MIT), see
|
|
5
5
|
http://jedwatson.github.io/classnames
|
|
6
|
-
*/O=B,function(){var e={}.hasOwnProperty;function t(){for(var e="",t=0;t<arguments.length;t++){var s=arguments[t];s&&(e=r(e,n(s)))}return e}function n(n){if("string"==typeof n||"number"==typeof n)return n;if("object"!=typeof n)return"";if(Array.isArray(n))return t.apply(null,n);if(n.toString!==Object.prototype.toString&&!n.toString.toString().includes("[native code]"))return n.toString();var s="";for(var a in n)e.call(n,a)&&n[a]&&(s=r(s,a));return s}function r(e,t){return t?e?e+" "+t:e+t:e}O.exports?(t.default=t,O.exports=t):window.classNames=t}();var I=B.exports;const M=({error:n,editor:r,refresh:s})=>{const a=e.useRef(null),[l,c]=e.useState("production"!==process.env.NODE_ENV),[d,u]=e.useState(!1),[h,p]=e.useState(!1),f=n instanceof Error?n.message:String(n),g=n instanceof Error?n.stack:null,y=x("isDarkMode",(()=>{try{if(r)return r.user.isDarkMode}catch(e){}return null}),[r]),[m,w]=e.useState(null);e.useLayoutEffect((()=>{var e;null!==y&&w(y);let t=null===(e=a.current)||void 0===e?void 0:e.parentElement,n=!1;for(;t;){if(t.classList.contains("tl-theme__dark")||t.classList.contains("tl-theme__light")){n=!0;break}t=t.parentElement}w(n?null:window.matchMedia("(prefers-color-scheme: dark)").matches)}),[y]),e.useEffect((()=>{if(d){const e=setTimeout((()=>{u(!1)}),2e3);return()=>clearTimeout(e)}}),[d]);return i.default.createElement("div",{ref:a,className:I("tl-container tl-error-boundary",null===m?"":m?"tl-theme__dark":"tl-theme__light")},i.default.createElement("div",{className:"tl-error-boundary__overlay"}),i.default.createElement("div",{className:I("tl-modal","tl-error-boundary__content",{"tl-error-boundary__content__expanded":l&&!h})},h?i.default.createElement(i.default.Fragment,null,i.default.createElement("h2",null,"Are you sure?"),i.default.createElement("p",null,"Resetting your data will delete your drawing and cannot be undone."),i.default.createElement("div",{className:"tl-error-boundary__content__actions"},i.default.createElement("button",{onClick:()=>p(!1)},"Cancel"),i.default.createElement("button",{className:"tl-error-boundary__reset",onClick:()=>o(void 0,void 0,void 0,(function*(){t.hardResetEditor()}))},"Reset data"))):i.default.createElement(i.default.Fragment,null,i.default.createElement("h2",null,"Something's gone wrong."),i.default.createElement("p",null,"Sorry, we encountered an error. Please refresh the page to continue. If you keep seeing this error, you can ",i.default.createElement("a",{href:"https://discord.gg/pTge2BwDBq"},"ask for help on Discord"),"."),l&&i.default.createElement("div",{className:"tl-error-boundary__content__error"},i.default.createElement("pre",null,i.default.createElement("code",null,null!=g?g:f)),i.default.createElement("button",{onClick:()=>{const e=document.createElement("textarea");e.value=null!=g?g:f,document.body.appendChild(e),e.select(),document.execCommand("copy"),e.remove(),u(!0)}},d?"Copied!":"Copy")),i.default.createElement("div",{className:"tl-error-boundary__content__actions"},i.default.createElement("button",{onClick:()=>c(!l)},l?"Hide details":"Show details"),i.default.createElement("div",{className:"tl-error-boundary__content__actions__group"},i.default.createElement("button",{className:"tl-error-boundary__refresh",onClick:s},"Refresh"))))))},P={store:{"document:document":{gridSize:10,name:"",meta:{},id:"document:document",typeName:"document"},"pointer:pointer":{id:"pointer:pointer",typeName:"pointer",x:0,y:0,lastActivityTimestamp:0,meta:{}},"page:page":{meta:{},id:"page:page",name:"Page 1",index:"a1",typeName:"page"},"camera:page:page":{x:0,y:0,z:1,meta:{},id:"camera:page:page",typeName:"camera"},"instance_page_state:page:page":{editingShapeId:null,croppingShapeId:null,selectedShapeIds:[],hoveredShapeId:null,erasingShapeIds:[],hintingShapeIds:[],focusedGroupId:null,meta:{},id:"instance_page_state:page:page",pageId:"page:page",typeName:"instance_page_state"},"instance:instance":{followingUserId:null,opacityForNextShape:1,stylesForNextShape:{},brush:null,scribble:null,cursor:{type:"default",rotation:0},isFocusMode:!1,exportBackground:!0,isDebugMode:!1,isToolLocked:!1,screenBounds:{x:0,y:0,w:720,h:400},zoomBrush:null,isGridMode:!1,isPenMode:!1,chatMessage:"",isChatting:!1,highlightedUserIds:[],canMoveCamera:!0,isFocused:!0,devicePixelRatio:2,isCoarsePointer:!1,isHoveringCanvas:!1,openMenus:[],isChangingStyle:!1,isReadonly:!1,meta:{},id:"instance:instance",currentPageId:"page:page",typeName:"instance"}},schema:{schemaVersion:1,storeVersion:4,recordVersions:{asset:{version:1,subTypeKey:"type",subTypeVersions:{image:2,video:2,bookmark:0}},camera:{version:1},document:{version:2},instance:{version:21},instance_page_state:{version:5},page:{version:1},shape:{version:3,subTypeKey:"type",subTypeVersions:{group:0,text:1,bookmark:1,draw:1,geo:7,note:4,line:1,frame:0,arrow:1,highlight:0,embed:4,image:2,video:1}},instance_presence:{version:5},pointer:{version:1}}}};var L,$;($=L||(L={}))[$.NONE=0]="NONE",$[$.BYTES=1]="BYTES",$[$.STRING=2]="STRING",$[$.INTEGER=3]="INTEGER",$[$.FLOAT=4]="FLOAT";class D extends r.MessageType{constructor(){super("sessionstorepb.HelloRequest",[{no:1,name:"name",kind:"scalar",T:9}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.name="",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();if(1===t)a.name=e.string();else{let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.name&&t.tag(1,r.WireType.LengthDelimited).string(e.name);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const j=new D;class H extends r.MessageType{constructor(){super("sessionstorepb.HelloResponse",[{no:1,name:"response",kind:"scalar",T:9}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.response="",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();if(1===t)a.response=e.string();else{let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.response&&t.tag(1,r.WireType.LengthDelimited).string(e.response);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const A=new H;class K extends r.MessageType{constructor(){super("sessionstorepb.SubscribeRequest",[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"offset",kind:"scalar",T:3}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.name="",t.offset="0",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.name=e.string();break;case 2:a.offset=e.int64().toString();break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.name&&t.tag(1,r.WireType.LengthDelimited).string(e.name),"0"!==e.offset&&t.tag(2,r.WireType.Varint).int64(e.offset);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const q=new K;class z extends r.MessageType{constructor(){super("sessionstorepb.Event",[{no:1,name:"message",kind:"scalar",T:9},{no:2,name:"sequence",kind:"scalar",T:3}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.message="",t.sequence="0",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.message=e.string();break;case 2:a.sequence=e.int64().toString();break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.message&&t.tag(1,r.WireType.LengthDelimited).string(e.message),"0"!==e.sequence&&t.tag(2,r.WireType.Varint).int64(e.sequence);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const V=new z;class G extends r.MessageType{constructor(){super("sessionstorepb.Value",[{no:1,name:"type",kind:"enum",T:()=>["sessionstorepb.Value.Type",L]},{no:2,name:"number",kind:"scalar",oneof:"data",T:3},{no:3,name:"float",kind:"scalar",oneof:"data",T:2},{no:4,name:"str",kind:"scalar",oneof:"data",T:9},{no:5,name:"raw_bytes",kind:"scalar",oneof:"data",T:12}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.type=0,t.data={oneofKind:void 0},void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.type=e.int32();break;case 2:a.data={oneofKind:"number",number:e.int64().toString()};break;case 3:a.data={oneofKind:"float",float:e.float()};break;case 4:a.data={oneofKind:"str",str:e.string()};break;case 5:a.data={oneofKind:"rawBytes",rawBytes:e.bytes()};break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){0!==e.type&&t.tag(1,r.WireType.Varint).int32(e.type),"number"===e.data.oneofKind&&t.tag(2,r.WireType.Varint).int64(e.data.number),"float"===e.data.oneofKind&&t.tag(3,r.WireType.Bit32).float(e.data.float),"str"===e.data.oneofKind&&t.tag(4,r.WireType.LengthDelimited).string(e.data.str),"rawBytes"===e.data.oneofKind&&t.tag(5,r.WireType.LengthDelimited).bytes(e.data.rawBytes);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const J=new G;class Y extends r.MessageType{constructor(){super("sessionstorepb.GetRequest",[{no:1,name:"key",kind:"scalar",T:9}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.key="",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();if(1===t)a.key=e.string();else{let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.key&&t.tag(1,r.WireType.LengthDelimited).string(e.key);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const Z=new Y;class Q extends r.MessageType{constructor(){super("sessionstorepb.GetResponse",[{no:1,name:"key",kind:"scalar",T:9},{no:2,name:"namespace",kind:"scalar",T:9},{no:3,name:"value",kind:"message",T:()=>J}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.key="",t.namespace="",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.key=e.string();break;case 2:a.namespace=e.string();break;case 3:a.value=J.internalBinaryRead(e,e.uint32(),n,a.value);break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.key&&t.tag(1,r.WireType.LengthDelimited).string(e.key),""!==e.namespace&&t.tag(2,r.WireType.LengthDelimited).string(e.namespace),e.value&&J.internalBinaryWrite(e.value,t.tag(3,r.WireType.LengthDelimited).fork(),n).join();let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const X=new Q;class ee extends r.MessageType{constructor(){super("sessionstorepb.DeleteRequest",[{no:1,name:"key",kind:"scalar",T:9}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.key="",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();if(1===t)a.key=e.string();else{let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.key&&t.tag(1,r.WireType.LengthDelimited).string(e.key);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const te=new ee;class ne extends r.MessageType{constructor(){super("sessionstorepb.DeleteResponse",[])}create(e){const t=globalThis.Object.create(this.messagePrototype);return void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){return null!=r?r:this.create()}internalBinaryWrite(e,t,n){let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const re=new ne;class se extends r.MessageType{constructor(){super("sessionstorepb.SetRequest",[{no:1,name:"key",kind:"scalar",T:9},{no:3,name:"value",kind:"message",T:()=>J}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.key="",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.key=e.string();break;case 3:a.value=J.internalBinaryRead(e,e.uint32(),n,a.value);break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.key&&t.tag(1,r.WireType.LengthDelimited).string(e.key),e.value&&J.internalBinaryWrite(e.value,t.tag(3,r.WireType.LengthDelimited).fork(),n).join();let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const ae=new se;class ie extends r.MessageType{constructor(){super("sessionstorepb.SetResponse",[])}create(e){const t=globalThis.Object.create(this.messagePrototype);return void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){return null!=r?r:this.create()}internalBinaryWrite(e,t,n){let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const oe=new ie;class le extends r.MessageType{constructor(){super("sessionstorepb.ChangeStream",[{no:1,name:"change_id",kind:"scalar",T:9},{no:2,name:"key",kind:"scalar",T:9},{no:3,name:"namespace",kind:"scalar",T:9},{no:4,name:"value",kind:"message",T:()=>J},{no:5,name:"from_id",kind:"scalar",T:9}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.changeId="",t.key="",t.namespace="",t.fromId="",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.changeId=e.string();break;case 2:a.key=e.string();break;case 3:a.namespace=e.string();break;case 4:a.value=J.internalBinaryRead(e,e.uint32(),n,a.value);break;case 5:a.fromId=e.string();break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.changeId&&t.tag(1,r.WireType.LengthDelimited).string(e.changeId),""!==e.key&&t.tag(2,r.WireType.LengthDelimited).string(e.key),""!==e.namespace&&t.tag(3,r.WireType.LengthDelimited).string(e.namespace),e.value&&J.internalBinaryWrite(e.value,t.tag(4,r.WireType.LengthDelimited).fork(),n).join(),""!==e.fromId&&t.tag(5,r.WireType.LengthDelimited).string(e.fromId);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const ce=new le;class de extends r.MessageType{constructor(){super("sessionstorepb.Select",[{no:1,name:"all",kind:"scalar",oneof:"match",T:9},{no:2,name:"key",kind:"scalar",oneof:"match",T:9},{no:3,name:"prefix",kind:"scalar",oneof:"match",T:9},{no:4,name:"suffix",kind:"scalar",oneof:"match",T:9}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.match={oneofKind:void 0},void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.match={oneofKind:"all",all:e.string()};break;case 2:a.match={oneofKind:"key",key:e.string()};break;case 3:a.match={oneofKind:"prefix",prefix:e.string()};break;case 4:a.match={oneofKind:"suffix",suffix:e.string()};break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){"all"===e.match.oneofKind&&t.tag(1,r.WireType.LengthDelimited).string(e.match.all),"key"===e.match.oneofKind&&t.tag(2,r.WireType.LengthDelimited).string(e.match.key),"prefix"===e.match.oneofKind&&t.tag(3,r.WireType.LengthDelimited).string(e.match.prefix),"suffix"===e.match.oneofKind&&t.tag(4,r.WireType.LengthDelimited).string(e.match.suffix);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const ue=new de;class he extends r.MessageType{constructor(){super("sessionstorepb.OpenRequest",[{no:1,name:"change_id",kind:"scalar",T:9},{no:3,name:"select",kind:"message",repeat:1,T:()=>ue}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.changeId="",t.select=[],void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.changeId=e.string();break;case 3:a.select.push(ue.internalBinaryRead(e,e.uint32(),n));break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.changeId&&t.tag(1,r.WireType.LengthDelimited).string(e.changeId);for(let s=0;s<e.select.length;s++)ue.internalBinaryWrite(e.select[s],t.tag(3,r.WireType.LengthDelimited).fork(),n).join();let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const pe=new he;class fe extends r.MessageType{constructor(){super("sessionstorepb.CountRequest",[])}create(e){const t=globalThis.Object.create(this.messagePrototype);return void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){return null!=r?r:this.create()}internalBinaryWrite(e,t,n){let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const ge=new fe;class ye extends r.MessageType{constructor(){super("sessionstorepb.CountResponse",[{no:1,name:"count",kind:"scalar",T:3}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.count="0",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();if(1===t)a.count=e.int64().toString();else{let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){"0"!==e.count&&t.tag(1,r.WireType.Varint).int64(e.count);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const me=new ye;new s.ServiceType("sessionstorepb.Api",[{name:"Hello",options:{},I:j,O:A},{name:"Subscribe",serverStreaming:!0,options:{},I:q,O:V}]);const we=new s.ServiceType("sessionstorepb.Store",[{name:"open",serverStreaming:!0,options:{},I:pe,O:ce},{name:"get",options:{},I:Z,O:X},{name:"set",options:{},I:ae,O:oe},{name:"delete",options:{},I:te,O:re},{name:"count",options:{},I:ge,O:me}]);class ke{constructor(e){this._transport=e,this.typeName=we.typeName,this.methods=we.methods,this.options=we.options}open(e,t){const n=this.methods[0],r=this._transport.mergeOptions(t);return s.stackIntercept("serverStreaming",this._transport,n,r,e)}get(e,t){const n=this.methods[1],r=this._transport.mergeOptions(t);return s.stackIntercept("unary",this._transport,n,r,e)}set(e,t){const n=this.methods[2],r=this._transport.mergeOptions(t);return s.stackIntercept("unary",this._transport,n,r,e)}delete(e,t){const n=this.methods[3],r=this._transport.mergeOptions(t);return s.stackIntercept("unary",this._transport,n,r,e)}count(e,t){const n=this.methods[4],r=this._transport.mergeOptions(t);return s.stackIntercept("unary",this._transport,n,r,e)}}function be(e){if(!e||0===e.length)throw Error("Token cannot be an empty string or undefined or null");const t=e.split(".");if(3!==t.length)throw Error("Expected 3 '.' separate fields - header, payload and signature respectively");const n=atob(t[1]);try{return JSON.parse(n)}catch(e){throw Error(`couldn't parse to json - ${e.message}`)}}const ve="currentPage",Te=11,Ee=200;class _e{constructor(e,t){this.abortController=new AbortController;const r=new n.GrpcWebFetchTransport({baseUrl:e,meta:{Authorization:`Bearer ${t}`}});this.storeClient=new ke(r)}open(e){return o(this,arguments,void 0,(function*({handleOpen:e,handleChange:t,handleError:n}){const r=this.storeClient.open({changeId:"",select:[]},{abort:this.abortController.signal}),s=[];let a=!1;return setTimeout((()=>{e(s),a=!0}),1e3),r.responses.onMessage((e=>{var n;if(e.value){if("str"===(null===(n=e.value)||void 0===n?void 0:n.data.oneofKind)){const n=JSON.parse(e.value.data.str);a?t(e.key,n):s.push(n)}}else t(e.key)})),r.responses.onError((e=>{e.message.includes("abort")||n(e)})),()=>{this.abortController.abort("client whiteboard abort")}}))}set(e,t){const n=t?JSON.stringify(t):void 0;return this.storeClient.set({key:e,value:n?{data:{str:n,oneofKind:"str"},type:L.STRING}:{data:{oneofKind:void 0},type:L.NONE}})}get(e){return o(this,void 0,void 0,(function*(){var t;const{response:n}=yield this.storeClient.get({key:e});if("str"===(null===(t=n.value)||void 0===t?void 0:t.data.oneofKind))return JSON.parse(n.value.data.str)}))}getKeysCount(){return o(this,void 0,void 0,(function*(){const{response:e}=yield this.storeClient.count({});return Number(e.count)}))}delete(e){return this.storeClient.delete({key:e})}}const Se=({token:t,endpoint:n="https://store-prod-in3-grpc.100ms.live",handleError:r})=>e.useMemo((()=>{try{be(t)}catch(e){return r(e)}if(!n||!t)return r(new Error("Missing GRPC endpoint or token"));const e=new _e(n,t);return window.sessionStore=e,e}),[n,t,r]),Ne=({token:t,editor:n,zoomToContent:r=!1,handleError:s})=>{const{permissions:a}=e.useMemo((()=>{try{return be(t)}catch(e){return s(e),{}}}),[t,s]);return e.useEffect((()=>{if(null==n||n.updateInstanceState({canMoveCamera:!!r}),!a)return;const e=!a.includes("write");null==n||n.updateInstanceState({isReadonly:e})}),[a,r,n]),a},Ue=["camera","document","instance","instance_page_state","page"];function Re({endpoint:n,token:r,zoomToContent:s,transparentCanvas:a,onMount:o,refresh:l}){var c,d;const[u,h]=e.useState(),p=function({endpoint:n,token:r,editor:s,shapeUtils:a=[],zoomToContent:i=!1}){const[o]=e.useState((()=>{const e=t.createTLStore({shapeUtils:[...t.defaultShapeUtils,...a]});return e.loadSnapshot(P),e})),[l,c]=e.useState(null==s?void 0:s.getCurrentPage()),[d,u]=e.useState({status:"loading"}),h=e.useCallback((e=>{u({status:"error",error:e})}),[]),p=Se({token:r,endpoint:n,handleError:h}),f=Ne({token:r,editor:s,zoomToContent:i,handleError:h}),g=e.useCallback((e=>{if(p){if(Ue.every((t=>e.filter((e=>e.typeName===t)).length>0)))t.transact((()=>{o.clear(),o.put(e)}));else for(const e of o.allRecords())p.set(e.id,e);u({store:o,status:"synced-remote",connectionStatus:"online"})}}),[o,p]),y=e.useCallback(((e,n)=>{o.mergeRemoteChanges((()=>{if(!n)return o.remove([e]);e===ve?c(n):t.transact((()=>{o.put([n]),e===t.TLINSTANCE_ID&&o.put([Object.assign(Object.assign({},n),{canMoveCamera:!!i,isReadonly:!f.includes("write")})])}))}))}),[o,f,i]);return e.useEffect((()=>{if(!p)return;u({status:"loading"});const e=[];return p.open({handleOpen:g,handleChange:y,handleError:h}).then((t=>e.push(t))),e.push(o.listen(t.throttle((function({changes:e}){Object.values(e.added).forEach((e=>{p.set(e.id,e)})),Object.values(e.updated).forEach((([,e])=>{p.set(e.id,e)})),Object.values(e.removed).forEach((e=>{p.delete(e.id)}))}),Te),{source:"user",scope:"document"})),()=>{e.forEach((e=>e())),e.length=0}}),[o,p,y,g,h]),e.useEffect((()=>{if(!s||!p)return;const e=[];return e.push(o.listen(t.debounce((({changes:e})=>{Object.keys(e.updated).forEach((e=>{if(!e.includes("instance"))return;const n=null==s?void 0:s.getCurrentPage();(null==n?void 0:n.id)!==(null==l?void 0:l.id)&&(p.get(t.TLINSTANCE_ID).then((e=>{e&&(null==p||p.set(e.id,Object.assign(Object.assign({},e),{currentPageId:null==n?void 0:n.id})))})),c(n))}))}),Ee),{source:"user",scope:"session"})),()=>{e.forEach((e=>e())),e.length=0}}),[l,s,p,o]),e.useEffect((()=>{var e;s&&(null===(e=s.getInstanceState())||void 0===e?void 0:e.isReadonly)&&i&&o.listen((()=>{s.zoomToFit()}),{source:"remote",scope:"document"})}),[s,o,i]),d}({endpoint:n,token:r,editor:u,zoomToContent:s});return i.default.createElement(t.Tldraw,{className:a?"transparent-canvas":"",autoFocus:!0,store:p,onMount:e=>{h(e),window.editor=e,null==o||o({store:p.store,editor:e})},components:{ErrorFallback:({error:e,editor:t})=>i.default.createElement(M,{editor:t,error:e,refresh:l})},hideUi:null===(c=null==u?void 0:u.getInstanceState())||void 0===c?void 0:c.isReadonly,initialState:(null===(d=null==u?void 0:u.getInstanceState())||void 0===d?void 0:d.isReadonly)?"hand":"select"})}exports.Whiteboard=function(t){const[n,r]=e.useState(Date.now()+t.token);return i.default.createElement(Re,Object.assign({key:n,refresh:()=>r(Date.now()+t.token)},t))};
|
|
6
|
+
*/O=B,function(){var e={}.hasOwnProperty;function t(){for(var e="",t=0;t<arguments.length;t++){var s=arguments[t];s&&(e=r(e,n(s)))}return e}function n(n){if("string"==typeof n||"number"==typeof n)return n;if("object"!=typeof n)return"";if(Array.isArray(n))return t.apply(null,n);if(n.toString!==Object.prototype.toString&&!n.toString.toString().includes("[native code]"))return n.toString();var s="";for(var a in n)e.call(n,a)&&n[a]&&(s=r(s,a));return s}function r(e,t){return t?e?e+" "+t:e+t:e}O.exports?(t.default=t,O.exports=t):window.classNames=t}();var I=B.exports;const M=({error:n,editor:r,refresh:s})=>{const a=e.useRef(null),[l,c]=e.useState("production"!==process.env.NODE_ENV),[d,u]=e.useState(!1),[h,p]=e.useState(!1),f=n instanceof Error?n.message:String(n),g=n instanceof Error?n.stack:null,y=x("isDarkMode",(()=>{try{if(r)return r.user.getIsDarkMode()}catch(e){}return null}),[r]),[,m]=e.useState(null);e.useLayoutEffect((()=>{var e;null!==y&&m(y);let t=null===(e=a.current)||void 0===e?void 0:e.parentElement,n=!1;for(;t;){if(t.classList.contains("tl-theme__dark")||t.classList.contains("tl-theme__light")){n=!0;break}t=t.parentElement}m(n?null:window.matchMedia("(prefers-color-scheme: dark)").matches)}),[y]),e.useEffect((()=>{if(d){const e=setTimeout((()=>{u(!1)}),2e3);return()=>clearTimeout(e)}}),[d]);return i.default.createElement("div",{ref:a,className:I("tl-container tl-error-boundary","tl-theme__light"),style:{position:"static"}},i.default.createElement("div",{className:"tl-error-boundary__overlay"}),i.default.createElement("div",{className:I("tl-modal","tl-error-boundary__content",{"tl-error-boundary__content__expanded":l&&!h})},h?i.default.createElement(i.default.Fragment,null,i.default.createElement("h2",null,"Are you sure?"),i.default.createElement("p",null,"Resetting your data will delete your drawing and cannot be undone."),i.default.createElement("div",{className:"tl-error-boundary__content__actions"},i.default.createElement("button",{onClick:()=>p(!1)},"Cancel"),i.default.createElement("button",{className:"tl-error-boundary__reset",onClick:()=>o(void 0,void 0,void 0,(function*(){t.hardResetEditor()}))},"Reset data"))):i.default.createElement(i.default.Fragment,null,i.default.createElement("h2",null,"Something's gone wrong."),i.default.createElement("p",null,"Sorry, we encountered an error. Please refresh the page to continue. If you keep seeing this error, you can ",i.default.createElement("a",{href:"https://discord.gg/pTge2BwDBq"},"ask for help on Discord"),"."),l&&i.default.createElement("div",{className:"tl-error-boundary__content__error"},i.default.createElement("pre",null,i.default.createElement("code",null,null!=g?g:f)),i.default.createElement("button",{onClick:()=>{const e=document.createElement("textarea");e.value=null!=g?g:f,document.body.appendChild(e),e.select(),document.execCommand("copy"),e.remove(),u(!0)}},d?"Copied!":"Copy")),i.default.createElement("div",{className:"tl-error-boundary__content__actions"},i.default.createElement("button",{onClick:()=>c(!l)},l?"Hide details":"Show details"),i.default.createElement("div",{className:"tl-error-boundary__content__actions__group"},i.default.createElement("button",{className:"tl-error-boundary__refresh",onClick:s},"Refresh"))))))},P={store:{"document:document":{gridSize:10,name:"",meta:{},id:"document:document",typeName:"document"},"pointer:pointer":{id:"pointer:pointer",typeName:"pointer",x:0,y:0,lastActivityTimestamp:0,meta:{}},"page:page":{meta:{},id:"page:page",name:"Page 1",index:"a1",typeName:"page"},"camera:page:page":{x:0,y:0,z:1,meta:{},id:"camera:page:page",typeName:"camera"},"instance_page_state:page:page":{editingShapeId:null,croppingShapeId:null,selectedShapeIds:[],hoveredShapeId:null,erasingShapeIds:[],hintingShapeIds:[],focusedGroupId:null,meta:{},id:"instance_page_state:page:page",pageId:"page:page",typeName:"instance_page_state"},"instance:instance":{followingUserId:null,opacityForNextShape:1,stylesForNextShape:{},brush:null,scribble:null,cursor:{type:"default",rotation:0},isFocusMode:!1,exportBackground:!0,isDebugMode:!1,isToolLocked:!1,screenBounds:{x:0,y:0,w:720,h:400},zoomBrush:null,isGridMode:!1,isPenMode:!1,chatMessage:"",isChatting:!1,highlightedUserIds:[],canMoveCamera:!0,isFocused:!0,devicePixelRatio:2,isCoarsePointer:!1,isHoveringCanvas:!1,openMenus:[],isChangingStyle:!1,isReadonly:!1,meta:{},id:"instance:instance",currentPageId:"page:page",typeName:"instance"}},schema:{schemaVersion:1,storeVersion:4,recordVersions:{asset:{version:1,subTypeKey:"type",subTypeVersions:{image:2,video:2,bookmark:0}},camera:{version:1},document:{version:2},instance:{version:21},instance_page_state:{version:5},page:{version:1},shape:{version:3,subTypeKey:"type",subTypeVersions:{group:0,text:1,bookmark:1,draw:1,geo:7,note:4,line:1,frame:0,arrow:1,highlight:0,embed:4,image:2,video:1}},instance_presence:{version:5},pointer:{version:1}}}};var L,D;(D=L||(L={}))[D.NONE=0]="NONE",D[D.BYTES=1]="BYTES",D[D.STRING=2]="STRING",D[D.INTEGER=3]="INTEGER",D[D.FLOAT=4]="FLOAT";class $ extends r.MessageType{constructor(){super("sessionstorepb.HelloRequest",[{no:1,name:"name",kind:"scalar",T:9}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.name="",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();if(1===t)a.name=e.string();else{let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.name&&t.tag(1,r.WireType.LengthDelimited).string(e.name);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const j=new $;class H extends r.MessageType{constructor(){super("sessionstorepb.HelloResponse",[{no:1,name:"response",kind:"scalar",T:9}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.response="",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();if(1===t)a.response=e.string();else{let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.response&&t.tag(1,r.WireType.LengthDelimited).string(e.response);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const K=new H;class A extends r.MessageType{constructor(){super("sessionstorepb.SubscribeRequest",[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"offset",kind:"scalar",T:3}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.name="",t.offset="0",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.name=e.string();break;case 2:a.offset=e.int64().toString();break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.name&&t.tag(1,r.WireType.LengthDelimited).string(e.name),"0"!==e.offset&&t.tag(2,r.WireType.Varint).int64(e.offset);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const q=new A;class z extends r.MessageType{constructor(){super("sessionstorepb.Event",[{no:1,name:"message",kind:"scalar",T:9},{no:2,name:"sequence",kind:"scalar",T:3}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.message="",t.sequence="0",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.message=e.string();break;case 2:a.sequence=e.int64().toString();break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.message&&t.tag(1,r.WireType.LengthDelimited).string(e.message),"0"!==e.sequence&&t.tag(2,r.WireType.Varint).int64(e.sequence);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const V=new z;class G extends r.MessageType{constructor(){super("sessionstorepb.Value",[{no:1,name:"type",kind:"enum",T:()=>["sessionstorepb.Value.Type",L]},{no:2,name:"number",kind:"scalar",oneof:"data",T:3},{no:3,name:"float",kind:"scalar",oneof:"data",T:2},{no:4,name:"str",kind:"scalar",oneof:"data",T:9},{no:5,name:"raw_bytes",kind:"scalar",oneof:"data",T:12}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.type=0,t.data={oneofKind:void 0},void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.type=e.int32();break;case 2:a.data={oneofKind:"number",number:e.int64().toString()};break;case 3:a.data={oneofKind:"float",float:e.float()};break;case 4:a.data={oneofKind:"str",str:e.string()};break;case 5:a.data={oneofKind:"rawBytes",rawBytes:e.bytes()};break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){0!==e.type&&t.tag(1,r.WireType.Varint).int32(e.type),"number"===e.data.oneofKind&&t.tag(2,r.WireType.Varint).int64(e.data.number),"float"===e.data.oneofKind&&t.tag(3,r.WireType.Bit32).float(e.data.float),"str"===e.data.oneofKind&&t.tag(4,r.WireType.LengthDelimited).string(e.data.str),"rawBytes"===e.data.oneofKind&&t.tag(5,r.WireType.LengthDelimited).bytes(e.data.rawBytes);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const J=new G;class Y extends r.MessageType{constructor(){super("sessionstorepb.GetRequest",[{no:1,name:"key",kind:"scalar",T:9}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.key="",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();if(1===t)a.key=e.string();else{let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.key&&t.tag(1,r.WireType.LengthDelimited).string(e.key);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const Z=new Y;class Q extends r.MessageType{constructor(){super("sessionstorepb.GetResponse",[{no:1,name:"key",kind:"scalar",T:9},{no:2,name:"namespace",kind:"scalar",T:9},{no:3,name:"value",kind:"message",T:()=>J}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.key="",t.namespace="",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.key=e.string();break;case 2:a.namespace=e.string();break;case 3:a.value=J.internalBinaryRead(e,e.uint32(),n,a.value);break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.key&&t.tag(1,r.WireType.LengthDelimited).string(e.key),""!==e.namespace&&t.tag(2,r.WireType.LengthDelimited).string(e.namespace),e.value&&J.internalBinaryWrite(e.value,t.tag(3,r.WireType.LengthDelimited).fork(),n).join();let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const X=new Q;class ee extends r.MessageType{constructor(){super("sessionstorepb.DeleteRequest",[{no:1,name:"key",kind:"scalar",T:9}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.key="",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();if(1===t)a.key=e.string();else{let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.key&&t.tag(1,r.WireType.LengthDelimited).string(e.key);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const te=new ee;class ne extends r.MessageType{constructor(){super("sessionstorepb.DeleteResponse",[])}create(e){const t=globalThis.Object.create(this.messagePrototype);return void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){return null!=r?r:this.create()}internalBinaryWrite(e,t,n){let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const re=new ne;class se extends r.MessageType{constructor(){super("sessionstorepb.SetRequest",[{no:1,name:"key",kind:"scalar",T:9},{no:3,name:"value",kind:"message",T:()=>J}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.key="",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.key=e.string();break;case 3:a.value=J.internalBinaryRead(e,e.uint32(),n,a.value);break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.key&&t.tag(1,r.WireType.LengthDelimited).string(e.key),e.value&&J.internalBinaryWrite(e.value,t.tag(3,r.WireType.LengthDelimited).fork(),n).join();let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const ae=new se;class ie extends r.MessageType{constructor(){super("sessionstorepb.SetResponse",[])}create(e){const t=globalThis.Object.create(this.messagePrototype);return void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){return null!=r?r:this.create()}internalBinaryWrite(e,t,n){let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const oe=new ie;class le extends r.MessageType{constructor(){super("sessionstorepb.ChangeStream",[{no:1,name:"change_id",kind:"scalar",T:9},{no:2,name:"key",kind:"scalar",T:9},{no:3,name:"namespace",kind:"scalar",T:9},{no:4,name:"value",kind:"message",T:()=>J},{no:5,name:"from_id",kind:"scalar",T:9}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.changeId="",t.key="",t.namespace="",t.fromId="",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.changeId=e.string();break;case 2:a.key=e.string();break;case 3:a.namespace=e.string();break;case 4:a.value=J.internalBinaryRead(e,e.uint32(),n,a.value);break;case 5:a.fromId=e.string();break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.changeId&&t.tag(1,r.WireType.LengthDelimited).string(e.changeId),""!==e.key&&t.tag(2,r.WireType.LengthDelimited).string(e.key),""!==e.namespace&&t.tag(3,r.WireType.LengthDelimited).string(e.namespace),e.value&&J.internalBinaryWrite(e.value,t.tag(4,r.WireType.LengthDelimited).fork(),n).join(),""!==e.fromId&&t.tag(5,r.WireType.LengthDelimited).string(e.fromId);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const ce=new le;class de extends r.MessageType{constructor(){super("sessionstorepb.Select",[{no:1,name:"all",kind:"scalar",oneof:"match",T:9},{no:2,name:"key",kind:"scalar",oneof:"match",T:9},{no:3,name:"prefix",kind:"scalar",oneof:"match",T:9},{no:4,name:"suffix",kind:"scalar",oneof:"match",T:9}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.match={oneofKind:void 0},void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.match={oneofKind:"all",all:e.string()};break;case 2:a.match={oneofKind:"key",key:e.string()};break;case 3:a.match={oneofKind:"prefix",prefix:e.string()};break;case 4:a.match={oneofKind:"suffix",suffix:e.string()};break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){"all"===e.match.oneofKind&&t.tag(1,r.WireType.LengthDelimited).string(e.match.all),"key"===e.match.oneofKind&&t.tag(2,r.WireType.LengthDelimited).string(e.match.key),"prefix"===e.match.oneofKind&&t.tag(3,r.WireType.LengthDelimited).string(e.match.prefix),"suffix"===e.match.oneofKind&&t.tag(4,r.WireType.LengthDelimited).string(e.match.suffix);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const ue=new de;class he extends r.MessageType{constructor(){super("sessionstorepb.OpenRequest",[{no:1,name:"change_id",kind:"scalar",T:9},{no:3,name:"select",kind:"message",repeat:1,T:()=>ue}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.changeId="",t.select=[],void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();switch(t){case 1:a.changeId=e.string();break;case 3:a.select.push(ue.internalBinaryRead(e,e.uint32(),n));break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){""!==e.changeId&&t.tag(1,r.WireType.LengthDelimited).string(e.changeId);for(let s=0;s<e.select.length;s++)ue.internalBinaryWrite(e.select[s],t.tag(3,r.WireType.LengthDelimited).fork(),n).join();let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const pe=new he;class fe extends r.MessageType{constructor(){super("sessionstorepb.CountRequest",[])}create(e){const t=globalThis.Object.create(this.messagePrototype);return void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){return null!=r?r:this.create()}internalBinaryWrite(e,t,n){let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const ge=new fe;class ye extends r.MessageType{constructor(){super("sessionstorepb.CountResponse",[{no:1,name:"count",kind:"scalar",T:3}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.count="0",void 0!==e&&r.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,s){let a=null!=s?s:this.create(),i=e.pos+t;for(;e.pos<i;){let[t,s]=e.tag();if(1===t)a.count=e.int64().toString();else{let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${s}) for ${this.typeName}`);let o=e.skip(s);!1!==i&&(!0===i?r.UnknownFieldHandler.onRead:i)(this.typeName,a,t,s,o)}}return a}internalBinaryWrite(e,t,n){"0"!==e.count&&t.tag(1,r.WireType.Varint).int64(e.count);let s=n.writeUnknownFields;return!1!==s&&(1==s?r.UnknownFieldHandler.onWrite:s)(this.typeName,e,t),t}}const me=new ye;new s.ServiceType("sessionstorepb.Api",[{name:"Hello",options:{},I:j,O:K},{name:"Subscribe",serverStreaming:!0,options:{},I:q,O:V}]);const we=new s.ServiceType("sessionstorepb.Store",[{name:"open",serverStreaming:!0,options:{},I:pe,O:ce},{name:"get",options:{},I:Z,O:X},{name:"set",options:{},I:ae,O:oe},{name:"delete",options:{},I:te,O:re},{name:"count",options:{},I:ge,O:me}]);class ke{constructor(e){this._transport=e,this.typeName=we.typeName,this.methods=we.methods,this.options=we.options}open(e,t){const n=this.methods[0],r=this._transport.mergeOptions(t);return s.stackIntercept("serverStreaming",this._transport,n,r,e)}get(e,t){const n=this.methods[1],r=this._transport.mergeOptions(t);return s.stackIntercept("unary",this._transport,n,r,e)}set(e,t){const n=this.methods[2],r=this._transport.mergeOptions(t);return s.stackIntercept("unary",this._transport,n,r,e)}delete(e,t){const n=this.methods[3],r=this._transport.mergeOptions(t);return s.stackIntercept("unary",this._transport,n,r,e)}count(e,t){const n=this.methods[4],r=this._transport.mergeOptions(t);return s.stackIntercept("unary",this._transport,n,r,e)}}const be=["network error","failed to fetch"];class ve{constructor(e,t){const r=new n.GrpcWebFetchTransport({baseUrl:e,meta:{Authorization:`Bearer ${t}`}});this.storeClient=new ke(r)}open(e){return o(this,arguments,void 0,(function*({handleOpen:e,handleChange:t,handleError:n}){const r=new AbortController,s=this.storeClient.open({changeId:"",select:[]},{abort:r.signal});let a;const i=[];s.responses.onMessage((n=>{var r;if(n.value){if("str"===(null===(r=n.value)||void 0===r?void 0:r.data.oneofKind)){const r=JSON.parse(n.value.data.str);i.length===a?t(n.key,r):(i.push(r),i.length===a&&e(i))}}else t(n.key)})),s.responses.onError((s=>{const a=be.includes(s.message.toLowerCase()),i="network error"===s.message.toLowerCase(),o=()=>{r.abort("closing to open new conn"),this.open({handleOpen:e,handleChange:t,handleError:n}),window.removeEventListener("online",o)};a&&(i&&o(),window.addEventListener("online",o)),s.message.includes("abort")||n(s,!a)}));try{a=yield this.getKeysCountWithDelay(),e(a?i:[])}catch(e){const t=be.includes(e.message.toLowerCase());n(e,t)}return()=>{r.abort("client whiteboard abort")}}))}set(e,t){const n=t?JSON.stringify(t):void 0;return this.storeClient.set({key:e,value:n?{data:{str:n,oneofKind:"str"},type:L.STRING}:{data:{oneofKind:void 0},type:L.NONE}})}get(e){return o(this,void 0,void 0,(function*(){var t;const{response:n}=yield this.storeClient.get({key:e});if("str"===(null===(t=n.value)||void 0===t?void 0:t.data.oneofKind))return JSON.parse(n.value.data.str)}))}getKeysCount(){return o(this,void 0,void 0,(function*(){const{response:e}=yield this.storeClient.count({});return Number(e.count)}))}delete(e){return this.storeClient.delete({key:e})}getKeysCountWithDelay(){return o(this,void 0,void 0,(function*(){for(let e=0;e<3;e++)try{return yield new Promise((e=>setTimeout(e,200))),yield this.getKeysCount()}catch(t){if(console.warn(t),"peer not found"!==t.message||2===e)throw t}}))}}function Te(e){if(!e||0===e.length)throw Error("Token cannot be an empty string or undefined or null");const t=e.split(".");if(3!==t.length)throw Error("Expected 3 '.' separate fields - header, payload and signature respectively");const n=atob(t[1]);try{return JSON.parse(n)}catch(e){throw Error(`couldn't parse to json - ${e.message}`)}}const Ee="currentPage",_e=11,Se=200,Ne=({token:t,endpoint:n="https://store-prod-in3-grpc.100ms.live",handleError:r})=>e.useMemo((()=>{try{Te(t)}catch(e){return r(e)}if(!n||!t)return r(new Error("Missing GRPC endpoint or token"));const e=new ve(n,t);return window.sessionStore=e,e}),[n,t,r]),Ue=({token:t,editor:n,zoomToContent:r=!1,handleError:s})=>{const{permissions:a}=e.useMemo((()=>{try{return Te(t)}catch(e){return s(e),{}}}),[t,s]);return e.useEffect((()=>{if(null==n||n.updateInstanceState({canMoveCamera:!!r}),!a)return;const e=!a.includes("write");null==n||n.updateInstanceState({isReadonly:e})}),[a,r,n]),a},Re=["camera","document","instance","instance_page_state","page"];function Ce({endpoint:n,token:r,zoomToContent:s,transparentCanvas:a,onMount:o,refresh:l}){var c,d;const[u,h]=e.useState(),p=function({endpoint:n,token:r,editor:s,shapeUtils:a=[],zoomToContent:i=!1}){const[o]=e.useState((()=>{const e=t.createTLStore({shapeUtils:[...t.defaultShapeUtils,...a]});return e.loadSnapshot(P),e})),[l,c]=e.useState(null==s?void 0:s.getCurrentPage()),[d,u]=e.useState({status:"loading"}),h=e.useCallback(((e,t)=>{u(t?{error:e,status:"error"}:{store:o,status:"synced-remote",connectionStatus:"offline"})}),[o]),p=Ne({token:r,endpoint:n,handleError:h}),f=Ue({token:r,editor:s,zoomToContent:i,handleError:h}),g=e.useCallback((e=>{if(p){if(Re.every((t=>e.filter((e=>e.typeName===t)).length>0)))o.mergeRemoteChanges((()=>{o.clear(),o.put(e)}));else for(const e of o.allRecords())p.set(e.id,e);u({store:o,status:"synced-remote",connectionStatus:"online"})}}),[o,p]),y=e.useCallback(((e,n)=>{o.mergeRemoteChanges((()=>{if(!n)return o.remove([e]);e===Ee?c(n):t.transact((()=>{o.put([n]),e===t.TLINSTANCE_ID&&o.put([Object.assign(Object.assign({},n),{canMoveCamera:!!i,isReadonly:!f.includes("write")})])}))}))}),[o,f,i]);return e.useEffect((()=>{if(!p)return;u({status:"loading"});const e=[];return p.open({handleOpen:g,handleChange:y,handleError:h}).then((t=>e.push(t))),e.push(o.listen(t.throttle((function({changes:e}){Object.values(e.added).forEach((e=>{p.set(e.id,e)})),Object.values(e.updated).forEach((([,e])=>{p.set(e.id,e)})),Object.values(e.removed).forEach((e=>{p.delete(e.id)}))}),_e),{source:"user",scope:"document"})),()=>{e.forEach((e=>e())),e.length=0}}),[o,p,y,g,h]),e.useEffect((()=>{if(!s||!p)return;const e=[];return e.push(o.listen(t.debounce((({changes:e})=>{Object.keys(e.updated).forEach((e=>{if(!e.includes("instance"))return;const n=null==s?void 0:s.getCurrentPage();(null==n?void 0:n.id)!==(null==l?void 0:l.id)&&(p.get(t.TLINSTANCE_ID).then((e=>{e&&(null==p||p.set(e.id,Object.assign(Object.assign({},e),{currentPageId:null==n?void 0:n.id})))})),c(n))}))}),Se),{source:"user",scope:"session"})),()=>{e.forEach((e=>e())),e.length=0}}),[l,s,p,o]),e.useEffect((()=>{var e;s&&(null===(e=s.getInstanceState())||void 0===e?void 0:e.isReadonly)&&i&&o.listen((()=>{s.zoomToFit()}),{source:"remote",scope:"document"})}),[s,o,i]),d}({endpoint:n,token:r,editor:u,zoomToContent:s});return"synced-remote"===p.status&&"offline"===p.connectionStatus?i.default.createElement(M,{error:Error("Network connection lost"),editor:u,refresh:l}):i.default.createElement(t.Tldraw,{className:a?"transparent-canvas":"",autoFocus:!0,store:p,onMount:e=>{h(e),window.editor=e,null==o||o({store:p.store,editor:e})},components:{ErrorFallback:({error:e,editor:t})=>i.default.createElement(M,{editor:t,error:e,refresh:l})},hideUi:null===(c=null==u?void 0:u.getInstanceState())||void 0===c?void 0:c.isReadonly,initialState:(null===(d=null==u?void 0:u.getInstanceState())||void 0===d?void 0:d.isReadonly)?"hand":"select"})}exports.Whiteboard=function(t){const[n,r]=e.useState(Date.now()+t.token);return i.default.createElement(Ce,Object.assign({key:n,refresh:()=>r(Date.now()+t.token)},t))};
|
|
7
7
|
//# sourceMappingURL=index.cjs.js.map
|