@100mslive/hms-whiteboard 0.0.0-alpha.0 → 0.0.0-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.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/dist/ErrorFallback.js +2 -0
  3. package/dist/ErrorFallback.js.map +1 -0
  4. package/dist/Whiteboard.d.ts +0 -1
  5. package/dist/Whiteboard.js +2 -0
  6. package/dist/Whiteboard.js.map +1 -0
  7. package/dist/_virtual/index.js +2 -0
  8. package/dist/_virtual/index.js.map +1 -0
  9. package/dist/grpc/sessionstore.client.js +2 -0
  10. package/dist/grpc/sessionstore.client.js.map +1 -0
  11. package/dist/grpc/sessionstore.js +2 -0
  12. package/dist/grpc/sessionstore.js.map +1 -0
  13. package/dist/hooks/StoreClient.js +2 -0
  14. package/dist/hooks/StoreClient.js.map +1 -0
  15. package/dist/hooks/default_store.js +2 -0
  16. package/dist/hooks/default_store.js.map +1 -0
  17. package/dist/hooks/useCollaboration.js +2 -0
  18. package/dist/hooks/useCollaboration.js.map +1 -0
  19. package/dist/hooks/useSessionStore.js +2 -0
  20. package/dist/hooks/useSessionStore.js.map +1 -0
  21. package/dist/hooks/useSetEditorPermissions.js +2 -0
  22. package/dist/hooks/useSetEditorPermissions.js.map +1 -0
  23. package/dist/index.cjs.js +6 -2266
  24. package/dist/index.cjs.js.map +1 -7
  25. package/dist/index.css +3 -2759
  26. package/dist/index.js +1 -2263
  27. package/dist/index.js.map +1 -7
  28. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/ArraySet.mjs.js +2 -0
  29. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/ArraySet.mjs.js.map +1 -0
  30. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/Computed.mjs.js +2 -0
  31. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/Computed.mjs.js.map +1 -0
  32. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/EffectScheduler.mjs.js +2 -0
  33. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/EffectScheduler.mjs.js.map +1 -0
  34. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/HistoryBuffer.mjs.js +2 -0
  35. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/HistoryBuffer.mjs.js.map +1 -0
  36. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/capture.mjs.js +2 -0
  37. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/capture.mjs.js.map +1 -0
  38. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/constants.mjs.js +2 -0
  39. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/constants.mjs.js.map +1 -0
  40. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/helpers.mjs.js +2 -0
  41. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/helpers.mjs.js.map +1 -0
  42. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/transactions.mjs.js +2 -0
  43. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/transactions.mjs.js.map +1 -0
  44. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/types.mjs.js +2 -0
  45. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/types.mjs.js.map +1 -0
  46. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/warnings.mjs.js +2 -0
  47. package/dist/node_modules/@tldraw/state/dist-esm/lib/core/warnings.mjs.js.map +1 -0
  48. package/dist/node_modules/@tldraw/state/dist-esm/lib/react/useValue.mjs.js +2 -0
  49. package/dist/node_modules/@tldraw/state/dist-esm/lib/react/useValue.mjs.js.map +1 -0
  50. package/dist/node_modules/classnames/index.js +7 -0
  51. package/dist/node_modules/classnames/index.js.map +1 -0
  52. package/dist/utils.js +2 -0
  53. package/dist/utils.js.map +1 -0
  54. package/package.json +18 -13
  55. package/dist/index.cjs.css +0 -2767
  56. package/dist/index.cjs.css.map +0 -7
  57. package/dist/index.css.map +0 -7
  58. package/dist/meta.cjs.json +0 -1240
  59. package/dist/meta.esbuild.json +0 -1242
package/dist/index.cjs.js CHANGED
@@ -1,2267 +1,7 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
- var __esm = (fn, res) => function __init() {
10
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
11
- };
12
- var __commonJS = (cb, mod) => function __require() {
13
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
14
- };
15
- var __export = (target, all) => {
16
- for (var name in all)
17
- __defProp(target, name, { get: all[name], enumerable: true });
18
- };
19
- var __copyProps = (to, from, except, desc) => {
20
- if (from && typeof from === "object" || typeof from === "function") {
21
- for (let key of __getOwnPropNames(from))
22
- if (!__hasOwnProp.call(to, key) && key !== except)
23
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
24
- }
25
- return to;
26
- };
27
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
28
- // If the importer is in node compatibility mode or this is not an ESM
29
- // file that has been converted to a CommonJS file using a Babel-
30
- // compatible transform (i.e. "__esModule" has not been set), then set
31
- // "default" to the CommonJS "module.exports" for node compatibility.
32
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
33
- mod
34
- ));
35
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
36
- var __publicField = (obj, key, value) => {
37
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
38
- return value;
39
- };
40
-
41
- // <define:process.env>
42
- var define_process_env_default;
43
- var init_define_process_env = __esm({
44
- "<define:process.env>"() {
45
- define_process_env_default = { NVM_INC: "/Users/ravitheja/.nvm/versions/node/v18.17.0/include/node", npm_package_devDependencies_typedoc_plugin_markdown: "^3.14.0", npm_package_devDependencies_lint_staged: "^12.0.3", NX_CLI_SET: "true", npm_package_devDependencies_react_dom: "^18.1.0", npm_package_scripts_size: "size-limit", npm_package_devDependencies_prettier: "^2.4.1", TERM_PROGRAM: "vscode", npm_package_size_limit_0_limit: "20 KB", npm_package_size_limit_0_path: "packages/hms-video-store/dist/index.cjs.js", npm_package_scripts_prebuilt: "cd packages/roomkit-react && yarn start", NODE: "/Users/ravitheja/.nvm/versions/node/v18.17.0/bin/node", npm_package_scripts_types_build: "tsc -p tsconfig.json", INIT_CWD: "/Users/ravitheja/Documents/web-sdks/packages", NVM_CD_FLAGS: "-q", npm_package_devDependencies_typescript: "^5.2.2", npm_config_version_git_tag: "true", TERM: "xterm-256color", SHELL: "/bin/zsh", npm_package_devDependencies_jest: "26.6.0", npm_package_size_limit_4_limit: "20 KB", npm_package_devDependencies_babel_plugin_istanbul: "^6.1.1", TMPDIR: "/var/folders/_k/lv0n3xdx0n9c5c6nzjvb629r0000gn/T/", npm_package_devDependencies_esbuild: "^0.18.13", npm_package_size_limit_6_limit: "150 KB", npm_package_scripts_store: "cd packages/hms-video-store && yarn start", npm_package_scripts_lint: "eslint -c .eslintrc --no-error-on-unmatched-pattern src --ext .js --ext .jsx --ext .ts --ext .tsx", npm_config_init_license: "MIT", TERM_PROGRAM_VERSION: "1.88.0", npm_package_devDependencies_concurrently: "^6.4.0", npm_package_scripts_ybys: "yarn && yarn build --no-private && yarn storybook", npm_package_scripts_dev: "node ../../scripts/dev", npm_package_scripts_prestart: "rm -rf dist && yarn types:build", ZDOTDIR: "/Users/ravitheja", ORIGINAL_XDG_CURRENT_DESKTOP: "undefined", MallocNanoZone: "0", npm_package_private: "true", npm_config_registry: "https://registry.yarnpkg.com", npm_package_sideEffects: "false", ZSH: "/Users/ravitheja/.oh-my-zsh", npm_package_devDependencies_size_limit: "^5.0.3", npm_package_devDependencies_eslint_plugin_react_refresh: "^0.4.4", npm_package_peerDependencies_react_dom: ">=17.0.2 <19.0.0", npm_package_readmeFilename: "README.md", NVM_DIR: "/Users/ravitheja/.nvm", USER: "ravitheja", npm_package_description: "This monorepo contains all the packages required to integrate 100ms on the web.", npm_package_devDependencies_react: "^18.1.0", npm_package_license: "MIT", npm_package_devDependencies_dotenv: "^14.2.0", npm_package_devDependencies__types_react: "^18.1.0", COMMAND_MODE: "unix2003", npm_package_lint_staged____js_ts_jsx_tsx_: "eslint", npm_package_scripts_build_storybook: "cd packages/roomkit-react && yarn build-storybook", npm_package_devDependencies_postcss_loader: "^6.2.1", npm_package_devDependencies_grpc_tools: "^1.12.4", npm_package_exports___import: "./dist/index.js", npm_package_devDependencies_babel_jest: "^26.6.0", npm_package_devDependencies__babel_core: "^7.8.0", NX_TASK_HASH: "a403272550ac4cbda3aa08c5ff6855d5497f668aba15434c196d105b629731e3", SSH_AUTH_SOCK: "/private/tmp/com.apple.launchd.txCsm7XFQk/Listeners", npm_package_devDependencies_esbuild_plugin_postcss2: "0.1.1", __CF_USER_TEXT_ENCODING: "0x1F5:0x0:0x0", npm_package_devDependencies_postcss: "^8.4.5", npm_package_devDependencies_eslint_plugin_simple_import_sort: "^8.0.0", npm_package_devDependencies_eslint: "^8.53.0", npm_package_devDependencies__types_jest: "^27.0.3", npm_execpath: "/usr/local/Cellar/yarn/1.22.19/libexec/bin/yarn.js", npm_package_size_limit_5_path: "packages/hms-virtual-background/dist/index.js", npm_package_devDependencies_tslib: "^2.2.0", npm_package_devDependencies__typescript_eslint_eslint_plugin: "^5.4.0", npm_package_devDependencies__protobuf_ts_plugin: "^2.9.1", PAGER: "less", npm_package_author_name: "100ms", LSCOLORS: "Gxfxcxdxbxegedabagacad", npm_package_devDependencies_eslint_plugin_prettier: "^4.0.0", npm_package_devDependencies__types_react_dom: "^18.1.0", npm_package_size_limit_1_path: "packages/hms-video-store/dist/index.js", npm_package_devDependencies__typescript_eslint_parser: "^5.4.0", NX_TASK_TARGET_PROJECT: "@100mslive/hms-whiteboard", PATH: "/var/folders/_k/lv0n3xdx0n9c5c6nzjvb629r0000gn/T/yarn--1712636877197-0.25387454825377076:/Users/ravitheja/Documents/web-sdks/packages/hms-whiteboard/node_modules/.bin:/Users/ravitheja/.config/yarn/link/node_modules/.bin:/Users/ravitheja/Documents/web-sdks/node_modules/.bin:/Users/ravitheja/.nvm/versions/node/v18.17.0/libexec/lib/node_modules/npm/bin/node-gyp-bin:/Users/ravitheja/.nvm/versions/node/v18.17.0/lib/node_modules/npm/bin/node-gyp-bin:/Users/ravitheja/.nvm/versions/node/v18.17.0/bin/node_modules/npm/bin/node-gyp-bin:/var/folders/_k/lv0n3xdx0n9c5c6nzjvb629r0000gn/T/yarn--1712636876822-0.6590753932430242:/Users/ravitheja/Documents/web-sdks/packages/hms-whiteboard/node_modules/.bin:/Users/ravitheja/.config/yarn/link/node_modules/.bin:/Users/ravitheja/Documents/web-sdks/node_modules/.bin:/Users/ravitheja/.nvm/versions/node/v18.17.0/libexec/lib/node_modules/npm/bin/node-gyp-bin:/Users/ravitheja/.nvm/versions/node/v18.17.0/lib/node_modules/npm/bin/node-gyp-bin:/Users/ravitheja/.nvm/versions/node/v18.17.0/bin/node_modules/npm/bin/node-gyp-bin:/var/folders/_k/lv0n3xdx0n9c5c6nzjvb629r0000gn/T/yarn--1712636874526-0.9704024289150126:/Users/ravitheja/Documents/web-sdks/node_modules/.bin:/Users/ravitheja/.config/yarn/link/node_modules/.bin:/Users/ravitheja/Documents/web-sdks/node_modules/.bin:/Users/ravitheja/.nvm/versions/node/v18.17.0/libexec/lib/node_modules/npm/bin/node-gyp-bin:/Users/ravitheja/.nvm/versions/node/v18.17.0/lib/node_modules/npm/bin/node-gyp-bin:/Users/ravitheja/.nvm/versions/node/v18.17.0/bin/node_modules/npm/bin/node-gyp-bin:/Users/ravitheja/.nvm/versions/node/v18.17.0/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/Applications/Wireshark.app/Contents/MacOS:/Users/ravitheja/.nvm/versions/node/v18.17.0/bin:/Users/ravitheja/.cargo/bin", npm_config_argv: '{"remain":[],"cooked":["run","build"],"original":["build","--no-private"]}', npm_package_scripts_postinstall: "husky install && lerna bootstrap", npm_package_scripts_lint_fix: "yarn lint --fix", npm_package_size_limit_7_path: "packages/react-icons/dist/index.js", npm_package_size_limit_5_limit: "20 KB", npm_package_devDependencies_typedoc: "^0.24.8", npm_package_devDependencies_nx: "^14.5.1", npm_config_workspaces_experimental: "true", _: "/var/folders/_k/lv0n3xdx0n9c5c6nzjvb629r0000gn/T/yarn--1712636877197-0.25387454825377076/node", npm_package_size_limit_4_path: "packages/hms-virtual-background/dist/index.cjs.js", NX_WORKSPACE_ROOT: "/Users/ravitheja/Documents/web-sdks", npm_package_dependencies__tldraw_tldraw: "2.0.0-alpha.19", USER_ZDOTDIR: "/Users/ravitheja", __CFBundleIdentifier: "com.microsoft.VSCode", npm_package_size_limit_7_limit: "100 KB", npm_package_scripts_lerna_publish: "lerna publish from-package --dist-tag $PUBLISH_FLAG --yes --no-verify-access", npm_package_devDependencies_ts_jest: "26.5.6", PWD: "/Users/ravitheja/Documents/web-sdks/packages/hms-whiteboard", npm_package_devDependencies_cypress: "^9.5.2", npm_package_scripts_build_proto: "protoc --ts_out ./src/grpc -I=./proto proto/*proto", npm_package_exports___index_css: "./dist/index.css", npm_package_devDependencies_eslint_plugin_react_hooks: "^4.6.0", npm_lifecycle_event: "build:only", npm_package_scripts_build_only: "rm -rf dist && node ../../scripts/build-webapp", LANG: "en_US.UTF-8", npm_package_name: "@100mslive/hms-whiteboard", npm_package_types: "dist/index.d.ts", npm_package_size_limit_2_limit: "400 KB", npm_package_resolutions_loader_utils: "^2.0.4", npm_package_scripts_controller: "cd packages/hls-controller && yarn start", npm_package_scripts_build: "yarn build:only && yarn types:build", npm_package_scripts_start: 'concurrently "yarn dev" "yarn types"', npm_config_version_commit_hooks: "true", VSCODE_GIT_ASKPASS_EXTRA_ARGS: "", XPC_FLAGS: "0x0", npm_package_devDependencies_eslint_config_react_app: "^7.0.0", npm_config_bin_links: "true", npm_package_engines_node: ">=16", FORCE_COLOR: "true", npm_config_wrap_output: "", npm_package_scripts_cypress_open: "cypress open", npm_package_main: "dist/index.js", XPC_SERVICE_NAME: "0", npm_package_version: "0.0.0-alpha.0", VSCODE_INJECTION: "1", SHLVL: "5", HOME: "/Users/ravitheja", npm_package_devDependencies__size_limit_file: "^5.0.3", npm_package_type: "module", VSCODE_GIT_ASKPASS_MAIN: "/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass-main.js", npm_package_scripts_storybook: "cd packages/roomkit-react && yarn storybook", npm_package_scripts_test: "yarn build --no-private && lerna run test", npm_package_dependencies__protobuf_ts_grpcweb_transport: "^2.9.1", npm_config_save_prefix: "^", npm_config_strict_ssl: "true", npm_package_devDependencies_husky: "^6.0.0", npm_package_devDependencies__commitlint_cli: "^15.0.0", npm_config_version_git_message: "v%s", npm_package_size_limit_3_path: "packages/roomkit-react/dist/index.js", npm_package_devDependencies_ts_node: "^10.4.0", npm_package_dependencies__protobuf_ts_runtime_rpc: "^2.9.1", npm_package_dependencies__protobuf_ts_runtime: "^2.9.1", npm_package_exports___default: "./dist/index.js", LESS: "-R", LOGNAME: "ravitheja", YARN_WRAP_OUTPUT: "false", npm_package_scripts_format: "prettier -w src/**", PREFIX: "/usr/local", npm_lifecycle_script: "rm -rf dist && node ../../scripts/build-webapp", npm_package_exports___require: "./dist/index.cjs.js", VSCODE_GIT_IPC_HANDLE: "/var/folders/_k/lv0n3xdx0n9c5c6nzjvb629r0000gn/T/vscode-git-10419d9aa6.sock", npm_package_size_limit_6_path: "packages/react-icons/dist/index.cjs.js", npm_package_peerDependencies_react: ">=17.0.2 <19.0.0", NVM_BIN: "/Users/ravitheja/.nvm/versions/node/v18.17.0/bin", LERNA_PACKAGE_NAME: "@100mslive/hms-whiteboard", npm_config_version_git_sign: "", npm_config_ignore_scripts: "", npm_config_user_agent: "yarn/1.22.19 npm/? node/v18.17.0 darwin x64", VSCODE_GIT_ASKPASS_NODE: "/Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin)", GIT_ASKPASS: "/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass.sh", npm_package_size_limit_2_path: "packages/roomkit-react/dist/index.cjs.js", npm_package_scripts_reactsdk: "cd packages/react-sdk && yarn start", npm_package_devDependencies__types_node: "^20.12.5", npm_package_scripts_types: "tsc -w", npm_package_size_limit_1_limit: "20 KB", npm_package_devDependencies_lerna: "^5.6.2", npm_package_files_0: "dist", npm_package_size_limit_3_limit: "20 KB", npm_config_init_version: "1.0.0", npm_config_ignore_optional: "", npm_package_devDependencies__commitlint_config_conventional: "^15.0.0", npm_package_workspaces_0: "packages/*", COLORTERM: "truecolor", npm_node_execpath: "/Users/ravitheja/.nvm/versions/node/v18.17.0/bin/node", npm_package_workspaces_1: "examples/*", npm_config_version_tag_prefix: "v" };
46
- }
47
- });
48
-
49
- // ../../node_modules/classnames/index.js
50
- var require_classnames = __commonJS({
51
- "../../node_modules/classnames/index.js"(exports, module2) {
52
- init_define_process_env();
53
- (function() {
54
- "use strict";
55
- var hasOwn = {}.hasOwnProperty;
56
- function classNames2() {
57
- var classes = "";
58
- for (var i = 0; i < arguments.length; i++) {
59
- var arg = arguments[i];
60
- if (arg) {
61
- classes = appendClass(classes, parseValue(arg));
62
- }
63
- }
64
- return classes;
65
- }
66
- function parseValue(arg) {
67
- if (typeof arg === "string" || typeof arg === "number") {
68
- return arg;
69
- }
70
- if (typeof arg !== "object") {
71
- return "";
72
- }
73
- if (Array.isArray(arg)) {
74
- return classNames2.apply(null, arg);
75
- }
76
- if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) {
77
- return arg.toString();
78
- }
79
- var classes = "";
80
- for (var key in arg) {
81
- if (hasOwn.call(arg, key) && arg[key]) {
82
- classes = appendClass(classes, key);
83
- }
84
- }
85
- return classes;
86
- }
87
- function appendClass(value, newClass) {
88
- if (!newClass) {
89
- return value;
90
- }
91
- if (value) {
92
- return value + " " + newClass;
93
- }
94
- return value + newClass;
95
- }
96
- if (typeof module2 !== "undefined" && module2.exports) {
97
- classNames2.default = classNames2;
98
- module2.exports = classNames2;
99
- } else if (typeof define === "function" && typeof define.amd === "object" && define.amd) {
100
- define("classnames", [], function() {
101
- return classNames2;
102
- });
103
- } else {
104
- window.classNames = classNames2;
105
- }
106
- })();
107
- }
108
- });
109
-
110
- // src/index.ts
111
- var src_exports = {};
112
- __export(src_exports, {
113
- Whiteboard: () => Whiteboard
114
- });
115
- module.exports = __toCommonJS(src_exports);
116
- init_define_process_env();
117
-
118
- // src/Whiteboard.tsx
119
- init_define_process_env();
120
- var import_react12 = __toESM(require("react"), 1);
121
- var import_tldraw3 = require("@tldraw/tldraw");
122
-
123
- // src/ErrorFallback.tsx
124
- init_define_process_env();
125
- var import_react8 = __toESM(require("react"), 1);
126
-
127
- // ../../node_modules/@tldraw/state/dist-esm/index.mjs
128
- init_define_process_env();
129
-
130
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/index.mjs
131
- init_define_process_env();
132
-
133
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/Atom.mjs
134
- init_define_process_env();
135
-
136
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/ArraySet.mjs
137
- init_define_process_env();
138
- var ARRAY_SIZE_THRESHOLD = 8;
139
- var ArraySet = class {
140
- constructor() {
141
- __publicField(this, "arraySize", 0);
142
- __publicField(this, "array", Array(ARRAY_SIZE_THRESHOLD));
143
- __publicField(this, "set", null);
144
- }
145
- /**
146
- * Get whether this ArraySet has any elements.
147
- *
148
- * @returns True if this ArraySet has any elements, false otherwise.
149
- */
150
- // eslint-disable-next-line no-restricted-syntax
151
- get isEmpty() {
152
- if (this.array) {
153
- return this.arraySize === 0;
154
- }
155
- if (this.set) {
156
- return this.set.size === 0;
157
- }
158
- throw new Error("no set or array");
159
- }
160
- /**
161
- * Add an item to the ArraySet if it is not already present.
162
- *
163
- * @param elem - The element to add.
164
- */
165
- add(elem) {
166
- if (this.array) {
167
- const idx = this.array.indexOf(elem);
168
- if (idx !== -1) {
169
- return false;
170
- }
171
- if (this.arraySize < ARRAY_SIZE_THRESHOLD) {
172
- this.array[this.arraySize] = elem;
173
- this.arraySize++;
174
- return true;
175
- } else {
176
- this.set = new Set(this.array);
177
- this.array = null;
178
- this.set.add(elem);
179
- return true;
180
- }
181
- }
182
- if (this.set) {
183
- if (this.set.has(elem)) {
184
- return false;
185
- }
186
- this.set.add(elem);
187
- return true;
188
- }
189
- throw new Error("no set or array");
190
- }
191
- /**
192
- * Remove an item from the ArraySet if it is present.
193
- *
194
- * @param elem - The element to remove
195
- */
196
- remove(elem) {
197
- if (this.array) {
198
- const idx = this.array.indexOf(elem);
199
- if (idx === -1) {
200
- return false;
201
- }
202
- this.array[idx] = void 0;
203
- this.arraySize--;
204
- if (idx !== this.arraySize) {
205
- this.array[idx] = this.array[this.arraySize];
206
- this.array[this.arraySize] = void 0;
207
- }
208
- return true;
209
- }
210
- if (this.set) {
211
- if (!this.set.has(elem)) {
212
- return false;
213
- }
214
- this.set.delete(elem);
215
- return true;
216
- }
217
- throw new Error("no set or array");
218
- }
219
- /**
220
- * Run a callback for each element in the ArraySet.
221
- *
222
- * @param visitor - The callback to run for each element.
223
- */
224
- visit(visitor) {
225
- if (this.array) {
226
- for (let i = 0; i < this.arraySize; i++) {
227
- const elem = this.array[i];
228
- if (typeof elem !== "undefined") {
229
- visitor(elem);
230
- }
231
- }
232
- return;
233
- }
234
- if (this.set) {
235
- this.set.forEach(visitor);
236
- return;
237
- }
238
- throw new Error("no set or array");
239
- }
240
- };
241
-
242
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/HistoryBuffer.mjs
243
- init_define_process_env();
244
-
245
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/types.mjs
246
- init_define_process_env();
247
- var RESET_VALUE = Symbol("RESET_VALUE");
248
-
249
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/HistoryBuffer.mjs
250
- var HistoryBuffer = class {
251
- constructor(capacity) {
252
- __publicField(this, "index", 0);
253
- // use a wrap around buffer to store the last N values
254
- __publicField(this, "buffer");
255
- this.capacity = capacity;
256
- this.buffer = new Array(capacity);
257
- }
258
- /**
259
- * Add a diff to the history buffer.
260
- *
261
- * @param lastComputedEpoch - The epoch when the diff was computed.
262
- * @param currentEpoch - The current epoch.
263
- * @param diff - The diff to add, or else a reset value.
264
- */
265
- pushEntry(lastComputedEpoch, currentEpoch, diff) {
266
- if (diff === void 0) {
267
- return;
268
- }
269
- if (diff === RESET_VALUE) {
270
- this.clear();
271
- return;
272
- }
273
- this.buffer[this.index] = [lastComputedEpoch, currentEpoch, diff];
274
- this.index = (this.index + 1) % this.capacity;
275
- }
276
- /**
277
- * Clear the history buffer.
278
- */
279
- clear() {
280
- this.index = 0;
281
- this.buffer.fill(void 0);
282
- }
283
- /**
284
- * Get the diffs since the given epoch.
285
- *
286
- * @param epoch - The epoch to get diffs since.
287
- * @returns An array of diffs or a flag to reset the history buffer.
288
- */
289
- getChangesSince(sinceEpoch) {
290
- const { index, capacity, buffer } = this;
291
- for (let i = 0; i < capacity; i++) {
292
- const offset = (index - 1 + capacity - i) % capacity;
293
- const elem = buffer[offset];
294
- if (!elem) {
295
- return RESET_VALUE;
296
- }
297
- const [fromEpoch, toEpoch] = elem;
298
- if (i === 0 && sinceEpoch >= toEpoch) {
299
- return [];
300
- }
301
- if (fromEpoch <= sinceEpoch && sinceEpoch < toEpoch) {
302
- const len = i + 1;
303
- const result = new Array(len);
304
- for (let j = 0; j < len; j++) {
305
- result[j] = buffer[(offset + j) % capacity][2];
306
- }
307
- return result;
308
- }
309
- }
310
- return RESET_VALUE;
311
- }
312
- };
313
-
314
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/capture.mjs
315
- init_define_process_env();
316
-
317
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/helpers.mjs
318
- init_define_process_env();
319
- function isChild(x) {
320
- return x && typeof x === "object" && "parents" in x;
321
- }
322
- function haveParentsChanged(child) {
323
- for (let i = 0, n = child.parents.length; i < n; i++) {
324
- child.parents[i].__unsafe__getWithoutCapture();
325
- if (child.parents[i].lastChangedEpoch !== child.parentEpochs[i]) {
326
- return true;
327
- }
328
- }
329
- return false;
330
- }
331
- var detach = (parent, child) => {
332
- if (!parent.children.remove(child)) {
333
- return;
334
- }
335
- if (parent.children.isEmpty && isChild(parent)) {
336
- for (let i = 0, n = parent.parents.length; i < n; i++) {
337
- detach(parent.parents[i], parent);
338
- }
339
- }
340
- };
341
- var attach = (parent, child) => {
342
- if (!parent.children.add(child)) {
343
- return;
344
- }
345
- if (isChild(parent)) {
346
- for (let i = 0, n = parent.parents.length; i < n; i++) {
347
- attach(parent.parents[i], parent);
348
- }
349
- }
350
- };
351
- function equals(a, b) {
352
- const shallowEquals = a === b || Object.is(a, b) || Boolean(a && b && typeof a.equals === "function" && a.equals(b));
353
- return shallowEquals;
354
- }
355
- var EMPTY_ARRAY = Object.freeze([]);
356
-
357
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/capture.mjs
358
- var tldrawStateGlobalKey = Symbol.for("__@tldraw/state__");
359
- var tldrawStateGlobal = globalThis;
360
- if (tldrawStateGlobal[tldrawStateGlobalKey]) {
361
- console.error(
362
- '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.'
363
- );
364
- } else {
365
- tldrawStateGlobal[tldrawStateGlobalKey] = true;
366
- }
367
- var CaptureStackFrame = class {
368
- constructor(below, child) {
369
- __publicField(this, "offset", 0);
370
- __publicField(this, "numNewParents", 0);
371
- __publicField(this, "maybeRemoved");
372
- this.below = below;
373
- this.child = child;
374
- }
375
- };
376
- var stack = null;
377
- function startCapturingParents(child) {
378
- stack = new CaptureStackFrame(stack, child);
379
- }
380
- function stopCapturingParents() {
381
- const frame = stack;
382
- stack = frame.below;
383
- const didParentsChange = frame.numNewParents > 0 || frame.offset !== frame.child.parents.length;
384
- if (!didParentsChange) {
385
- return;
386
- }
387
- for (let i = frame.offset; i < frame.child.parents.length; i++) {
388
- const p = frame.child.parents[i];
389
- const parentWasRemoved = frame.child.parents.indexOf(p) >= frame.offset;
390
- if (parentWasRemoved) {
391
- detach(p, frame.child);
392
- }
393
- }
394
- frame.child.parents.length = frame.offset;
395
- frame.child.parentEpochs.length = frame.offset;
396
- if (stack?.maybeRemoved) {
397
- for (let i = 0; i < stack.maybeRemoved.length; i++) {
398
- const maybeRemovedParent = stack.maybeRemoved[i];
399
- if (frame.child.parents.indexOf(maybeRemovedParent) === -1) {
400
- detach(maybeRemovedParent, frame.child);
401
- }
402
- }
403
- }
404
- }
405
- function maybeCaptureParent(p) {
406
- if (stack) {
407
- const idx = stack.child.parents.indexOf(p);
408
- if (idx < 0) {
409
- stack.numNewParents++;
410
- if (stack.child.isActivelyListening) {
411
- attach(p, stack.child);
412
- }
413
- }
414
- if (idx < 0 || idx >= stack.offset) {
415
- if (idx !== stack.offset && idx > 0) {
416
- const maybeRemovedParent = stack.child.parents[stack.offset];
417
- if (!stack.maybeRemoved) {
418
- stack.maybeRemoved = [maybeRemovedParent];
419
- } else if (stack.maybeRemoved.indexOf(maybeRemovedParent) === -1) {
420
- stack.maybeRemoved.push(maybeRemovedParent);
421
- }
422
- }
423
- stack.child.parents[stack.offset] = p;
424
- stack.child.parentEpochs[stack.offset] = p.lastChangedEpoch;
425
- stack.offset++;
426
- }
427
- }
428
- }
429
-
430
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/transactions.mjs
431
- init_define_process_env();
432
-
433
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/constants.mjs
434
- init_define_process_env();
435
- var GLOBAL_START_EPOCH = -1;
436
-
437
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/transactions.mjs
438
- var globalEpoch = GLOBAL_START_EPOCH + 1;
439
-
440
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/warnings.mjs
441
- init_define_process_env();
442
- var didWarnDotValue = false;
443
- function logDotValueWarning() {
444
- if (didWarnDotValue)
445
- return;
446
- didWarnDotValue = true;
447
- console.warn(
448
- "Using Signal.value is deprecated and will be removed in the near future. Please use Signal.get() instead."
449
- );
450
- }
451
- var didWarnComputedGetter = false;
452
- function logComputedGetterWarning() {
453
- if (didWarnComputedGetter)
454
- return;
455
- didWarnComputedGetter = true;
456
- console.warn(
457
- `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.
458
-
459
- // Before
460
- @computed
461
- get foo() {
462
- return 'foo'
463
- }
464
-
465
- // After
466
- @computed
467
- getFoo() {
468
- return 'foo'
469
- }
470
- `
471
- );
472
- }
473
-
474
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/Computed.mjs
475
- init_define_process_env();
476
- var UNINITIALIZED = Symbol("UNINITIALIZED");
477
- var WithDiff = class {
478
- constructor(value, diff) {
479
- this.value = value;
480
- this.diff = diff;
481
- }
482
- };
483
- var _Computed = class {
484
- constructor(name, derive, options) {
485
- __publicField(this, "lastChangedEpoch", GLOBAL_START_EPOCH);
486
- __publicField(this, "lastTraversedEpoch", GLOBAL_START_EPOCH);
487
- /**
488
- * The epoch when the reactor was last checked.
489
- */
490
- __publicField(this, "lastCheckedEpoch", GLOBAL_START_EPOCH);
491
- __publicField(this, "parents", []);
492
- __publicField(this, "parentEpochs", []);
493
- __publicField(this, "children", new ArraySet());
494
- __publicField(this, "historyBuffer");
495
- // The last-computed value of this signal.
496
- __publicField(this, "state", UNINITIALIZED);
497
- __publicField(this, "computeDiff");
498
- __publicField(this, "isEqual");
499
- this.name = name;
500
- this.derive = derive;
501
- if (options?.historyLength) {
502
- this.historyBuffer = new HistoryBuffer(options.historyLength);
503
- }
504
- this.computeDiff = options?.computeDiff;
505
- this.isEqual = options?.isEqual ?? equals;
506
- }
507
- // eslint-disable-next-line no-restricted-syntax
508
- get isActivelyListening() {
509
- return !this.children.isEmpty;
510
- }
511
- __unsafe__getWithoutCapture() {
512
- const isNew = this.lastChangedEpoch === GLOBAL_START_EPOCH;
513
- if (!isNew && (this.lastCheckedEpoch === globalEpoch || !haveParentsChanged(this))) {
514
- this.lastCheckedEpoch = globalEpoch;
515
- return this.state;
516
- }
517
- try {
518
- startCapturingParents(this);
519
- const result = this.derive(this.state, this.lastCheckedEpoch);
520
- const newState = result instanceof WithDiff ? result.value : result;
521
- if (this.state === UNINITIALIZED || !this.isEqual(newState, this.state)) {
522
- if (this.historyBuffer && !isNew) {
523
- const diff = result instanceof WithDiff ? result.diff : void 0;
524
- this.historyBuffer.pushEntry(
525
- this.lastChangedEpoch,
526
- globalEpoch,
527
- diff ?? this.computeDiff?.(this.state, newState, this.lastCheckedEpoch, globalEpoch) ?? RESET_VALUE
528
- );
529
- }
530
- this.lastChangedEpoch = globalEpoch;
531
- this.state = newState;
532
- }
533
- this.lastCheckedEpoch = globalEpoch;
534
- return this.state;
535
- } finally {
536
- stopCapturingParents();
537
- }
538
- }
539
- get() {
540
- const value = this.__unsafe__getWithoutCapture();
541
- maybeCaptureParent(this);
542
- return value;
543
- }
544
- /**
545
- * @deprecated Use [[get]] instead.
546
- */
547
- // eslint-disable-next-line no-restricted-syntax
548
- get value() {
549
- logDotValueWarning();
550
- return this.get();
551
- }
552
- getDiffSince(epoch) {
553
- this.get();
554
- if (epoch >= this.lastChangedEpoch) {
555
- return EMPTY_ARRAY;
556
- }
557
- return this.historyBuffer?.getChangesSince(epoch) ?? RESET_VALUE;
558
- }
559
- };
560
- function computedMethodAnnotation(options = {}, _target, key, descriptor) {
561
- const originalMethod = descriptor.value;
562
- const derivationKey = Symbol.for("__@tldraw/state__computed__" + key);
563
- descriptor.value = function() {
564
- let d = this[derivationKey];
565
- if (!d) {
566
- d = new _Computed(key, originalMethod.bind(this), options);
567
- Object.defineProperty(this, derivationKey, {
568
- enumerable: false,
569
- configurable: false,
570
- writable: false,
571
- value: d
572
- });
573
- }
574
- return d.get();
575
- };
576
- descriptor.value[isComputedMethodKey] = true;
577
- return descriptor;
578
- }
579
- function computedAnnotation(options = {}, _target, key, descriptor) {
580
- if (descriptor.get) {
581
- logComputedGetterWarning();
582
- return computedGetterAnnotation(options, _target, key, descriptor);
583
- } else {
584
- return computedMethodAnnotation(options, _target, key, descriptor);
585
- }
586
- }
587
- function computedGetterAnnotation(options = {}, _target, key, descriptor) {
588
- const originalMethod = descriptor.get;
589
- const derivationKey = Symbol.for("__@tldraw/state__computed__" + key);
590
- descriptor.get = function() {
591
- let d = this[derivationKey];
592
- if (!d) {
593
- d = new _Computed(key, originalMethod.bind(this), options);
594
- Object.defineProperty(this, derivationKey, {
595
- enumerable: false,
596
- configurable: false,
597
- writable: false,
598
- value: d
599
- });
600
- }
601
- return d.get();
602
- };
603
- return descriptor;
604
- }
605
- var isComputedMethodKey = "@@__isComputedMethod__@@";
606
- function computed() {
607
- if (arguments.length === 1) {
608
- const options = arguments[0];
609
- return (target, key, descriptor) => computedAnnotation(options, target, key, descriptor);
610
- } else if (typeof arguments[0] === "string") {
611
- return new _Computed(arguments[0], arguments[1], arguments[2]);
612
- } else {
613
- return computedAnnotation(void 0, arguments[0], arguments[1], arguments[2]);
614
- }
615
- }
616
-
617
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/EffectScheduler.mjs
618
- init_define_process_env();
619
- var EffectScheduler = class {
620
- constructor(name, runEffect, options) {
621
- __publicField(this, "_isActivelyListening", false);
622
- /** @internal */
623
- __publicField(this, "lastTraversedEpoch", GLOBAL_START_EPOCH);
624
- __publicField(this, "lastReactedEpoch", GLOBAL_START_EPOCH);
625
- __publicField(this, "_scheduleCount", 0);
626
- /** @internal */
627
- __publicField(this, "parentEpochs", []);
628
- /** @internal */
629
- __publicField(this, "parents", []);
630
- __publicField(this, "_scheduleEffect");
631
- __publicField(this, "maybeExecute", () => {
632
- if (!this._isActivelyListening)
633
- return;
634
- this.execute();
635
- });
636
- this.name = name;
637
- this.runEffect = runEffect;
638
- this._scheduleEffect = options?.scheduleEffect;
639
- }
640
- /**
641
- * Whether this scheduler is attached and actively listening to its parents.
642
- * @public
643
- */
644
- // eslint-disable-next-line no-restricted-syntax
645
- get isActivelyListening() {
646
- return this._isActivelyListening;
647
- }
648
- /**
649
- * The number of times this effect has been scheduled.
650
- * @public
651
- */
652
- // eslint-disable-next-line no-restricted-syntax
653
- get scheduleCount() {
654
- return this._scheduleCount;
655
- }
656
- /** @internal */
657
- maybeScheduleEffect() {
658
- if (!this._isActivelyListening)
659
- return;
660
- if (this.lastReactedEpoch === globalEpoch)
661
- return;
662
- if (this.parents.length && !haveParentsChanged(this)) {
663
- this.lastReactedEpoch = globalEpoch;
664
- return;
665
- }
666
- this.scheduleEffect();
667
- }
668
- /** @internal */
669
- scheduleEffect() {
670
- this._scheduleCount++;
671
- if (this._scheduleEffect) {
672
- this._scheduleEffect(this.maybeExecute);
673
- } else {
674
- this.execute();
675
- }
676
- }
677
- /**
678
- * Makes this scheduler become 'actively listening' to its parents.
679
- * If it has been executed before it will immediately become eligible to receive 'maybeScheduleEffect' calls.
680
- * If it has not executed before it will need to be manually executed once to become eligible for scheduling, i.e. by calling [[EffectScheduler.execute]].
681
- * @public
682
- */
683
- attach() {
684
- this._isActivelyListening = true;
685
- for (let i = 0, n = this.parents.length; i < n; i++) {
686
- attach(this.parents[i], this);
687
- }
688
- }
689
- /**
690
- * Makes this scheduler stop 'actively listening' to its parents.
691
- * It will no longer be eligible to receive 'maybeScheduleEffect' calls until [[EffectScheduler.attach]] is called again.
692
- */
693
- detach() {
694
- this._isActivelyListening = false;
695
- for (let i = 0, n = this.parents.length; i < n; i++) {
696
- detach(this.parents[i], this);
697
- }
698
- }
699
- /**
700
- * Executes the effect immediately and returns the result.
701
- * @returns The result of the effect.
702
- */
703
- execute() {
704
- try {
705
- startCapturingParents(this);
706
- const result = this.runEffect(this.lastReactedEpoch);
707
- this.lastReactedEpoch = globalEpoch;
708
- return result;
709
- } finally {
710
- stopCapturingParents();
711
- }
712
- }
713
- };
714
- function react(name, fn, options) {
715
- const scheduler = new EffectScheduler(name, fn, options);
716
- scheduler.attach();
717
- scheduler.scheduleEffect();
718
- return () => {
719
- scheduler.detach();
720
- };
721
- }
722
-
723
- // ../../node_modules/@tldraw/state/dist-esm/lib/core/isSignal.mjs
724
- init_define_process_env();
725
-
726
- // ../../node_modules/@tldraw/state/dist-esm/lib/react/index.mjs
727
- init_define_process_env();
728
-
729
- // ../../node_modules/@tldraw/state/dist-esm/lib/react/track.mjs
730
- init_define_process_env();
731
- var import_react2 = require("react");
732
-
733
- // ../../node_modules/@tldraw/state/dist-esm/lib/react/useStateTracking.mjs
734
- init_define_process_env();
735
- var import_react = __toESM(require("react"), 1);
736
-
737
- // ../../node_modules/@tldraw/state/dist-esm/lib/react/track.mjs
738
- var ReactMemoSymbol = Symbol.for("react.memo");
739
- var ReactForwardRefSymbol = Symbol.for("react.forward_ref");
740
-
741
- // ../../node_modules/@tldraw/state/dist-esm/lib/react/useAtom.mjs
742
- init_define_process_env();
743
- var import_react3 = require("react");
744
-
745
- // ../../node_modules/@tldraw/state/dist-esm/lib/react/useComputed.mjs
746
- init_define_process_env();
747
- var import_react4 = require("react");
748
-
749
- // ../../node_modules/@tldraw/state/dist-esm/lib/react/useQuickReactor.mjs
750
- init_define_process_env();
751
- var import_react5 = require("react");
752
-
753
- // ../../node_modules/@tldraw/state/dist-esm/lib/react/useReactor.mjs
754
- init_define_process_env();
755
- var import_react6 = require("react");
756
-
757
- // ../../node_modules/@tldraw/state/dist-esm/lib/react/useValue.mjs
758
- init_define_process_env();
759
- var import_react7 = require("react");
760
- function useValue() {
761
- const args = arguments;
762
- const deps = args.length === 3 ? args[2] : [args[0]];
763
- const name = args.length === 3 ? args[0] : `useValue(${args[0].name})`;
764
- const isInRender = (0, import_react7.useRef)(true);
765
- isInRender.current = true;
766
- const $val = (0, import_react7.useMemo)(() => {
767
- if (args.length === 1) {
768
- return args[0];
769
- }
770
- return computed(name, () => {
771
- if (isInRender.current) {
772
- return args[1]();
773
- } else {
774
- try {
775
- return args[1]();
776
- } catch {
777
- return {};
778
- }
779
- }
780
- });
781
- }, deps);
782
- try {
783
- const { subscribe, getSnapshot } = (0, import_react7.useMemo)(() => {
784
- return {
785
- subscribe: (listen) => {
786
- return react(`useValue(${name})`, () => {
787
- $val.get();
788
- listen();
789
- });
790
- },
791
- getSnapshot: () => $val.get()
792
- };
793
- }, [$val]);
794
- return (0, import_react7.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
795
- } finally {
796
- isInRender.current = false;
797
- }
798
- }
799
-
800
- // src/ErrorFallback.tsx
801
- var import_tldraw = require("@tldraw/tldraw");
802
- var import_classnames = __toESM(require_classnames(), 1);
803
- var DISCORD_URL = "https://discord.gg/pTge2BwDBq";
804
- var ErrorFallback = ({ error, editor }) => {
805
- const containerRef = (0, import_react8.useRef)(null);
806
- const [shouldShowError, setShouldShowError] = (0, import_react8.useState)(define_process_env_default.NODE_ENV !== "production");
807
- const [didCopy, setDidCopy] = (0, import_react8.useState)(false);
808
- const [shouldShowResetConfirmation, setShouldShowResetConfirmation] = (0, import_react8.useState)(false);
809
- const errorMessage = error instanceof Error ? error.message : String(error);
810
- const errorStack = error instanceof Error ? error.stack : null;
811
- const isDarkModeFromApp = useValue(
812
- "isDarkMode",
813
- () => {
814
- try {
815
- if (editor) {
816
- return editor.user.isDarkMode;
817
- }
818
- } catch {
819
- }
820
- return null;
821
- },
822
- [editor]
823
- );
824
- const [isDarkMode, setIsDarkMode] = (0, import_react8.useState)(null);
825
- (0, import_react8.useLayoutEffect)(() => {
826
- if (isDarkModeFromApp !== null) {
827
- setIsDarkMode(isDarkModeFromApp);
828
- }
829
- let parent = containerRef.current?.parentElement;
830
- let foundParentThemeClass = false;
831
- while (parent) {
832
- if (parent.classList.contains("tl-theme__dark") || parent.classList.contains("tl-theme__light")) {
833
- foundParentThemeClass = true;
834
- break;
835
- }
836
- parent = parent.parentElement;
837
- }
838
- if (foundParentThemeClass) {
839
- setIsDarkMode(null);
840
- return;
841
- }
842
- setIsDarkMode(window.matchMedia("(prefers-color-scheme: dark)").matches);
843
- }, [isDarkModeFromApp]);
844
- (0, import_react8.useEffect)(() => {
845
- if (didCopy) {
846
- const timeout = setTimeout(() => {
847
- setDidCopy(false);
848
- }, 2e3);
849
- return () => clearTimeout(timeout);
850
- }
851
- }, [didCopy]);
852
- const copyError = () => {
853
- const textarea = document.createElement("textarea");
854
- textarea.value = errorStack ?? errorMessage;
855
- document.body.appendChild(textarea);
856
- textarea.select();
857
- document.execCommand("copy");
858
- textarea.remove();
859
- setDidCopy(true);
860
- };
861
- const refresh = () => {
862
- (0, import_tldraw.refreshPage)();
863
- };
864
- const resetLocalState = async () => {
865
- (0, import_tldraw.hardResetEditor)();
866
- };
867
- return /* @__PURE__ */ import_react8.default.createElement(
868
- "div",
869
- {
870
- ref: containerRef,
871
- className: (0, import_classnames.default)(
872
- "tl-container tl-error-boundary",
873
- // error-boundary is sometimes used outside of the theme
874
- // container, so we need to provide it with a theme for our
875
- // styles to work correctly
876
- isDarkMode === null ? "" : isDarkMode ? "tl-theme__dark" : "tl-theme__light"
877
- )
878
- },
879
- /* @__PURE__ */ import_react8.default.createElement("div", { className: "tl-error-boundary__overlay" }),
880
- /* @__PURE__ */ import_react8.default.createElement(
881
- "div",
882
- {
883
- className: (0, import_classnames.default)("tl-modal", "tl-error-boundary__content", {
884
- "tl-error-boundary__content__expanded": shouldShowError && !shouldShowResetConfirmation
885
- })
886
- },
887
- shouldShowResetConfirmation ? /* @__PURE__ */ import_react8.default.createElement(import_react8.default.Fragment, null, /* @__PURE__ */ import_react8.default.createElement("h2", null, "Are you sure?"), /* @__PURE__ */ import_react8.default.createElement("p", null, "Resetting your data will delete your drawing and cannot be undone."), /* @__PURE__ */ import_react8.default.createElement("div", { className: "tl-error-boundary__content__actions" }, /* @__PURE__ */ import_react8.default.createElement("button", { onClick: () => setShouldShowResetConfirmation(false) }, "Cancel"), /* @__PURE__ */ import_react8.default.createElement("button", { className: "tl-error-boundary__reset", onClick: resetLocalState }, "Reset data"))) : /* @__PURE__ */ import_react8.default.createElement(import_react8.default.Fragment, null, /* @__PURE__ */ import_react8.default.createElement("h2", null, "Something's gone wrong."), /* @__PURE__ */ import_react8.default.createElement("p", null, "Sorry, we encountered an error. Please refresh the page to continue. If you keep seeing this error, you can ", /* @__PURE__ */ import_react8.default.createElement("a", { href: DISCORD_URL }, "ask for help on Discord"), "."), shouldShowError && /* @__PURE__ */ import_react8.default.createElement("div", { className: "tl-error-boundary__content__error" }, /* @__PURE__ */ import_react8.default.createElement("pre", null, /* @__PURE__ */ import_react8.default.createElement("code", null, errorStack ?? errorMessage)), /* @__PURE__ */ import_react8.default.createElement("button", { onClick: copyError }, didCopy ? "Copied!" : "Copy")), /* @__PURE__ */ import_react8.default.createElement("div", { className: "tl-error-boundary__content__actions" }, /* @__PURE__ */ import_react8.default.createElement("button", { onClick: () => setShouldShowError(!shouldShowError) }, shouldShowError ? "Hide details" : "Show details"), /* @__PURE__ */ import_react8.default.createElement("div", { className: "tl-error-boundary__content__actions__group" }, /* @__PURE__ */ import_react8.default.createElement("button", { className: "tl-error-boundary__reset", onClick: () => setShouldShowResetConfirmation(true) }, "Reset data"), /* @__PURE__ */ import_react8.default.createElement("button", { className: "tl-error-boundary__refresh", onClick: refresh }, "Refresh Page"))))
888
- )
889
- );
890
- };
891
-
892
- // src/hooks/useCollaboration.ts
893
- init_define_process_env();
894
- var import_react11 = require("react");
895
- var import_tldraw2 = require("@tldraw/tldraw");
896
-
897
- // src/hooks/default_store.ts
898
- init_define_process_env();
899
- var DEFAULT_STORE = {
900
- store: {
901
- "document:document": {
902
- gridSize: 10,
903
- name: "",
904
- meta: {},
905
- id: "document:document",
906
- typeName: "document"
907
- },
908
- "pointer:pointer": {
909
- id: "pointer:pointer",
910
- typeName: "pointer",
911
- x: 0,
912
- y: 0,
913
- lastActivityTimestamp: 0,
914
- meta: {}
915
- },
916
- "page:page": {
917
- meta: {},
918
- id: "page:page",
919
- name: "Page 1",
920
- index: "a1",
921
- typeName: "page"
922
- },
923
- "camera:page:page": {
924
- x: 0,
925
- y: 0,
926
- z: 1,
927
- meta: {},
928
- id: "camera:page:page",
929
- typeName: "camera"
930
- },
931
- "instance_page_state:page:page": {
932
- editingShapeId: null,
933
- croppingShapeId: null,
934
- selectedShapeIds: [],
935
- hoveredShapeId: null,
936
- erasingShapeIds: [],
937
- hintingShapeIds: [],
938
- focusedGroupId: null,
939
- meta: {},
940
- id: "instance_page_state:page:page",
941
- pageId: "page:page",
942
- typeName: "instance_page_state"
943
- },
944
- "instance:instance": {
945
- followingUserId: null,
946
- opacityForNextShape: 1,
947
- stylesForNextShape: {},
948
- brush: null,
949
- scribble: null,
950
- cursor: {
951
- type: "default",
952
- rotation: 0
953
- },
954
- isFocusMode: false,
955
- exportBackground: true,
956
- isDebugMode: false,
957
- isToolLocked: false,
958
- screenBounds: {
959
- x: 0,
960
- y: 0,
961
- w: 720,
962
- h: 400
963
- },
964
- zoomBrush: null,
965
- isGridMode: false,
966
- isPenMode: false,
967
- chatMessage: "",
968
- isChatting: false,
969
- highlightedUserIds: [],
970
- canMoveCamera: true,
971
- isFocused: true,
972
- devicePixelRatio: 2,
973
- isCoarsePointer: false,
974
- isHoveringCanvas: false,
975
- openMenus: [],
976
- isChangingStyle: false,
977
- isReadonly: false,
978
- meta: {},
979
- id: "instance:instance",
980
- currentPageId: "page:page",
981
- typeName: "instance"
982
- }
983
- },
984
- schema: {
985
- schemaVersion: 1,
986
- storeVersion: 4,
987
- recordVersions: {
988
- asset: {
989
- version: 1,
990
- subTypeKey: "type",
991
- subTypeVersions: {
992
- image: 2,
993
- video: 2,
994
- bookmark: 0
995
- }
996
- },
997
- camera: {
998
- version: 1
999
- },
1000
- document: {
1001
- version: 2
1002
- },
1003
- instance: {
1004
- version: 21
1005
- },
1006
- instance_page_state: {
1007
- version: 5
1008
- },
1009
- page: {
1010
- version: 1
1011
- },
1012
- shape: {
1013
- version: 3,
1014
- subTypeKey: "type",
1015
- subTypeVersions: {
1016
- group: 0,
1017
- text: 1,
1018
- bookmark: 1,
1019
- draw: 1,
1020
- geo: 7,
1021
- note: 4,
1022
- line: 1,
1023
- frame: 0,
1024
- arrow: 1,
1025
- highlight: 0,
1026
- embed: 4,
1027
- image: 2,
1028
- video: 1
1029
- }
1030
- },
1031
- instance_presence: {
1032
- version: 5
1033
- },
1034
- pointer: {
1035
- version: 1
1036
- }
1037
- }
1038
- }
1039
- };
1040
-
1041
- // src/hooks/useSessionStore.ts
1042
- init_define_process_env();
1043
- var import_react9 = require("react");
1044
-
1045
- // src/hooks/StoreClient.ts
1046
- init_define_process_env();
1047
- var import_grpcweb_transport = require("@protobuf-ts/grpcweb-transport");
1048
-
1049
- // src/grpc/sessionstore.ts
1050
- init_define_process_env();
1051
- var import_runtime_rpc = require("@protobuf-ts/runtime-rpc");
1052
- var import_runtime8 = require("@protobuf-ts/runtime");
1053
- var import_runtime9 = require("@protobuf-ts/runtime");
1054
- var import_runtime10 = require("@protobuf-ts/runtime");
1055
- var import_runtime11 = require("@protobuf-ts/runtime");
1056
- var Value_Type = /* @__PURE__ */ ((Value_Type2) => {
1057
- Value_Type2[Value_Type2["NONE"] = 0] = "NONE";
1058
- Value_Type2[Value_Type2["BYTES"] = 1] = "BYTES";
1059
- Value_Type2[Value_Type2["STRING"] = 2] = "STRING";
1060
- Value_Type2[Value_Type2["INTEGER"] = 3] = "INTEGER";
1061
- Value_Type2[Value_Type2["FLOAT"] = 4] = "FLOAT";
1062
- return Value_Type2;
1063
- })(Value_Type || {});
1064
- var HelloRequest$Type = class extends import_runtime11.MessageType {
1065
- constructor() {
1066
- super("sessionstorepb.HelloRequest", [{
1067
- no: 1,
1068
- name: "name",
1069
- kind: "scalar",
1070
- T: 9
1071
- /*ScalarType.STRING*/
1072
- }]);
1073
- }
1074
- create(value) {
1075
- const message = globalThis.Object.create(this.messagePrototype);
1076
- message.name = "";
1077
- if (value !== void 0)
1078
- (0, import_runtime10.reflectionMergePartial)(this, message, value);
1079
- return message;
1080
- }
1081
- internalBinaryRead(reader, length, options, target) {
1082
- let message = target ?? this.create(), end = reader.pos + length;
1083
- while (reader.pos < end) {
1084
- let [fieldNo, wireType] = reader.tag();
1085
- switch (fieldNo) {
1086
- case /* string name */
1087
- 1:
1088
- message.name = reader.string();
1089
- break;
1090
- default:
1091
- let u = options.readUnknownField;
1092
- if (u === "throw")
1093
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1094
- let d = reader.skip(wireType);
1095
- if (u !== false)
1096
- (u === true ? import_runtime9.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1097
- }
1098
- }
1099
- return message;
1100
- }
1101
- internalBinaryWrite(message, writer, options) {
1102
- if (message.name !== "")
1103
- writer.tag(1, import_runtime8.WireType.LengthDelimited).string(message.name);
1104
- let u = options.writeUnknownFields;
1105
- if (u !== false)
1106
- (u == true ? import_runtime9.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1107
- return writer;
1108
- }
1109
- };
1110
- var HelloRequest = new HelloRequest$Type();
1111
- var HelloResponse$Type = class extends import_runtime11.MessageType {
1112
- constructor() {
1113
- super("sessionstorepb.HelloResponse", [{
1114
- no: 1,
1115
- name: "response",
1116
- kind: "scalar",
1117
- T: 9
1118
- /*ScalarType.STRING*/
1119
- }]);
1120
- }
1121
- create(value) {
1122
- const message = globalThis.Object.create(this.messagePrototype);
1123
- message.response = "";
1124
- if (value !== void 0)
1125
- (0, import_runtime10.reflectionMergePartial)(this, message, value);
1126
- return message;
1127
- }
1128
- internalBinaryRead(reader, length, options, target) {
1129
- let message = target ?? this.create(), end = reader.pos + length;
1130
- while (reader.pos < end) {
1131
- let [fieldNo, wireType] = reader.tag();
1132
- switch (fieldNo) {
1133
- case /* string response */
1134
- 1:
1135
- message.response = reader.string();
1136
- break;
1137
- default:
1138
- let u = options.readUnknownField;
1139
- if (u === "throw")
1140
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1141
- let d = reader.skip(wireType);
1142
- if (u !== false)
1143
- (u === true ? import_runtime9.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1144
- }
1145
- }
1146
- return message;
1147
- }
1148
- internalBinaryWrite(message, writer, options) {
1149
- if (message.response !== "")
1150
- writer.tag(1, import_runtime8.WireType.LengthDelimited).string(message.response);
1151
- let u = options.writeUnknownFields;
1152
- if (u !== false)
1153
- (u == true ? import_runtime9.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1154
- return writer;
1155
- }
1156
- };
1157
- var HelloResponse = new HelloResponse$Type();
1158
- var SubscribeRequest$Type = class extends import_runtime11.MessageType {
1159
- constructor() {
1160
- super("sessionstorepb.SubscribeRequest", [
1161
- {
1162
- no: 1,
1163
- name: "name",
1164
- kind: "scalar",
1165
- T: 9
1166
- /*ScalarType.STRING*/
1167
- },
1168
- {
1169
- no: 2,
1170
- name: "offset",
1171
- kind: "scalar",
1172
- T: 3,
1173
- L: 0
1174
- /*LongType.BIGINT*/
1175
- }
1176
- ]);
1177
- }
1178
- create(value) {
1179
- const message = globalThis.Object.create(this.messagePrototype);
1180
- message.name = "";
1181
- message.offset = 0n;
1182
- if (value !== void 0)
1183
- (0, import_runtime10.reflectionMergePartial)(this, message, value);
1184
- return message;
1185
- }
1186
- internalBinaryRead(reader, length, options, target) {
1187
- let message = target ?? this.create(), end = reader.pos + length;
1188
- while (reader.pos < end) {
1189
- let [fieldNo, wireType] = reader.tag();
1190
- switch (fieldNo) {
1191
- case /* string name */
1192
- 1:
1193
- message.name = reader.string();
1194
- break;
1195
- case /* int64 offset */
1196
- 2:
1197
- message.offset = reader.int64().toBigInt();
1198
- break;
1199
- default:
1200
- let u = options.readUnknownField;
1201
- if (u === "throw")
1202
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1203
- let d = reader.skip(wireType);
1204
- if (u !== false)
1205
- (u === true ? import_runtime9.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1206
- }
1207
- }
1208
- return message;
1209
- }
1210
- internalBinaryWrite(message, writer, options) {
1211
- if (message.name !== "")
1212
- writer.tag(1, import_runtime8.WireType.LengthDelimited).string(message.name);
1213
- if (message.offset !== 0n)
1214
- writer.tag(2, import_runtime8.WireType.Varint).int64(message.offset);
1215
- let u = options.writeUnknownFields;
1216
- if (u !== false)
1217
- (u == true ? import_runtime9.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1218
- return writer;
1219
- }
1220
- };
1221
- var SubscribeRequest = new SubscribeRequest$Type();
1222
- var Event$Type = class extends import_runtime11.MessageType {
1223
- constructor() {
1224
- super("sessionstorepb.Event", [
1225
- {
1226
- no: 1,
1227
- name: "message",
1228
- kind: "scalar",
1229
- T: 9
1230
- /*ScalarType.STRING*/
1231
- },
1232
- {
1233
- no: 2,
1234
- name: "sequence",
1235
- kind: "scalar",
1236
- T: 3,
1237
- L: 0
1238
- /*LongType.BIGINT*/
1239
- }
1240
- ]);
1241
- }
1242
- create(value) {
1243
- const message = globalThis.Object.create(this.messagePrototype);
1244
- message.message = "";
1245
- message.sequence = 0n;
1246
- if (value !== void 0)
1247
- (0, import_runtime10.reflectionMergePartial)(this, message, value);
1248
- return message;
1249
- }
1250
- internalBinaryRead(reader, length, options, target) {
1251
- let message = target ?? this.create(), end = reader.pos + length;
1252
- while (reader.pos < end) {
1253
- let [fieldNo, wireType] = reader.tag();
1254
- switch (fieldNo) {
1255
- case /* string message */
1256
- 1:
1257
- message.message = reader.string();
1258
- break;
1259
- case /* int64 sequence */
1260
- 2:
1261
- message.sequence = reader.int64().toBigInt();
1262
- break;
1263
- default:
1264
- let u = options.readUnknownField;
1265
- if (u === "throw")
1266
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1267
- let d = reader.skip(wireType);
1268
- if (u !== false)
1269
- (u === true ? import_runtime9.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1270
- }
1271
- }
1272
- return message;
1273
- }
1274
- internalBinaryWrite(message, writer, options) {
1275
- if (message.message !== "")
1276
- writer.tag(1, import_runtime8.WireType.LengthDelimited).string(message.message);
1277
- if (message.sequence !== 0n)
1278
- writer.tag(2, import_runtime8.WireType.Varint).int64(message.sequence);
1279
- let u = options.writeUnknownFields;
1280
- if (u !== false)
1281
- (u == true ? import_runtime9.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1282
- return writer;
1283
- }
1284
- };
1285
- var Event = new Event$Type();
1286
- var Value$Type = class extends import_runtime11.MessageType {
1287
- constructor() {
1288
- super("sessionstorepb.Value", [
1289
- { no: 1, name: "type", kind: "enum", T: () => ["sessionstorepb.Value.Type", Value_Type] },
1290
- {
1291
- no: 2,
1292
- name: "number",
1293
- kind: "scalar",
1294
- oneof: "data",
1295
- T: 3,
1296
- L: 0
1297
- /*LongType.BIGINT*/
1298
- },
1299
- {
1300
- no: 3,
1301
- name: "float",
1302
- kind: "scalar",
1303
- oneof: "data",
1304
- T: 2
1305
- /*ScalarType.FLOAT*/
1306
- },
1307
- {
1308
- no: 4,
1309
- name: "str",
1310
- kind: "scalar",
1311
- oneof: "data",
1312
- T: 9
1313
- /*ScalarType.STRING*/
1314
- },
1315
- {
1316
- no: 5,
1317
- name: "raw_bytes",
1318
- kind: "scalar",
1319
- oneof: "data",
1320
- T: 12
1321
- /*ScalarType.BYTES*/
1322
- }
1323
- ]);
1324
- }
1325
- create(value) {
1326
- const message = globalThis.Object.create(this.messagePrototype);
1327
- message.type = 0;
1328
- message.data = { oneofKind: void 0 };
1329
- if (value !== void 0)
1330
- (0, import_runtime10.reflectionMergePartial)(this, message, value);
1331
- return message;
1332
- }
1333
- internalBinaryRead(reader, length, options, target) {
1334
- let message = target ?? this.create(), end = reader.pos + length;
1335
- while (reader.pos < end) {
1336
- let [fieldNo, wireType] = reader.tag();
1337
- switch (fieldNo) {
1338
- case /* sessionstorepb.Value.Type type */
1339
- 1:
1340
- message.type = reader.int32();
1341
- break;
1342
- case /* int64 number */
1343
- 2:
1344
- message.data = {
1345
- oneofKind: "number",
1346
- number: reader.int64().toBigInt()
1347
- };
1348
- break;
1349
- case /* float float */
1350
- 3:
1351
- message.data = {
1352
- oneofKind: "float",
1353
- float: reader.float()
1354
- };
1355
- break;
1356
- case /* string str */
1357
- 4:
1358
- message.data = {
1359
- oneofKind: "str",
1360
- str: reader.string()
1361
- };
1362
- break;
1363
- case /* bytes raw_bytes */
1364
- 5:
1365
- message.data = {
1366
- oneofKind: "rawBytes",
1367
- rawBytes: reader.bytes()
1368
- };
1369
- break;
1370
- default:
1371
- let u = options.readUnknownField;
1372
- if (u === "throw")
1373
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1374
- let d = reader.skip(wireType);
1375
- if (u !== false)
1376
- (u === true ? import_runtime9.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1377
- }
1378
- }
1379
- return message;
1380
- }
1381
- internalBinaryWrite(message, writer, options) {
1382
- if (message.type !== 0)
1383
- writer.tag(1, import_runtime8.WireType.Varint).int32(message.type);
1384
- if (message.data.oneofKind === "number")
1385
- writer.tag(2, import_runtime8.WireType.Varint).int64(message.data.number);
1386
- if (message.data.oneofKind === "float")
1387
- writer.tag(3, import_runtime8.WireType.Bit32).float(message.data.float);
1388
- if (message.data.oneofKind === "str")
1389
- writer.tag(4, import_runtime8.WireType.LengthDelimited).string(message.data.str);
1390
- if (message.data.oneofKind === "rawBytes")
1391
- writer.tag(5, import_runtime8.WireType.LengthDelimited).bytes(message.data.rawBytes);
1392
- let u = options.writeUnknownFields;
1393
- if (u !== false)
1394
- (u == true ? import_runtime9.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1395
- return writer;
1396
- }
1397
- };
1398
- var Value = new Value$Type();
1399
- var GetRequest$Type = class extends import_runtime11.MessageType {
1400
- constructor() {
1401
- super("sessionstorepb.GetRequest", [{
1402
- no: 1,
1403
- name: "key",
1404
- kind: "scalar",
1405
- T: 9
1406
- /*ScalarType.STRING*/
1407
- }]);
1408
- }
1409
- create(value) {
1410
- const message = globalThis.Object.create(this.messagePrototype);
1411
- message.key = "";
1412
- if (value !== void 0)
1413
- (0, import_runtime10.reflectionMergePartial)(this, message, value);
1414
- return message;
1415
- }
1416
- internalBinaryRead(reader, length, options, target) {
1417
- let message = target ?? this.create(), end = reader.pos + length;
1418
- while (reader.pos < end) {
1419
- let [fieldNo, wireType] = reader.tag();
1420
- switch (fieldNo) {
1421
- case /* string key */
1422
- 1:
1423
- message.key = reader.string();
1424
- break;
1425
- default:
1426
- let u = options.readUnknownField;
1427
- if (u === "throw")
1428
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1429
- let d = reader.skip(wireType);
1430
- if (u !== false)
1431
- (u === true ? import_runtime9.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1432
- }
1433
- }
1434
- return message;
1435
- }
1436
- internalBinaryWrite(message, writer, options) {
1437
- if (message.key !== "")
1438
- writer.tag(1, import_runtime8.WireType.LengthDelimited).string(message.key);
1439
- let u = options.writeUnknownFields;
1440
- if (u !== false)
1441
- (u == true ? import_runtime9.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1442
- return writer;
1443
- }
1444
- };
1445
- var GetRequest = new GetRequest$Type();
1446
- var GetResponse$Type = class extends import_runtime11.MessageType {
1447
- constructor() {
1448
- super("sessionstorepb.GetResponse", [
1449
- {
1450
- no: 1,
1451
- name: "key",
1452
- kind: "scalar",
1453
- T: 9
1454
- /*ScalarType.STRING*/
1455
- },
1456
- {
1457
- no: 2,
1458
- name: "namespace",
1459
- kind: "scalar",
1460
- T: 9
1461
- /*ScalarType.STRING*/
1462
- },
1463
- { no: 3, name: "value", kind: "message", T: () => Value }
1464
- ]);
1465
- }
1466
- create(value) {
1467
- const message = globalThis.Object.create(this.messagePrototype);
1468
- message.key = "";
1469
- message.namespace = "";
1470
- if (value !== void 0)
1471
- (0, import_runtime10.reflectionMergePartial)(this, message, value);
1472
- return message;
1473
- }
1474
- internalBinaryRead(reader, length, options, target) {
1475
- let message = target ?? this.create(), end = reader.pos + length;
1476
- while (reader.pos < end) {
1477
- let [fieldNo, wireType] = reader.tag();
1478
- switch (fieldNo) {
1479
- case /* string key */
1480
- 1:
1481
- message.key = reader.string();
1482
- break;
1483
- case /* string namespace */
1484
- 2:
1485
- message.namespace = reader.string();
1486
- break;
1487
- case /* sessionstorepb.Value value */
1488
- 3:
1489
- message.value = Value.internalBinaryRead(reader, reader.uint32(), options, message.value);
1490
- break;
1491
- default:
1492
- let u = options.readUnknownField;
1493
- if (u === "throw")
1494
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1495
- let d = reader.skip(wireType);
1496
- if (u !== false)
1497
- (u === true ? import_runtime9.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1498
- }
1499
- }
1500
- return message;
1501
- }
1502
- internalBinaryWrite(message, writer, options) {
1503
- if (message.key !== "")
1504
- writer.tag(1, import_runtime8.WireType.LengthDelimited).string(message.key);
1505
- if (message.namespace !== "")
1506
- writer.tag(2, import_runtime8.WireType.LengthDelimited).string(message.namespace);
1507
- if (message.value)
1508
- Value.internalBinaryWrite(message.value, writer.tag(3, import_runtime8.WireType.LengthDelimited).fork(), options).join();
1509
- let u = options.writeUnknownFields;
1510
- if (u !== false)
1511
- (u == true ? import_runtime9.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1512
- return writer;
1513
- }
1514
- };
1515
- var GetResponse = new GetResponse$Type();
1516
- var DeleteRequest$Type = class extends import_runtime11.MessageType {
1517
- constructor() {
1518
- super("sessionstorepb.DeleteRequest", [{
1519
- no: 1,
1520
- name: "key",
1521
- kind: "scalar",
1522
- T: 9
1523
- /*ScalarType.STRING*/
1524
- }]);
1525
- }
1526
- create(value) {
1527
- const message = globalThis.Object.create(this.messagePrototype);
1528
- message.key = "";
1529
- if (value !== void 0)
1530
- (0, import_runtime10.reflectionMergePartial)(this, message, value);
1531
- return message;
1532
- }
1533
- internalBinaryRead(reader, length, options, target) {
1534
- let message = target ?? this.create(), end = reader.pos + length;
1535
- while (reader.pos < end) {
1536
- let [fieldNo, wireType] = reader.tag();
1537
- switch (fieldNo) {
1538
- case /* string key */
1539
- 1:
1540
- message.key = reader.string();
1541
- break;
1542
- default:
1543
- let u = options.readUnknownField;
1544
- if (u === "throw")
1545
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1546
- let d = reader.skip(wireType);
1547
- if (u !== false)
1548
- (u === true ? import_runtime9.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1549
- }
1550
- }
1551
- return message;
1552
- }
1553
- internalBinaryWrite(message, writer, options) {
1554
- if (message.key !== "")
1555
- writer.tag(1, import_runtime8.WireType.LengthDelimited).string(message.key);
1556
- let u = options.writeUnknownFields;
1557
- if (u !== false)
1558
- (u == true ? import_runtime9.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1559
- return writer;
1560
- }
1561
- };
1562
- var DeleteRequest = new DeleteRequest$Type();
1563
- var DeleteResponse$Type = class extends import_runtime11.MessageType {
1564
- constructor() {
1565
- super("sessionstorepb.DeleteResponse", []);
1566
- }
1567
- create(value) {
1568
- const message = globalThis.Object.create(this.messagePrototype);
1569
- if (value !== void 0)
1570
- (0, import_runtime10.reflectionMergePartial)(this, message, value);
1571
- return message;
1572
- }
1573
- internalBinaryRead(reader, length, options, target) {
1574
- return target ?? this.create();
1575
- }
1576
- internalBinaryWrite(message, writer, options) {
1577
- let u = options.writeUnknownFields;
1578
- if (u !== false)
1579
- (u == true ? import_runtime9.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1580
- return writer;
1581
- }
1582
- };
1583
- var DeleteResponse = new DeleteResponse$Type();
1584
- var SetRequest$Type = class extends import_runtime11.MessageType {
1585
- constructor() {
1586
- super("sessionstorepb.SetRequest", [
1587
- {
1588
- no: 1,
1589
- name: "key",
1590
- kind: "scalar",
1591
- T: 9
1592
- /*ScalarType.STRING*/
1593
- },
1594
- { no: 3, name: "value", kind: "message", T: () => Value }
1595
- ]);
1596
- }
1597
- create(value) {
1598
- const message = globalThis.Object.create(this.messagePrototype);
1599
- message.key = "";
1600
- if (value !== void 0)
1601
- (0, import_runtime10.reflectionMergePartial)(this, message, value);
1602
- return message;
1603
- }
1604
- internalBinaryRead(reader, length, options, target) {
1605
- let message = target ?? this.create(), end = reader.pos + length;
1606
- while (reader.pos < end) {
1607
- let [fieldNo, wireType] = reader.tag();
1608
- switch (fieldNo) {
1609
- case /* string key */
1610
- 1:
1611
- message.key = reader.string();
1612
- break;
1613
- case /* sessionstorepb.Value value */
1614
- 3:
1615
- message.value = Value.internalBinaryRead(reader, reader.uint32(), options, message.value);
1616
- break;
1617
- default:
1618
- let u = options.readUnknownField;
1619
- if (u === "throw")
1620
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1621
- let d = reader.skip(wireType);
1622
- if (u !== false)
1623
- (u === true ? import_runtime9.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1624
- }
1625
- }
1626
- return message;
1627
- }
1628
- internalBinaryWrite(message, writer, options) {
1629
- if (message.key !== "")
1630
- writer.tag(1, import_runtime8.WireType.LengthDelimited).string(message.key);
1631
- if (message.value)
1632
- Value.internalBinaryWrite(message.value, writer.tag(3, import_runtime8.WireType.LengthDelimited).fork(), options).join();
1633
- let u = options.writeUnknownFields;
1634
- if (u !== false)
1635
- (u == true ? import_runtime9.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1636
- return writer;
1637
- }
1638
- };
1639
- var SetRequest = new SetRequest$Type();
1640
- var SetResponse$Type = class extends import_runtime11.MessageType {
1641
- constructor() {
1642
- super("sessionstorepb.SetResponse", []);
1643
- }
1644
- create(value) {
1645
- const message = globalThis.Object.create(this.messagePrototype);
1646
- if (value !== void 0)
1647
- (0, import_runtime10.reflectionMergePartial)(this, message, value);
1648
- return message;
1649
- }
1650
- internalBinaryRead(reader, length, options, target) {
1651
- return target ?? this.create();
1652
- }
1653
- internalBinaryWrite(message, writer, options) {
1654
- let u = options.writeUnknownFields;
1655
- if (u !== false)
1656
- (u == true ? import_runtime9.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1657
- return writer;
1658
- }
1659
- };
1660
- var SetResponse = new SetResponse$Type();
1661
- var ChangeStream$Type = class extends import_runtime11.MessageType {
1662
- constructor() {
1663
- super("sessionstorepb.ChangeStream", [
1664
- {
1665
- no: 1,
1666
- name: "change_id",
1667
- kind: "scalar",
1668
- T: 9
1669
- /*ScalarType.STRING*/
1670
- },
1671
- {
1672
- no: 2,
1673
- name: "key",
1674
- kind: "scalar",
1675
- T: 9
1676
- /*ScalarType.STRING*/
1677
- },
1678
- {
1679
- no: 3,
1680
- name: "namespace",
1681
- kind: "scalar",
1682
- T: 9
1683
- /*ScalarType.STRING*/
1684
- },
1685
- { no: 4, name: "value", kind: "message", T: () => Value },
1686
- {
1687
- no: 5,
1688
- name: "from_id",
1689
- kind: "scalar",
1690
- T: 9
1691
- /*ScalarType.STRING*/
1692
- }
1693
- ]);
1694
- }
1695
- create(value) {
1696
- const message = globalThis.Object.create(this.messagePrototype);
1697
- message.changeId = "";
1698
- message.key = "";
1699
- message.namespace = "";
1700
- message.fromId = "";
1701
- if (value !== void 0)
1702
- (0, import_runtime10.reflectionMergePartial)(this, message, value);
1703
- return message;
1704
- }
1705
- internalBinaryRead(reader, length, options, target) {
1706
- let message = target ?? this.create(), end = reader.pos + length;
1707
- while (reader.pos < end) {
1708
- let [fieldNo, wireType] = reader.tag();
1709
- switch (fieldNo) {
1710
- case /* string change_id */
1711
- 1:
1712
- message.changeId = reader.string();
1713
- break;
1714
- case /* string key */
1715
- 2:
1716
- message.key = reader.string();
1717
- break;
1718
- case /* string namespace */
1719
- 3:
1720
- message.namespace = reader.string();
1721
- break;
1722
- case /* sessionstorepb.Value value */
1723
- 4:
1724
- message.value = Value.internalBinaryRead(reader, reader.uint32(), options, message.value);
1725
- break;
1726
- case /* string from_id */
1727
- 5:
1728
- message.fromId = reader.string();
1729
- break;
1730
- default:
1731
- let u = options.readUnknownField;
1732
- if (u === "throw")
1733
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1734
- let d = reader.skip(wireType);
1735
- if (u !== false)
1736
- (u === true ? import_runtime9.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1737
- }
1738
- }
1739
- return message;
1740
- }
1741
- internalBinaryWrite(message, writer, options) {
1742
- if (message.changeId !== "")
1743
- writer.tag(1, import_runtime8.WireType.LengthDelimited).string(message.changeId);
1744
- if (message.key !== "")
1745
- writer.tag(2, import_runtime8.WireType.LengthDelimited).string(message.key);
1746
- if (message.namespace !== "")
1747
- writer.tag(3, import_runtime8.WireType.LengthDelimited).string(message.namespace);
1748
- if (message.value)
1749
- Value.internalBinaryWrite(message.value, writer.tag(4, import_runtime8.WireType.LengthDelimited).fork(), options).join();
1750
- if (message.fromId !== "")
1751
- writer.tag(5, import_runtime8.WireType.LengthDelimited).string(message.fromId);
1752
- let u = options.writeUnknownFields;
1753
- if (u !== false)
1754
- (u == true ? import_runtime9.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1755
- return writer;
1756
- }
1757
- };
1758
- var ChangeStream = new ChangeStream$Type();
1759
- var Select$Type = class extends import_runtime11.MessageType {
1760
- constructor() {
1761
- super("sessionstorepb.Select", [
1762
- {
1763
- no: 1,
1764
- name: "all",
1765
- kind: "scalar",
1766
- oneof: "match",
1767
- T: 9
1768
- /*ScalarType.STRING*/
1769
- },
1770
- {
1771
- no: 2,
1772
- name: "key",
1773
- kind: "scalar",
1774
- oneof: "match",
1775
- T: 9
1776
- /*ScalarType.STRING*/
1777
- },
1778
- {
1779
- no: 3,
1780
- name: "prefix",
1781
- kind: "scalar",
1782
- oneof: "match",
1783
- T: 9
1784
- /*ScalarType.STRING*/
1785
- },
1786
- {
1787
- no: 4,
1788
- name: "suffix",
1789
- kind: "scalar",
1790
- oneof: "match",
1791
- T: 9
1792
- /*ScalarType.STRING*/
1793
- }
1794
- ]);
1795
- }
1796
- create(value) {
1797
- const message = globalThis.Object.create(this.messagePrototype);
1798
- message.match = { oneofKind: void 0 };
1799
- if (value !== void 0)
1800
- (0, import_runtime10.reflectionMergePartial)(this, message, value);
1801
- return message;
1802
- }
1803
- internalBinaryRead(reader, length, options, target) {
1804
- let message = target ?? this.create(), end = reader.pos + length;
1805
- while (reader.pos < end) {
1806
- let [fieldNo, wireType] = reader.tag();
1807
- switch (fieldNo) {
1808
- case /* string all */
1809
- 1:
1810
- message.match = {
1811
- oneofKind: "all",
1812
- all: reader.string()
1813
- };
1814
- break;
1815
- case /* string key */
1816
- 2:
1817
- message.match = {
1818
- oneofKind: "key",
1819
- key: reader.string()
1820
- };
1821
- break;
1822
- case /* string prefix */
1823
- 3:
1824
- message.match = {
1825
- oneofKind: "prefix",
1826
- prefix: reader.string()
1827
- };
1828
- break;
1829
- case /* string suffix */
1830
- 4:
1831
- message.match = {
1832
- oneofKind: "suffix",
1833
- suffix: reader.string()
1834
- };
1835
- break;
1836
- default:
1837
- let u = options.readUnknownField;
1838
- if (u === "throw")
1839
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1840
- let d = reader.skip(wireType);
1841
- if (u !== false)
1842
- (u === true ? import_runtime9.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1843
- }
1844
- }
1845
- return message;
1846
- }
1847
- internalBinaryWrite(message, writer, options) {
1848
- if (message.match.oneofKind === "all")
1849
- writer.tag(1, import_runtime8.WireType.LengthDelimited).string(message.match.all);
1850
- if (message.match.oneofKind === "key")
1851
- writer.tag(2, import_runtime8.WireType.LengthDelimited).string(message.match.key);
1852
- if (message.match.oneofKind === "prefix")
1853
- writer.tag(3, import_runtime8.WireType.LengthDelimited).string(message.match.prefix);
1854
- if (message.match.oneofKind === "suffix")
1855
- writer.tag(4, import_runtime8.WireType.LengthDelimited).string(message.match.suffix);
1856
- let u = options.writeUnknownFields;
1857
- if (u !== false)
1858
- (u == true ? import_runtime9.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1859
- return writer;
1860
- }
1861
- };
1862
- var Select = new Select$Type();
1863
- var OpenRequest$Type = class extends import_runtime11.MessageType {
1864
- constructor() {
1865
- super("sessionstorepb.OpenRequest", [
1866
- {
1867
- no: 1,
1868
- name: "change_id",
1869
- kind: "scalar",
1870
- T: 9
1871
- /*ScalarType.STRING*/
1872
- },
1873
- { no: 3, name: "select", kind: "message", repeat: 1, T: () => Select }
1874
- ]);
1875
- }
1876
- create(value) {
1877
- const message = globalThis.Object.create(this.messagePrototype);
1878
- message.changeId = "";
1879
- message.select = [];
1880
- if (value !== void 0)
1881
- (0, import_runtime10.reflectionMergePartial)(this, message, value);
1882
- return message;
1883
- }
1884
- internalBinaryRead(reader, length, options, target) {
1885
- let message = target ?? this.create(), end = reader.pos + length;
1886
- while (reader.pos < end) {
1887
- let [fieldNo, wireType] = reader.tag();
1888
- switch (fieldNo) {
1889
- case /* string change_id */
1890
- 1:
1891
- message.changeId = reader.string();
1892
- break;
1893
- case /* repeated sessionstorepb.Select select */
1894
- 3:
1895
- message.select.push(Select.internalBinaryRead(reader, reader.uint32(), options));
1896
- break;
1897
- default:
1898
- let u = options.readUnknownField;
1899
- if (u === "throw")
1900
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1901
- let d = reader.skip(wireType);
1902
- if (u !== false)
1903
- (u === true ? import_runtime9.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1904
- }
1905
- }
1906
- return message;
1907
- }
1908
- internalBinaryWrite(message, writer, options) {
1909
- if (message.changeId !== "")
1910
- writer.tag(1, import_runtime8.WireType.LengthDelimited).string(message.changeId);
1911
- for (let i = 0; i < message.select.length; i++)
1912
- Select.internalBinaryWrite(message.select[i], writer.tag(3, import_runtime8.WireType.LengthDelimited).fork(), options).join();
1913
- let u = options.writeUnknownFields;
1914
- if (u !== false)
1915
- (u == true ? import_runtime9.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1916
- return writer;
1917
- }
1918
- };
1919
- var OpenRequest = new OpenRequest$Type();
1920
- var Api = new import_runtime_rpc.ServiceType("sessionstorepb.Api", [
1921
- { name: "Hello", options: {}, I: HelloRequest, O: HelloResponse },
1922
- { name: "Subscribe", serverStreaming: true, options: {}, I: SubscribeRequest, O: Event }
1923
- ]);
1924
- var Store = new import_runtime_rpc.ServiceType("sessionstorepb.Store", [
1925
- { name: "open", serverStreaming: true, options: {}, I: OpenRequest, O: ChangeStream },
1926
- { name: "get", options: {}, I: GetRequest, O: GetResponse },
1927
- { name: "set", options: {}, I: SetRequest, O: SetResponse },
1928
- { name: "delete", options: {}, I: DeleteRequest, O: DeleteResponse }
1929
- ]);
1930
-
1931
- // src/grpc/sessionstore.client.ts
1932
- init_define_process_env();
1933
- var import_runtime_rpc2 = require("@protobuf-ts/runtime-rpc");
1934
- var StoreClient = class {
1935
- constructor(_transport) {
1936
- this._transport = _transport;
1937
- __publicField(this, "typeName", Store.typeName);
1938
- __publicField(this, "methods", Store.methods);
1939
- __publicField(this, "options", Store.options);
1940
- }
1941
- /**
1942
- * open - start listening to updates in keys with provided match patterns
1943
- * provide change_id as last received ID to resume updates
1944
- *
1945
- * @generated from protobuf rpc: open(sessionstorepb.OpenRequest) returns (stream sessionstorepb.ChangeStream);
1946
- */
1947
- open(input, options) {
1948
- const method = this.methods[0], opt = this._transport.mergeOptions(options);
1949
- return (0, import_runtime_rpc2.stackIntercept)("serverStreaming", this._transport, method, opt, input);
1950
- }
1951
- /**
1952
- * get last stored value in given key
1953
- *
1954
- * @generated from protobuf rpc: get(sessionstorepb.GetRequest) returns (sessionstorepb.GetResponse);
1955
- */
1956
- get(input, options) {
1957
- const method = this.methods[1], opt = this._transport.mergeOptions(options);
1958
- return (0, import_runtime_rpc2.stackIntercept)("unary", this._transport, method, opt, input);
1959
- }
1960
- /**
1961
- * set key value
1962
- *
1963
- * @generated from protobuf rpc: set(sessionstorepb.SetRequest) returns (sessionstorepb.SetResponse);
1964
- */
1965
- set(input, options) {
1966
- const method = this.methods[2], opt = this._transport.mergeOptions(options);
1967
- return (0, import_runtime_rpc2.stackIntercept)("unary", this._transport, method, opt, input);
1968
- }
1969
- /**
1970
- * delete key from store
1971
- *
1972
- * @generated from protobuf rpc: delete(sessionstorepb.DeleteRequest) returns (sessionstorepb.DeleteResponse);
1973
- */
1974
- delete(input, options) {
1975
- const method = this.methods[3], opt = this._transport.mergeOptions(options);
1976
- return (0, import_runtime_rpc2.stackIntercept)("unary", this._transport, method, opt, input);
1977
- }
1978
- };
1979
-
1980
- // src/hooks/StoreClient.ts
1981
- var SessionStore = class {
1982
- constructor(endpoint, token) {
1983
- __publicField(this, "storeClient");
1984
- const transport = new import_grpcweb_transport.GrpcWebFetchTransport({
1985
- baseUrl: endpoint,
1986
- meta: { Authorization: `Bearer ${token}` }
1987
- });
1988
- this.storeClient = new StoreClient(transport);
1989
- }
1990
- open({ handleChange, handleError }) {
1991
- const call = this.storeClient.open({
1992
- changeId: "",
1993
- select: []
1994
- });
1995
- call.responses.onMessage((message) => {
1996
- if (message.value) {
1997
- if (message.value?.data.oneofKind === "str") {
1998
- const record = JSON.parse(message.value.data.str);
1999
- handleChange(message.key, record);
2000
- }
2001
- } else {
2002
- handleChange(message.key);
2003
- }
2004
- });
2005
- call.responses.onError((error) => {
2006
- handleError(error);
2007
- });
2008
- call.status.then((status) => {
2009
- console.log("SessionStoreClient open", status);
2010
- });
2011
- }
2012
- set(key, value) {
2013
- const valueStr = value ? JSON.stringify(value) : void 0;
2014
- return this.storeClient.set({
2015
- key,
2016
- value: valueStr ? {
2017
- data: { str: valueStr, oneofKind: "str" },
2018
- type: 2 /* STRING */
2019
- } : {
2020
- data: { oneofKind: void 0 },
2021
- type: 0 /* NONE */
2022
- }
2023
- });
2024
- }
2025
- async get(key) {
2026
- const { response } = await this.storeClient.get({ key });
2027
- if (response.value?.data.oneofKind === "str") {
2028
- return JSON.parse(response.value.data.str);
2029
- }
2030
- }
2031
- delete(key) {
2032
- return this.storeClient.delete({ key });
2033
- }
2034
- };
2035
-
2036
- // src/utils.ts
2037
- init_define_process_env();
2038
- function decodeJWT(token) {
2039
- if (!token || token.length === 0) {
2040
- throw Error("Token cannot be an empty string or undefined or null");
2041
- }
2042
- const parts = token.split(".");
2043
- if (parts.length !== 3) {
2044
- throw Error(`Expected 3 '.' separate fields - header, payload and signature respectively`);
2045
- }
2046
- const payloadStr = atob(parts[1]);
2047
- try {
2048
- return JSON.parse(payloadStr);
2049
- } catch (err) {
2050
- throw Error(`couldn't parse to json - ${err.message}`);
2051
- }
2052
- }
2053
- var CURRENT_PAGE_KEY = "currentPage";
2054
- var SHAPES_THROTTLE_TIME = 11;
2055
- var PAGES_DEBOUNCE_TIME = 200;
2056
-
2057
- // src/hooks/useSessionStore.ts
2058
- var useSessionStore = ({
2059
- token,
2060
- endpoint,
2061
- handleError
2062
- }) => {
2063
- const sessionStore = (0, import_react9.useMemo)(() => {
2064
- try {
2065
- decodeJWT(token);
2066
- } catch (err) {
2067
- return handleError(err);
2068
- }
2069
- if (!endpoint || !token) {
2070
- return handleError(new Error("Missing GRPC endpoint or token"));
2071
- }
2072
- const sessionStore2 = new SessionStore(endpoint, token);
2073
- window.sessionStore = sessionStore2;
2074
- return sessionStore2;
2075
- }, [endpoint, token, handleError]);
2076
- return sessionStore;
2077
- };
2078
-
2079
- // src/hooks/useSetEditorPermissions.tsx
2080
- init_define_process_env();
2081
- var import_react10 = require("react");
2082
- var useSetEditorPermissions = ({
2083
- token,
2084
- editor,
2085
- zoomToContent = false,
2086
- handleError
2087
- }) => {
2088
- const { permissions } = (0, import_react10.useMemo)(() => {
2089
- try {
2090
- return decodeJWT(token);
2091
- } catch (err) {
2092
- handleError(err);
2093
- return {};
2094
- }
2095
- }, [token, handleError]);
2096
- (0, import_react10.useEffect)(() => {
2097
- editor?.updateInstanceState({ canMoveCamera: !!zoomToContent });
2098
- if (!permissions) {
2099
- return;
2100
- }
2101
- const isReadonly = !permissions.includes("write");
2102
- editor?.updateInstanceState({ isReadonly });
2103
- if (isReadonly) {
2104
- editor?.setCurrentTool("hand");
2105
- }
2106
- }, [permissions, zoomToContent, editor]);
2107
- };
2108
-
2109
- // src/hooks/useCollaboration.ts
2110
- function useCollaboration({
2111
- endpoint,
2112
- token,
2113
- editor,
2114
- shapeUtils = [],
2115
- zoomToContent = false
2116
- }) {
2117
- const [store] = (0, import_react11.useState)(() => {
2118
- const store2 = (0, import_tldraw2.createTLStore)({
2119
- shapeUtils: [...import_tldraw2.defaultShapeUtils, ...shapeUtils]
2120
- });
2121
- store2.loadSnapshot(DEFAULT_STORE);
2122
- return store2;
2123
- });
2124
- const [currentPage, setCurrentPage] = (0, import_react11.useState)(editor?.getCurrentPage());
2125
- const [storeWithStatus, setStoreWithStatus] = (0, import_react11.useState)({
2126
- status: "loading"
2127
- });
2128
- const handleError = (0, import_react11.useCallback)((error) => {
2129
- setStoreWithStatus({
2130
- status: "error",
2131
- error
2132
- });
2133
- }, []);
2134
- const sessionStore = useSessionStore({ token, endpoint, handleError });
2135
- useSetEditorPermissions({ token, editor, zoomToContent, handleError });
2136
- (0, import_react11.useEffect)(() => {
2137
- if (!currentPage?.id || !editor || editor.getCurrentPageId() === currentPage.id) {
2138
- return;
2139
- }
2140
- if (!editor.getPages()?.find((page) => page.id === currentPage.id)) {
2141
- editor.createPage(currentPage);
2142
- }
2143
- editor?.setCurrentPage(currentPage);
2144
- }, [currentPage, editor]);
2145
- (0, import_react11.useEffect)(() => {
2146
- if (!sessionStore)
2147
- return;
2148
- setStoreWithStatus({ status: "loading" });
2149
- const unsubs = [];
2150
- const handleChange = (key, value) => {
2151
- store.mergeRemoteChanges(() => {
2152
- if (!value) {
2153
- return store.remove([key]);
2154
- }
2155
- if (key === CURRENT_PAGE_KEY) {
2156
- setCurrentPage(value);
2157
- } else {
2158
- store.put([value]);
2159
- }
2160
- });
2161
- };
2162
- sessionStore.open({
2163
- handleChange,
2164
- handleError
2165
- });
2166
- unsubs.push(
2167
- store.listen(
2168
- (0, import_tldraw2.throttle)(function syncStoreChangesToYjsDoc({ changes }) {
2169
- Object.values(changes.added).forEach((record) => {
2170
- sessionStore.set(record.id, record);
2171
- });
2172
- Object.values(changes.updated).forEach(([, record]) => {
2173
- sessionStore.set(record.id, record);
2174
- });
2175
- Object.values(changes.removed).forEach((record) => {
2176
- sessionStore.delete(record.id);
2177
- });
2178
- }, SHAPES_THROTTLE_TIME),
2179
- { source: "user", scope: "document" }
2180
- // only sync user's document changes
2181
- )
2182
- );
2183
- setStoreWithStatus({
2184
- store,
2185
- status: "synced-remote",
2186
- connectionStatus: "online"
2187
- });
2188
- return () => {
2189
- unsubs.forEach((fn) => fn());
2190
- unsubs.length = 0;
2191
- };
2192
- }, [store, sessionStore, handleError]);
2193
- (0, import_react11.useEffect)(() => {
2194
- if (!editor || !sessionStore)
2195
- return;
2196
- const unsubs = [];
2197
- unsubs.push(
2198
- store.listen(
2199
- (0, import_tldraw2.debounce)(({ changes }) => {
2200
- Object.keys(changes.updated).forEach((key) => {
2201
- if (!key.includes("instance")) {
2202
- return;
2203
- }
2204
- const newPage = editor?.getCurrentPage();
2205
- if (newPage?.id !== currentPage?.id) {
2206
- sessionStore?.set(CURRENT_PAGE_KEY, newPage);
2207
- setCurrentPage(newPage);
2208
- }
2209
- });
2210
- }, PAGES_DEBOUNCE_TIME),
2211
- { source: "user", scope: "session" }
2212
- )
2213
- );
2214
- return () => {
2215
- unsubs.forEach((fn) => fn());
2216
- unsubs.length = 0;
2217
- };
2218
- }, [currentPage, editor, sessionStore, store]);
2219
- (0, import_react11.useEffect)(() => {
2220
- if (!editor || !editor.getInstanceState()?.isReadonly || !zoomToContent)
2221
- return;
2222
- store.listen(
2223
- () => {
2224
- editor.zoomToFit();
2225
- },
2226
- { source: "remote", scope: "document" }
2227
- );
2228
- }, [editor, store, zoomToContent]);
2229
- return storeWithStatus;
2230
- }
2231
-
2232
- // src/Whiteboard.tsx
2233
- function Whiteboard({ onMount, endpoint, token, zoomToContent, transparentCanvas }) {
2234
- const [editor, setEditor] = (0, import_react12.useState)();
2235
- const store = useCollaboration({
2236
- endpoint,
2237
- token,
2238
- editor,
2239
- zoomToContent
2240
- });
2241
- const handleMount = (editor2) => {
2242
- setEditor(editor2);
2243
- window.editor = editor2;
2244
- onMount?.({ store: store.store, editor: editor2 });
2245
- };
2246
- return /* @__PURE__ */ import_react12.default.createElement(
2247
- import_tldraw3.Tldraw,
2248
- {
2249
- className: transparentCanvas ? "transparent-canvas" : "",
2250
- autoFocus: true,
2251
- store,
2252
- onMount: handleMount,
2253
- components: { ErrorFallback },
2254
- hideUi: editor?.getInstanceState()?.isReadonly
2255
- }
2256
- );
2257
- }
2258
- /*! Bundled license information:
2259
-
2260
- classnames/index.js:
2261
- (*!
2262
- Copyright (c) 2018 Jed Watson.
2263
- Licensed under the MIT License (MIT), see
2264
- http://jedwatson.github.io/classnames
2265
- *)
2266
- */
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-rpc"),a=require("@protobuf-ts/runtime");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=s(e);class o{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 l=Symbol("RESET_VALUE");class c{constructor(e){this.capacity=e,this.buffer=new Array(e)}index=0;buffer;pushEntry(e,t,n){void 0!==n&&(n!==l?(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 a=0;a<n;a++){const s=(t-1+n-a)%n,i=r[s];if(!i)return l;const[o,c]=i;if(0===a&&e>=c)return[];if(o<=e&&e<c){const e=a+1,t=new Array(e);for(let a=0;a<e;a++)t[a]=r[(s+a)%n][2];return t}}return l}}function d(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 u=(e,t)=>{if(e.children.remove(t)&&e.children.isEmpty&&d(e))for(let t=0,n=e.parents.length;t<n;t++)u(e.parents[t],e)},p=(e,t)=>{if(e.children.add(t)&&d(e))for(let t=0,n=e.parents.length;t<n;t++)p(e.parents[t],e)};function f(e,t){return e===t||Object.is(e,t)||Boolean(e&&t&&"function"==typeof e.equals&&e.equals(t))}const g=Object.freeze([]),m=Symbol.for("__@tldraw/state__"),y=globalThis;y[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.'):y[m]=!0;class w{constructor(e,t){this.below=e,this.child=t}offset=0;numNewParents=0;maybeRemoved}let k=null;function b(e){k=new w(k,e)}function v(){const e=k;k=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&&u(n,e.child)}if(e.child.parents.length=e.offset,e.child.parentEpochs.length=e.offset,k?.maybeRemoved)for(let t=0;t<k.maybeRemoved.length;t++){const n=k.maybeRemoved[t];-1===e.child.parents.indexOf(n)&&u(n,e.child)}}}const E=-1;let T=!1;let _=!1;const S=Symbol("UNINITIALIZED");class N{constructor(e,t){this.value=e,this.diff=t}}class U{constructor(e,t,n){this.name=e,this.derive=t,n?.historyLength&&(this.historyBuffer=new c(n.historyLength)),this.computeDiff=n?.computeDiff,this.isEqual=n?.isEqual??f}lastChangedEpoch=E;lastTraversedEpoch=E;lastCheckedEpoch=E;parents=[];parentEpochs=[];children=new o;get isActivelyListening(){return!this.children.isEmpty}historyBuffer;state=S;computeDiff;isEqual;__unsafe__getWithoutCapture(){const e=this.lastChangedEpoch===E;if(!(e||0!==this.lastCheckedEpoch&&h(this)))return this.lastCheckedEpoch=0,this.state;try{b(this);const t=this.derive(this.state,this.lastCheckedEpoch),n=t instanceof N?t.value:t;if(this.state===S||!this.isEqual(n,this.state)){if(this.historyBuffer&&!e){const e=t instanceof N?t.diff:void 0;this.historyBuffer.pushEntry(this.lastChangedEpoch,0,e??this.computeDiff?.(this.state,n,this.lastCheckedEpoch,0)??l)}this.lastChangedEpoch=0,this.state=n}return this.lastCheckedEpoch=0,this.state}finally{v()}}get(){const e=this.__unsafe__getWithoutCapture();return function(e){if(k){const t=k.child.parents.indexOf(e);if(t<0&&(k.numNewParents++,k.child.isActivelyListening&&p(e,k.child)),t<0||t>=k.offset){if(t!==k.offset&&t>0){const e=k.child.parents[k.offset];k.maybeRemoved?-1===k.maybeRemoved.indexOf(e)&&k.maybeRemoved.push(e):k.maybeRemoved=[e]}k.child.parents[k.offset]=e,k.child.parentEpochs[k.offset]=e.lastChangedEpoch,k.offset++}}}(this),e}get value(){return T||(T=!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?g:this.historyBuffer?.getChangesSince(e)??l}}function R(e={},t,n,r){return r.get?(_||(_=!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 a=r.get,s=Symbol.for("__@tldraw/state__computed__"+n);return r.get=function(){let t=this[s];return t||(t=new U(n,a.bind(this),e),Object.defineProperty(this,s,{enumerable:!1,configurable:!1,writable:!1,value:t})),t.get()},r}(e,0,n,r)):function(e={},t,n,r){const a=r.value,s=Symbol.for("__@tldraw/state__computed__"+n);return r.value=function(){let t=this[s];return t||(t=new U(n,a.bind(this),e),Object.defineProperty(this,s,{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++)p(this.parents[e],this)}detach(){this._isActivelyListening=!1;for(let e=0,t=this.parents.length;e<t;e++)u(this.parents[e],this)}execute(){try{b(this);const e=this.runEffect(this.lastReactedEpoch);return this.lastReactedEpoch=0,e}finally{v()}}}function C(){const t=arguments,n=3===t.length?t[2]:[t[0]],r=3===t.length?t[0]:`useValue(${t[0].name})`,a=e.useRef(!0);a.current=!0;const s=e.useMemo((()=>1===t.length?t[0]:function(){if(1===arguments.length){const e=arguments[0];return(t,n,r)=>R(e,0,n,r)}return"string"==typeof arguments[0]?new U(arguments[0],arguments[1],arguments[2]):R(void 0,0,arguments[1],arguments[2])}(r,(()=>{if(a.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})`,(()=>{s.get(),e()})),getSnapshot:()=>s.get()})),[s]);return e.useSyncExternalStore(t,n,n)}finally{a.current=!1}}var x,B={exports:{}};
2
+ /*!
3
+ Copyright (c) 2018 Jed Watson.
4
+ Licensed under the MIT License (MIT), see
5
+ http://jedwatson.github.io/classnames
6
+ */x=B,function(){var e={}.hasOwnProperty;function t(){for(var e="",t=0;t<arguments.length;t++){var a=arguments[t];a&&(e=r(e,n(a)))}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 a="";for(var s in n)e.call(n,s)&&n[s]&&(a=r(a,s));return a}function r(e,t){return t?e?e+" "+t:e+t:e}x.exports?(t.default=t,x.exports=t):window.classNames=t}();var P=B.exports;const O=({error:n,editor:r})=>{const a=e.useRef(null),[s,o]=e.useState("production"!==process.env.NODE_ENV),[l,c]=e.useState(!1),[d,h]=e.useState(!1),u=n instanceof Error?n.message:String(n),p=n instanceof Error?n.stack:null,f=C("isDarkMode",(()=>{try{if(r)return r.user.isDarkMode}catch{}return null}),[r]),[g,m]=e.useState(null);e.useLayoutEffect((()=>{null!==f&&m(f);let e=a.current?.parentElement,t=!1;for(;e;){if(e.classList.contains("tl-theme__dark")||e.classList.contains("tl-theme__light")){t=!0;break}e=e.parentElement}m(t?null:window.matchMedia("(prefers-color-scheme: dark)").matches)}),[f]),e.useEffect((()=>{if(l){const e=setTimeout((()=>{c(!1)}),2e3);return()=>clearTimeout(e)}}),[l]);return i.default.createElement("div",{ref:a,className:P("tl-container tl-error-boundary",null===g?"":g?"tl-theme__dark":"tl-theme__light")},i.default.createElement("div",{className:"tl-error-boundary__overlay"}),i.default.createElement("div",{className:P("tl-modal","tl-error-boundary__content",{"tl-error-boundary__content__expanded":s&&!d})},d?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:()=>h(!1)},"Cancel"),i.default.createElement("button",{className:"tl-error-boundary__reset",onClick:async()=>{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"),"."),s&&i.default.createElement("div",{className:"tl-error-boundary__content__error"},i.default.createElement("pre",null,i.default.createElement("code",null,p??u)),i.default.createElement("button",{onClick:()=>{const e=document.createElement("textarea");e.value=p??u,document.body.appendChild(e),e.select(),document.execCommand("copy"),e.remove(),c(!0)}},l?"Copied!":"Copy")),i.default.createElement("div",{className:"tl-error-boundary__content__actions"},i.default.createElement("button",{onClick:()=>o(!s)},s?"Hide details":"Show details"),i.default.createElement("div",{className:"tl-error-boundary__content__actions__group"},i.default.createElement("button",{className:"tl-error-boundary__reset",onClick:()=>h(!0)},"Reset data"),i.default.createElement("button",{className:"tl-error-boundary__refresh",onClick:()=>{t.refreshPage()}},"Refresh Page"))))))},I={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 M,L;(L=M||(M={}))[L.NONE=0]="NONE",L[L.BYTES=1]="BYTES",L[L.STRING=2]="STRING",L[L.INTEGER=3]="INTEGER",L[L.FLOAT=4]="FLOAT";class $ extends a.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&&a.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){let s=r??this.create(),i=e.pos+t;for(;e.pos<i;){let[t,r]=e.tag();if(1===t)s.name=e.string();else{let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${r}) for ${this.typeName}`);let o=e.skip(r);!1!==i&&(!0===i?a.UnknownFieldHandler.onRead:i)(this.typeName,s,t,r,o)}}return s}internalBinaryWrite(e,t,n){""!==e.name&&t.tag(1,a.WireType.LengthDelimited).string(e.name);let r=n.writeUnknownFields;return!1!==r&&(1==r?a.UnknownFieldHandler.onWrite:r)(this.typeName,e,t),t}}const j=new $;class D extends a.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&&a.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){let s=r??this.create(),i=e.pos+t;for(;e.pos<i;){let[t,r]=e.tag();if(1===t)s.response=e.string();else{let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${r}) for ${this.typeName}`);let o=e.skip(r);!1!==i&&(!0===i?a.UnknownFieldHandler.onRead:i)(this.typeName,s,t,r,o)}}return s}internalBinaryWrite(e,t,n){""!==e.response&&t.tag(1,a.WireType.LengthDelimited).string(e.response);let r=n.writeUnknownFields;return!1!==r&&(1==r?a.UnknownFieldHandler.onWrite:r)(this.typeName,e,t),t}}const H=new D;class K extends a.MessageType{constructor(){super("sessionstorepb.SubscribeRequest",[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"offset",kind:"scalar",T:3,L:0}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.name="",t.offset=0n,void 0!==e&&a.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){let s=r??this.create(),i=e.pos+t;for(;e.pos<i;){let[t,r]=e.tag();switch(t){case 1:s.name=e.string();break;case 2:s.offset=e.int64().toBigInt();break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${r}) for ${this.typeName}`);let o=e.skip(r);!1!==i&&(!0===i?a.UnknownFieldHandler.onRead:i)(this.typeName,s,t,r,o)}}return s}internalBinaryWrite(e,t,n){""!==e.name&&t.tag(1,a.WireType.LengthDelimited).string(e.name),0n!==e.offset&&t.tag(2,a.WireType.Varint).int64(e.offset);let r=n.writeUnknownFields;return!1!==r&&(1==r?a.UnknownFieldHandler.onWrite:r)(this.typeName,e,t),t}}const q=new K;class A extends a.MessageType{constructor(){super("sessionstorepb.Event",[{no:1,name:"message",kind:"scalar",T:9},{no:2,name:"sequence",kind:"scalar",T:3,L:0}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.message="",t.sequence=0n,void 0!==e&&a.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){let s=r??this.create(),i=e.pos+t;for(;e.pos<i;){let[t,r]=e.tag();switch(t){case 1:s.message=e.string();break;case 2:s.sequence=e.int64().toBigInt();break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${r}) for ${this.typeName}`);let o=e.skip(r);!1!==i&&(!0===i?a.UnknownFieldHandler.onRead:i)(this.typeName,s,t,r,o)}}return s}internalBinaryWrite(e,t,n){""!==e.message&&t.tag(1,a.WireType.LengthDelimited).string(e.message),0n!==e.sequence&&t.tag(2,a.WireType.Varint).int64(e.sequence);let r=n.writeUnknownFields;return!1!==r&&(1==r?a.UnknownFieldHandler.onWrite:r)(this.typeName,e,t),t}}const z=new A;class V extends a.MessageType{constructor(){super("sessionstorepb.Value",[{no:1,name:"type",kind:"enum",T:()=>["sessionstorepb.Value.Type",M]},{no:2,name:"number",kind:"scalar",oneof:"data",T:3,L:0},{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&&a.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){let s=r??this.create(),i=e.pos+t;for(;e.pos<i;){let[t,r]=e.tag();switch(t){case 1:s.type=e.int32();break;case 2:s.data={oneofKind:"number",number:e.int64().toBigInt()};break;case 3:s.data={oneofKind:"float",float:e.float()};break;case 4:s.data={oneofKind:"str",str:e.string()};break;case 5:s.data={oneofKind:"rawBytes",rawBytes:e.bytes()};break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${r}) for ${this.typeName}`);let o=e.skip(r);!1!==i&&(!0===i?a.UnknownFieldHandler.onRead:i)(this.typeName,s,t,r,o)}}return s}internalBinaryWrite(e,t,n){0!==e.type&&t.tag(1,a.WireType.Varint).int32(e.type),"number"===e.data.oneofKind&&t.tag(2,a.WireType.Varint).int64(e.data.number),"float"===e.data.oneofKind&&t.tag(3,a.WireType.Bit32).float(e.data.float),"str"===e.data.oneofKind&&t.tag(4,a.WireType.LengthDelimited).string(e.data.str),"rawBytes"===e.data.oneofKind&&t.tag(5,a.WireType.LengthDelimited).bytes(e.data.rawBytes);let r=n.writeUnknownFields;return!1!==r&&(1==r?a.UnknownFieldHandler.onWrite:r)(this.typeName,e,t),t}}const G=new V;class J extends a.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&&a.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){let s=r??this.create(),i=e.pos+t;for(;e.pos<i;){let[t,r]=e.tag();if(1===t)s.key=e.string();else{let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${r}) for ${this.typeName}`);let o=e.skip(r);!1!==i&&(!0===i?a.UnknownFieldHandler.onRead:i)(this.typeName,s,t,r,o)}}return s}internalBinaryWrite(e,t,n){""!==e.key&&t.tag(1,a.WireType.LengthDelimited).string(e.key);let r=n.writeUnknownFields;return!1!==r&&(1==r?a.UnknownFieldHandler.onWrite:r)(this.typeName,e,t),t}}const Y=new J;class Z extends a.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:()=>G}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.key="",t.namespace="",void 0!==e&&a.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){let s=r??this.create(),i=e.pos+t;for(;e.pos<i;){let[t,r]=e.tag();switch(t){case 1:s.key=e.string();break;case 2:s.namespace=e.string();break;case 3:s.value=G.internalBinaryRead(e,e.uint32(),n,s.value);break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${r}) for ${this.typeName}`);let o=e.skip(r);!1!==i&&(!0===i?a.UnknownFieldHandler.onRead:i)(this.typeName,s,t,r,o)}}return s}internalBinaryWrite(e,t,n){""!==e.key&&t.tag(1,a.WireType.LengthDelimited).string(e.key),""!==e.namespace&&t.tag(2,a.WireType.LengthDelimited).string(e.namespace),e.value&&G.internalBinaryWrite(e.value,t.tag(3,a.WireType.LengthDelimited).fork(),n).join();let r=n.writeUnknownFields;return!1!==r&&(1==r?a.UnknownFieldHandler.onWrite:r)(this.typeName,e,t),t}}const Q=new Z;class X extends a.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&&a.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){let s=r??this.create(),i=e.pos+t;for(;e.pos<i;){let[t,r]=e.tag();if(1===t)s.key=e.string();else{let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${r}) for ${this.typeName}`);let o=e.skip(r);!1!==i&&(!0===i?a.UnknownFieldHandler.onRead:i)(this.typeName,s,t,r,o)}}return s}internalBinaryWrite(e,t,n){""!==e.key&&t.tag(1,a.WireType.LengthDelimited).string(e.key);let r=n.writeUnknownFields;return!1!==r&&(1==r?a.UnknownFieldHandler.onWrite:r)(this.typeName,e,t),t}}const ee=new X;class te extends a.MessageType{constructor(){super("sessionstorepb.DeleteResponse",[])}create(e){const t=globalThis.Object.create(this.messagePrototype);return void 0!==e&&a.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){return r??this.create()}internalBinaryWrite(e,t,n){let r=n.writeUnknownFields;return!1!==r&&(1==r?a.UnknownFieldHandler.onWrite:r)(this.typeName,e,t),t}}const ne=new te;class re extends a.MessageType{constructor(){super("sessionstorepb.SetRequest",[{no:1,name:"key",kind:"scalar",T:9},{no:3,name:"value",kind:"message",T:()=>G}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.key="",void 0!==e&&a.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){let s=r??this.create(),i=e.pos+t;for(;e.pos<i;){let[t,r]=e.tag();switch(t){case 1:s.key=e.string();break;case 3:s.value=G.internalBinaryRead(e,e.uint32(),n,s.value);break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${r}) for ${this.typeName}`);let o=e.skip(r);!1!==i&&(!0===i?a.UnknownFieldHandler.onRead:i)(this.typeName,s,t,r,o)}}return s}internalBinaryWrite(e,t,n){""!==e.key&&t.tag(1,a.WireType.LengthDelimited).string(e.key),e.value&&G.internalBinaryWrite(e.value,t.tag(3,a.WireType.LengthDelimited).fork(),n).join();let r=n.writeUnknownFields;return!1!==r&&(1==r?a.UnknownFieldHandler.onWrite:r)(this.typeName,e,t),t}}const ae=new re;class se extends a.MessageType{constructor(){super("sessionstorepb.SetResponse",[])}create(e){const t=globalThis.Object.create(this.messagePrototype);return void 0!==e&&a.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){return r??this.create()}internalBinaryWrite(e,t,n){let r=n.writeUnknownFields;return!1!==r&&(1==r?a.UnknownFieldHandler.onWrite:r)(this.typeName,e,t),t}}const ie=new se;class oe extends a.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:()=>G},{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&&a.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){let s=r??this.create(),i=e.pos+t;for(;e.pos<i;){let[t,r]=e.tag();switch(t){case 1:s.changeId=e.string();break;case 2:s.key=e.string();break;case 3:s.namespace=e.string();break;case 4:s.value=G.internalBinaryRead(e,e.uint32(),n,s.value);break;case 5:s.fromId=e.string();break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${r}) for ${this.typeName}`);let o=e.skip(r);!1!==i&&(!0===i?a.UnknownFieldHandler.onRead:i)(this.typeName,s,t,r,o)}}return s}internalBinaryWrite(e,t,n){""!==e.changeId&&t.tag(1,a.WireType.LengthDelimited).string(e.changeId),""!==e.key&&t.tag(2,a.WireType.LengthDelimited).string(e.key),""!==e.namespace&&t.tag(3,a.WireType.LengthDelimited).string(e.namespace),e.value&&G.internalBinaryWrite(e.value,t.tag(4,a.WireType.LengthDelimited).fork(),n).join(),""!==e.fromId&&t.tag(5,a.WireType.LengthDelimited).string(e.fromId);let r=n.writeUnknownFields;return!1!==r&&(1==r?a.UnknownFieldHandler.onWrite:r)(this.typeName,e,t),t}}const le=new oe;class ce extends a.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&&a.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){let s=r??this.create(),i=e.pos+t;for(;e.pos<i;){let[t,r]=e.tag();switch(t){case 1:s.match={oneofKind:"all",all:e.string()};break;case 2:s.match={oneofKind:"key",key:e.string()};break;case 3:s.match={oneofKind:"prefix",prefix:e.string()};break;case 4:s.match={oneofKind:"suffix",suffix:e.string()};break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${r}) for ${this.typeName}`);let o=e.skip(r);!1!==i&&(!0===i?a.UnknownFieldHandler.onRead:i)(this.typeName,s,t,r,o)}}return s}internalBinaryWrite(e,t,n){"all"===e.match.oneofKind&&t.tag(1,a.WireType.LengthDelimited).string(e.match.all),"key"===e.match.oneofKind&&t.tag(2,a.WireType.LengthDelimited).string(e.match.key),"prefix"===e.match.oneofKind&&t.tag(3,a.WireType.LengthDelimited).string(e.match.prefix),"suffix"===e.match.oneofKind&&t.tag(4,a.WireType.LengthDelimited).string(e.match.suffix);let r=n.writeUnknownFields;return!1!==r&&(1==r?a.UnknownFieldHandler.onWrite:r)(this.typeName,e,t),t}}const de=new ce;class he extends a.MessageType{constructor(){super("sessionstorepb.OpenRequest",[{no:1,name:"change_id",kind:"scalar",T:9},{no:3,name:"select",kind:"message",repeat:1,T:()=>de}])}create(e){const t=globalThis.Object.create(this.messagePrototype);return t.changeId="",t.select=[],void 0!==e&&a.reflectionMergePartial(this,t,e),t}internalBinaryRead(e,t,n,r){let s=r??this.create(),i=e.pos+t;for(;e.pos<i;){let[t,r]=e.tag();switch(t){case 1:s.changeId=e.string();break;case 3:s.select.push(de.internalBinaryRead(e,e.uint32(),n));break;default:let i=n.readUnknownField;if("throw"===i)throw new globalThis.Error(`Unknown field ${t} (wire type ${r}) for ${this.typeName}`);let o=e.skip(r);!1!==i&&(!0===i?a.UnknownFieldHandler.onRead:i)(this.typeName,s,t,r,o)}}return s}internalBinaryWrite(e,t,n){""!==e.changeId&&t.tag(1,a.WireType.LengthDelimited).string(e.changeId);for(let r=0;r<e.select.length;r++)de.internalBinaryWrite(e.select[r],t.tag(3,a.WireType.LengthDelimited).fork(),n).join();let r=n.writeUnknownFields;return!1!==r&&(1==r?a.UnknownFieldHandler.onWrite:r)(this.typeName,e,t),t}}const ue=new he;new r.ServiceType("sessionstorepb.Api",[{name:"Hello",options:{},I:j,O:H},{name:"Subscribe",serverStreaming:!0,options:{},I:q,O:z}]);const pe=new r.ServiceType("sessionstorepb.Store",[{name:"open",serverStreaming:!0,options:{},I:ue,O:le},{name:"get",options:{},I:Y,O:Q},{name:"set",options:{},I:ae,O:ie},{name:"delete",options:{},I:ee,O:ne}]);class fe{constructor(e){Object.defineProperty(this,"_transport",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"typeName",{enumerable:!0,configurable:!0,writable:!0,value:pe.typeName}),Object.defineProperty(this,"methods",{enumerable:!0,configurable:!0,writable:!0,value:pe.methods}),Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:pe.options})}open(e,t){const n=this.methods[0],a=this._transport.mergeOptions(t);return r.stackIntercept("serverStreaming",this._transport,n,a,e)}get(e,t){const n=this.methods[1],a=this._transport.mergeOptions(t);return r.stackIntercept("unary",this._transport,n,a,e)}set(e,t){const n=this.methods[2],a=this._transport.mergeOptions(t);return r.stackIntercept("unary",this._transport,n,a,e)}delete(e,t){const n=this.methods[3],a=this._transport.mergeOptions(t);return r.stackIntercept("unary",this._transport,n,a,e)}}class ge{constructor(e,t){Object.defineProperty(this,"storeClient",{enumerable:!0,configurable:!0,writable:!0,value:void 0});const r=new n.GrpcWebFetchTransport({baseUrl:e,meta:{Authorization:`Bearer ${t}`}});this.storeClient=new fe(r)}open({handleChange:e,handleError:t}){const n=this.storeClient.open({changeId:"",select:[]});n.responses.onMessage((t=>{if(t.value){if("str"===t.value?.data.oneofKind){const n=JSON.parse(t.value.data.str);e(t.key,n)}}else e(t.key)})),n.responses.onError((e=>{t(e)})),n.status.then((e=>{console.log("SessionStoreClient open",e)}))}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:M.STRING}:{data:{oneofKind:void 0},type:M.NONE}})}async get(e){const{response:t}=await this.storeClient.get({key:e});if("str"===t.value?.data.oneofKind)return JSON.parse(t.value.data.str)}delete(e){return this.storeClient.delete({key:e})}}function me(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 ye="currentPage",we=11,ke=200,be=({token:t,endpoint:n,handleError:r})=>e.useMemo((()=>{try{me(t)}catch(e){return r(e)}if(!n||!t)return r(new Error("Missing GRPC endpoint or token"));const e=new ge(n,t);return window.sessionStore=e,e}),[n,t,r]),ve=({token:t,editor:n,zoomToContent:r=!1,handleError:a})=>{const{permissions:s}=e.useMemo((()=>{try{return me(t)}catch(e){return a(e),{}}}),[t,a]);e.useEffect((()=>{if(n?.updateInstanceState({canMoveCamera:!!r}),!s)return;const e=!s.includes("write");n?.updateInstanceState({isReadonly:e}),e&&n?.setCurrentTool("hand")}),[s,r,n])};exports.Whiteboard=function({onMount:n,endpoint:r,token:a,zoomToContent:s,transparentCanvas:o}){const[l,c]=e.useState(),d=function({endpoint:n,token:r,editor:a,shapeUtils:s=[],zoomToContent:i=!1}){const[o]=e.useState((()=>{const e=t.createTLStore({shapeUtils:[...t.defaultShapeUtils,...s]});return e.loadSnapshot(I),e})),[l,c]=e.useState(a?.getCurrentPage()),[d,h]=e.useState({status:"loading"}),u=e.useCallback((e=>{h({status:"error",error:e})}),[]),p=be({token:r,endpoint:n,handleError:u});return ve({token:r,editor:a,zoomToContent:i,handleError:u}),e.useEffect((()=>{l?.id&&a&&a.getCurrentPageId()!==l.id&&(a.getPages()?.find((e=>e.id===l.id))||a.createPage(l),a?.setCurrentPage(l))}),[l,a]),e.useEffect((()=>{if(!p)return;h({status:"loading"});const e=[];return p.open({handleChange:(e,t)=>{o.mergeRemoteChanges((()=>{if(!t)return o.remove([e]);e===ye?c(t):o.put([t])}))},handleError:u}),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)}))}),we),{source:"user",scope:"document"})),h({store:o,status:"synced-remote",connectionStatus:"online"}),()=>{e.forEach((e=>e())),e.length=0}}),[o,p,u]),e.useEffect((()=>{if(!a||!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 t=a?.getCurrentPage();t?.id!==l?.id&&(p?.set(ye,t),c(t))}))}),ke),{source:"user",scope:"session"})),()=>{e.forEach((e=>e())),e.length=0}}),[l,a,p,o]),e.useEffect((()=>{a&&a.getInstanceState()?.isReadonly&&i&&o.listen((()=>{a.zoomToFit()}),{source:"remote",scope:"document"})}),[a,o,i]),d}({endpoint:r,token:a,editor:l,zoomToContent:s});return i.default.createElement(t.Tldraw,{className:o?"transparent-canvas":"",autoFocus:!0,store:d,onMount:e=>{c(e),window.editor=e,n?.({store:d.store,editor:e})},components:{ErrorFallback:O},hideUi:l?.getInstanceState()?.isReadonly})};
2267
7
  //# sourceMappingURL=index.cjs.js.map