New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More

@tldraw/tlsync-client

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@tldraw/tlsync-client - npm Package Compare versions

Comparing version

to
0.1.0-alpha.2

@@ -25,2 +25,3 @@ "use strict";

var import_tlsync = require("@tldraw/tlsync");
var import_signia = require("signia");
function windowListen(...args) {

@@ -74,7 +75,7 @@ window.addEventListener(...args);

handleDisconnect(status) {
if (this.connectionStatus === status || status === "error" && this._connectionStatus === "offline") {
if (this.connectionStatus === status || status === "error" && this.connectionStatus === "offline") {
this._attemptReconnect();
return;
}
this._connectionStatus = status;
this._connectionStatus.set(status);
this.statusListeners.forEach((cb) => cb(status));

@@ -93,3 +94,3 @@ this._reconnectTimeout.clear();

}
this._connectionStatus = "online";
this._connectionStatus.set("online");
this.statusListeners.forEach((cb) => cb(this.connectionStatus));

@@ -120,5 +121,8 @@ this._reconnectTimeout.clear();

}
_connectionStatus = "initial";
_connectionStatus = (0, import_signia.atom)(
"websocket connection status",
"initial"
);
get connectionStatus() {
return this._connectionStatus === "initial" ? "offline" : this._connectionStatus;
return this._connectionStatus.value === "initial" ? "offline" : this._connectionStatus.value;
}

@@ -125,0 +129,0 @@ sendMessage(msg) {

@@ -24,2 +24,3 @@ "use strict";

module.exports = __toCommonJS(useLocalSyncClient_exports);
var import_tldraw_beta = require("@tldraw/tldraw-beta");
var import_react = require("react");

@@ -30,28 +31,40 @@ var import_hardReset = require("../hardReset");

function useLocalSyncClient({
store,
universalPersistenceKey,
instanceId
}) {
const [client, setClient] = (0, import_react.useState)(void 0);
const [error, setError] = (0, import_react.useState)(void 0);
const [state, setState] = (0, import_react.useState)(null);
(0, import_react.useEffect)(() => {
store.clear();
const client2 = new import_TLLocalSyncClient.TLLocalSyncClient(store, {
const id = (0, import_tldraw_beta.uniqueId)();
setState({
id,
syncedStore: { status: "loading" }
});
const setSyncedStore = (syncedStore) => {
setState((prev) => {
if (prev?.id === id) {
return { id, syncedStore };
}
return prev;
});
};
const store = new import_tldraw_beta.TLStore();
const client = new import_TLLocalSyncClient.TLLocalSyncClient(store, {
instanceId,
universalPersistenceKey,
onLoad(blub) {
setClient(blub);
onLoad() {
setSyncedStore({ status: "synced", store });
},
onLoadError(err) {
setError(err);
setSyncedStore({ status: "error", error: err });
}
});
const userDataUnusbcribe = (0, import_persistence_constants.subscribeToUserData)(store);
const userDataUnsubcribe = (0, import_persistence_constants.subscribeToUserData)(store);
return () => {
userDataUnusbcribe();
client2.close();
setState((prevState) => prevState?.id === id ? null : prevState);
userDataUnsubcribe();
client.close();
};
}, [instanceId, store, universalPersistenceKey]);
return { client, error };
}, [instanceId, universalPersistenceKey]);
return state?.syncedStore ?? { status: "loading" };
}
//# sourceMappingURL=useLocalSyncClient.js.map

@@ -21,14 +21,15 @@ "use strict";

__export(useRemoteSyncClient_exports, {
RemoteSyncClientContext: () => RemoteSyncClientContext,
RemoteSyncClientProvider: () => RemoteSyncClientProvider,
useConnectionStatus: () => useConnectionStatus,
useRemoteSyncClient: () => useRemoteSyncClient,
useRemoteSyncContext: () => useRemoteSyncContext
RemoteConnectionStatusIndicator: () => RemoteConnectionStatusIndicator,
RemoteSyncError: () => RemoteSyncError,
useRemoteSyncClient: () => useRemoteSyncClient
});
module.exports = __toCommonJS(useRemoteSyncClient_exports);
var import_jsx_runtime = require("react/jsx-runtime");
var import_tldraw_beta = require("@tldraw/tldraw-beta");
var import_tlschema = require("@tldraw/tlschema");
var import_tlsync = require("@tldraw/tlsync");
var import_utils = require("@tldraw/utils");
var import_react = require("react");
var import_tlstate = require("tlstate");
var import_signia = require("signia");
var import_signia_react = require("signia-react");
var import_alerts = require("../alerts");

@@ -39,4 +40,10 @@ var import_ClientWebSocketAdapter = require("../ClientWebSocketAdapter");

var import_persistence_constants = require("../persistence-constants");
class RemoteSyncError extends Error {
constructor(reason) {
super(`remote sync error: ${reason}`);
this.reason = reason;
}
name = "RemoteSyncError";
}
function useRemoteSyncClient({
store,
uri,

@@ -46,11 +53,17 @@ roomId = "default",

}) {
const [client, setClient] = (0, import_react.useState)(null);
const [error, setError] = (0, import_react.useState)(null);
const [status, setStatus] = (0, import_react.useState)(
client?.socket.connectionStatus
);
const [state, setState] = (0, import_react.useState)(null);
(0, import_react.useEffect)(() => {
store.clear();
const id = (0, import_tldraw_beta.uniqueId)();
setState({ id });
const setCurrentState = (newState) => {
setState((prev) => {
if (prev?.id === id) {
return { ...newState, id };
}
return prev;
});
};
const store = new import_tlschema.TLStore();
const socket = new import_ClientWebSocketAdapter.ClientWebSocketAdapter(uri);
const client2 = new import_tlsync.TLSyncClient({
const client = new import_tlsync.TLSyncClient({
store,

@@ -60,11 +73,12 @@ schema: import_tlschema.schema,

instanceId,
async onLoad(client3) {
async onLoad(client2) {
let json = void 0;
try {
json = await (0, import_indexedDb.loadDataFromStore)("stash");
} catch (error2) {
console.error(error2);
this.onLoadError(error2);
} catch (error) {
console.error(error);
this.onLoadError(error);
(0, import_alerts.showCantReadFromIndexDbAlert)();
window.location.reload();
return;
}

@@ -75,13 +89,10 @@ if (json && json.records.length > 0) {

(0, import_indexedDb.clearDb)("stash");
(0, import_tlstate.transact)(() => {
(0, import_signia.transact)(() => {
const bstore = new import_tlschema.TLStore({
initialData: Object.fromEntries(records.map((r) => [r.id, r])),
UNSAFE_SKIP_INITIAL_VALIDATION: true,
onError({ error: error2 }) {
console.error(error2.message);
}
UNSAFE_SKIP_INITIAL_VALIDATION: true
});
import_tlschema.schema.migrateStore(bstore, serializedSchema);
client3.store.clear();
client3.store.put(bstore.allRecords(), "initialize");
client2.store.clear();
client2.store.put(bstore.allRecords(), "initialize");
});

@@ -92,10 +103,10 @@ } catch (err) {

}
setClient(client3);
setCurrentState({ readyClient: client2 });
},
onLoadError(err) {
console.error(err);
setError({ type: "load_error" });
setCurrentState({ error: err });
},
onSyncError(reason) {
setError({ type: "sync_error", reason });
setCurrentState({ error: new RemoteSyncError(reason) });
},

@@ -107,36 +118,50 @@ onAfterConnect() {

const userDataUnsusbcribe = (0, import_persistence_constants.subscribeToUserData)(store);
const statusUnsubscribe = client2.socket.onStatusChange((status2) => {
setStatus(status2);
});
return () => {
userDataUnsusbcribe();
statusUnsubscribe();
client2.close();
client.close();
socket.close();
setState((prevState) => prevState?.id === id ? null : prevState);
};
}, [store, uri, instanceId, roomId]);
return { client, error, status };
}, [uri, instanceId, roomId]);
return (0, import_signia_react.useValue)(
"remote synced store",
() => {
if (!state)
return { status: "loading" };
if (state.error)
return { status: "error", error: state.error };
if (!state.readyClient)
return { status: "loading" };
const connectionStatus = state.readyClient.socket.connectionStatus;
return {
status: "synced",
connectionStatus: connectionStatus === "error" ? "offline" : connectionStatus,
store: state.readyClient.store
};
},
[state]
);
}
const RemoteSyncClientContext = (0, import_react.createContext)({
client: null,
error: null,
status: void 0
});
function RemoteSyncClientProvider({
children,
...config
function RemoteConnectionStatusIndicator({
syncedStore
}) {
const state = useRemoteSyncClient(config);
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RemoteSyncClientContext.Provider, {
value: state,
children
if (syncedStore.status !== "synced")
return null;
let statusColor;
switch (syncedStore.connectionStatus) {
case "online":
statusColor = "var(--color-selected)";
break;
case "offline":
statusColor = "var(--color-warn)";
break;
default:
(0, import_utils.exhaustiveSwitchError)(syncedStore.connectionStatus);
}
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
className: "tlui-share-zone__connection-status",
"aria-label": syncedStore.connectionStatus,
style: { color: statusColor }
});
}
function useRemoteSyncContext() {
return (0, import_react.useContext)(RemoteSyncClientContext);
}
function useConnectionStatus() {
const { status } = useRemoteSyncContext();
return status;
}
//# sourceMappingURL=useRemoteSyncClient.js.map

@@ -31,3 +31,3 @@ "use strict";

var import_tldraw_beta = require("@tldraw/tldraw-beta");
var import_tlstate = require("tlstate");
var import_signia = require("signia");
function iOS() {

@@ -39,7 +39,7 @@ return ["iPad Simulator", "iPhone Simulator", "iPod Simulator", "iPad", "iPhone", "iPod"].includes(

const USER_DATA_KEY = "TLDRAW_USER_DATA_v2";
const globalUserData = (0, import_tlstate.atom)(
const globalUserData = (0, import_signia.atom)(
"globalUserData",
JSON.parse(localStorage.getItem(USER_DATA_KEY) || "null") ?? import_tldraw_beta.TLUser.create({})
);
(0, import_tlstate.react)("set global user data", () => {
(0, import_signia.react)("set global user data", () => {
localStorage.setItem(USER_DATA_KEY, JSON.stringify(globalUserData.value));

@@ -46,0 +46,0 @@ });

@@ -112,6 +112,3 @@ "use strict";

initialData: Object.fromEntries(data.records.map((r) => [r.id, r])),
UNSAFE_SKIP_INITIAL_VALIDATION: true,
onError({ error }) {
console.error(error.message);
}
UNSAFE_SKIP_INITIAL_VALIDATION: true
});

@@ -121,3 +118,3 @@ const result = import_tldraw_beta.schema.migrateStore(bstore, data.schema);

console.error("failed to migrate store", result);
onLoadError(result.reason);
onLoadError(new Error(`Failed to migrate store: ${result.reason}`));
return;

@@ -124,0 +121,0 @@ }

import {
serializeMessage
} from "@tldraw/tlsync";
import { atom } from "signia";
function windowListen(...args) {

@@ -52,7 +53,7 @@ window.addEventListener(...args);

handleDisconnect(status) {
if (this.connectionStatus === status || status === "error" && this._connectionStatus === "offline") {
if (this.connectionStatus === status || status === "error" && this.connectionStatus === "offline") {
this._attemptReconnect();
return;
}
this._connectionStatus = status;
this._connectionStatus.set(status);
this.statusListeners.forEach((cb) => cb(status));

@@ -71,3 +72,3 @@ this._reconnectTimeout.clear();

}
this._connectionStatus = "online";
this._connectionStatus.set("online");
this.statusListeners.forEach((cb) => cb(this.connectionStatus));

@@ -98,5 +99,8 @@ this._reconnectTimeout.clear();

}
_connectionStatus = "initial";
_connectionStatus = atom(
"websocket connection status",
"initial"
);
get connectionStatus() {
return this._connectionStatus === "initial" ? "offline" : this._connectionStatus;
return this._connectionStatus.value === "initial" ? "offline" : this._connectionStatus.value;
}

@@ -103,0 +107,0 @@ sendMessage(msg) {

@@ -0,1 +1,2 @@

import { TLStore, uniqueId } from "@tldraw/tldraw-beta";
import { useEffect, useState } from "react";

@@ -6,27 +7,39 @@ import "../hardReset";

function useLocalSyncClient({
store,
universalPersistenceKey,
instanceId
}) {
const [client, setClient] = useState(void 0);
const [error, setError] = useState(void 0);
const [state, setState] = useState(null);
useEffect(() => {
store.clear();
const client2 = new TLLocalSyncClient(store, {
const id = uniqueId();
setState({
id,
syncedStore: { status: "loading" }
});
const setSyncedStore = (syncedStore) => {
setState((prev) => {
if (prev?.id === id) {
return { id, syncedStore };
}
return prev;
});
};
const store = new TLStore();
const client = new TLLocalSyncClient(store, {
instanceId,
universalPersistenceKey,
onLoad(blub) {
setClient(blub);
onLoad() {
setSyncedStore({ status: "synced", store });
},
onLoadError(err) {
setError(err);
setSyncedStore({ status: "error", error: err });
}
});
const userDataUnusbcribe = subscribeToUserData(store);
const userDataUnsubcribe = subscribeToUserData(store);
return () => {
userDataUnusbcribe();
client2.close();
setState((prevState) => prevState?.id === id ? null : prevState);
userDataUnsubcribe();
client.close();
};
}, [instanceId, store, universalPersistenceKey]);
return { client, error };
}, [instanceId, universalPersistenceKey]);
return state?.syncedStore ?? { status: "loading" };
}

@@ -33,0 +46,0 @@ export {

import { jsx } from "react/jsx-runtime";
import { uniqueId } from "@tldraw/tldraw-beta";
import { schema, TLStore } from "@tldraw/tlschema";
import { TLSyncClient } from "@tldraw/tlsync";
import { createContext, useContext, useEffect, useState } from "react";
import { transact } from "tlstate";
import { exhaustiveSwitchError } from "@tldraw/utils";
import { useEffect, useState } from "react";
import { transact } from "signia";
import { useValue } from "signia-react";
import { showCantReadFromIndexDbAlert } from "../alerts";

@@ -11,4 +14,10 @@ import { ClientWebSocketAdapter } from "../ClientWebSocketAdapter";

import { getUserData, subscribeToUserData } from "../persistence-constants";
class RemoteSyncError extends Error {
constructor(reason) {
super(`remote sync error: ${reason}`);
this.reason = reason;
}
name = "RemoteSyncError";
}
function useRemoteSyncClient({
store,
uri,

@@ -18,11 +27,17 @@ roomId = "default",

}) {
const [client, setClient] = useState(null);
const [error, setError] = useState(null);
const [status, setStatus] = useState(
client?.socket.connectionStatus
);
const [state, setState] = useState(null);
useEffect(() => {
store.clear();
const id = uniqueId();
setState({ id });
const setCurrentState = (newState) => {
setState((prev) => {
if (prev?.id === id) {
return { ...newState, id };
}
return prev;
});
};
const store = new TLStore();
const socket = new ClientWebSocketAdapter(uri);
const client2 = new TLSyncClient({
const client = new TLSyncClient({
store,

@@ -32,11 +47,12 @@ schema,

instanceId,
async onLoad(client3) {
async onLoad(client2) {
let json = void 0;
try {
json = await loadDataFromStore("stash");
} catch (error2) {
console.error(error2);
this.onLoadError(error2);
} catch (error) {
console.error(error);
this.onLoadError(error);
showCantReadFromIndexDbAlert();
window.location.reload();
return;
}

@@ -50,10 +66,7 @@ if (json && json.records.length > 0) {

initialData: Object.fromEntries(records.map((r) => [r.id, r])),
UNSAFE_SKIP_INITIAL_VALIDATION: true,
onError({ error: error2 }) {
console.error(error2.message);
}
UNSAFE_SKIP_INITIAL_VALIDATION: true
});
schema.migrateStore(bstore, serializedSchema);
client3.store.clear();
client3.store.put(bstore.allRecords(), "initialize");
client2.store.clear();
client2.store.put(bstore.allRecords(), "initialize");
});

@@ -64,10 +77,10 @@ } catch (err) {

}
setClient(client3);
setCurrentState({ readyClient: client2 });
},
onLoadError(err) {
console.error(err);
setError({ type: "load_error" });
setCurrentState({ error: err });
},
onSyncError(reason) {
setError({ type: "sync_error", reason });
setCurrentState({ error: new RemoteSyncError(reason) });
},

@@ -79,43 +92,55 @@ onAfterConnect() {

const userDataUnsusbcribe = subscribeToUserData(store);
const statusUnsubscribe = client2.socket.onStatusChange((status2) => {
setStatus(status2);
});
return () => {
userDataUnsusbcribe();
statusUnsubscribe();
client2.close();
client.close();
socket.close();
setState((prevState) => prevState?.id === id ? null : prevState);
};
}, [store, uri, instanceId, roomId]);
return { client, error, status };
}, [uri, instanceId, roomId]);
return useValue(
"remote synced store",
() => {
if (!state)
return { status: "loading" };
if (state.error)
return { status: "error", error: state.error };
if (!state.readyClient)
return { status: "loading" };
const connectionStatus = state.readyClient.socket.connectionStatus;
return {
status: "synced",
connectionStatus: connectionStatus === "error" ? "offline" : connectionStatus,
store: state.readyClient.store
};
},
[state]
);
}
const RemoteSyncClientContext = createContext({
client: null,
error: null,
status: void 0
});
function RemoteSyncClientProvider({
children,
...config
function RemoteConnectionStatusIndicator({
syncedStore
}) {
const state = useRemoteSyncClient(config);
return /* @__PURE__ */ jsx(RemoteSyncClientContext.Provider, {
value: state,
children
if (syncedStore.status !== "synced")
return null;
let statusColor;
switch (syncedStore.connectionStatus) {
case "online":
statusColor = "var(--color-selected)";
break;
case "offline":
statusColor = "var(--color-warn)";
break;
default:
exhaustiveSwitchError(syncedStore.connectionStatus);
}
return /* @__PURE__ */ jsx("div", {
className: "tlui-share-zone__connection-status",
"aria-label": syncedStore.connectionStatus,
style: { color: statusColor }
});
}
function useRemoteSyncContext() {
return useContext(RemoteSyncClientContext);
}
function useConnectionStatus() {
const { status } = useRemoteSyncContext();
return status;
}
export {
RemoteSyncClientContext,
RemoteSyncClientProvider,
useConnectionStatus,
useRemoteSyncClient,
useRemoteSyncContext
RemoteConnectionStatusIndicator,
RemoteSyncError,
useRemoteSyncClient
};
//# sourceMappingURL=useRemoteSyncClient.js.map
import { TLInstance, TLUser, uniqueId } from "@tldraw/tldraw-beta";
import { atom, react } from "tlstate";
import { atom, react } from "signia";
function iOS() {

@@ -4,0 +4,0 @@ return ["iPad Simulator", "iPhone Simulator", "iPod Simulator", "iPad", "iPhone", "iPod"].includes(

@@ -91,6 +91,3 @@ import { schema, TLStore } from "@tldraw/tldraw-beta";

initialData: Object.fromEntries(data.records.map((r) => [r.id, r])),
UNSAFE_SKIP_INITIAL_VALIDATION: true,
onError({ error }) {
console.error(error.message);
}
UNSAFE_SKIP_INITIAL_VALIDATION: true
});

@@ -100,3 +97,3 @@ const result = schema.migrateStore(bstore, data.schema);

console.error("failed to migrate store", result);
onLoadError(result.reason);
onLoadError(new Error(`Failed to migrate store: ${result.reason}`));
return;

@@ -103,0 +100,0 @@ }

@@ -1,2 +0,2 @@

import { Context } from 'react';
import { ReadySyncedStore } from '@tldraw/tldraw-beta';
import { RecordsDiff } from '@tldraw/tlstore';

@@ -6,2 +6,3 @@ import { SerializedSchema } from '@tldraw/tlstore';

import { StoreSnapshot } from '@tldraw/tlstore';
import { SyncedStore } from '@tldraw/tldraw-beta';
import { TLIncompatibilityReason } from '@tldraw/tlsync';

@@ -11,5 +12,2 @@ import { TLInstanceId } from '@tldraw/tldraw-beta';

import { TLRecord } from '@tldraw/tldraw-beta';
import { TLRecord as TLRecord_2 } from '@tldraw/tlschema';
import { TLStore } from '@tldraw/tlschema';
import { TLSyncClient } from '@tldraw/tlsync';
import { TLUser } from '@tldraw/tldraw-beta';

@@ -59,22 +57,22 @@

/** @public */
export declare const RemoteSyncClientContext: Context< {
client: TLSyncClient<TLRecord_2> | null;
error: RemoteSyncError | null;
status: "error" | "offline" | "online" | undefined;
}>;
export declare interface ReadyRemoteSyncedStore extends ReadySyncedStore {
readonly connectionStatus: 'online' | 'offline';
}
/** @public */
export declare function RemoteSyncClientProvider({ children, ...config }: UseSyncClientConfig & {
children: any;
}): JSX.Element;
export declare function RemoteConnectionStatusIndicator({ syncedStore, }: {
syncedStore: RemoteSyncedStore;
}): JSX.Element | null;
/** @public */
export declare type RemoteSyncError = {
type: 'sync_error';
reason: TLIncompatibilityReason;
} | {
type: 'load_error';
};
export declare type RemoteSyncedStore = Exclude<SyncedStore, ReadySyncedStore> | ReadyRemoteSyncedStore;
/** @public */
export declare class RemoteSyncError extends Error {
readonly reason: TLIncompatibilityReason;
name: string;
constructor(reason: TLIncompatibilityReason);
}
/** @public */
export declare const STORE_PREFIX = "TLDRAW_DOCUMENT_v2";

@@ -129,3 +127,3 @@

onLoad: (self: TLLocalSyncClient) => void;
onLoadError: (error: unknown) => void;
onLoadError: (error: Error) => void;
}, channel?: BroadcastChannelMock | BroadcastChannel);

@@ -137,18 +135,5 @@ private connect;

private scheduledPersistTimeout;
/* Excluded from this release type: schedulePersist */
/* Excluded from this release type: persistIfNeeded */
/**
* Schedule a persist. Persists don't happen immediately: they are throttled to
* avoid writing too often, and will retry if failed.
* @private
*/
private schedulePersist;
/**
* Persist to indexeddb only under certain circumstances:
* - if we're not already persisting
* - if we're not reloading the page
* - and we have something to persist (a full db write scheduled or changes in the diff queue)
*
* @private
*/
private persistIfNeeded;
/**
* Actually persist to indexeddb. If the write fails, then we'll

@@ -160,5 +145,2 @@ * retry with a full db write after a short delay.

/** @public */
export declare function useConnectionStatus(): "error" | "offline" | "online" | undefined;
/**

@@ -168,28 +150,12 @@ * This is a temporary solution that will be replaced with the remote sync client once it has the db integrated

*/
export declare function useLocalSyncClient({ store, universalPersistenceKey, instanceId, }: {
store: Store<any>;
export declare function useLocalSyncClient({ universalPersistenceKey, instanceId, }: {
universalPersistenceKey: string;
instanceId: TLInstanceId;
}): {
client: TLLocalSyncClient | undefined;
error: any;
};
}): SyncedStore;
/** @public */
export declare function useRemoteSyncClient({ store, uri, roomId, instanceId, }: UseSyncClientConfig): {
client: TLSyncClient<TLRecord_2> | null;
error: RemoteSyncError | null;
status: "error" | "offline" | "online" | undefined;
};
export declare function useRemoteSyncClient({ uri, roomId, instanceId, }: UseSyncClientConfig): RemoteSyncedStore;
/** @public */
export declare function useRemoteSyncContext(): {
client: TLSyncClient<TLRecord_2> | null;
error: RemoteSyncError | null;
status: "error" | "offline" | "online" | undefined;
};
/** @public */
export declare type UseSyncClientConfig = {
store: TLStore;
uri: string;

@@ -196,0 +162,0 @@ roomId?: string;

@@ -5,3 +5,3 @@ {

"description": "A tiny little drawing app (multiplayer sync).",
"version": "0.0.2-alpha.1",
"version": "0.1.0-alpha.2",
"author": "tldraw GB Ltd.",

@@ -20,3 +20,2 @@ "homepage": "https://tldraw.dev",

"dist/**/*",
"src/**/*",
"index.d.ts"

@@ -51,11 +50,12 @@ ],

"transformIgnorePatterns": [
"node_modules/(?!(nanoid)/)"
"node_modules/(?!(nanoid|escape-string-regexp)/)"
]
},
"dependencies": {
"@tldraw/tldraw-beta": "0.0.2-alpha.1",
"@tldraw/tlstore": "0.0.2-alpha.1",
"@tldraw/tlsync": "0.0.2-alpha.1",
"@tldraw/tldraw-beta": "0.1.0-alpha.2",
"@tldraw/tlstore": "0.1.0-alpha.2",
"@tldraw/tlsync": "0.1.0-alpha.2",
"idb": "^7.1.0",
"tlstate": "^0.0.4"
"signia": "^0.0.7",
"signia-react": "^0.0.7"
},

@@ -62,0 +62,0 @@ "module": "dist/esm/index.js",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet