@inkandswitch/patchwork-pkg-base 0.0.37 → 0.0.39
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/package.json +1 -1
- package/packages/codemirror-base/dist/{chunk-SSMKXTVN.js → chunk-XU4QBB2J.js} +313 -8
- package/packages/codemirror-base/dist/chunk-XU4QBB2J.js.map +7 -0
- package/packages/codemirror-base/dist/lib/codemirror.js +1 -1
- package/packages/codemirror-base/dist/tool.js +3 -2
- package/packages/codemirror-base/dist/tool.js.map +2 -2
- package/packages/contact/dist/{ContactAvatar-MKNZ5KEX.js → ContactAvatar-B4QQC47I.js} +5 -26
- package/packages/contact/dist/ContactAvatar-B4QQC47I.js.map +7 -0
- package/packages/contact/dist/ContactCursor-DTVFOQDW.js +33 -0
- package/packages/contact/dist/ContactCursor-DTVFOQDW.js.map +7 -0
- package/packages/contact/dist/chunk-PZ7ORBQU.js +27 -0
- package/packages/contact/dist/chunk-PZ7ORBQU.js.map +7 -0
- package/packages/contact/dist/tool.css +18 -0
- package/packages/contact/dist/tool.css.map +2 -2
- package/packages/contact/dist/tool.js +15 -1
- package/packages/contact/dist/tool.js.map +2 -2
- package/packages/drafts/dist/assets/{DraftListProvider-D3dHIGmO.js → DraftListProvider-D41q9O5B.js} +3 -2
- package/packages/drafts/dist/assets/{DraftListProvider-D3dHIGmO.js.map → DraftListProvider-D41q9O5B.js.map} +1 -1
- package/packages/drafts/dist/assets/{DraftOverlayProvider-Cae4SJD7.js → DraftOverlayProvider-B0Mtq1UF.js} +3 -2
- package/packages/drafts/dist/assets/{DraftOverlayProvider-Cae4SJD7.js.map → DraftOverlayProvider-B0Mtq1UF.js.map} +1 -1
- package/packages/drafts/dist/assets/{index-DAqs20jZ.js → index-FKZtof6Z.js} +6 -4
- package/packages/drafts/dist/assets/index-FKZtof6Z.js.map +1 -0
- package/packages/drafts/dist/assets/{main-9LQJEnZS.js → main-Cp8VsNHh.js} +22 -1197
- package/packages/drafts/dist/assets/main-Cp8VsNHh.js.map +1 -0
- package/packages/drafts/dist/index.js +5 -5
- package/packages/drafts/package.json +11 -11
- package/packages/sync-indicator/dist/assets/SyncIndicator-DxVkpuKE.js.map +1 -1
- package/packages/tldraw4/dist/tool.js +120 -17
- package/packages/tldraw4/dist/tool.js.map +4 -4
- package/packages/tldraw5/dist/tool.js +2 -2
- package/packages/tldraw5/dist/tool.js.map +1 -1
- package/packages/codemirror-base/dist/chunk-SSMKXTVN.js.map +0 -7
- package/packages/contact/dist/ContactAvatar-MKNZ5KEX.js.map +0 -7
- package/packages/drafts/dist/assets/index-DAqs20jZ.js.map +0 -1
- package/packages/drafts/dist/assets/main-9LQJEnZS.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"main-9LQJEnZS.js","sources":["../../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js","../../../node_modules/.pnpm/debug@4.4.3_supports-color@7.2.0/node_modules/debug/src/common.js","../../../node_modules/.pnpm/debug@4.4.3_supports-color@7.2.0/node_modules/debug/src/browser.js","../../../node_modules/.pnpm/cabbages@0.2.10_supports-color@7.2.0/node_modules/cabbages/output/cabbages.js","../../../node_modules/.pnpm/solid-automerge@2.0.1_@automerge+automerge-repo@2.6.0-subduction.39_supports-color@7.2._227dd52f84bb1cffabe2033f455b43b1/node_modules/solid-automerge/out/context.js","../../../node_modules/.pnpm/solid-automerge@2.0.1_@automerge+automerge-repo@2.6.0-subduction.39_supports-color@7.2._227dd52f84bb1cffabe2033f455b43b1/node_modules/solid-automerge/out/createDocSignal.js","../../../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.6_@automerge+automerge@3.3.0-fragments.1_solid-js@1.9.14/node_modules/@automerge/automerge-repo-solid-primitives/dist/index.js","../../../node_modules/.pnpm/@inkandswitch+patchwork-providers-solid@0.2.3_@automerge+automerge-repo-solid-primitive_28dd2c0a72a3f744c852d31b58e8c7bb/node_modules/@inkandswitch/patchwork-providers-solid/dist/index.js","../../src/DraftsSidebar.tsx","../../src/main.tsx"],"sourcesContent":["/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","// cabbages.ts\nimport debug from \"debug\";\nvar log = debug(\"cabbages\");\nfunction pojo(target) {\n return typeof target == \"object\" && typeof target != null && Object.getPrototypeOf(target) == Object.prototype;\n}\nvar BLOCK_MARKER = \"\\uFFFC\";\nfunction apply(target, ...rest) {\n if (rest.length == 0) {\n log(\"empty patch\");\n return;\n }\n const [path, range, val] = rest;\n let p = [...path];\n while (true) {\n let key = p.shift();\n if (!p.length) {\n const RANGE_ARRAY = Array.isArray(range);\n if (pojo(target) && RANGE_ARRAY && typeof key == \"undefined\" && typeof range[0] == \"string\") {\n delete target[range[0]];\n return;\n }\n if (RANGE_ARRAY || typeof range == \"number\") {\n if (typeof key == \"undefined\") {\n throw new Error(\"cant treat top level as a seq\");\n }\n key = key;\n let [start, end] = Array.isArray(range) ? range : [range, range + 1];\n const ZERO_LENGTH = Array.isArray(range) && range.length == 0;\n if (!ZERO_LENGTH && (start == null || end == null)) {\n throw new RangeError(\"it's all or nothing, no half measures\");\n }\n const DELETE = typeof val == \"undefined\";\n const INSERT = start === end && !DELETE;\n const APPEND = ZERO_LENGTH && !DELETE;\n const REPLACE = !INSERT && !DELETE && !APPEND;\n if (typeof target[key] == \"undefined\") {\n if (typeof target == \"string\") {\n return;\n } else if (typeof val == \"string\") {\n target[key] = \"\";\n } else {\n target[key] = [];\n }\n }\n let seq = target[key];\n if (Array.isArray(seq)) {\n if (APPEND) {\n Array.isArray(val) ? seq.push(...val) : seq.push(val);\n return;\n }\n if (INSERT || REPLACE) {\n Array.isArray(val) ? seq.splice(start, end - start, ...val) : seq.splice(start, end - start, val);\n return;\n }\n if (DELETE) {\n seq.splice(start, end - start);\n return;\n }\n throw new Error(\"i don't know what happened\");\n }\n if (typeof seq == \"string\") {\n if (APPEND) {\n target[key] = seq + val;\n return;\n }\n if (REPLACE || INSERT) {\n target[key] = seq.slice(0, start) + (typeof val == \"string\" ? val : val.map(\n (n) => typeof n == \"string\" ? n : BLOCK_MARKER\n ).join(\"\")) + seq.slice(end);\n return;\n }\n if (DELETE) {\n target[key] = seq.slice(0, start) + seq.slice(end);\n return;\n }\n throw new Error(\"i don't know what happened\");\n }\n if (pojo(seq) && RANGE_ARRAY && typeof range[0] == \"string\") {\n delete seq[range[0]];\n return;\n }\n throw new Error(\"not implemented\");\n }\n if (typeof key == \"undefined\") {\n if (typeof range != \"string\") {\n throw new Error(`can't index top-level map with ${range}`);\n }\n if (typeof val == \"undefined\") {\n delete target[range];\n } else {\n target[range] = val;\n }\n return;\n }\n if (typeof target[key] == \"undefined\") {\n target[key] = {};\n }\n if (RANGE_ARRAY) {\n let [a, b] = range;\n if (a != null && b != null) {\n if (typeof val == \"undefined\" && a != null && b != null) {\n delete target[key][a || b];\n } else {\n target[key][a || b] = val;\n }\n }\n } else {\n if (typeof val == \"undefined\") {\n delete target[key][range];\n } else if (typeof target[key] == \"string\") {\n return;\n } else {\n target[key][range] = val;\n }\n }\n return;\n }\n if (typeof key == \"undefined\") {\n throw new Error(\"cant treat top level as a seq\");\n }\n key = key;\n let nextkey = p[0];\n if (typeof target[key] == \"undefined\") {\n if (typeof nextkey == \"string\") {\n target[key] = {};\n } else if (typeof nextkey == \"number\") {\n target[key] = [];\n } else {\n throw new Error(`can't go down this road ${target}.${key}.${nextkey}`);\n }\n }\n target = target[key];\n }\n}\nvar patch = apply;\nfunction get(obj, key) {\n for (let p = 0; p < key.length; p++) {\n obj = obj ? obj[key[p]] : void 0;\n }\n return obj;\n}\nfunction fromAutomerge(autopatch, payload) {\n const path = autopatch.path.slice(0, -1);\n const key = autopatch.path[autopatch.path.length - 1];\n switch (autopatch.action) {\n case \"mark\":\n case \"unmark\":\n log(\n `skipping ${autopatch.action} because it doesn't affect material reality`\n );\n return [];\n case \"inc\":\n if (payload) {\n return [path, key, get(payload.patchInfo.after, autopatch.path)];\n } else {\n throw new Error(\n `can't apply ${autopatch.action} without payload argument`\n );\n }\n case \"conflict\":\n if (payload) {\n return [path, key, get(payload.patchInfo.after, autopatch.path)];\n } else {\n throw new Error(\n `can't apply ${autopatch.action} without payload argument`\n );\n }\n case \"del\": {\n return typeof key == \"string\" ? [path, key] : [path, [key, key + (autopatch.length || 1)]];\n }\n case \"insert\": {\n return [\n path,\n [key, key],\n structuredClone(autopatch.values)\n ];\n }\n case \"splice\": {\n return [path, [key, key], [autopatch.value]];\n }\n case \"put\": {\n return [path, key, structuredClone(autopatch.value)];\n }\n }\n}\nexport {\n apply,\n fromAutomerge,\n patch,\n pojo\n};\n","\"use strict\";\nimport { createContext } from \"solid-js\";\nexport const RepoContext = createContext(\n null\n);\n//# sourceMappingURL=context.js.map\n","\"use strict\";\nimport { createEffect, onCleanup } from \"solid-js\";\nimport { createSignal } from \"solid-js\";\nexport default function createDocSignal(handle) {\n const [signal, setSignal] = createSignal(handle()?.doc());\n createEffect(() => {\n const h = handle();\n function update() {\n setSignal(() => h?.doc());\n }\n update();\n if (h) {\n h.on(\"change\", update);\n onCleanup(() => h.off(\"change\", update));\n }\n });\n return signal;\n}\n//# sourceMappingURL=createDocSignal.js.map\n","import { onCleanup, createMemo, createContext, useContext, createResource, createEffect, createSignal } from 'solid-js';\nimport { createStore, produce, reconcile } from 'solid-js/store';\n\n// Properties of the document root object\nconst STATE = Symbol.for(\"_am_meta\"); // symbol used to hide application metadata on automerge objects\nconst TRACE = Symbol.for(\"_am_trace\"); // used for debugging\nconst OBJECT_ID = Symbol.for(\"_am_objectId\"); // symbol used to hide the object id on automerge objects\nconst IS_PROXY = Symbol.for(\"_am_isProxy\"); // symbol used to test if the document is a proxy object\nconst CLEAR_CACHE = Symbol.for(\"_am_clearCache\"); // symbol used to tell a proxy object to clear its cache\nconst UINT = Symbol.for(\"_am_uint\");\nconst INT = Symbol.for(\"_am_int\");\nconst F64 = Symbol.for(\"_am_f64\");\nconst COUNTER = Symbol.for(\"_am_counter\");\nconst IMMUTABLE_STRING = Symbol.for(\"_am_immutableString\");\n\n/**\n * The most basic CRDT: an integer value that can be changed only by\n * incrementing and decrementing. Since addition of integers is commutative,\n * the value trivially converges.\n */\nclass Counter {\n constructor(value) {\n this.value = value || 0;\n Reflect.defineProperty(this, COUNTER, { value: true });\n }\n /**\n * A peculiar JavaScript language feature from its early days: if the object\n * `x` has a `valueOf()` method that returns a number, you can use numerical\n * operators on the object `x` directly, such as `x + 1` or `x < 4`.\n * This method is also called when coercing a value to a string by\n * concatenating it with another string, as in `x + ''`.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf\n */\n valueOf() {\n return this.value;\n }\n /**\n * Returns the counter value as a decimal string. If `x` is a counter object,\n * this method is called e.g. when you do `['value: ', x].join('')` or when\n * you use string interpolation: `value: ${x}`.\n */\n toString() {\n return this.valueOf().toString();\n }\n /**\n * Returns the counter value, so that a JSON serialization of an Automerge\n * document represents the counter simply as an integer.\n */\n toJSON() {\n return this.value;\n }\n /**\n * Increases the value of the counter by `delta`. If `delta` is not given,\n * increases the value of the counter by 1.\n *\n * Will throw an error if used outside of a change callback.\n */\n increment(_delta) {\n throw new Error(\"Counters should not be incremented outside of a change callback\");\n }\n /**\n * Decreases the value of the counter by `delta`. If `delta` is not given,\n * decreases the value of the counter by 1.\n *\n * Will throw an error if used outside of a change callback.\n */\n decrement(_delta) {\n throw new Error(\"Counters should not be decremented outside of a change callback\");\n }\n}\n/**\n * An instance of this class is used when a counter is accessed within a change\n * callback.\n */\nclass WriteableCounter extends Counter {\n constructor(value, context, path, objectId, key) {\n super(value);\n this.context = context;\n this.path = path;\n this.objectId = objectId;\n this.key = key;\n }\n /**\n * Increases the value of the counter by `delta`. If `delta` is not given,\n * increases the value of the counter by 1.\n */\n increment(delta) {\n delta = typeof delta === \"number\" ? delta : 1;\n this.context.increment(this.objectId, this.key, delta);\n this.value += delta;\n return this.value;\n }\n /**\n * Decreases the value of the counter by `delta`. If `delta` is not given,\n * decreases the value of the counter by 1.\n */\n decrement(delta) {\n return this.increment(typeof delta === \"number\" ? -delta : -1);\n }\n}\n/**\n * Returns an instance of `WriteableCounter` for use in a change callback.\n * `context` is the proxy context that keeps track of the mutations.\n * `objectId` is the ID of the object containing the counter, and `key` is\n * the property name (key in map, or index in list) where the counter is\n * located.\n */\nfunction getWriteableCounter(value, context, path, objectId, key) {\n return new WriteableCounter(value, context, path, objectId, key);\n}\n//module.exports = { Counter, getWriteableCounter }\n\nvar _a;\nclass ImmutableString {\n constructor(val) {\n // Used to detect whether a value is a ImmutableString object rather than using an instanceof check\n this[_a] = true;\n this.val = val;\n }\n /**\n * Returns the content of the ImmutableString object as a simple string\n */\n toString() {\n return this.val;\n }\n toJSON() {\n return this.val;\n }\n}\n_a = IMMUTABLE_STRING;\n\nfunction parseListIndex(key) {\n if (typeof key === \"string\" && /^[0-9]+$/.test(key))\n key = parseInt(key, 10);\n if (typeof key !== \"number\") {\n return key;\n }\n if (key < 0 || isNaN(key) || key === Infinity || key === -Infinity) {\n throw new RangeError(\"A list index must be positive, but you passed \" + key);\n }\n return key;\n}\nfunction valueAt(target, prop) {\n const { context, objectId, path } = target;\n const value = context.getWithType(objectId, prop);\n if (value === null) {\n return;\n }\n const datatype = value[0];\n const val = value[1];\n switch (datatype) {\n case undefined:\n return;\n case \"map\":\n return mapProxy(context, val, [...path, prop]);\n case \"list\":\n return listProxy(context, val, [...path, prop]);\n case \"text\":\n return context.text(val);\n case \"str\":\n return new ImmutableString(val);\n case \"uint\":\n return val;\n case \"int\":\n return val;\n case \"f64\":\n return val;\n case \"boolean\":\n return val;\n case \"null\":\n return null;\n case \"bytes\":\n return val;\n case \"timestamp\":\n return val;\n case \"counter\": {\n const counter = getWriteableCounter(val, context, path, objectId, prop);\n return counter;\n }\n default:\n throw RangeError(`datatype ${datatype} unimplemented`);\n }\n}\nfunction import_value(value, path, context) {\n const type = typeof value;\n switch (type) {\n case \"object\":\n if (value == null) {\n return [null, \"null\"];\n }\n else if (value[UINT]) {\n return [value.value, \"uint\"];\n }\n else if (value[INT]) {\n return [value.value, \"int\"];\n }\n else if (value[F64]) {\n return [value.value, \"f64\"];\n }\n else if (value[COUNTER]) {\n return [value.value, \"counter\"];\n }\n else if (value instanceof Date) {\n return [value.getTime(), \"timestamp\"];\n }\n else if (isImmutableString(value)) {\n return [value.toString(), \"str\"];\n }\n else if (value instanceof Uint8Array) {\n return [value, \"bytes\"];\n }\n else if (value instanceof Array) {\n return [value, \"list\"];\n }\n else if (Object.prototype.toString.call(value) === \"[object Object]\") {\n return [value, \"map\"];\n }\n else if (isSameDocument(value, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n else {\n throw new RangeError(`Cannot assign unknown object: ${value}`);\n }\n case \"boolean\":\n return [value, \"boolean\"];\n case \"number\":\n if (Number.isInteger(value)) {\n return [value, \"int\"];\n }\n else {\n return [value, \"f64\"];\n }\n case \"string\":\n return [value, \"text\"];\n case \"undefined\":\n throw new RangeError([\n `Cannot assign undefined value at ${printPath(path)}, `,\n \"because `undefined` is not a valid JSON data type. \",\n \"You might consider setting the property's value to `null`, \",\n \"or using `delete` to remove it altogether.\",\n ].join(\"\"));\n default:\n throw new RangeError([\n `Cannot assign ${type} value at ${printPath(path)}. `,\n `All JSON primitive datatypes (object, array, string, number, boolean, null) `,\n `are supported in an Automerge document; ${type} values are not. `,\n ].join(\"\"));\n }\n}\n// When we assign a value to a property in a proxy we recursively walk through\n// the value we are assigning and copy it into the document. This is generally\n// desirable behaviour. However, a very common bug is to accidentally assign a\n// value which is already in the document to another key within the same\n// document, this often leads to surprising behaviour where users expected to\n// _move_ the object, but it is instead copied. To avoid this we check if the\n// value is from the same document and if it is we throw an error, this means\n// we require an explicit Object.assign call to copy the object, thus avoiding\n// the footgun\nfunction isSameDocument(val, context) {\n var _b, _c;\n // Date is technically an object, but immutable, so allowing people to assign\n // a date from one place in the document to another place in the document is\n // not likely to be a bug\n if (val instanceof Date) {\n return false;\n }\n // this depends on __wbg_ptr being the wasm pointer\n // a new version of wasm-bindgen will break this\n // but the tests should expose the break\n if (val && ((_c = (_b = val[STATE]) === null || _b === void 0 ? void 0 : _b.handle) === null || _c === void 0 ? void 0 : _c.__wbg_ptr) === context.__wbg_ptr) {\n return true;\n }\n return false;\n}\nconst MapHandler = {\n get(target, key) {\n const { context, objectId, cache } = target;\n if (key === Symbol.toStringTag) {\n return target[Symbol.toStringTag];\n }\n if (key === OBJECT_ID)\n return objectId;\n if (key === IS_PROXY)\n return true;\n if (key === TRACE)\n return target.trace;\n if (key === STATE)\n return { handle: context };\n if (!cache[key]) {\n cache[key] = valueAt(target, key);\n }\n return cache[key];\n },\n set(target, key, val) {\n const { context, objectId, path } = target;\n target.cache = {}; // reset cache on set\n if (isSameDocument(val, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n if (key === TRACE) {\n target.trace = val;\n return true;\n }\n if (key === CLEAR_CACHE) {\n return true;\n }\n const [value, datatype] = import_value(val, [...path, key], context);\n switch (datatype) {\n case \"list\": {\n const list = context.putObject(objectId, key, []);\n const proxyList = listProxy(context, list, [...path, key]);\n for (let i = 0; i < value.length; i++) {\n proxyList[i] = value[i];\n }\n break;\n }\n case \"text\": {\n context.putObject(objectId, key, value);\n break;\n }\n case \"map\": {\n const map = context.putObject(objectId, key, {});\n const proxyMap = mapProxy(context, map, [...path, key]);\n for (const key in value) {\n proxyMap[key] = value[key];\n }\n break;\n }\n default:\n context.put(objectId, key, value, datatype);\n }\n return true;\n },\n deleteProperty(target, key) {\n const { context, objectId } = target;\n target.cache = {}; // reset cache on delete\n context.delete(objectId, key);\n return true;\n },\n has(target, key) {\n const value = this.get(target, key);\n return value !== undefined;\n },\n getOwnPropertyDescriptor(target, key) {\n // const { context, objectId } = target\n const value = this.get(target, key);\n if (typeof value !== \"undefined\") {\n return {\n configurable: true,\n enumerable: true,\n value,\n };\n }\n },\n ownKeys(target) {\n const { context, objectId } = target;\n // FIXME - this is a tmp workaround until fix the dupe key bug in keys()\n const keys = context.keys(objectId);\n return [...new Set(keys)];\n },\n};\nconst ListHandler = {\n get(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n if (index === Symbol.hasInstance) {\n return (instance) => {\n return Array.isArray(instance);\n };\n }\n if (index === Symbol.toStringTag) {\n return target[Symbol.toStringTag];\n }\n if (index === OBJECT_ID)\n return objectId;\n if (index === IS_PROXY)\n return true;\n if (index === TRACE)\n return target.trace;\n if (index === STATE)\n return { handle: context };\n if (index === \"length\")\n return context.length(objectId);\n if (typeof index === \"number\") {\n return valueAt(target, index);\n }\n else {\n return listMethods(target)[index];\n }\n },\n set(target, index, val) {\n const { context, objectId, path } = target;\n index = parseListIndex(index);\n if (isSameDocument(val, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n if (index === CLEAR_CACHE) {\n return true;\n }\n if (index === TRACE) {\n target.trace = val;\n return true;\n }\n if (typeof index == \"string\") {\n throw new RangeError(\"list index must be a number\");\n }\n const [value, datatype] = import_value(val, [...path, index], context);\n switch (datatype) {\n case \"list\": {\n let list;\n if (index >= context.length(objectId)) {\n list = context.insertObject(objectId, index, []);\n }\n else {\n list = context.putObject(objectId, index, []);\n }\n const proxyList = listProxy(context, list, [...path, index]);\n proxyList.splice(0, 0, ...value);\n break;\n }\n case \"text\": {\n if (index >= context.length(objectId)) {\n context.insertObject(objectId, index, value);\n }\n else {\n context.putObject(objectId, index, value);\n }\n break;\n }\n case \"map\": {\n let map;\n if (index >= context.length(objectId)) {\n map = context.insertObject(objectId, index, {});\n }\n else {\n map = context.putObject(objectId, index, {});\n }\n const proxyMap = mapProxy(context, map, [...path, index]);\n for (const key in value) {\n proxyMap[key] = value[key];\n }\n break;\n }\n default:\n if (index >= context.length(objectId)) {\n context.insert(objectId, index, value, datatype);\n }\n else {\n context.put(objectId, index, value, datatype);\n }\n }\n return true;\n },\n deleteProperty(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n const elem = context.get(objectId, index);\n if (elem != null && elem[0] == \"counter\") {\n throw new TypeError(\"Unsupported operation: deleting a counter from a list\");\n }\n context.delete(objectId, index);\n return true;\n },\n has(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n if (typeof index === \"number\") {\n return index < context.length(objectId);\n }\n return index === \"length\";\n },\n getOwnPropertyDescriptor(target, index) {\n const { context, objectId } = target;\n if (index === \"length\")\n return { writable: true, value: context.length(objectId) };\n if (index === OBJECT_ID)\n return { configurable: false, enumerable: false, value: objectId };\n index = parseListIndex(index);\n const value = valueAt(target, index);\n return { configurable: true, enumerable: true, value };\n },\n getPrototypeOf(target) {\n return Object.getPrototypeOf(target);\n },\n ownKeys( /*target*/) {\n const keys = [];\n // uncommenting this causes assert.deepEqual() to fail when comparing to a pojo array\n // but not uncommenting it causes for (i in list) {} to not enumerate values properly\n //const {context, objectId } = target\n //for (let i = 0; i < target.context.length(objectId); i++) { keys.push(i.toString()) }\n keys.push(\"length\");\n return keys;\n },\n};\nObject.assign({}, ListHandler, {\n get(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n if (index === Symbol.hasInstance) {\n return (instance) => {\n return Array.isArray(instance);\n };\n }\n if (index === Symbol.toStringTag) {\n return target[Symbol.toStringTag];\n }\n if (index === OBJECT_ID)\n return objectId;\n if (index === IS_PROXY)\n return true;\n if (index === TRACE)\n return target.trace;\n if (index === STATE)\n return { handle: context };\n if (index === \"length\")\n return context.length(objectId);\n if (typeof index === \"number\") {\n return valueAt(target, index);\n }\n else {\n return textMethods(target)[index] || listMethods(target)[index];\n }\n },\n getPrototypeOf( /*target*/) {\n return Object.getPrototypeOf(new Text());\n },\n});\nfunction mapProxy(context, objectId, path) {\n const target = {\n context,\n objectId,\n path: path || [],\n cache: {},\n };\n const proxied = {};\n Object.assign(proxied, target);\n const result = new Proxy(proxied, MapHandler);\n // conversion through unknown is necessary because the types are so different\n return result;\n}\nfunction listProxy(context, objectId, path) {\n const target = {\n context,\n objectId,\n path: path || [],\n cache: {},\n };\n const proxied = [];\n Object.assign(proxied, target);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return new Proxy(proxied, ListHandler);\n}\nfunction listMethods(target) {\n const { context, objectId, path } = target;\n const methods = {\n at(index) {\n return valueAt(target, index);\n },\n deleteAt(index, numDelete) {\n if (typeof numDelete === \"number\") {\n context.splice(objectId, index, numDelete);\n }\n else {\n context.delete(objectId, index);\n }\n return this;\n },\n fill(val, start, end) {\n const [value, datatype] = import_value(val, [...path, start], context);\n const length = context.length(objectId);\n start = parseListIndex(start || 0);\n end = parseListIndex(end || length);\n for (let i = start; i < Math.min(end, length); i++) {\n if (datatype === \"list\" || datatype === \"map\") {\n context.putObject(objectId, i, value);\n }\n else if (datatype === \"text\") {\n context.putObject(objectId, i, value);\n }\n else {\n context.put(objectId, i, value, datatype);\n }\n }\n return this;\n },\n indexOf(searchElement, start = 0) {\n const length = context.length(objectId);\n for (let i = start; i < length; i++) {\n const valueWithType = context.getWithType(objectId, i);\n if (!valueWithType) {\n continue;\n }\n const [valType, value] = valueWithType;\n // Either the target element is an object, and we return if we have found\n // the same object or it is a primitive value and we return if it matches\n // the current value\n const isObject = [\"map\", \"list\", \"text\"].includes(valType);\n if (!isObject) {\n // If the element is not an object, then check if the value is equal to the target\n if (value === searchElement) {\n return i;\n }\n else {\n continue;\n }\n }\n // if it's an object, but the type of the search element is a string, then we\n // need to check if the object is a text object with the same value as the search element\n if (valType === \"text\" && typeof searchElement === \"string\") {\n if (searchElement === valueAt(target, i)) {\n return i;\n }\n }\n // The only possible match now is if the searchElement is an object already in the\n // automerge document with the same object ID as the value\n if (searchElement[OBJECT_ID] === value) {\n return i;\n }\n }\n return -1;\n },\n insertAt(index, ...values) {\n this.splice(index, 0, ...values);\n return this;\n },\n pop() {\n const length = context.length(objectId);\n if (length == 0) {\n return undefined;\n }\n const last = valueAt(target, length - 1);\n context.delete(objectId, length - 1);\n return last;\n },\n push(...values) {\n const len = context.length(objectId);\n this.splice(len, 0, ...values);\n return context.length(objectId);\n },\n shift() {\n if (context.length(objectId) == 0)\n return;\n const first = valueAt(target, 0);\n context.delete(objectId, 0);\n return first;\n },\n splice(index, del, ...vals) {\n index = parseListIndex(index);\n // if del is undefined, delete until the end of the list\n if (typeof del !== \"number\") {\n del = context.length(objectId) - index;\n }\n del = parseListIndex(del);\n for (const val of vals) {\n if (isSameDocument(val, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n }\n const result = [];\n for (let i = 0; i < del; i++) {\n const value = valueAt(target, index);\n if (value !== undefined) {\n result.push(value);\n }\n context.delete(objectId, index);\n }\n const values = vals.map((val, index) => {\n try {\n return import_value(val, [...path], context);\n }\n catch (e) {\n if (e instanceof RangeError) {\n throw new RangeError(`${e.message} (at index ${index} in the input)`);\n }\n else {\n throw e;\n }\n }\n });\n for (const [value, datatype] of values) {\n switch (datatype) {\n case \"list\": {\n const list = context.insertObject(objectId, index, []);\n const proxyList = listProxy(context, list, [...path, index]);\n proxyList.splice(0, 0, ...value);\n break;\n }\n case \"text\": {\n context.insertObject(objectId, index, value);\n break;\n }\n case \"map\": {\n const map = context.insertObject(objectId, index, {});\n const proxyMap = mapProxy(context, map, [...path, index]);\n for (const key in value) {\n proxyMap[key] = value[key];\n }\n break;\n }\n default:\n context.insert(objectId, index, value, datatype);\n }\n index += 1;\n }\n return result;\n },\n unshift(...values) {\n this.splice(0, 0, ...values);\n return context.length(objectId);\n },\n entries() {\n let i = 0;\n const iterator = {\n next: () => {\n const value = valueAt(target, i);\n if (value === undefined) {\n return { value: undefined, done: true };\n }\n else {\n return { value: [i++, value], done: false };\n }\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n },\n keys() {\n let i = 0;\n const len = context.length(objectId);\n const iterator = {\n next: () => {\n if (i < len) {\n return { value: i++, done: false };\n }\n return { value: undefined, done: true };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n },\n values() {\n let i = 0;\n const iterator = {\n next: () => {\n const value = valueAt(target, i++);\n if (value === undefined) {\n return { value: undefined, done: true };\n }\n else {\n return { value, done: false };\n }\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n },\n toArray() {\n const list = [];\n let value;\n do {\n value = valueAt(target, list.length);\n if (value !== undefined) {\n list.push(value);\n }\n } while (value !== undefined);\n return list;\n },\n map(f) {\n return this.toArray().map(f);\n },\n toString() {\n return this.toArray().toString();\n },\n toLocaleString() {\n return this.toArray().toLocaleString();\n },\n forEach(f) {\n return this.toArray().forEach(f);\n },\n // todo: real concat function is different\n concat(other) {\n return this.toArray().concat(other);\n },\n every(f) {\n return this.toArray().every(f);\n },\n filter(f) {\n return this.toArray().filter(f);\n },\n find(f) {\n let index = 0;\n for (const v of this) {\n if (f(v, index)) {\n return v;\n }\n index += 1;\n }\n },\n findIndex(f) {\n let index = 0;\n for (const v of this) {\n if (f(v, index)) {\n return index;\n }\n index += 1;\n }\n return -1;\n },\n includes(elem) {\n return this.find(e => e === elem) !== undefined;\n },\n join(sep) {\n return this.toArray().join(sep);\n },\n reduce(f, initialValue) {\n return this.toArray().reduce(f, initialValue);\n },\n reduceRight(f, initialValue) {\n return this.toArray().reduceRight(f, initialValue);\n },\n lastIndexOf(search, fromIndex = +Infinity) {\n // this can be faster\n return this.toArray().lastIndexOf(search, fromIndex);\n },\n slice(index, num) {\n return this.toArray().slice(index, num);\n },\n some(f) {\n let index = 0;\n for (const v of this) {\n if (f(v, index)) {\n return true;\n }\n index += 1;\n }\n return false;\n },\n [Symbol.iterator]: function* () {\n let i = 0;\n let value = valueAt(target, i);\n while (value !== undefined) {\n yield value;\n i += 1;\n value = valueAt(target, i);\n }\n },\n };\n return methods;\n}\nfunction textMethods(target) {\n const { context, objectId } = target;\n const methods = {\n set(index, value) {\n return (this[index] = value);\n },\n get(index) {\n return this[index];\n },\n toString() {\n return context.text(objectId).replace(//g, \"\");\n },\n toSpans() {\n const spans = [];\n let chars = \"\";\n const length = context.length(objectId);\n for (let i = 0; i < length; i++) {\n const value = this[i];\n if (typeof value === \"string\") {\n chars += value;\n }\n else {\n if (chars.length > 0) {\n spans.push(chars);\n chars = \"\";\n }\n spans.push(value);\n }\n }\n if (chars.length > 0) {\n spans.push(chars);\n }\n return spans;\n },\n toJSON() {\n return this.toString();\n },\n indexOf(o, start = 0) {\n const text = context.text(objectId);\n return text.indexOf(o, start);\n },\n insertAt(index, ...values) {\n if (values.every(v => typeof v === \"string\")) {\n context.splice(objectId, index, 0, values.join(\"\"));\n }\n else {\n listMethods(target).insertAt(index, ...values);\n }\n },\n };\n return methods;\n}\nfunction printPath(path) {\n // print the path as a json pointer\n const jsonPointerComponents = path.map(component => {\n // if its a number just turn it into a string\n if (typeof component === \"number\") {\n return component.toString();\n }\n else if (typeof component === \"string\") {\n // otherwise we have to escape `/` and `~` characters\n return component.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n }\n });\n if (path.length === 0) {\n return \"\";\n }\n else {\n return \"/\" + jsonPointerComponents.join(\"/\");\n }\n}\n/*\n * Check if an object is a {@link ImmutableString}\n */\nfunction isImmutableString(obj) {\n // We used to determine whether something was a ImmutableString by doing an instanceof check, but\n // this doesn't work if the automerge module is loaded twice somehow. Instead, use the presence\n // of a symbol to determine if something is a ImmutableString\n return (typeof obj === \"object\" &&\n obj !== null &&\n Object.prototype.hasOwnProperty.call(obj, IMMUTABLE_STRING));\n}\nfunction isCounter(obj) {\n // We used to determine whether something was a Counter by doing an instanceof check, but\n // this doesn't work if the automerge module is loaded twice somehow. Instead, use the presence\n // of a symbol to determine if something is a Counter\n return (typeof obj === \"object\" &&\n obj !== null &&\n Object.prototype.hasOwnProperty.call(obj, COUNTER));\n}\n\nlet wasm;\n\nconst cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } );\n\n(typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nconst cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );\n\nif (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }\n(typeof FinalizationRegistry === 'undefined')\n ? { }\n : new FinalizationRegistry(ptr => wasm.__wbg_automerge_free(ptr >>> 0, 1));\n\n(typeof FinalizationRegistry === 'undefined')\n ? { }\n : new FinalizationRegistry(ptr => wasm.__wbg_syncstate_free(ptr >>> 0, 1));\n\nfunction _state(doc, checkroot = true) {\n if (typeof doc !== \"object\") {\n throw new RangeError(\"must be the document root\");\n }\n const state = Reflect.get(doc, STATE);\n if (state === undefined ||\n state == null ||\n (checkroot && _obj(doc) !== \"_root\")) {\n throw new RangeError(\"must be the document root\");\n }\n return state;\n}\nfunction _clear_cache(doc) {\n Reflect.set(doc, CLEAR_CACHE, true);\n}\nfunction _obj(doc) {\n if (!(typeof doc === \"object\") || doc === null) {\n return null;\n }\n return Reflect.get(doc, OBJECT_ID);\n}\nfunction _is_proxy(doc) {\n return !!Reflect.get(doc, IS_PROXY);\n}\n\nfunction applyPatch(doc, patch) {\n let path = resolvePath(doc, patch.path);\n if (patch.action === \"put\") {\n applyPutPatch(doc, path, patch);\n }\n else if (patch.action === \"insert\") {\n applyInsertPatch(doc, path, patch);\n }\n else if (patch.action === \"del\") {\n applyDelPatch(doc, path, patch);\n }\n else if (patch.action === \"splice\") {\n applySplicePatch(doc, path, patch);\n }\n else if (patch.action === \"inc\") {\n applyIncPatch(doc, path, patch);\n }\n else if (patch.action === \"mark\") {\n applyMarkPatch(doc, path, patch);\n }\n else if (patch.action === \"unmark\") {\n applyUnmarkPatch(doc, path, patch);\n }\n else if (patch.action === \"conflict\") ;\n else {\n throw new RangeError(`unsupported patch: ${patch}`);\n }\n}\nfunction applyPutPatch(doc, path, patch) {\n let { obj: parent, prop } = pathElemAt(path, -1);\n parent[prop] = patch.value;\n}\nfunction applyInsertPatch(doc, path, patch) {\n let { obj: parent, prop } = pathElemAt(path, -1);\n if (!Array.isArray(parent)) {\n throw new RangeError(`target is not an array for patch`);\n }\n if (!(typeof prop === \"number\")) {\n throw new RangeError(`index is not a number for patch`);\n }\n parent.splice(prop, 0, ...patch.values);\n}\nfunction applyDelPatch(doc, path, patch) {\n let { obj: parent, prop, parentPath } = pathElemAt(path, -1);\n if (!(typeof prop === \"number\")) {\n throw new RangeError(`index is not a number for patch`);\n }\n if (Array.isArray(parent)) {\n parent.splice(prop, patch.length || 1);\n }\n else if (typeof parent === \"string\") {\n if (isAutomerge(doc)) {\n splice(doc, parentPath, prop, patch.length || 1);\n }\n else {\n let { obj: grandParent, prop: grandParentProp } = pathElemAt(path, -2);\n if (typeof prop !== \"number\") {\n throw new RangeError(`index is not a number for patch`);\n }\n let target = grandParent[grandParentProp];\n if (target == null || typeof target !== \"string\") {\n throw new RangeError(`target is not a string for patch`);\n }\n let newString = target.slice(0, prop) + target.slice(prop + (patch.length || 1));\n grandParent[grandParentProp] = newString;\n }\n }\n else {\n throw new RangeError(`target is not an array or string for patch`);\n }\n}\nfunction applySplicePatch(doc, path, patch) {\n if (isAutomerge(doc)) {\n let { obj: parent, prop, parentPath } = pathElemAt(path, -1);\n if (!(typeof prop === \"number\")) {\n throw new RangeError(`index is not a number for patch`);\n }\n splice(doc, parentPath, prop, 0, patch.value);\n }\n else {\n let { obj: parent, prop } = pathElemAt(path, -1);\n let { obj: grandParent, prop: grandParentProp } = pathElemAt(path, -2);\n if (typeof prop !== \"number\") {\n throw new RangeError(`index is not a number for patch`);\n }\n let target = grandParent[grandParentProp];\n if (target == null || typeof target !== \"string\") {\n throw new RangeError(`target is not a string for patch`);\n }\n let newString = target.slice(0, prop) + patch.value + target.slice(prop);\n grandParent[grandParentProp] = newString;\n }\n}\nfunction applyIncPatch(doc, path, patch) {\n let { obj: parent, prop } = pathElemAt(path, -1);\n const counter = parent[prop];\n if (isAutomerge(doc)) {\n if (!isCounter(counter)) {\n throw new RangeError(`target is not a counter for patch`);\n }\n counter.increment(patch.value);\n }\n else {\n if (!(typeof counter === \"number\")) {\n throw new RangeError(`target is not a number for patch`);\n }\n parent[prop] = counter + patch.value;\n }\n}\nfunction applyMarkPatch(doc, path, patch) {\n let { obj: parent, prop } = pathElemAt(path, -1);\n if (!isAutomerge(doc)) {\n return;\n }\n for (const markSpec of patch.marks) {\n mark(doc, patch.path, \n // TODO: add mark expansion to patches. This will require emitting\n // the expand values in patches.\n { start: markSpec.start, end: markSpec.end, expand: \"none\" }, markSpec.name, markSpec.value);\n }\n}\nfunction applyUnmarkPatch(doc, path, patch) {\n if (!isAutomerge(doc)) {\n return;\n }\n unmark(doc, patch.path, { start: patch.start, end: patch.end, expand: \"none\" }, patch.name);\n}\nfunction applyPatches(doc, patches) {\n for (const patch of patches) {\n applyPatch(doc, patch);\n }\n}\n/**\n * Walk through a path with an object and for each element in the path return a resolved path element.\n *\n * A resolved path element looks like this:\n *\n * ```typescript\n * {\n * obj: any, // The object that this element in the path is a property of\n * prop: Prop, // The property within `obj` that this path element points at\n * parentPath: Prop[] // The path to `obj` within the original `doc` passed to `resolvePath`\n * }\n * ````\n *\n * For example, given an object like this:\n *\n * ```typescript\n * {\n * todos: [{ task: \"remember the milk\"}]\n * }\n * ```\n *\n * Then `resolvePath(doc, [\"todos\", 0, \"task\"])` would return:\n *\n * ```typescript\n * [\n * { obj: { todos: [{ task: \"remember the milk\"}] }, prop: \"todos\", parentPath: [] },\n * { obj: [{ task: \"remember the milk\"}], prop: 0, parentPath: [\"todos\"] },\n * { obj: { task: \"remember the milk\" }, prop: \"task\", parentPath: [\"todos\", 0] }\n * ]\n * ```\n */\nfunction resolvePath(doc, path) {\n const result = [];\n let current = doc;\n let currentPath = [];\n for (const [index, prop] of path.entries()) {\n result.push({ obj: current, prop, parentPath: currentPath.slice() });\n currentPath.push(prop);\n if (index !== path.length - 1) {\n if (current == null || typeof current != \"object\") {\n // If we're not the last item in the path then we need the current\n // object to be an object so we can access it in the next iteration\n throw new Error(`Invalid path: ${path}`);\n }\n current = current[prop];\n }\n else {\n break;\n }\n }\n return result;\n}\n/**\n * Get an element from a resolved path, throwing an exception if the element does not exist\n *\n * @param resolved - The path to lookup in\n * @param index - The index of the element to lookup, negative indices search backwards\n */\nfunction pathElemAt(resolved, index) {\n let result = resolved.at(index);\n if (result == undefined) {\n throw new Error(\"invalid path\");\n }\n return result;\n}\n\n(undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nfunction cursorToIndex(state, value, index) {\n if (typeof index == \"string\") {\n if (/^-?[0-9]+@[0-9a-zA-Z]+$|^[se]$/.test(index)) {\n return state.handle.getCursorPosition(value, index);\n }\n else {\n throw new RangeError(\"index must be a number or cursor\");\n }\n }\n else {\n return index;\n }\n}\n/**\n * Return the object ID of an arbitrary javascript value\n *\n * This is useful to determine if something is actually an automerge document,\n * if `doc` is not an automerge document this will return null.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getObjectId(doc, prop) {\n {\n return _obj(doc);\n }\n}\n/**\n * Create a set of patches representing the change from one set of heads to another\n *\n * If either of the heads are missing from the document the returned set of patches will be empty\n */\nfunction diff(doc, before, after) {\n checkHeads(before, \"before\");\n checkHeads(after, \"after\");\n const state = _state(doc);\n if (state.mostRecentPatch &&\n equals(state.mostRecentPatch.before, before) &&\n equals(state.mostRecentPatch.after, after)) {\n return state.mostRecentPatch.patches;\n }\n return state.handle.diff(before, after);\n}\nfunction checkHeads(heads, fieldname) {\n if (!Array.isArray(heads)) {\n throw new Error(`${fieldname} must be an array`);\n }\n}\n/** @hidden */\n// FIXME : no tests\n// FIXME can we just use deep equals now?\nfunction equals(val1, val2) {\n if (!isObject(val1) || !isObject(val2))\n return val1 === val2;\n const keys1 = Object.keys(val1).sort(), keys2 = Object.keys(val2).sort();\n if (keys1.length !== keys2.length)\n return false;\n for (let i = 0; i < keys1.length; i++) {\n if (keys1[i] !== keys2[i])\n return false;\n if (!equals(val1[keys1[i]], val2[keys2[i]]))\n return false;\n }\n return true;\n}\n/**\n * Get the hashes of the heads of this document\n */\nfunction getHeads(doc) {\n const state = _state(doc);\n return state.heads || state.handle.getHeads();\n}\nfunction isAutomerge(doc) {\n if (typeof doc == \"object\" && doc !== null) {\n return getObjectId(doc) === \"_root\" && !!Reflect.get(doc, STATE);\n }\n else {\n return false;\n }\n}\nfunction isObject(obj) {\n return typeof obj === \"object\" && obj !== null;\n}\n/**\n * Modify a string\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to modify\n * @param path - The path to the string to modify\n * @param index - The position (as a {@link Cursor} or index) to edit.\n * If a cursor is used then the edit happens such that the cursor will\n * now point to the end of the newText, so you can continue to reuse\n * the same cursor for multiple calls to splice.\n * @param del - The number of code units to delete, a positive number\n * deletes N characters after the cursor, a negative number deletes\n * N characters before the cursor.\n * @param newText - The string to insert (if any).\n */\nfunction splice(doc, path, index, del, newText) {\n const objPath = absoluteObjPath(doc, path, \"splice\");\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const state = _state(doc, false);\n _clear_cache(doc);\n index = cursorToIndex(state, objPath, index);\n try {\n return state.handle.splice(objPath, index, del, newText);\n }\n catch (e) {\n throw new RangeError(`Cannot splice: ${e}`);\n }\n}\nfunction mark(doc, path, range, name, value) {\n const objPath = absoluteObjPath(doc, path, \"mark\");\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const state = _state(doc, false);\n try {\n return state.handle.mark(objPath, range, name, value);\n }\n catch (e) {\n throw new RangeError(`Cannot mark: ${e}`);\n }\n}\nfunction unmark(doc, path, range, name) {\n const objPath = absoluteObjPath(doc, path, \"unmark\");\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const state = _state(doc, false);\n try {\n return state.handle.unmark(objPath, range, name);\n }\n catch (e) {\n throw new RangeError(`Cannot unmark: ${e}`);\n }\n}\nfunction absoluteObjPath(doc, path, functionName) {\n path = path.slice();\n const objectId = _obj(doc);\n if (!objectId) {\n throw new RangeError(`invalid object for ${functionName}`);\n }\n path.unshift(objectId);\n return path.join(\"/\");\n}\n\nfunction autoproduce(payload) {\n return (doc) => applyPatches(doc, payload.patches);\n}\n\nconst cache = /* @__PURE__ */ new WeakMap();\nfunction initial(handle) {\n const template = {};\n applyPatches(template, diff(handle.doc(), [], getHeads(handle.doc())));\n return template;\n}\nfunction makeDocumentProjection(handle) {\n onCleanup(() => {\n const item = cache.get(handle);\n if (!item) return;\n if (!item.refs--) {\n item.cleanup();\n }\n });\n if (cache.has(handle)) {\n const item = cache.get(handle);\n item.refs++;\n return item.store;\n }\n const [doc, set] = createStore(initial(handle));\n cache.set(handle, {\n refs: 0,\n store: doc,\n cleanup() {\n handle.off(\"change\", patch);\n handle.off(\"delete\", ondelete);\n cache.delete(handle);\n }\n });\n function patch(payload) {\n set(produce(autoproduce(payload)));\n }\n function ondelete() {\n set(reconcile({}));\n }\n handle.on(\"change\", patch);\n handle.on(\"delete\", ondelete);\n return doc;\n}\n\nfunction createDocumentProjection(handle) {\n const projection = createMemo(() => {\n const unwrappedHandle = typeof handle == \"function\" ? handle() : handle;\n return unwrappedHandle && makeDocumentProjection(unwrappedHandle);\n });\n return projection;\n}\n\nconst RepoContext = createContext(\n null\n);\n\nconst readyStates = [\"ready\", \"deleted\", \"unavailable\"];\nconst badStates = [\"deleted\", \"unavailable\"];\nfunction useDocHandle(url, options) {\n const contextRepo = useContext(RepoContext);\n if (!options?.repo && !contextRepo) {\n throw new Error(\"use outside <RepoContext> requires options.repo\");\n }\n const repo = options?.repo || contextRepo;\n function getExistingHandle() {\n if (options?.[\"~skipInitialValue\"]) return void 0;\n const unwrappedURL = typeof url == \"function\" ? url() : url;\n if (!unwrappedURL) return void 0;\n try {\n const documentId = new URL(unwrappedURL).pathname;\n const existingHandle = repo.handles[documentId];\n if (existingHandle?.isReady()) {\n return existingHandle;\n }\n } catch (error) {\n console.error(\"Error parsing URL:\", error);\n }\n }\n const [handle, { mutate }] = createResource(\n url,\n async (url2) => {\n const handle2 = await repo.find(url2, {\n allowableStates: readyStates\n });\n const reject = (state) => Promise.reject(new Error(`document not available: [${state}]`));\n if (handle2.isReady()) {\n return handle2;\n } else if (handle2.inState(badStates)) {\n return reject(handle2.state);\n }\n return handle2.whenReady(readyStates).then(() => {\n if (handle2.isReady()) {\n return handle2;\n }\n return reject(handle2.state);\n });\n },\n {\n initialValue: getExistingHandle()\n }\n );\n createEffect(() => {\n const unwrappedURL = typeof url == \"function\" ? url() : url;\n if (!unwrappedURL) {\n mutate();\n }\n });\n return handle;\n}\n\nfunction useDocument(url, options) {\n const handle = useDocHandle(url, options);\n return [createDocumentProjection(handle), handle];\n}\n\nfunction makeDocSignal(handle) {\n const [signal, setSignal] = createSignal(handle.doc());\n function update() {\n setSignal(() => handle.doc());\n }\n handle.on(\"change\", update);\n onCleanup(() => handle.off(\"change\", update));\n return signal;\n}\n\nfunction createDocSignal(handle) {\n const [signal, setSignal] = createSignal(handle()?.doc());\n createEffect(() => {\n const h = handle();\n function update() {\n setSignal(() => h?.doc());\n }\n update();\n if (h) {\n h.on(\"change\", update);\n onCleanup(() => h.off(\"change\", update));\n }\n });\n return signal;\n}\n\nfunction useDocSignal(url, options) {\n const handle = useDocHandle(url, options);\n return [createDocSignal(handle), handle];\n}\n\nfunction useRepo() {\n const repo = useContext(RepoContext);\n if (!repo) throw new Error(\"Please wrap me in a <RepoContext value={repo}>\");\n return repo;\n}\n\nexport { RepoContext, autoproduce, createDocSignal, createDocumentProjection, makeDocSignal, makeDocumentProjection, useDocHandle, useDocSignal, useDocument, useRepo };\n//# sourceMappingURL=index.js.map\n","import { createSignal, onCleanup, onMount } from \"solid-js\";\nimport { createStore, reconcile } from \"solid-js/store\";\nimport { createDocumentProjection } from \"@automerge/automerge-repo-solid-primitives\";\nimport * as Providers from \"@inkandswitch/patchwork-providers\";\nfunction resolveElement(source) {\n return typeof source === \"function\" ? source() : source;\n}\n/**\n * Generic reactive request. Resolves the first value a provider emits for\n * `selector` (via the one-shot `request` helper) and returns an accessor that\n * reads `undefined` until then. `T` is the response type.\n */\nexport function request(element, selector) {\n const [value, setValue] = createSignal(undefined);\n onMount(() => {\n const target = resolveElement(element);\n if (!target)\n return;\n Providers.request(target, selector).then((v) => {\n if (v == null)\n return;\n setValue(() => v);\n });\n });\n return value;\n}\nexport function subscribe(element, selector, initialValue) {\n const [value, setValue] = createSignal(initialValue);\n onMount(() => {\n const target = resolveElement(element);\n if (!target)\n return;\n const unsubscribe = Providers.subscribe(target, selector, setValue);\n onCleanup(unsubscribe);\n });\n return value;\n}\n/**\n * Store-backed subscription. Use this when a consumer wants Solid's\n * fine-grained nested reactivity for incoming JSON object or array snapshots.\n * Requires an initial object/array so the store has a stable root.\n *\n * `reconcile` preserves stable object/array identity where possible, so this\n * helper is not a good fit when the top-level value is used as an identity key\n * for resources or memos.\n */\nexport function subscribeReconciled(element, selector, initialValue) {\n const [store, setStore] = createStore(initialValue);\n onMount(() => {\n const target = resolveElement(element);\n if (!target)\n return;\n const unsubscribe = Providers.subscribe(target, selector, (v) => {\n setStore(reconcile(v));\n });\n onCleanup(unsubscribe);\n });\n return store;\n}\n/**\n * Handle-specialized subscription. Use when the answering provider emits an\n * `AutomergeUrl`. The handle is recovered locally from the global repo\n * (`window.repo`), so it stays fully live — reads project reactively and writes go\n * straight back to the same repo. Returns `[doc, handle]` matching the shape\n * of solid-primitives' `useDocument`; both read `undefined` until the first\n * url arrives. `T` is the doc shape inside the handle.\n */\nexport function subscribeDoc(element, selector) {\n const [handle, setHandle] = createSignal(undefined);\n onMount(() => {\n const target = resolveElement(element);\n if (!target)\n return;\n let canceled = false;\n const unsubscribe = Providers.subscribe(target, selector, (url) => {\n if (!url)\n return;\n const repo = \"repo\" in window ? window.repo : undefined;\n if (!repo)\n return;\n void Promise.resolve(repo.find(url)).then((h) => {\n if (canceled)\n return;\n setHandle(() => h);\n });\n });\n onCleanup(() => {\n canceled = true;\n unsubscribe();\n });\n });\n const doc = createDocumentProjection(handle);\n return [doc, handle];\n}\n","import \"./styles.css\";\nimport {\n createEffect,\n createMemo,\n createSignal,\n For,\n onCleanup,\n Show,\n type Accessor,\n} from \"solid-js\";\nimport { createDocSignal } from \"solid-automerge\";\nimport type {\n AutomergeUrl,\n DocHandle,\n Repo,\n UrlHeads,\n} from \"@automerge/automerge-repo/slim\";\nimport { decodeHeads, encodeHeads } from \"@automerge/automerge-repo/slim\";\nimport * as Automerge from \"@automerge/automerge/slim\";\nimport { getRegistry, isLoadedPlugin } from \"@inkandswitch/patchwork-plugins\";\nimport {\n subscribe,\n subscribeDoc,\n} from \"@inkandswitch/patchwork-providers-solid\";\nimport type {\n CheckedOutDraft,\n CloneEntry,\n DraftCheckpoint,\n DraftDoc,\n DraftList,\n DraftMemberDoc,\n HasDrafts,\n} from \"./draft-types\";\n\n// Seed for the read-only `draft:list` subscription until the provider answers.\n// `main.url` is a placeholder; the Main card displays the host doc url instead.\nconst EMPTY_DRAFT_LIST: DraftList = {\n main: { url: \"\" as AutomergeUrl, members: [], childCount: 0, name: null },\n drafts: [],\n};\n\n// Bump on each deploy to eyeball whether the latest build has synced.\nconst DRAFTS_VERSION = \"0.0.18\";\n\n// Logged at module load so the console shows which build is running even\n// before the panel renders.\nconsole.log(`[drafts] DraftsSidebar v${DRAFTS_VERSION} loaded`);\n\n// A pause between consecutive changes longer than this starts a new group:\n// bursts of continuous editing read as a single row, however long they run,\n// and any minute-plus lull splits the timeline.\nconst INACTIVITY_GAP = 60 * 1000;\n\nexport function DraftsSidebar(props: { element: HTMLElement }) {\n const [hostDoc, hostDocHandle] = subscribeDoc<HasDrafts>(props.element, {\n type: \"draft:root-doc\",\n });\n\n // Selection only: which draft is checked out (writeable).\n const [, checkedOutHandle] = subscribeDoc<CheckedOutDraft>(props.element, {\n type: \"draft:checked-out\",\n });\n\n // Read the checkout doc coarsely from the live handle (handle.doc()) rather\n // than a fine-grained patch-replay projection: the projection can render a\n // whole-value write doubled, whereas handle.doc() is always the correct\n // materialized document.\n const checkedOut = createDocSignal(checkedOutHandle);\n const selected = createMemo<AutomergeUrl | null>(\n () => checkedOut()?.checkedOut ?? null\n );\n\n // Where the scrubber sits: the change whose heads are displayed. Ephemeral,\n // client-only state: the stored checkpoint (`checkedOut.at`) is what\n // actually pins the view; this mirrors it to render the token and the\n // group highlight. Not persisted, so it resets on reload (the pinned view\n // survives).\n const [scrubber, setScrubber] = createSignal<ScrubberState | null>(null);\n\n // A version being dragged out of a history timeline (from a group row or\n // the scrubber sticker). While set, the actions area shows a drop zone\n // that forks a new draft at that version; cleared on drop or dragend.\n const [dragVersion, setDragVersion] = createSignal<{\n members: DraftMemberDoc[];\n head: ChangeRef;\n } | null>(null);\n const [dropActive, setDropActive] = createSignal(false);\n\n // The derived drafts list (read-only): main plus each draft with its member\n // docs, recomputed and pushed by the provider.\n const list = subscribe<DraftList>(\n props.element,\n { type: \"draft:list\" },\n EMPTY_DRAFT_LIST\n );\n\n const isMainSelected = createMemo(() => selected() === null);\n // Drafting off a folder isn't supported yet, so creating a draft is disabled\n // while viewing a folder on Main.\n const isFolder = createMemo(\n () => hostDoc()?.[\"@patchwork\"]?.type === \"folder\"\n );\n\n const selectDraft = (url: AutomergeUrl | null) => {\n const handle = checkedOutHandle();\n if (!handle) return;\n setScrubber(null);\n handle.change((d) => {\n d.checkedOut = url;\n // Switching drafts (or to main) returns to the live latest heads.\n d.at = null;\n });\n };\n\n const getRepo = (): Repo | undefined =>\n \"repo\" in window ? window.repo : undefined;\n\n // Monotonic counter so a slow checkpoint computation can't overwrite a newer\n // scrub position (a drag fires one recompute per snapped change).\n let scrubSeq = 0;\n\n // Apply a scrubber position: freeze every member doc at its heads as of the\n // scrub head. The token and row highlight update immediately; the\n // checkpoint follows async. `draftUrl` is `null` for main.\n const onScrub = (\n draftUrl: AutomergeUrl | null,\n members: DraftMemberDoc[],\n scrub: ScrubberState\n ) => {\n const handle = checkedOutHandle();\n const repo = getRepo();\n if (!handle || !repo) return;\n setScrubber(scrub);\n const seq = ++scrubSeq;\n void (async () => {\n const checkpoint = await computeCheckpoint(repo, members, scrub.head);\n // A newer scrub landed while this one was computing; drop it.\n if (seq !== scrubSeq) return;\n handle.change((d) => {\n d.checkedOut = draftUrl;\n d.at = checkpoint;\n });\n })();\n };\n\n // Drop the time pin but stay on the same draft: back to live latest heads.\n const clearCheckpoint = () => {\n const handle = checkedOutHandle();\n if (!handle) return;\n setScrubber(null);\n handle.change((d) => {\n d.at = null;\n });\n };\n\n const onCreateDraft = async () => {\n if (isFolder()) return;\n const docHandle = hostDocHandle();\n if (!docHandle) return;\n const repo = getRepo();\n if (!repo) {\n console.warn(\"[drafts] window.repo is not set\");\n return;\n }\n\n // Top-level drafts branch off the main draft and live in its `drafts`\n // list. The main draft is created lazily the first time we draft this doc.\n const mainDraft = await ensureMainDraft(repo, docHandle);\n const draft = repo.create<DraftDoc>({\n \"@patchwork\": { type: \"draft\" },\n parent: mainDraft.url,\n drafts: [],\n clones: {},\n });\n mainDraft.change((d) => {\n d.drafts.push(draft.url);\n });\n selectDraft(draft.url);\n };\n\n // Resolve the host doc's single main draft, creating it (and pointing\n // `@patchwork.mainDraftUrl` at it) the first time. The main draft is\n // bookkeeping only: the list provider seeds its identity `clones`, and its\n // `drafts` holds the top-level draft list.\n const ensureMainDraft = async (\n repo: Repo,\n docHandle: DocHandle<HasDrafts>\n ): Promise<DocHandle<DraftDoc>> => {\n const existingUrl = docHandle.doc()?.[\"@patchwork\"]?.mainDraftUrl;\n if (existingUrl) return repo.find<DraftDoc>(existingUrl);\n\n const mainDraft = repo.create<DraftDoc>({\n \"@patchwork\": { type: \"draft\" },\n isMain: true,\n parent: docHandle.url,\n drafts: [],\n clones: {},\n });\n docHandle.change((d) => {\n // Mutate `@patchwork` in place. Spreading it into a fresh object and\n // reassigning would carry over references to existing document objects,\n // which Automerge rejects (\"Cannot create a reference to an existing\n // document object\").\n d[\"@patchwork\"]!.mainDraftUrl = mainDraft.url;\n });\n return mainDraft;\n };\n\n // Fork a new top-level draft off a historical version: every member doc is\n // cloned at the heads it had as of `head` (the dragged-out change), not at\n // the live latest. Pre-populating `DraftDoc.clones` here means the overlay's\n // lazy `resolveClone` reuses these entries instead of forking at current\n // heads. Members with no changes at or before the version (created later)\n // are left out; the version's docs don't reference them yet, so they are\n // normally never resolved beneath the draft.\n const onCreateDraftFromVersion = async (\n members: DraftMemberDoc[],\n head: ChangeRef\n ) => {\n if (isFolder()) return;\n const docHandle = hostDocHandle();\n if (!docHandle) return;\n const repo = getRepo();\n if (!repo) {\n console.warn(\"[drafts] window.repo is not set\");\n return;\n }\n\n // Reuse the scrub machinery to resolve per-doc heads at this version.\n const checkpoint = await computeCheckpoint(repo, members, head);\n\n const clones: Record<AutomergeUrl, CloneEntry> = {};\n for (const member of members) {\n const to = checkpoint[member.url]?.to;\n if (!to) continue;\n let handle: DocHandle<unknown> | null = null;\n try {\n // Clone the doc the timeline read its changes from (the draft's clone\n // when dragging out of a draft), pinned to the version's heads.\n // Keyed by the original url so baselines and merge-back resolve.\n handle = await repo.find<unknown>(member.cloneUrl ?? member.url);\n const clone = cloneAtVersion(repo, handle, to);\n clones[member.url] = { cloneUrl: clone.url, clonedAt: to };\n } catch (err) {\n reportForkFailure(\n handle ? collectForkDiagnostic(handle, member, to) : null,\n err\n );\n }\n }\n\n const mainDraft = await ensureMainDraft(repo, docHandle);\n const draft = repo.create<DraftDoc>({\n \"@patchwork\": { type: \"draft\" },\n parent: mainDraft.url,\n drafts: [],\n clones,\n });\n mainDraft.change((d) => {\n d.drafts.push(draft.url);\n });\n selectDraft(draft.url);\n };\n\n // Rename a draft, or main (`url === null`). Names live on the `DraftDoc`;\n // renaming main creates the main draft doc if this is the first draft-ish\n // action on the host doc. `null` clears back to the default label.\n const onRename = async (url: AutomergeUrl | null, name: string | null) => {\n const repo = getRepo();\n if (!repo) return;\n let handle: DocHandle<DraftDoc>;\n if (url === null) {\n const docHandle = hostDocHandle();\n if (!docHandle) return;\n handle = await ensureMainDraft(repo, docHandle);\n } else {\n handle = await repo.find<DraftDoc>(url);\n }\n handle.change((d) => {\n if (name) d.name = name;\n else delete d.name;\n });\n };\n\n const onMergeDraft = async () => {\n const draftUrl = selected();\n if (!draftUrl) return;\n if (!window.confirm(\"Merge this draft into the main document?\")) return;\n const repo = getRepo();\n if (!repo) {\n console.warn(\"[drafts] window.repo is not set\");\n return;\n }\n const draftHandle = await repo.find<DraftDoc>(draftUrl);\n await mergeDraft(repo, draftHandle);\n selectDraft(null);\n };\n\n return (\n <div class=\"drafts-panel\">\n <Show\n when={hostDoc()}\n fallback={<div class=\"drafts-empty\">No document selected.</div>}\n >\n <Show when={isMainSelected()}>\n <div class=\"drafts-actions drafts-actions--top\">\n <button\n class=\"drafts-btn drafts-btn--primary\"\n disabled={isFolder()}\n onClick={onCreateDraft}\n title={\n isFolder()\n ? \"Drafts aren't supported for folders yet\"\n : \"Create a new draft off this document\"\n }\n >\n New draft\n </button>\n <Show when={isFolder()}>\n <span class=\"drafts-hint\">\n Drafts aren't supported for folders yet.\n </span>\n </Show>\n </div>\n </Show>\n <div class=\"drafts-list\">\n <MainCard\n hostDocUrl={hostDocHandle()?.url}\n isSelected={isMainSelected()}\n members={() => list().main.members}\n name={list().main.name}\n onRename={(name) => void onRename(null, name)}\n onSelect={() => selectDraft(null)}\n onScrub={(scrub) => onScrub(null, list().main.members, scrub)}\n scrubber={() => (isMainSelected() ? scrubber() : null)}\n onDragVersion={(head) =>\n setDragVersion(\n head ? { members: list().main.members, head } : null\n )\n }\n hasCheckpoint={isMainSelected() && !!checkedOut()?.at}\n onReturnToLatest={clearCheckpoint}\n />\n <For each={list().drafts}>\n {(summary) => (\n <DraftCard\n url={summary.url}\n members={summary.members}\n mainDocUrl={hostDocHandle()?.url}\n isSelected={selected() === summary.url}\n name={summary.name}\n onRename={(name) => void onRename(summary.url, name)}\n onSelect={selectDraft}\n onScrub={(scrub) => onScrub(summary.url, summary.members, scrub)}\n scrubber={() =>\n selected() === summary.url ? scrubber() : null\n }\n onDragVersion={(head) =>\n setDragVersion(\n head ? { members: summary.members, head } : null\n )\n }\n hasCheckpoint={\n selected() === summary.url && !!checkedOut()?.at\n }\n onReturnToLatest={clearCheckpoint}\n />\n )}\n </For>\n </div>\n <div class=\"drafts-actions\">\n <Show when={dragVersion()}>\n <div\n class=\"drafts-dropzone\"\n data-over={dropActive() ? \"\" : undefined}\n onDragEnter={(e) => {\n e.preventDefault();\n setDropActive(true);\n }}\n onDragOver={(e) => {\n e.preventDefault();\n if (e.dataTransfer) e.dataTransfer.dropEffect = \"copy\";\n }}\n onDragLeave={() => setDropActive(false)}\n onDrop={(e) => {\n e.preventDefault();\n const version = dragVersion();\n setDropActive(false);\n setDragVersion(null);\n if (version) {\n void onCreateDraftFromVersion(version.members, version.head);\n }\n }}\n >\n Drop to fork a new draft from this version\n </div>\n </Show>\n <Show when={!isMainSelected()}>\n <button\n class=\"drafts-btn drafts-btn--warning\"\n onClick={onMergeDraft}\n title=\"Merge this draft into Main\"\n >\n Merge into Main\n </button>\n </Show>\n </div>\n </Show>\n <div class=\"drafts-version\">v{DRAFTS_VERSION}</div>\n </div>\n );\n}\n\n// Merges every cloned doc back into its original, recording per-clone\n// merge heads for auditing, and marks the draft as merged.\nasync function mergeDraft(\n repo: Repo,\n draftHandle: DocHandle<DraftDoc>\n): Promise<void> {\n const entries = Object.entries(draftHandle.doc()?.clones ?? {}) as [\n AutomergeUrl,\n CloneEntry,\n ][];\n for (const [originalUrl, entry] of entries) {\n if (entry.cloneUrl === originalUrl) continue;\n const [original, clone] = await Promise.all([\n repo.find<unknown>(originalUrl),\n repo.find<unknown>(entry.cloneUrl),\n ]);\n original.merge(clone);\n const mergedAt = original.heads();\n draftHandle.change((d) => {\n const e = d.clones[originalUrl];\n if (e) e.mergedAt = mergedAt;\n });\n }\n draftHandle.change((d) => {\n d.mergedAt = Date.now();\n });\n}\n\n// --- Cloning a member at a version -------------------------------------------\n// The obvious way — `repo.clone(handle.view(to))`, i.e. wasm `fork_at` — is\n// broken upstream: on documents whose history contains certain concurrent\n// merge changes (as anything synced through subduction ends up with),\n// `fork_at` panics with `MissingOps` in `ChangeCollector::from_build_meta`\n// at *any* heads, and the panic poisons the doc object for the rest of the\n// session (every later call throws \"recursive use of an object detected\").\n// Confirmed offline against automerge 3.3.0-fragments.1 and .2 with a\n// 26-change minimal repro.\n//\n// So the version clone is built without `fork_at`: collect the ancestor\n// closure of the pin heads from the change metadata, bundle exactly those\n// changes (`saveBundle`), hydrate a fresh doc from the bundle\n// (`loadIncremental`), and install it into a new repo handle — the same move\n// `repo.clone` performs internally, minus the panicking wasm path. The\n// resulting doc's heads are exactly `to`, it shares history with the\n// original, and merges back cleanly.\n\n// Build a clone of `handle`'s doc pinned to the `to` heads and register it\n// with the repo. Throws (a plain JS error, no wasm panic) when the pin's\n// ancestry can't be resolved from the doc's change metadata.\nfunction cloneAtVersion(\n repo: Repo,\n handle: DocHandle<unknown>,\n to: UrlHeads\n): DocHandle<unknown> {\n const doc = handle.doc() as Automerge.Doc<unknown>;\n const pinHeads = decodeHeads(to);\n\n // Ancestor closure of the pin heads, walked over the full change metadata.\n const metas = Automerge.getChangesMetaSince(doc, []);\n const byHash = new Map(metas.map((m) => [m.hash, m]));\n const closure = new Set<string>();\n const stack = [...pinHeads];\n while (stack.length > 0) {\n const hash = stack.pop()!;\n if (closure.has(hash)) continue;\n const meta = byHash.get(hash);\n if (!meta) {\n throw new Error(\n `[drafts] change ${hash} is not in the doc's history metadata`\n );\n }\n closure.add(hash);\n stack.push(...meta.deps);\n }\n\n const bundle = Automerge.saveBundle(doc, [...closure]);\n const pinned = Automerge.loadIncremental(\n Automerge.init<unknown>(),\n bundle\n );\n\n const gotHeads = [...Automerge.getHeads(pinned)].sort();\n const wantHeads = [...pinHeads].sort();\n if (JSON.stringify(gotHeads) !== JSON.stringify(wantHeads)) {\n throw new Error(\n `[drafts] version clone heads mismatch: wanted ${wantHeads}, got ${gotHeads}`\n );\n }\n\n const clone = repo.create<unknown>();\n clone.update(() => pinned);\n return clone;\n}\n\n// --- Fork-at-version diagnostics --------------------------------------------\n// When `cloneAtVersion` fails, everything we can learn about the member and\n// the pinned heads is dumped as one JSON block tagged\n// [drafts][fork-diagnostic]; paste that back when reporting.\n\n// Everything we could learn about the member and the pinned heads, plus the\n// final error.\ntype ForkDiagnostic = {\n draftsVersion: string;\n memberUrl: AutomergeUrl;\n sourceUrl: AutomergeUrl;\n memberClonedAt: UrlHeads | null;\n // The version being forked at, as url-encoded heads and as hex hashes.\n to: UrlHeads;\n toHex: string[];\n // The doc's live frontier (hex), for comparison with `toHex`.\n currentHeads: string[] | null;\n // Does the doc itself consider `toHex` a valid point in its history?\n hasHeads: boolean | null;\n // Change hashes the doc knows it is missing ops for, as of `toHex`.\n missingDeps: string[] | null;\n stats: { numChanges: number; numOps: number } | null;\n automerge: {\n jsGitHead: string;\n wasmGitHead: string | null;\n wasmVersion: string | null;\n } | null;\n // Where each pinned hash sits in the doc's history: its topological index,\n // metadata, and whether it is a live head. `known: false` means the doc has\n // no change with that hash at all.\n pinnedChanges: {\n hash: string;\n known: boolean;\n topoIndex: number | null;\n time: number | null;\n actor: string | null;\n seq: number | null;\n deps: string[] | null;\n isCurrentHead: boolean;\n }[];\n // Sedimentree fragment coverage: how the doc's history is bundled.\n // `topoRange` is the [min, max] topological index of the fragment's member\n // changes and `containsPin` whether a pinned hash is one of them — so a\n // fork-depth failure boundary can be read directly against bundle\n // boundaries. A pinned hash buried inside a higher-level bundle is the\n // prime MissingOps suspect.\n fragments:\n | {\n level: number;\n head: string;\n memberCount: number;\n topoRange: [number, number] | null;\n containsPin: boolean;\n }[]\n | null;\n probeErrors: string[];\n failure?: { message: string; stack?: string };\n};\n\n// The saved doc bytes captured before the failing fork, kept out of the JSON\n// report (too big) and exposed on `window.__draftsForkRepro` instead, so the\n// exact failing document can be reproduced offline.\ntype ForkRepro = {\n url: AutomergeUrl;\n toHex: string[];\n docBase64: string;\n};\n\n// Snapshot everything we can read about `handle`'s doc and the pinned heads.\n// Every probe is individually guarded so one bad call doesn't lose the rest.\nfunction collectForkDiagnostic(\n handle: DocHandle<unknown>,\n member: DraftMemberDoc,\n to: UrlHeads\n): ForkDiagnostic {\n const diagnostic: ForkDiagnostic = {\n draftsVersion: DRAFTS_VERSION,\n memberUrl: member.url,\n sourceUrl: member.cloneUrl ?? member.url,\n memberClonedAt: member.clonedAt,\n to,\n toHex: [],\n currentHeads: null,\n hasHeads: null,\n missingDeps: null,\n stats: null,\n automerge: null,\n pinnedChanges: [],\n fragments: null,\n probeErrors: [],\n };\n const probe = (name: string, run: () => void) => {\n try {\n run();\n } catch (err) {\n diagnostic.probeErrors.push(`${name}: ${String(err)}`);\n }\n };\n\n probe(\"decodeHeads\", () => {\n diagnostic.toHex = decodeHeads(to);\n });\n\n const doc = handle.doc() as Automerge.Doc<unknown>;\n\n probe(\"getHeads\", () => {\n diagnostic.currentHeads = Automerge.getHeads(doc);\n });\n probe(\"hasHeads\", () => {\n diagnostic.hasHeads = Automerge.hasHeads(doc, diagnostic.toHex);\n });\n probe(\"getMissingDeps\", () => {\n diagnostic.missingDeps = Automerge.getMissingDeps(doc, diagnostic.toHex);\n });\n probe(\"stats\", () => {\n const s = Automerge.stats(doc);\n diagnostic.stats = { numChanges: s.numChanges, numOps: s.numOps };\n });\n probe(\"releaseInfo\", () => {\n const info = Automerge.releaseInfo();\n diagnostic.automerge = {\n jsGitHead: info.js.gitHead,\n wasmGitHead: info.wasm?.gitHead ?? null,\n wasmVersion: info.wasm?.cargoPackageVersion ?? null,\n };\n });\n probe(\"pinnedChanges\", () => {\n const topo = Automerge.topoHistoryTraversal(doc);\n const metas = Automerge.getChangesMetaSince(doc, []);\n const metaByHash = new Map(metas.map((m) => [m.hash, m]));\n diagnostic.pinnedChanges = diagnostic.toHex.map((hash) => {\n const meta = metaByHash.get(hash);\n const topoIndex = topo.indexOf(hash);\n return {\n hash,\n known: !!meta || topoIndex >= 0,\n topoIndex: topoIndex >= 0 ? topoIndex : null,\n time: meta?.time ?? null,\n actor: meta?.actor ?? null,\n seq: meta?.seq ?? null,\n deps: meta?.deps ?? null,\n isCurrentHead: diagnostic.currentHeads?.includes(hash) ?? false,\n };\n });\n });\n probe(\"fragments\", () => {\n const topo = Automerge.topoHistoryTraversal(doc);\n const topoIndex = new Map(topo.map((h, i) => [h, i]));\n const pinned = new Set(diagnostic.toHex);\n diagnostic.fragments = Automerge.getFragmentMetadata(doc).map((f) => {\n let min = Infinity;\n let max = -Infinity;\n let containsPin = false;\n for (const h of f.members) {\n const i = topoIndex.get(h);\n if (i !== undefined) {\n if (i < min) min = i;\n if (i > max) max = i;\n }\n if (pinned.has(h)) containsPin = true;\n }\n return {\n level: f.level,\n head: f.head,\n memberCount: f.members.length,\n topoRange:\n min <= max ? ([min, max] as [number, number]) : null,\n containsPin,\n };\n });\n });\n probe(\"saveDoc\", () => {\n // Capture the full doc bytes for an offline repro; published to\n // `window.__draftsForkRepro` by `reportForkFailure`.\n const bytes = Automerge.save(doc);\n let binary = \"\";\n const CHUNK = 0x8000;\n for (let i = 0; i < bytes.length; i += CHUNK) {\n binary += String.fromCharCode(...bytes.subarray(i, i + CHUNK));\n }\n lastForkRepro = {\n url: member.url,\n toHex: diagnostic.toHex,\n docBase64: btoa(binary),\n };\n });\n\n return diagnostic;\n}\n\n// The most recent member's saved bytes, captured by `collectForkDiagnostic`\n// and published by `reportForkFailure` when its member's fork fails.\nlet lastForkRepro: ForkRepro | null = null;\n\n// Dump the diagnostic and the error as one copy-pasteable JSON block.\nfunction reportForkFailure(\n diagnostic: ForkDiagnostic | null,\n err: unknown\n): void {\n const failure = {\n message: err instanceof Error ? err.message : String(err),\n stack: err instanceof Error ? err.stack : undefined,\n };\n if (!diagnostic) {\n console.error(\n \"[drafts][fork-diagnostic] failed before diagnostics could be gathered:\",\n failure\n );\n return;\n }\n diagnostic.failure = failure;\n if (lastForkRepro && lastForkRepro.url === diagnostic.memberUrl) {\n (window as unknown as Record<string, unknown>).__draftsForkRepro =\n lastForkRepro;\n }\n console.error(\n \"[drafts][fork-diagnostic] failed to fork member at version — paste this block back:\\n\" +\n JSON.stringify(diagnostic, null, 2) +\n \"\\n[drafts][fork-diagnostic] the failing doc's bytes are on \" +\n \"window.__draftsForkRepro — to save them for an offline repro, run:\\n\" +\n \" const r = window.__draftsForkRepro;\\n\" +\n \" const bytes = Uint8Array.from(atob(r.docBase64), c => c.charCodeAt(0));\\n\" +\n \" const a = document.createElement('a');\\n\" +\n \" a.href = URL.createObjectURL(new Blob([bytes]));\\n\" +\n \" a.download = 'fork-repro.automerge'; a.click();\\n\" +\n \" console.log('pin heads:', r.toHex);\"\n );\n}\n\nfunction MainCard(props: {\n hostDocUrl: AutomergeUrl | undefined;\n isSelected: boolean;\n members: Accessor<DraftMemberDoc[]>;\n name: string | null;\n onRename: (name: string | null) => void;\n onSelect: () => void;\n onScrub: (scrub: ScrubberState) => void;\n scrubber: Accessor<ScrubberState | null>;\n onDragVersion: (head: ChangeRef | null) => void;\n hasCheckpoint: boolean;\n onReturnToLatest: () => void;\n}) {\n return (\n <div class=\"draft-card\" data-selected={props.isSelected ? \"\" : undefined}>\n {/* A div, not a <button>: the rename input rendered inside would be\n invalid (and misbehave) nested in a button. */}\n <div\n class=\"draft-card-header\"\n onClick={props.onSelect}\n title=\"Main version (host document)\"\n >\n <div class=\"draft-card-title\">\n <DraftName\n name={props.name}\n fallback=\"Main\"\n onRename={props.onRename}\n />\n <Show when={props.isSelected}>\n <span class=\"draft-badge\">current</span>\n </Show>\n </div>\n </div>\n <Show when={props.isSelected}>\n <DraftChangesList\n members={props.members}\n mainDocUrl={props.hostDocUrl}\n onScrub={props.onScrub}\n scrubber={props.scrubber}\n onDragVersion={props.onDragVersion}\n />\n <ReturnToLatestButton\n visible={props.hasCheckpoint}\n onClick={props.onReturnToLatest}\n />\n </Show>\n </div>\n );\n}\n\nfunction DraftCard(props: {\n url: AutomergeUrl;\n members: DraftMemberDoc[];\n mainDocUrl: AutomergeUrl | undefined;\n isSelected: boolean;\n name: string | null;\n onRename: (name: string | null) => void;\n onSelect: (url: AutomergeUrl) => void;\n onScrub: (scrub: ScrubberState) => void;\n scrubber: Accessor<ScrubberState | null>;\n onDragVersion: (head: ChangeRef | null) => void;\n hasCheckpoint: boolean;\n onReturnToLatest: () => void;\n}) {\n return (\n <div class=\"draft-card\" data-selected={props.isSelected ? \"\" : undefined}>\n {/* A div, not a <button>: see MainCard. */}\n <div\n class=\"draft-card-header\"\n onClick={() => props.onSelect(props.url)}\n title=\"Open draft\"\n >\n <div class=\"draft-card-title\">\n <DraftName\n name={props.name}\n fallback=\"Draft\"\n onRename={props.onRename}\n />\n <Show when={props.isSelected}>\n <span class=\"draft-badge\">current</span>\n </Show>\n </div>\n </div>\n <Show when={props.isSelected}>\n <DraftChangesList\n members={() => props.members}\n mainDocUrl={props.mainDocUrl}\n onScrub={props.onScrub}\n scrubber={props.scrubber}\n onDragVersion={props.onDragVersion}\n />\n <ReturnToLatestButton\n visible={props.hasCheckpoint}\n onClick={props.onReturnToLatest}\n />\n </Show>\n </div>\n );\n}\n\n// Card footer shown while the card's timeline is pinned to a checkpoint:\n// drops the time pin and returns the view to the live latest heads. Rendered\n// outside the scrollable changes area so it never scrolls out of reach.\nfunction ReturnToLatestButton(props: { visible: boolean; onClick: () => void }) {\n return (\n <Show when={props.visible}>\n <button\n type=\"button\"\n class=\"draft-card-return\"\n onClick={props.onClick}\n title=\"Return to the latest version\"\n >\n Return to latest\n </button>\n </Show>\n );\n}\n\n// A card's display name. Double-click to rename inline: Enter or clicking\n// away commits, Escape cancels, and committing an empty value clears the\n// name back to the default label.\nfunction DraftName(props: {\n name: string | null;\n fallback: string;\n onRename: (name: string | null) => void;\n}) {\n const [editing, setEditing] = createSignal(false);\n return (\n <Show\n when={editing()}\n fallback={\n <span\n class=\"draft-name\"\n title=\"Double-click to rename\"\n onDblClick={() => setEditing(true)}\n >\n {props.name ?? props.fallback}\n </span>\n }\n >\n <input\n class=\"draft-name-input\"\n value={props.name ?? \"\"}\n placeholder={props.fallback}\n // Focus once mounted; the ref fires before insertion, hence the tick.\n ref={(el) => setTimeout(() => el.select())}\n onClick={(e) => e.stopPropagation()}\n onDblClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") e.currentTarget.blur();\n if (e.key === \"Escape\") setEditing(false);\n }}\n onBlur={(e) => {\n if (!editing()) return; // already cancelled via Escape\n setEditing(false);\n const value = e.currentTarget.value.trim();\n if (value !== (props.name ?? \"\")) props.onRename(value || null);\n }}\n />\n </Show>\n );\n}\n\n// One change in the interleaved timeline. `docUrl` is the original member url\n// (used for labelling and as the checkpoint anchor), never the per-draft clone\n// the change was read from. `title` is the source document's display title.\n// `seq` is the change's per-document causal index, used only to break\n// timestamp ties (see `collectInterleavedChanges`). `additions`/`deletions`\n// are the change's rough edit magnitude, aggregated for the group +/- counts.\ntype DraftChange = {\n docUrl: AutomergeUrl;\n title: string;\n hash: string;\n // Automerge change time, in SECONDS (multiply by 1000 for a JS Date).\n time: number;\n actor: string;\n message: string | null;\n seq: number;\n additions: number;\n deletions: number;\n};\n\n// One burst of activity: consecutive changes separated by no more than\n// INACTIVITY_GAP, regardless of author or document. Rendered as a single\n// non-expandable row. Clicking it parks the scrubber at `newest`.\ntype TimeGroup = {\n id: string;\n endTime: number;\n actors: string[];\n additions: number;\n deletions: number;\n newest: DraftChange;\n changes: DraftChange[];\n};\n\n// A reference to one change in the interleaved timeline, by document and\n// hash. `time` steers how the *other* member docs' heads are resolved around\n// it (see `computeCheckpoint`).\ntype ChangeRef = {\n docUrl: AutomergeUrl;\n hash: string;\n time: number;\n};\n\n// Where the scrubber sits: the change whose heads the view displays. The\n// head is anchored by change identity rather than index so a recomputed\n// timeline doesn't move the token.\ntype ScrubberState = {\n head: ChangeRef;\n};\n\n// Strip a timeline change down to the fields that identify it for scrubbing.\nfunction changeRef(change: DraftChange): ChangeRef {\n return { docUrl: change.docUrl, hash: change.hash, time: change.time };\n}\n\n// Renders a draft's (or main's) changes as a timeline of activity groups:\n// every member doc's changes interleaved newest first, then split wherever\n// the editing paused for INACTIVITY_GAP (see `groupChanges`). A gutter on\n// the left spans the whole history (top = latest change, bottom = first);\n// the indicator — a calendar-style dot + line — marks the version being\n// looked at. Its line paints *under* the (semi-transparent) group rows;\n// dragging starts only from its handles in the gutter. While pinned, a\n// sticker overlays the row at the head with the exact change the line sits\n// on. The member set is passed in (from the card's `DraftSummary`); the\n// effect below keeps the timeline live as those docs edit.\nfunction DraftChangesList(props: {\n members: Accessor<DraftMemberDoc[]>;\n mainDocUrl: AutomergeUrl | undefined;\n onScrub: (scrub: ScrubberState) => void;\n scrubber: Accessor<ScrubberState | null>;\n onDragVersion: (head: ChangeRef | null) => void;\n}) {\n const [changes, setChanges] = createSignal<DraftChange[]>([]);\n\n // Whenever the member set changes, resolve a handle per member, listen for\n // edits so the timeline stays live, and recompute. A `disposed` flag guards\n // against the async resolution landing after the effect was torn down.\n createEffect(() => {\n const list = props.members();\n const mainDocUrl = props.mainDocUrl;\n const repo = \"repo\" in window ? window.repo : undefined;\n if (!repo) return;\n\n let disposed = false;\n const listeners: { handle: DocHandle<unknown>; onChange: () => void }[] =\n [];\n\n const recompute = async () => {\n const next = await collectInterleavedChanges(repo, list, mainDocUrl);\n if (!disposed) setChanges(next);\n };\n\n void (async () => {\n for (const member of list) {\n const handle = await repo.find<unknown>(member.cloneUrl ?? member.url);\n if (disposed) return;\n const onChange = () => void recompute();\n handle.on(\"change\", onChange);\n listeners.push({ handle, onChange });\n }\n void recompute();\n })();\n\n onCleanup(() => {\n disposed = true;\n for (const { handle, onChange } of listeners) {\n handle.off(\"change\", onChange);\n }\n });\n });\n\n // The flat, newest-first history folded into activity groups for rendering.\n // Groups whose changes carry no edits (metadata-only churn — zero +/-\n // counts) are dropped from the timeline entirely.\n const timeGroups = createMemo(() =>\n groupChanges(changes()).filter((g) => g.additions > 0 || g.deletions > 0)\n );\n\n // The scrubbable timeline: the visible groups' changes flattened\n // newest-first. All scrubber indices refer to this list, so it must stay\n // consistent with the rendered rows (not the raw, unfiltered history).\n const visibleChanges = createMemo(() =>\n timeGroups().flatMap((g) => g.changes)\n );\n\n // Scrub so the head sits at the timeline change at `headIndex` (global,\n // 0 = newest).\n const scrubTo = (headIndex: number) => {\n const head = visibleChanges()[headIndex];\n if (!head) return;\n props.onScrub({ head: changeRef(head) });\n };\n\n // Jump the scrubber to a group: head at the group's newest change.\n const scrubToGroup = (group: TimeGroup) => {\n props.onScrub({ head: changeRef(group.newest) });\n };\n\n // Where the scrubber head sits in the flat timeline; null when nothing is\n // pinned (live latest) or the anchored change vanished from a recompute.\n const headIndex = createMemo<number | null>(() => {\n const s = props.scrubber();\n if (!s) return null;\n const idx = visibleChanges().findIndex(\n (c) => c.hash === s.head.hash && c.docUrl === s.head.docUrl\n );\n return idx >= 0 ? idx : null;\n });\n\n const groupContainsHead = (group: TimeGroup): boolean => {\n const s = props.scrubber();\n return (\n !!s &&\n group.changes.some(\n (c) => c.hash === s.head.hash && c.docUrl === s.head.docUrl\n )\n );\n };\n\n // --- Scrubber geometry ---------------------------------------------------\n // The track mirrors the rows column: each group row is one vertical band,\n // and the group's changes distribute evenly across the band's height, so\n // every individual change — including ones in the middle of a group — is a\n // valid stop for the token, not just group boundaries.\n const rowEls = new Map<string, HTMLElement>();\n const [rowsEl, setRowsEl] = createSignal<HTMLDivElement>();\n // Bumped after layout changes so `bands` re-measures the rendered rows.\n const [measureTick, setMeasureTick] = createSignal(0);\n\n createEffect(() => {\n const el = rowsEl();\n if (!el) return;\n const observer = new ResizeObserver(() => setMeasureTick((t) => t + 1));\n observer.observe(el);\n onCleanup(() => observer.disconnect());\n });\n\n // Rows render after the groups memo recomputes, so measure again on the\n // next frame once the DOM has settled.\n createEffect(() => {\n timeGroups();\n requestAnimationFrame(() => setMeasureTick((t) => t + 1));\n });\n\n type Band = {\n startIndex: number;\n count: number;\n top: number;\n height: number;\n };\n const bands = createMemo<Band[]>(() => {\n measureTick();\n const out: Band[] = [];\n let index = 0;\n for (const group of timeGroups()) {\n const el = rowEls.get(group.id);\n if (el) {\n out.push({\n startIndex: index,\n count: group.changes.length,\n top: el.offsetTop,\n height: el.offsetHeight,\n });\n }\n index += group.changes.length;\n }\n return out;\n });\n\n // Map a global change index to a y offset in the track. Indices interpolate\n // across their group's band; an index past the oldest change maps to the\n // very bottom.\n const yForIndex = (index: number): number => {\n const bs = bands();\n if (bs.length === 0) return 0;\n for (const b of bs) {\n if (index < b.startIndex + b.count) {\n return b.top + ((index - b.startIndex) / b.count) * b.height;\n }\n }\n const last = bs[bs.length - 1];\n return last.top + last.height;\n };\n\n // Inverse: the change index nearest a pointer y (in track coordinates).\n const indexForY = (y: number): number => {\n const bs = bands();\n if (bs.length === 0) return 0;\n for (const b of bs) {\n if (y < b.top) return b.startIndex;\n if (y < b.top + b.height) {\n const idx =\n b.startIndex + Math.round(((y - b.top) / b.height) * b.count);\n return Math.min(idx, b.startIndex + b.count - 1);\n }\n }\n const last = bs[bs.length - 1];\n return Math.max(0, last.startIndex + last.count - 1);\n };\n\n // The indicator's pixel position: the head line's y in the track. The\n // zero-height box is fine — the dot and line overflow it and stay\n // grabbable. With nothing pinned it idles at the very top — you're looking\n // at the live latest.\n const tokenGeometry = createMemo(() => {\n if (visibleChanges().length === 0 || bands().length === 0) return null;\n return { top: yForIndex(headIndex() ?? 0) };\n });\n\n let trackEl: HTMLDivElement | undefined;\n\n // Pointer y relative to the track's top edge. The rect is re-read per event\n // so scrolling the card mid-drag stays accurate.\n const yInTrack = (ev: PointerEvent): number => {\n const rect = trackEl!.getBoundingClientRect();\n return ev.clientY - rect.top;\n };\n\n // Begin an indicator drag: the head follows the pointer (offset by where\n // the indicator was grabbed). Scrubbing starts only from the indicator's\n // own handles (dot, line) — the bare gutter and the rows don't scrub.\n // Every position snaps to an individual change, so the indicator can rest\n // anywhere in history — between groups or in the middle of one.\n const beginDrag = (ev: PointerEvent) => {\n if (!trackEl || visibleChanges().length === 0) return;\n ev.preventDefault();\n ev.stopPropagation();\n const grabOffset = yInTrack(ev) - yForIndex(headIndex() ?? 0);\n\n let last = headIndex() ?? 0;\n const onMove = (e: PointerEvent) => {\n const head = indexForY(yInTrack(e) - grabOffset);\n if (head === last) return;\n last = head;\n scrubTo(head);\n };\n\n const target = ev.currentTarget as HTMLElement;\n target.setPointerCapture(ev.pointerId);\n const onUp = () => {\n target.removeEventListener(\"pointermove\", onMove);\n target.removeEventListener(\"pointerup\", onUp);\n target.removeEventListener(\"pointercancel\", onUp);\n };\n target.addEventListener(\"pointermove\", onMove);\n target.addEventListener(\"pointerup\", onUp);\n target.addEventListener(\"pointercancel\", onUp);\n };\n\n // Start a native drag carrying a version out of the timeline. The payload\n // rides in a component signal (source and drop zone share the panel);\n // dataTransfer is only set so the browser actually starts the drag.\n const beginVersionDrag = (ev: DragEvent, head: ChangeRef) => {\n if (!ev.dataTransfer) return;\n ev.dataTransfer.setData(\"text/plain\", `${head.docUrl}#${head.hash}`);\n ev.dataTransfer.effectAllowed = \"copy\";\n props.onDragVersion(head);\n };\n\n // The exact change the scrubber head sits on; feeds the sticker that\n // overlays the group row with the version being looked at. It is\n // suppressed when the head sits exactly on a group's newest change (the\n // row already shows that version).\n const headChange = createMemo<DraftChange | null>(() => {\n const idx = headIndex();\n const change = idx === null ? null : (visibleChanges()[idx] ?? null);\n if (!change) return null;\n const atGroupStart = timeGroups().some(\n (g) => g.newest.hash === change.hash && g.newest.docUrl === change.docUrl\n );\n return atGroupStart ? null : change;\n });\n\n return (\n <div class=\"draft-card-changes\">\n <Show\n when={timeGroups().length > 0}\n fallback={<div class=\"draft-changes-empty\">No changes yet.</div>}\n >\n <div class=\"draft-changes-body\">\n <div class=\"draft-scrubber\" ref={trackEl} />\n <div class=\"draft-changes-rows\" ref={setRowsEl}>\n <For each={timeGroups()}>\n {(group) => (\n <TimeGroupRow\n group={group}\n rowRef={(el) => rowEls.set(group.id, el)}\n isSelected={groupContainsHead(group)}\n onSelect={() => scrubToGroup(group)}\n onVersionDragStart={(e) =>\n beginVersionDrag(e, changeRef(group.newest))\n }\n onVersionDragEnd={() => props.onDragVersion(null)}\n />\n )}\n </For>\n </div>\n <Show when={tokenGeometry()}>\n <div\n class=\"draft-scrubber-token\"\n data-live={headIndex() === null ? \"\" : undefined}\n style={{ top: `${tokenGeometry()!.top}px` }}\n >\n {/* The head line, painted under the group rows. */}\n <div class=\"draft-scrubber-line\" />\n {/* Grab handle, confined to the gutter. */}\n <div\n class=\"draft-scrubber-edge\"\n title=\"Drag to scrub through history\"\n onPointerDown={beginDrag}\n />\n <div\n class=\"draft-scrubber-dot\"\n title=\"Drag to scrub through history\"\n onPointerDown={beginDrag}\n />\n {/* Pinned inside a group: overlay the row with the exact\n version the head sits on. Draggable — dragging it out forks\n a new draft at that version. */}\n <Show when={headChange()}>\n {(change) => (\n <div\n class=\"draft-scrubber-sticker\"\n draggable={true}\n title=\"Drag out to fork a new draft from this version\"\n onDragStart={(e) =>\n beginVersionDrag(e, changeRef(change()))\n }\n onDragEnd={() => props.onDragVersion(null)}\n >\n <span class=\"draft-sticker-time\">\n {formatTime(change().time)}\n </span>\n <span class=\"draft-sticker-title\">{change().title}</span>\n <span class=\"draft-sticker-spacer\" />\n <EditCounts\n additions={change().additions}\n deletions={change().deletions}\n />\n </div>\n )}\n </Show>\n </div>\n </Show>\n </div>\n </Show>\n </div>\n );\n}\n\n// One time group, rendered as a single non-expandable row: author avatars,\n// the group's newest timestamp, and the aggregated +/- counts. Clicking the\n// row parks the scrubber at the top of the group. The row highlights while\n// the scrubber head sits inside the group. Dragging the row out forks a new\n// draft at the group's newest change (the same version clicking pins);\n// dragstart only fires past the movement threshold, so click-to-select is\n// unaffected.\nfunction TimeGroupRow(props: {\n group: TimeGroup;\n rowRef: (el: HTMLElement) => void;\n isSelected: boolean;\n onSelect: () => void;\n onVersionDragStart: (e: DragEvent) => void;\n onVersionDragEnd: () => void;\n}) {\n return (\n <button\n type=\"button\"\n class=\"draft-group-row\"\n ref={props.rowRef}\n data-selected={props.isSelected ? \"\" : undefined}\n title=\"View the draft as of this group — drag out to fork a draft from it\"\n onClick={props.onSelect}\n draggable={true}\n onDragStart={props.onVersionDragStart}\n onDragEnd={props.onVersionDragEnd}\n >\n <AuthorAvatars actors={props.group.actors} />\n <span class=\"draft-group-time\">{formatTime(props.group.endTime)}</span>\n <span class=\"draft-group-spacer\" />\n <EditCounts\n additions={props.group.additions}\n deletions={props.group.deletions}\n />\n </button>\n );\n}\n\n// A stack of author avatars (deduped), newest-contributor first.\nfunction AuthorAvatars(props: { actors: string[] }) {\n const visible = () => props.actors.slice(0, 3);\n const extra = () => Math.max(0, props.actors.length - 3);\n return (\n <div class=\"draft-avatars\">\n <For each={visible()}>\n {(actor, i) => (\n <div\n class=\"draft-avatar\"\n title={actor}\n style={{\n background: authorColor(actor),\n \"margin-left\": i() === 0 ? \"0\" : \"-4px\",\n \"z-index\": String(visible().length - i()),\n }}\n >\n {getInitials(actor)}\n </div>\n )}\n </For>\n <Show when={extra() > 0}>\n <div class=\"draft-avatar draft-avatar--extra\">+{extra()}</div>\n </Show>\n </div>\n );\n}\n\n// The +N / -N edit-size counts shown at the end of a group row.\nfunction EditCounts(props: { additions: number; deletions: number }) {\n return (\n <span class=\"draft-counts\">\n <Show when={props.additions > 0}>\n <span class=\"draft-count draft-count--add\">+{props.additions}</span>\n </Show>\n <Show when={props.deletions > 0}>\n <span class=\"draft-count draft-count--del\">-{props.deletions}</span>\n </Show>\n </span>\n );\n}\n\n// Fold a flat, newest-first list of changes into activity groups. Consecutive\n// changes stay in the same group while the pause between them is at most\n// INACTIVITY_GAP; a longer lull starts a new group. A group can span any\n// stretch of continuous editing — only inactivity splits it.\nfunction groupChanges(changes: DraftChange[]): TimeGroup[] {\n const timeGroups: TimeGroup[] = [];\n let window: DraftChange[] = [];\n let prevTimeMs: number | null = null;\n\n const flush = () => {\n if (window.length > 0) {\n timeGroups.push(buildTimeGroup(window));\n window = [];\n }\n };\n\n for (const change of changes) {\n const timeMs = change.time * 1000;\n // Rows arrive newest-first, so the previous row is this change's newer\n // neighbour; a gap larger than the threshold between them is a lull.\n if (prevTimeMs !== null && prevTimeMs - timeMs > INACTIVITY_GAP) flush();\n window.push(change);\n prevTimeMs = timeMs;\n }\n flush();\n\n return timeGroups;\n}\n\n// Build one group from a window of newest-first changes: dedupe the authors\n// (newest contributor first) and aggregate the +/- counts.\nfunction buildTimeGroup(windowNewestFirst: DraftChange[]): TimeGroup {\n const actors: string[] = [];\n let additions = 0;\n let deletions = 0;\n for (const c of windowNewestFirst) {\n if (!actors.includes(c.actor)) actors.push(c.actor);\n additions += c.additions;\n deletions += c.deletions;\n }\n const newest = windowNewestFirst[0];\n return {\n id: `tg-${newest.hash}`,\n endTime: newest.time,\n actors,\n additions,\n deletions,\n newest,\n changes: windowNewestFirst,\n };\n}\n\n// Build the checkpoint map for a scrub position. Each member's displayed\n// version (`to`) is its heads as of `head`: the doc that owns that change is\n// pinned exactly to it, every other member to its latest change at or before\n// it (approximate but good enough). The diff baseline (`from`) is always the\n// displayed heads themselves (no diff) — set explicitly (rather than\n// omitted) so a draft doesn't fall back to its fork-point baseline and light\n// up the whole draft diff. Members with no change at or before `head` are\n// omitted entirely: they didn't exist yet, so they fall through to live.\nasync function computeCheckpoint(\n repo: Repo,\n members: DraftMemberDoc[],\n head: ChangeRef\n): Promise<DraftCheckpoint> {\n const checkpoint: DraftCheckpoint = {};\n for (const member of members) {\n try {\n const handle = await repo.find<unknown>(member.cloneUrl ?? member.url);\n const doc = handle.doc();\n if (!doc) continue;\n const since = member.clonedAt ? decodeHeads(member.clonedAt) : [];\n const metas = Automerge.getChangesMetaSince(doc, since);\n\n // Displayed version: exactly the head change for the doc that owns it,\n // otherwise the member's latest change at or before it.\n let to: UrlHeads;\n if (member.url === head.docUrl) {\n // Pin the head's doc exactly even if it falls outside the metas\n // window (robust against a mismatched fork point).\n to = encodeHeads([head.hash]);\n } else {\n let pinnedIndex = -1;\n let bestTime = -Infinity;\n metas.forEach((m, i) => {\n if (m.time <= head.time && m.time >= bestTime) {\n bestTime = m.time;\n pinnedIndex = i;\n }\n });\n if (pinnedIndex < 0) continue;\n to = encodeHeads([metas[pinnedIndex].hash]);\n }\n\n checkpoint[member.url] = { from: to, to };\n } catch (err) {\n console.warn(\n \"[drafts] failed to compute checkpoint for member:\",\n member,\n err\n );\n }\n }\n return checkpoint;\n}\n\n// Collect every member doc's post-fork changes into one interleaved timeline,\n// newest first. `getChangesMetaSince` returns each doc's changes in topological\n// (causal, oldest-first) order, so we stamp each change with its per-document\n// `seq` index and sort by time with `seq` as the tie-break: `meta.time` is only\n// second-resolution, so changes sharing a timestamp fall back to their\n// document's own change order rather than being shuffled. On a draft `clonedAt`\n// is set, so reading the clone since that fork point yields exactly the draft's\n// own changes; on main both clone fields are null, so we read the original doc\n// since `[]` for its full history. Members with no changes are omitted.\n//\n// Changes that predate the root document's creation are dropped: a member doc\n// dragged in after the fact (e.g. a tldraw with its own prior edit history)\n// would otherwise contribute changes from before this document even existed,\n// which reads as noise. When the cutoff can't be resolved we keep everything.\nasync function collectInterleavedChanges(\n repo: Repo,\n members: DraftMemberDoc[],\n mainDocUrl: AutomergeUrl | undefined\n): Promise<DraftChange[]> {\n const rows: DraftChange[] = [];\n const createdAt = await getDocCreationTime(repo, mainDocUrl);\n for (const member of members) {\n try {\n const handle = await repo.find<unknown>(member.cloneUrl ?? member.url);\n const doc = handle.doc();\n if (!doc) continue;\n const since = member.clonedAt ? decodeHeads(member.clonedAt) : [];\n const metas = Automerge.getChangesMetaSince(doc, since);\n if (metas.length === 0) continue;\n const title = await resolveDocTitle(doc, member.url);\n metas.forEach((meta, seq) => {\n // Hide anything from before the root document was created. `seq` still\n // reflects the change's true per-document position, so dropping rows\n // here doesn't disturb the tie-break ordering.\n if (createdAt !== undefined && meta.time && meta.time < createdAt) {\n return;\n }\n const { additions, deletions } = computeEditCounts(\n doc as Automerge.Doc<unknown>,\n meta.hash,\n meta.deps\n );\n rows.push({\n docUrl: member.url,\n title,\n hash: meta.hash,\n time: meta.time,\n actor: meta.actor,\n message: meta.message,\n seq,\n additions,\n deletions,\n });\n });\n } catch (err) {\n // A member doc that can't be resolved (or whose fork point is missing)\n // is simply omitted rather than failing the whole list.\n console.warn(\"[drafts] failed to read changes for member:\", member, err);\n }\n }\n // Newest first by timestamp. On a tie (meta.time is only second-resolution),\n // fall back to each document's own change order, also newest-first: `seq` is\n // the per-document causal index (oldest = 0), so the higher (later) seq sorts\n // first. This keeps same-second changes consistent with the newest-first\n // intent instead of flipping that run to oldest-first.\n rows.sort((a, b) => b.time - a.time || b.seq - a.seq);\n return rows;\n}\n\n// Work out one change's rough edit magnitude by diffing it against its parents\n// and counting its patches: splice lengths and insert counts as additions, del\n// lengths as deletions, everything else (put / inc / mark / …) as one addition.\n// `@patchwork` metadata paths are ignored. Feeds the group +/- counts.\nfunction computeEditCounts(\n doc: Automerge.Doc<unknown>,\n hash: string,\n deps: string[]\n): { additions: number; deletions: number } {\n let additions = 0;\n let deletions = 0;\n try {\n const patches = Automerge.diff(\n doc,\n deps as unknown as Automerge.Heads,\n [hash] as unknown as Automerge.Heads\n );\n for (const patch of patches) {\n if (patch.path[0] === \"@patchwork\") continue;\n if (patch.action === \"splice\") {\n additions += (patch.value as string).length;\n } else if (patch.action === \"insert\") {\n additions += Array.isArray((patch as { values?: unknown[] }).values)\n ? (patch as { values: unknown[] }).values.length\n : 1;\n } else if (patch.action === \"del\") {\n deletions += (patch as { length?: number }).length ?? 1;\n } else {\n additions += 1;\n }\n }\n } catch (err) {\n console.warn(\"[drafts] failed to diff change for edit counts:\", hash, err);\n }\n return { additions, deletions };\n}\n\n// When was a document created, as a Unix SECONDS timestamp? Reads the doc's\n// full history and returns its first change's time (the creation change).\n// Returns undefined when the doc, its history, or that time can't be resolved,\n// in which case callers skip the \"before creation\" filter rather than hiding\n// everything.\nasync function getDocCreationTime(\n repo: Repo,\n url: AutomergeUrl | undefined\n): Promise<number | undefined> {\n if (!url) return undefined;\n try {\n const handle = await repo.find<unknown>(url);\n const doc = handle.doc();\n if (!doc) return undefined;\n const metas = Automerge.getChangesMetaSince(doc, []);\n return metas[0]?.time || undefined;\n } catch (err) {\n console.warn(\"[drafts] failed to resolve creation time for:\", url, err);\n return undefined;\n }\n}\n\n// Resolve a document's display title: prefer its cached `@patchwork.title`,\n// otherwise ask its datatype for one, falling back to a short url. Mirrors the\n// sideboard's `docLinkFromUrl` but reuses an already-loaded doc.\nasync function resolveDocTitle(\n doc: unknown,\n url: AutomergeUrl\n): Promise<string> {\n try {\n const meta = (doc as { \"@patchwork\"?: { title?: string; type?: string } })[\n \"@patchwork\"\n ];\n if (typeof meta?.title === \"string\" && meta.title) return meta.title;\n\n const type = meta?.type;\n if (type) {\n const registry = getRegistry(\"patchwork:datatype\");\n const datatype = registry.get(type);\n if (datatype) {\n await registry.load(datatype.id);\n if (isLoadedPlugin(datatype)) {\n const title = datatype.module.getTitle(doc);\n if (title) return title;\n }\n }\n }\n } catch (err) {\n console.warn(\"[drafts] failed to resolve title for:\", url, err);\n }\n return shortUrl(url);\n}\n\n// \"automerge:4NMNnk…AVdXu\" → a compact, fixed-width label for a doc url.\nfunction shortUrl(url: AutomergeUrl): string {\n const id = url.replace(/^automerge:/, \"\");\n if (id.length <= 10) return id;\n return `${id.slice(0, 6)}…${id.slice(-4)}`;\n}\n\n// A stable-ish color for an author, so the same person reads the same across\n// rows. Actors are Automerge actor ids (per device/session), the best \"who\"\n// signal available in a draft's raw change history.\nfunction authorColor(authorId: string): string {\n let hash = 0;\n for (let i = 0; i < authorId.length; i++) {\n hash = authorId.charCodeAt(i) + ((hash << 5) - hash);\n }\n const h = Math.abs(hash) % 360;\n return `hsl(${h}, 45%, 63%)`;\n}\n\n// Two short characters to stand in for an author on their avatar.\nfunction getInitials(authorId: string): string {\n return authorId.slice(0, 2).toUpperCase();\n}\n\n// Format an Automerge change time (Unix SECONDS) as a short local timestamp.\nfunction formatTime(timeSeconds: number): string {\n if (!timeSeconds) return \"\";\n const date = new Date(timeSeconds * 1000);\n const datePart = date.toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n });\n const timePart = date.toLocaleTimeString(undefined, {\n hour: \"numeric\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true,\n });\n return `${datePart}, ${timePart}`;\n}\n","import { render } from \"solid-js/web\";\nimport { RepoContext } from \"solid-automerge\";\nimport type { ToolImplementation } from \"@inkandswitch/patchwork-plugins\";\nimport { DraftsSidebar } from \"./DraftsSidebar\";\n\nexport const renderDraftsSidebar: ToolImplementation = (_handle, element) => {\n return render(\n () => (\n <RepoContext.Provider value={element.repo}>\n <DraftsSidebar element={element} />\n </RepoContext.Provider>\n ),\n element\n );\n};\n"],"names":["ms","require$$0","debug","template","cache","key","isObject","index","Providers.subscribe","EMPTY_DRAFT_LIST","main","url","members","childCount","name","drafts","DRAFTS_VERSION","console","log","INACTIVITY_GAP","DraftsSidebar","props","hostDoc","hostDocHandle","subscribeDoc","element","type","checkedOutHandle","checkedOut","createDocSignal","selected","createMemo","scrubber","setScrubber","createSignal","dragVersion","setDragVersion","dropActive","setDropActive","list","subscribe","isMainSelected","isFolder","selectDraft","handle","change","d","at","getRepo","window","repo","undefined","scrubSeq","onScrub","draftUrl","scrub","seq","checkpoint","computeCheckpoint","head","clearCheckpoint","onCreateDraft","docHandle","warn","mainDraft","ensureMainDraft","draft","create","parent","clones","push","existingUrl","doc","mainDraftUrl","find","isMain","onCreateDraftFromVersion","member","to","cloneUrl","clone","cloneAtVersion","clonedAt","err","reportForkFailure","collectForkDiagnostic","onRename","onMergeDraft","confirm","draftHandle","mergeDraft","_el$","_tmpl$7","_el$9","firstChild","_$insert","_$createComponent","Show","when","fallback","_tmpl$8","children","_el$2","_tmpl$2","_el$3","$$click","_tmpl$","_$effect","_p$","_v$","_v$2","e","disabled","t","_$setAttribute","_el$5","_tmpl$3","MainCard","hostDocUrl","isSelected","onSelect","onDragVersion","hasCheckpoint","_$memo","onReturnToLatest","For","each","summary","DraftCard","mainDocUrl","_el$6","_tmpl$6","_el$7","_tmpl$4","addEventListener","preventDefault","version","dataTransfer","dropEffect","_el$8","_tmpl$5","entries","Object","originalUrl","entry","original","Promise","all","merge","mergedAt","heads","Date","now","pinHeads","decodeHeads","metas","Automerge","getChangesMetaSince","byHash","Map","map","m","hash","closure","Set","stack","length","pop","has","meta","get","Error","add","deps","bundle","saveBundle","pinned","loadIncremental","init","gotHeads","getHeads","sort","wantHeads","JSON","stringify","update","diagnostic","draftsVersion","memberUrl","sourceUrl","memberClonedAt","toHex","currentHeads","hasHeads","missingDeps","stats","automerge","pinnedChanges","fragments","probeErrors","probe","run","String","getMissingDeps","s","numChanges","numOps","info","releaseInfo","jsGitHead","js","gitHead","wasmGitHead","wasm","wasmVersion","cargoPackageVersion","topo","topoHistoryTraversal","metaByHash","topoIndex","indexOf","known","time","actor","isCurrentHead","includes","h","i","getFragmentMetadata","f","min","Infinity","max","containsPin","level","memberCount","topoRange","bytes","save","binary","CHUNK","fromCharCode","subarray","lastForkRepro","docBase64","btoa","failure","message","error","__draftsForkRepro","_el$1","_tmpl$0","_el$10","_el$11","_$addEventListener","DraftName","_tmpl$9","DraftChangesList","ReturnToLatestButton","visible","onClick","_el$13","_tmpl$1","_el$14","_el$15","_el$17","_tmpl$10","editing","setEditing","_el$19","_tmpl$12","$$dblclick","_el$18","_tmpl$11","value","currentTarget","trim","$$keydown","blur","stopPropagation","_$use","el","setTimeout","select","changeRef","docUrl","changes","setChanges","createEffect","disposed","listeners","recompute","next","collectInterleavedChanges","onChange","on","onCleanup","off","timeGroups","groupChanges","filter","g","additions","deletions","visibleChanges","flatMap","scrubTo","headIndex","scrubToGroup","group","newest","idx","findIndex","c","groupContainsHead","some","rowEls","rowsEl","setRowsEl","measureTick","setMeasureTick","observer","ResizeObserver","observe","disconnect","requestAnimationFrame","bands","out","id","startIndex","count","top","offsetTop","height","offsetHeight","yForIndex","bs","b","last","indexForY","y","Math","round","tokenGeometry","trackEl","yInTrack","ev","rect","getBoundingClientRect","clientY","beginDrag","grabOffset","onMove","target","setPointerCapture","pointerId","onUp","removeEventListener","beginVersionDrag","setData","effectAllowed","headChange","atGroupStart","_el$20","_tmpl$15","_tmpl$16","_el$21","_tmpl$14","_el$22","_el$23","nextSibling","_ref$","TimeGroupRow","rowRef","set","onVersionDragStart","onVersionDragEnd","_el$24","_tmpl$13","_el$25","_el$26","_el$27","$$pointerdown","_el$29","_tmpl$17","_el$30","_el$31","formatTime","title","EditCounts","_v$3","_v$4","_$setStyleProperty","_el$33","_tmpl$18","_el$34","_ref$2","AuthorAvatars","actors","endTime","slice","extra","_el$36","_tmpl$20","_el$39","_tmpl$21","getInitials","_v$5","authorColor","_v$6","_v$7","a","_el$37","_tmpl$19","_el$40","_tmpl$24","_el$41","_tmpl$22","_el$43","_tmpl$23","prevTimeMs","flush","buildTimeGroup","timeMs","windowNewestFirst","since","encodeHeads","pinnedIndex","bestTime","forEach","from","rows","createdAt","getDocCreationTime","resolveDocTitle","computeEditCounts","patches","diff","patch","path","action","Array","isArray","values","registry","getRegistry","datatype","load","isLoadedPlugin","module","getTitle","shortUrl","replace","authorId","charCodeAt","abs","toUpperCase","timeSeconds","date","datePart","toLocaleDateString","month","day","timePart","toLocaleTimeString","hour","minute","second","hour12","_$delegateEvents","renderDraftsSidebar","_handle","render","RepoContext","Provider"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7]}
|