@inkandswitch/patchwork-pkg-base 0.0.65 → 0.0.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/module-settings-url +1 -0
- package/package.json +2 -1
- package/packages/codemirror-markdown/example.js +1 -2
- package/packages/drafts/dist/assets/{DraftOverlayProvider-VYKlzOy1.js → DraftOverlayProvider-D2vIz7hy.js} +2 -3
- package/packages/drafts/dist/assets/{DraftOverlayProvider-VYKlzOy1.js.map → DraftOverlayProvider-D2vIz7hy.js.map} +1 -1
- package/packages/drafts/dist/assets/{DraftStateProvider-DX8b_RgQ.js → DraftStateProvider-Bhz0S4c1.js} +212 -87
- package/packages/drafts/dist/assets/DraftStateProvider-Bhz0S4c1.js.map +1 -0
- package/packages/drafts/dist/assets/{draft-docs-Bi8K1y3a.js → draft-docs-DyJ2l14d.js} +108 -99
- package/packages/drafts/dist/assets/draft-docs-DyJ2l14d.js.map +1 -0
- package/packages/drafts/dist/assets/{main-EEciTwbZ.js → main-CG9HOCai.js} +14 -10
- package/packages/drafts/dist/assets/main-CG9HOCai.js.map +1 -0
- package/packages/drafts/dist/index.js +9 -9
- package/packages/drafts/package.json +5 -5
- package/packages/sideboard/dist/{chunk-KHS2XJKP.js → chunk-6POQCUBB.js} +3 -3
- package/packages/sideboard/dist/{chunk-TXFTRSLY.js → chunk-DS3QVJZT.js} +3 -3
- package/packages/sideboard/dist/chunk-DS3QVJZT.js.map +7 -0
- package/packages/sideboard/dist/{create-new-menu-EU5KJJ3R.js → create-new-menu-VA4ELRJ6.js} +2 -2
- package/packages/sideboard/dist/document-list-panel-GHYN6JR5.js +2 -0
- package/packages/sideboard/dist/index.js +1 -1
- package/packages/sideboard/dist/sideboard/sideboard.js +1 -1
- package/packages/tldraw4/dist/{chunk-IKZWERSR.js → chunk-G3PMV62Z.js} +1 -3
- package/packages/tldraw4/dist/{chunk-7CJQMVDI.js → chunk-PMHAL5YM.js} +4 -4
- package/packages/tldraw4/dist/datatype.js +2 -2
- package/packages/tldraw4/dist/main.js +1 -1
- package/packages/tldraw4/dist/{sanitizeSvg-OOYBXUQ2.js → sanitizeSvg-NCGPTJ3E.js} +2 -2
- package/packages/tldraw4/dist/tool.js +450 -5675
- package/packages/tldraw4/dist/tool.js.map +4 -4
- package/packages/tldraw4/package.json +0 -1
- package/packages/tldraw5/dist/{chunk-GKLJTYCF.js → chunk-DO47QRII.js} +1 -3
- package/packages/tldraw5/dist/{chunk-4JN3PIR7.js → chunk-FTKY6DDS.js} +3 -3
- package/packages/tldraw5/dist/{chunk-JDHJ334K.js → chunk-SZI4VCOI.js} +4 -4
- package/packages/tldraw5/dist/datatype.js +3 -3
- package/packages/tldraw5/dist/main.js +1 -1
- package/packages/tldraw5/dist/{sanitizeSvg-3EKLLIYO.js → sanitizeSvg-J7F3MQGT.js} +2 -2
- package/packages/tldraw5/dist/{script-VW3AAU5T.js → script-4RKE5JKT.js} +3 -3
- package/packages/tldraw5/dist/script-4RKE5JKT.js.map +7 -0
- package/packages/tldraw5/dist/{tldr-archive-WERHN3T4.js → tldr-archive-5X7EMHWZ.js} +3 -3
- package/packages/tldraw5/dist/tool.js +293 -1543
- package/packages/tldraw5/dist/tool.js.map +4 -4
- package/packages/tldraw5/package.json +0 -1
- package/plugin-registry-url +1 -0
- package/packages/drafts/dist/assets/DraftStateProvider-DX8b_RgQ.js.map +0 -1
- package/packages/drafts/dist/assets/draft-docs-Bi8K1y3a.js.map +0 -1
- package/packages/drafts/dist/assets/index-FKZtof6Z.js +0 -67
- package/packages/drafts/dist/assets/index-FKZtof6Z.js.map +0 -1
- package/packages/drafts/dist/assets/main-EEciTwbZ.js.map +0 -1
- package/packages/sideboard/dist/chunk-TXFTRSLY.js.map +0 -7
- package/packages/sideboard/dist/document-list-panel-WDIVYTZU.js +0 -2
- package/packages/tldraw5/dist/script-VW3AAU5T.js.map +0 -7
- /package/packages/sideboard/dist/{chunk-KHS2XJKP.js.map → chunk-6POQCUBB.js.map} +0 -0
- /package/packages/sideboard/dist/{create-new-menu-EU5KJJ3R.js.map → create-new-menu-VA4ELRJ6.js.map} +0 -0
- /package/packages/sideboard/dist/{document-list-panel-WDIVYTZU.js.map → document-list-panel-GHYN6JR5.js.map} +0 -0
- /package/packages/tldraw4/dist/{chunk-IKZWERSR.js.map → chunk-G3PMV62Z.js.map} +0 -0
- /package/packages/tldraw4/dist/{chunk-7CJQMVDI.js.map → chunk-PMHAL5YM.js.map} +0 -0
- /package/packages/tldraw4/dist/{sanitizeSvg-OOYBXUQ2.js.map → sanitizeSvg-NCGPTJ3E.js.map} +0 -0
- /package/packages/tldraw5/dist/{chunk-GKLJTYCF.js.map → chunk-DO47QRII.js.map} +0 -0
- /package/packages/tldraw5/dist/{chunk-4JN3PIR7.js.map → chunk-FTKY6DDS.js.map} +0 -0
- /package/packages/tldraw5/dist/{chunk-JDHJ334K.js.map → chunk-SZI4VCOI.js.map} +0 -0
- /package/packages/tldraw5/dist/{sanitizeSvg-3EKLLIYO.js.map → sanitizeSvg-J7F3MQGT.js.map} +0 -0
- /package/packages/tldraw5/dist/{tldr-archive-WERHN3T4.js.map → tldr-archive-5X7EMHWZ.js.map} +0 -0
|
@@ -30,7 +30,6 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@automerge/automerge-repo-react-hooks": "^2.6.0-subduction.46",
|
|
33
|
-
"@automerge/react": "^2.6.0-subduction.9",
|
|
34
33
|
"@inkandswitch/patchwork-bootloader": "^0.7.2",
|
|
35
34
|
"@inkandswitch/patchwork-filesystem": "^0.2.9",
|
|
36
35
|
"@inkandswitch/patchwork-plugins": "^1.2.5",
|
|
@@ -19,7 +19,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
19
19
|
}
|
|
20
20
|
return to;
|
|
21
21
|
};
|
|
22
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
23
22
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
24
23
|
// If the importer is in node compatibility mode or this is not an ESM
|
|
25
24
|
// file that has been converted to a CommonJS file using a Babel-
|
|
@@ -47,8 +46,7 @@ var __toBinary = /* @__PURE__ */ (() => {
|
|
|
47
46
|
export {
|
|
48
47
|
__commonJS,
|
|
49
48
|
__export,
|
|
50
|
-
__reExport,
|
|
51
49
|
__toESM,
|
|
52
50
|
__toBinary
|
|
53
51
|
};
|
|
54
|
-
//# sourceMappingURL=chunk-
|
|
52
|
+
//# sourceMappingURL=chunk-DO47QRII.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createTLStore,
|
|
3
3
|
defaultShapeUtils
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-SZI4VCOI.js";
|
|
5
5
|
import {
|
|
6
6
|
__commonJS,
|
|
7
7
|
__toESM
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-DO47QRII.js";
|
|
9
9
|
|
|
10
10
|
// node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/lodash.js
|
|
11
11
|
var require_lodash = __commonJS({
|
|
@@ -5621,4 +5621,4 @@ lodash/lodash.js:
|
|
|
5621
5621
|
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
|
5622
5622
|
*)
|
|
5623
5623
|
*/
|
|
5624
|
-
//# sourceMappingURL=chunk-
|
|
5624
|
+
//# sourceMappingURL=chunk-FTKY6DDS.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
__commonJS,
|
|
6
6
|
__export,
|
|
7
7
|
__toESM
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-DO47QRII.js";
|
|
9
9
|
|
|
10
10
|
// node_modules/.pnpm/lodash.isequal@4.5.0/node_modules/lodash.isequal/index.js
|
|
11
11
|
var require_lodash = __commonJS({
|
|
@@ -93229,7 +93229,7 @@ async function defaultHandleExternalUrlAsset(editor, { url }, { toasts, msg: msg
|
|
|
93229
93229
|
};
|
|
93230
93230
|
}
|
|
93231
93231
|
async function defaultHandleExternalSvgTextContent(editor, { point, text }) {
|
|
93232
|
-
const { sanitizeSvg: sanitizeSvg2 } = await import("./sanitizeSvg-
|
|
93232
|
+
const { sanitizeSvg: sanitizeSvg2 } = await import("./sanitizeSvg-J7F3MQGT.js");
|
|
93233
93233
|
text = sanitizeSvg2(text);
|
|
93234
93234
|
if (!text) return;
|
|
93235
93235
|
const position = point ?? (editor.inputs.getShiftKey() ? editor.inputs.getCurrentPagePoint() : editor.getViewportPageBounds().center);
|
|
@@ -93551,7 +93551,7 @@ async function maybeSanitizeSvgFile(file) {
|
|
|
93551
93551
|
if (file.type !== "image/svg+xml") return file;
|
|
93552
93552
|
try {
|
|
93553
93553
|
const text = await file.text();
|
|
93554
|
-
const { sanitizeSvg: sanitizeSvg2 } = await import("./sanitizeSvg-
|
|
93554
|
+
const { sanitizeSvg: sanitizeSvg2 } = await import("./sanitizeSvg-J7F3MQGT.js");
|
|
93555
93555
|
const sanitized = sanitizeSvg2(text);
|
|
93556
93556
|
if (!sanitized) return null;
|
|
93557
93557
|
return new File([sanitized], file.name, { type: file.type, lastModified: file.lastModified });
|
|
@@ -142236,4 +142236,4 @@ tldraw/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs:
|
|
|
142236
142236
|
* Source: https://github.com/jaywcjlove/hotkeys-js
|
|
142237
142237
|
*)
|
|
142238
142238
|
*/
|
|
142239
|
-
//# sourceMappingURL=chunk-
|
|
142239
|
+
//# sourceMappingURL=chunk-SZI4VCOI.js.map
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
getTitle,
|
|
4
4
|
init,
|
|
5
5
|
setTitle
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-FTKY6DDS.js";
|
|
7
|
+
import "./chunk-SZI4VCOI.js";
|
|
8
8
|
import "./chunk-HNSBWAQA.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-DO47QRII.js";
|
|
10
10
|
export {
|
|
11
11
|
datatype,
|
|
12
12
|
getTitle,
|
|
@@ -7,11 +7,11 @@ import {
|
|
|
7
7
|
require_jsx_runtime,
|
|
8
8
|
require_react,
|
|
9
9
|
require_react_dom
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-SZI4VCOI.js";
|
|
11
11
|
import "./chunk-HNSBWAQA.js";
|
|
12
12
|
import {
|
|
13
13
|
__toESM
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-DO47QRII.js";
|
|
15
15
|
|
|
16
16
|
// src/script.ts
|
|
17
17
|
var reactSdk = __toESM(require_react(), 1);
|
|
@@ -480,4 +480,4 @@ export {
|
|
|
480
480
|
storeScriptFiles,
|
|
481
481
|
watchScriptTree
|
|
482
482
|
};
|
|
483
|
-
//# sourceMappingURL=script-
|
|
483
|
+
//# sourceMappingURL=script-4RKE5JKT.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/script.ts", "../src/script-helpers.ts"],
|
|
4
|
+
"sourcesContent": ["// Document scripts. A `.tldraw` archive can carry a `script/**` tree whose\n// `main.js` default-exports a function that runs against the live editor once\n// the canvas mounts (and whose siblings it may import). On import each file\n// becomes its own Patchwork `file` document, so the script is editable in\n// Patchwork like any other file.\n//\n// Running one means turning those documents back into modules. There is no\n// importmap on this page for `tldraw`, and relative specifiers point at\n// documents rather than paths, so each file is rewritten and handed to the\n// browser as a blob module.\n\nimport type { DocHandle, Repo } from \"@automerge/automerge-repo/slim\";\nimport type {\n DocLink,\n FolderDoc,\n UnixFileEntry,\n} from \"@inkandswitch/patchwork-filesystem\";\nimport type { Editor } from \"@tldraw/tldraw\";\nimport * as tldrawSdk from \"@tldraw/tldraw\";\nimport * as reactSdk from \"react\";\nimport * as reactJsxRuntime from \"react/jsx-runtime\";\nimport * as reactDomSdk from \"react-dom\";\nimport * as reactDomClient from \"react-dom/client\";\n\nimport type { ZipEntries } from \"./zip.ts\";\nimport { makeScriptHelpers, type ScriptHelpers } from \"./script-helpers.ts\";\n\n// What a `main.js` default export receives, mirroring the desktop app's\n// `MainScriptContext`. `app` is deliberately absent \u2014 it is host-provided and\n// feature-detected (`ctx.app?.window`), and there is no desktop window here.\nexport type MainScriptContext = {\n editor: Editor;\n helpers: ScriptHelpers;\n signal: AbortSignal;\n};\n\nconst SCRIPT_PREFIX = \"script/\";\nconst ENTRY = \"main.js\";\nconst CONFIG = \"config.js\";\n\nconst TEXT_EXTENSIONS = new Set([\"js\", \"mjs\", \"json\", \"css\", \"ts\", \"txt\", \"md\"]);\n\nfunction extensionOf(path: string) {\n const base = path.slice(path.lastIndexOf(\"/\") + 1);\n const dot = base.lastIndexOf(\".\");\n return dot === -1 ? \"\" : base.slice(dot + 1).toLowerCase();\n}\n\nfunction mimeTypeOf(path: string) {\n switch (extensionOf(path)) {\n case \"js\":\n case \"mjs\":\n return \"text/javascript\";\n case \"json\":\n return \"application/json\";\n case \"css\":\n return \"text/css\";\n case \"wasm\":\n return \"application/wasm\";\n default:\n return \"application/octet-stream\";\n }\n}\n\n/** The `script/**` entries of an archive, keyed by path relative to `script/`. */\nexport function extractScriptFiles(files: ZipEntries): Map<string, Uint8Array> {\n const script = new Map<string, Uint8Array>();\n for (const [name, bytes] of files) {\n if (!name.startsWith(SCRIPT_PREFIX) || name.endsWith(\"/\")) continue;\n script.set(name.slice(SCRIPT_PREFIX.length), bytes);\n }\n return script;\n}\n\nasync function createFileDoc(repo: Repo, path: string, bytes: Uint8Array) {\n const extension = extensionOf(path);\n const handle = await repo.create2<UnixFileEntry>({\n \"@patchwork\": { type: \"file\" },\n content: TEXT_EXTENSIONS.has(extension)\n ? new TextDecoder().decode(bytes)\n : bytes,\n extension,\n mimeType: mimeTypeOf(path),\n name: path.slice(path.lastIndexOf(\"/\") + 1),\n } as UnixFileEntry);\n return handle.url;\n}\n\n/**\n * Stores a `script/**` tree as `DocLink[]` \u2014 a file document per file, a nested\n * folder document per directory. The result goes straight onto the canvas\n * document's `docs`, which is why a canvas is FolderDoc-compatible.\n */\nexport async function storeScriptFiles(\n repo: Repo,\n files: Map<string, Uint8Array>\n): Promise<DocLink[]> {\n const here: Array<[string, Uint8Array]> = [];\n const directories = new Map<string, Map<string, Uint8Array>>();\n\n for (const [path, bytes] of files) {\n const slash = path.indexOf(\"/\");\n if (slash === -1) {\n here.push([path, bytes]);\n continue;\n }\n const directory = path.slice(0, slash);\n const rest = path.slice(slash + 1);\n const nested = directories.get(directory) ?? new Map();\n nested.set(rest, bytes);\n directories.set(directory, nested);\n }\n\n const links: DocLink[] = [];\n for (const [name, bytes] of here) {\n links.push({\n name,\n type: \"file\",\n url: (await createFileDoc(repo, name, bytes)) as DocLink[\"url\"],\n });\n }\n for (const [name, nested] of directories) {\n const handle = await repo.create2<FolderDoc>({\n \"@patchwork\": { type: \"folder\" },\n title: name,\n docs: await storeScriptFiles(repo, nested),\n } as FolderDoc);\n links.push({ name, type: \"folder\", url: handle.url });\n }\n\n return links;\n}\n\n/** Flattens the `DocLink[]` tree back into archive-relative path \u2192 doc url. */\nexport async function resolveScriptFiles(\n repo: Repo,\n docs: DocLink[] | undefined,\n prefix = \"\"\n): Promise<Record<string, string>> {\n const files: Record<string, string> = {};\n for (const link of docs ?? []) {\n const path = prefix ? `${prefix}/${link.name}` : link.name;\n if (link.type === \"folder\") {\n const handle = await repo.find<FolderDoc>(link.url);\n Object.assign(\n files,\n await resolveScriptFiles(repo, handle.doc()?.docs, path)\n );\n } else {\n files[path] = link.url;\n }\n }\n return files;\n}\n\n/**\n * The script tree as the runner needs it: where each file lives, a version that\n * moves whenever a file is edited, and every document involved so the tree can\n * be watched.\n */\nexport type ScriptTree = {\n /** archive-relative path \u2192 file document url */\n files: Record<string, string>;\n /** archive-relative path \u2192 version, changing on every edit to that file */\n versions: Record<string, string>;\n /** every document in the tree, the folders included */\n handles: DocHandle<unknown>[];\n};\n\nexport async function readScriptTree(\n repo: Repo,\n docs: DocLink[] | undefined,\n prefix = \"\"\n): Promise<ScriptTree> {\n const tree: ScriptTree = { files: {}, versions: {}, handles: [] };\n for (const link of docs ?? []) {\n const path = prefix ? `${prefix}/${link.name}` : link.name;\n const handle = await repo.find<FolderDoc>(link.url);\n tree.handles.push(handle as unknown as DocHandle<unknown>);\n if (link.type === \"folder\") {\n const nested = await readScriptTree(repo, handle.doc()?.docs, path);\n Object.assign(tree.files, nested.files);\n Object.assign(tree.versions, nested.versions);\n tree.handles.push(...nested.handles);\n } else {\n tree.files[path] = link.url;\n tree.versions[path] = handle.heads().join(\",\");\n }\n }\n return tree;\n}\n\n/**\n * Reads the tree and reads it again whenever any of its documents changes, so\n * editing a script file in Patchwork takes effect on the canvas immediately.\n * Reads are serialised: a burst of edits can't leave two readers racing to\n * attach listeners to the same handles.\n */\nexport function watchScriptTree(\n repo: Repo,\n docs: DocLink[] | undefined,\n onTree: (tree: ScriptTree) => void\n): () => void {\n const watched = new Map<string, DocHandle<unknown>>();\n let stopped = false;\n let reading: Promise<void> = Promise.resolve();\n\n const reread = () => {\n reading = reading.then(async () => {\n if (stopped) return;\n const tree = await readScriptTree(repo, docs);\n if (stopped) return;\n const next = new Map<string, DocHandle<unknown>>(\n tree.handles.map((handle) => [handle.url, handle])\n );\n for (const [url, handle] of watched) {\n if (next.has(url)) continue;\n handle.off(\"change\", reread);\n watched.delete(url);\n }\n for (const [url, handle] of next) {\n if (watched.has(url)) continue;\n handle.on(\"change\", reread);\n watched.set(url, handle);\n }\n onTree(tree);\n });\n };\n\n reread();\n\n return () => {\n stopped = true;\n for (const handle of watched.values()) handle.off(\"change\", reread);\n watched.clear();\n };\n}\n\n/** The part of a tree's state a script actually depends on. */\nexport function signatureOf(deps: string[], versions: Record<string, string>) {\n return deps.map((path) => `${path}@${versions[path] ?? \"\"}`).join(\"|\");\n}\n\n/** Reads the linked documents back out as archive bytes, keyed by path. */\nexport async function readScriptFiles(\n repo: Repo,\n docs: DocLink[] | undefined\n): Promise<Map<string, Uint8Array>> {\n const encoder = new TextEncoder();\n const files = new Map<string, Uint8Array>();\n for (const [path, url] of Object.entries(\n await resolveScriptFiles(repo, docs)\n )) {\n const handle = await repo.find<UnixFileEntry>(url as never);\n const content = handle.doc()?.content;\n if (content == null) continue;\n files.set(\n path,\n typeof content === \"string\"\n ? encoder.encode(content)\n : new Uint8Array(content as Uint8Array)\n );\n }\n return files;\n}\n\nexport function hasScript(files: Record<string, string>) {\n return ENTRY in files;\n}\n\nfunction resolvePath(from: string, specifier: string) {\n const base = from.slice(0, from.lastIndexOf(\"/\") + 1);\n const parts = (base + specifier).split(\"/\");\n const out: string[] = [];\n for (const part of parts) {\n if (part === \".\" || part === \"\") continue;\n if (part === \"..\") out.pop();\n else out.push(part);\n }\n return out.join(\"/\");\n}\n\n// Bare specifiers a script may import. There is no importmap on this page, so\n// each is served as a generated module re-exporting the copy this tool already\n// bundles \u2014 the script gets the same instances the canvas is running on rather\n// than a second copy of React or the SDK.\nconst BUNDLED: Record<string, Record<string, unknown>> = {\n tldraw: tldrawSdk,\n \"@tldraw/tldraw\": tldrawSdk,\n react: reactSdk,\n \"react/jsx-runtime\": reactJsxRuntime,\n \"react-dom\": reactDomSdk,\n \"react-dom/client\": reactDomClient,\n};\n\n// A namespace built from CommonJS carries a `default` key, and `export const\n// default = \u2026` is a syntax error.\nconst NOT_EXPORTABLE = new Set([\"default\", \"class\", \"function\", \"import\", \"new\"]);\n\nfunction shimUrl(\n specifier: string,\n shims: Map<string, string>,\n revoke: string[]\n) {\n const cached = shims.get(specifier);\n if (cached) return cached;\n\n const namespace = BUNDLED[specifier];\n const key = `__tldraw5_shim_${specifier.replace(/\\W/g, \"_\")}`;\n (globalThis as Record<string, unknown>)[key] = namespace;\n\n const names = Object.keys(namespace).filter(\n (name) => /^[A-Za-z_$][\\w$]*$/.test(name) && !NOT_EXPORTABLE.has(name)\n );\n const source = [\n `const m = globalThis[${JSON.stringify(key)}];`,\n `export default m.default ?? m;`,\n ...names.map((name) => `export const ${name} = m[${JSON.stringify(name)}];`),\n ].join(\"\\n\");\n\n const url = URL.createObjectURL(\n new Blob([source], { type: \"text/javascript\" })\n );\n revoke.push(url);\n shims.set(specifier, url);\n return url;\n}\n\n// `from '\u2026'` / `import('\u2026')` specifiers only \u2014 a bare word match would rewrite\n// unrelated strings inside a bundled vendor file.\nconst SPECIFIER =\n /(\\bfrom\\s*|\\bimport\\s*\\(\\s*|\\bimport\\s+)([\"'])([^\"']+)\\2/g;\n\n/**\n * Builds a blob module for `path`, recursively building whatever it imports.\n * Cycles are not supported \u2014 a script that imports itself in a loop will throw.\n */\nasync function buildModule(\n repo: Repo,\n files: Record<string, string>,\n path: string,\n built: Map<string, string>,\n shims: Map<string, string>,\n revoke: string[]\n): Promise<string> {\n const existing = built.get(path);\n if (existing) return existing;\n\n const url = files[path];\n if (!url) throw new Error(`script file not found: ${path}`);\n\n const handle = await repo.find<UnixFileEntry>(url as never);\n const content = handle.doc()?.content;\n const source =\n typeof content === \"string\"\n ? content\n : new TextDecoder().decode(content as Uint8Array);\n\n const specifiers = new Map<string, string>();\n for (const [, , , specifier] of source.matchAll(SPECIFIER)) {\n if (specifiers.has(specifier)) continue;\n if (specifier in BUNDLED) {\n specifiers.set(specifier, shimUrl(specifier, shims, revoke));\n } else if (specifier.startsWith(\".\")) {\n const target = resolvePath(path, specifier);\n const targetUrl = files[target];\n if (!targetUrl) continue;\n const cached = built.get(target);\n if (cached) {\n specifiers.set(specifier, cached);\n continue;\n }\n // Non-JS siblings (wasm, json) are fetched by the script rather than\n // imported, so they become plain blob urls.\n const isModule =\n TEXT_EXTENSIONS.has(extensionOf(target)) &&\n extensionOf(target) !== \"json\";\n const targetBlob = isModule\n ? await buildModule(repo, files, target, built, shims, revoke)\n : await blobUrlFor(repo, targetUrl, target, revoke);\n built.set(target, targetBlob);\n specifiers.set(specifier, targetBlob);\n }\n }\n\n const rewritten = source.replace(\n SPECIFIER,\n (match, keyword: string, quote: string, specifier: string) => {\n const replacement = specifiers.get(specifier);\n return replacement ? `${keyword}${quote}${replacement}${quote}` : match;\n }\n );\n\n const blobUrl = URL.createObjectURL(\n new Blob([rewritten], { type: \"text/javascript\" })\n );\n revoke.push(blobUrl);\n built.set(path, blobUrl);\n return blobUrl;\n}\n\nasync function blobUrlFor(\n repo: Repo,\n url: string,\n path: string,\n revoke: string[]\n) {\n const handle = await repo.find<UnixFileEntry>(url as never);\n const content = handle.doc()?.content;\n const bytes =\n typeof content === \"string\" ? new TextEncoder().encode(content) : content;\n const blobUrl = URL.createObjectURL(\n new Blob([bytes as BlobPart], { type: mimeTypeOf(path) })\n );\n revoke.push(blobUrl);\n return blobUrl;\n}\n\n// The shape of the object a `config.js` receives and returns. Mirrors the\n// desktop app's `TldrawConfig`: arrays of constructors the script pushes onto,\n// a components map it overwrites slots in, and the editor options.\nexport type TldrawConfig = {\n shapeUtils: unknown[];\n bindingUtils: unknown[];\n assetUtils: unknown[];\n overlayUtils: unknown[];\n tools: unknown[];\n components: Record<string, unknown>;\n options: Record<string, unknown>;\n getShapeVisibility?: unknown;\n assetUrls?: unknown;\n initialState?: string;\n};\n\n/**\n * Runs `config.js` before the editor mounts, giving it the config the canvas is\n * about to be built from. Built as its own module graph \u2014 `config.js` and\n * `main.js` don't share instances of the files they both import, matching the\n * desktop app.\n */\nexport async function runConfigScript(\n repo: Repo,\n files: Record<string, string>,\n config: TldrawConfig\n): Promise<{ config: TldrawConfig; dispose: () => void; deps: string[] }> {\n const dispose = (urls: string[]) => () => {\n for (const url of urls) URL.revokeObjectURL(url);\n };\n\n if (!(CONFIG in files)) return { config, dispose: dispose([]), deps: [] };\n\n const revoke: string[] = [];\n const shims = new Map<string, string>();\n const built = new Map<string, string>();\n\n try {\n const url = await buildModule(repo, files, CONFIG, built, shims, revoke);\n const module = (await import(/* @vite-ignore */ url)) as {\n default?: (ctx: { config: TldrawConfig }) => TldrawConfig | Promise<TldrawConfig>;\n };\n const result = (await module.default?.({ config })) ?? config;\n return { config: result, dispose: dispose(revoke), deps: [...built.keys()] };\n } catch (error) {\n dispose(revoke)();\n throw error;\n }\n}\n\n/**\n * Runs a document's script against the editor. Returns the files it was built\n * from \u2014 so a caller can re-run it when one of them is edited \u2014 and a cleanup\n * that aborts the script's signal and revokes the blob urls.\n */\nexport async function runScript(\n repo: Repo,\n files: Record<string, string>,\n editor: Editor\n): Promise<{ dispose: () => void; deps: string[] }> {\n const revoke: string[] = [];\n const shims = new Map<string, string>();\n const built = new Map<string, string>();\n const aborter = new AbortController();\n\n try {\n const entryUrl = await buildModule(\n repo,\n files,\n ENTRY,\n built,\n shims,\n revoke\n );\n const module = (await import(/* @vite-ignore */ entryUrl)) as {\n default?: (ctx: MainScriptContext) => unknown;\n };\n // `signal` is the script's teardown hook \u2014 it aborts when the canvas\n // unmounts, the same point at which the desktop app aborts it.\n await module.default?.({\n editor,\n helpers: makeScriptHelpers(editor),\n signal: aborter.signal,\n });\n } catch (error) {\n aborter.abort();\n for (const url of revoke) URL.revokeObjectURL(url);\n throw error;\n }\n\n return {\n deps: [...built.keys()],\n dispose: () => {\n aborter.abort();\n for (const url of revoke) URL.revokeObjectURL(url);\n },\n };\n}\n", "// `ctx.helpers` \u2014 the editor-bound convenience bag a document script receives,\n// mirroring the desktop app's `ScriptHelpers`. Pure tldraw primitives are not\n// in here; scripts import those from 'tldraw' directly.\n\nimport {\n Box,\n createShapeId,\n renderPlaintextFromRichText,\n type Editor,\n type TLShape,\n type TLShapeId,\n type TLShapePartial,\n} from \"@tldraw/tldraw\";\n\ntype ShapeRef = string | { id?: string; shapeId?: string };\n\nfunction refToId(ref: ShapeRef): TLShapeId {\n if (typeof ref === \"string\") return ref as TLShapeId;\n return (ref.id ?? ref.shapeId) as TLShapeId;\n}\n\nexport function makeScriptHelpers(editor: Editor) {\n const createShapeIfMissing = (shape: TLShapePartial & { id: TLShapeId }) => {\n if (editor.getShape(shape.id)) return false;\n editor.createShape(shape);\n return true;\n };\n\n return {\n richTextToPlainText(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (!value) return \"\";\n try {\n return renderPlaintextFromRichText(editor, value as never);\n } catch {\n return \"\";\n }\n },\n\n createShapeIfMissing,\n\n createShapesIfMissing(shapes: Array<TLShapePartial & { id: TLShapeId }>) {\n const created: TLShapeId[] = [];\n for (const shape of shapes) {\n if (createShapeIfMissing(shape)) created.push(shape.id);\n }\n return created;\n },\n\n translateShapes(refs: ShapeRef[], dx: number, dy: number) {\n const moved: TLShapeId[] = [];\n const partials: TLShapePartial[] = [];\n for (const ref of refs) {\n const id = refToId(ref);\n const shape = editor.getShape(id);\n if (!shape) continue;\n partials.push({\n id,\n type: shape.type,\n x: shape.x + dx,\n y: shape.y + dy,\n } as TLShapePartial);\n moved.push(id);\n }\n if (partials.length) {\n editor.run(() => editor.updateShapes(partials), { history: \"ignore\" });\n }\n return moved;\n },\n\n // Fires only when the anchor alone moved: a resize or rotation also shifts\n // x/y, and a multi-shape drag would move script-owned internals twice.\n onShapeTranslate(\n shapeRef: string | TLShapeId,\n handler: (info: {\n dx: number;\n dy: number;\n prev: TLShape;\n next: TLShape;\n }) => void,\n options?: { signal?: AbortSignal }\n ) {\n const id = shapeRef as TLShapeId;\n const unlisten = editor.store.listen(\n ({ changes }) => {\n const updated = Object.values(changes.updated);\n if (updated.length !== 1) return;\n const [prev, next] = updated[0] as [TLShape, TLShape];\n if (prev.id !== id || next.typeName !== \"shape\") return;\n const dx = next.x - prev.x;\n const dy = next.y - prev.y;\n if (dx === 0 && dy === 0) return;\n if (\n prev.rotation !== next.rotation ||\n JSON.stringify(prev.props) !== JSON.stringify(next.props)\n ) {\n return;\n }\n handler({ dx, dy, prev, next });\n },\n { source: \"user\", scope: \"document\" }\n );\n options?.signal?.addEventListener(\"abort\", unlisten, { once: true });\n return unlisten;\n },\n\n createArrowBetweenShapes(\n fromShapeId: string,\n toShapeId: string,\n options: {\n bend?: number;\n arrowheadStart?: string;\n arrowheadEnd?: string;\n richText?: unknown;\n } = {}\n ) {\n const id = createShapeId();\n editor.createShape({\n id,\n type: \"arrow\",\n props: {\n bend: options.bend ?? 0,\n arrowheadStart: options.arrowheadStart ?? \"none\",\n arrowheadEnd: options.arrowheadEnd ?? \"arrow\",\n ...(options.richText ? { richText: options.richText } : {}),\n },\n } as TLShapePartial);\n editor.createBindings([\n {\n type: \"arrow\",\n fromId: id,\n toId: fromShapeId as TLShapeId,\n props: { terminal: \"start\" },\n },\n {\n type: \"arrow\",\n fromId: id,\n toId: toShapeId as TLShapeId,\n props: { terminal: \"end\" },\n },\n ] as never);\n return id;\n },\n\n boxShapes(\n refs: ShapeRef[],\n options: {\n shapeId?: string;\n color?: string;\n fill?: string;\n text?: string;\n } = {}\n ) {\n const boxes = refs\n .map((ref) => editor.getShapePageBounds(refToId(ref)))\n .filter(Boolean) as Box[];\n if (!boxes.length) return editor;\n\n const bounds = Box.Common(boxes);\n const padding = 16;\n editor.createShape({\n id: (options.shapeId as TLShapeId) ?? createShapeId(),\n type: \"geo\",\n x: bounds.x - padding,\n y: bounds.y - padding,\n props: {\n geo: \"rectangle\",\n w: bounds.w + padding * 2,\n h: bounds.h + padding * 2,\n color: options.color ?? \"black\",\n fill: options.fill ?? \"none\",\n },\n } as TLShapePartial);\n return editor;\n },\n\n // The desktop app's lints are heuristics over its own layout rules; rather\n // than invent different ones, this reports nothing.\n getLints() {\n return { lints: [] as Array<{ type: string; shapeIds: string[]; message: string }> };\n },\n\n // Patchwork persists through Automerge continuously \u2014 there is no file to\n // save, and the desktop contract forbids scripts calling this anyway.\n async saveDoc() {\n throw new Error(\"saveDoc() is not available outside the tldraw desktop app\");\n },\n };\n}\n\nexport type ScriptHelpers = ReturnType<typeof makeScriptHelpers>;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createTLStore,
|
|
3
3
|
defaultShapeUtils
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-SZI4VCOI.js";
|
|
5
5
|
import "./chunk-HNSBWAQA.js";
|
|
6
6
|
import {
|
|
7
7
|
__commonJS,
|
|
8
8
|
__toBinary,
|
|
9
9
|
__toESM
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-DO47QRII.js";
|
|
11
11
|
|
|
12
12
|
// node_modules/.pnpm/sql.js@1.14.1/node_modules/sql.js/dist/sql-wasm-browser.js
|
|
13
13
|
var require_sql_wasm_browser = __commonJS({
|
|
@@ -2419,4 +2419,4 @@ export {
|
|
|
2419
2419
|
readTldrArchive,
|
|
2420
2420
|
writeTldrArchive
|
|
2421
2421
|
};
|
|
2422
|
-
//# sourceMappingURL=tldr-archive-
|
|
2422
|
+
//# sourceMappingURL=tldr-archive-5X7EMHWZ.js.map
|