@inkandswitch/patchwork-pkg-base 0.0.107 → 0.0.108

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.
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "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", "../src/components/IsolatedDocumentArea.tsx", "../src/components/DocumentAreaRoot.tsx", "../node_modules/.pnpm/@solid-primitives+storage@4.4.0_solid-js@1.9.13/node_modules/@solid-primitives/storage/dist/persisted.js", "../src/hooks/useSidebarState.ts", "../src/hooks/useSidebarResize.ts", "../src/hooks/useProviderReady.ts", "../src/hooks/useMainDocMounted.ts", "../src/hooks/useTaggedComponents.ts", "../src/components/FrameTopBar.tsx", "../src/components/DocumentTitle.tsx", "../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.2_@automerge+automerge-repo@2.6.0-subduction.29_supports-color@7.2._4dbace68d7abbb95ae1519fb33906a50/node_modules/solid-automerge/src/autoproduce.ts", "../node_modules/.pnpm/solid-automerge@2.0.2_@automerge+automerge-repo@2.6.0-subduction.29_supports-color@7.2._4dbace68d7abbb95ae1519fb33906a50/node_modules/solid-automerge/src/createDocumentProjection.ts", "../node_modules/.pnpm/solid-automerge@2.0.2_@automerge+automerge-repo@2.6.0-subduction.29_supports-color@7.2._4dbace68d7abbb95ae1519fb33906a50/node_modules/solid-automerge/src/makeDocumentProjection.ts", "../node_modules/.pnpm/@solid-primitives+utils@6.4.1_solid-js@1.9.13/node_modules/@solid-primitives/utils/dist/index.js", "../node_modules/.pnpm/solid-automerge@2.0.2_@automerge+automerge-repo@2.6.0-subduction.29_supports-color@7.2._4dbace68d7abbb95ae1519fb33906a50/node_modules/solid-automerge/src/useDocHandle.ts", "../node_modules/.pnpm/solid-automerge@2.0.2_@automerge+automerge-repo@2.6.0-subduction.29_supports-color@7.2._4dbace68d7abbb95ae1519fb33906a50/node_modules/solid-automerge/src/context.ts", "../node_modules/.pnpm/solid-automerge@2.0.2_@automerge+automerge-repo@2.6.0-subduction.29_supports-color@7.2._4dbace68d7abbb95ae1519fb33906a50/node_modules/solid-automerge/src/useDocument.ts", "../node_modules/.pnpm/solid-automerge@2.0.2_@automerge+automerge-repo@2.6.0-subduction.29_supports-color@7.2._4dbace68d7abbb95ae1519fb33906a50/node_modules/solid-automerge/src/makeDocSignal.ts", "../node_modules/.pnpm/solid-automerge@2.0.2_@automerge+automerge-repo@2.6.0-subduction.29_supports-color@7.2._4dbace68d7abbb95ae1519fb33906a50/node_modules/solid-automerge/src/createDocSignal.ts", "../node_modules/.pnpm/solid-automerge@2.0.2_@automerge+automerge-repo@2.6.0-subduction.29_supports-color@7.2._4dbace68d7abbb95ae1519fb33906a50/node_modules/solid-automerge/src/useRepo.ts", "../src/components/ContextSidebar.tsx", "../src/components/Sidebar.tsx", "../src/components/ContextTabs.tsx", "../src/components/SlotView.tsx", "../src/components/MainDocumentView.tsx", "../src/components/DocumentCards.tsx", "../src/components/PackageAbout.tsx", "../src/components/packageInfo.ts", "../src/components/keyhiveAccess.ts", "../src/styles.css", "../src/ensureFrameStyles.ts"],
4
- "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", "import { template as _$template } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { getOwner as _$getOwner } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<patchwork-view component=patchwork-isolation root-component=threepane-isolation-root shared-providers=patchwork:contact,patchwork:selected-doc,patchwork:worker-channel shared-tools=llm-config-tray style=display:contents><script type=application/json data-root-component-data>`, true, false, false),\n _tmpl$2 = /*#__PURE__*/_$template(`<div class=frame>`);\nimport { createMemo } from \"solid-js\";\nimport { createStore, reconcile } from \"solid-js/store\";\nimport { render } from \"solid-js/web\";\nimport { DocumentAreaRoot } from \"./DocumentAreaRoot\";\nimport { DEFAULT_SIDEBAR_WIDTH } from \"../hooks\";\nimport { ensureFrameStyles } from \"../ensureFrameStyles\";\nexport function IsolatedDocumentArea(props) {\n const rootUrls = createMemo(() => {\n const urls = /* @__PURE__ */new Set();\n const selected = props.selectedDocUrl();\n if (selected) urls.add(selected);\n if (props.contactUrl) urls.add(props.contactUrl);\n return [...urls];\n });\n const propsJson = createMemo(() => JSON.stringify({\n selectedDocUrl: props.selectedDocUrl(),\n selectedToolId: props.selectedToolId(),\n doctitleSlots: props.doctitleSlots(),\n isLeftCollapsed: props.isLeftCollapsed(),\n initialRightWidth: props.initialRightWidth(),\n initialRightCollapsed: props.initialRightCollapsed()\n }));\n return (() => {\n var _el$ = _tmpl$(),\n _el$2 = _el$.firstChild;\n _el$._$owner = _$getOwner();\n _$insert(_el$2, propsJson);\n _$effect(() => _$setAttribute(_el$, \"automerge-allowlist\", rootUrls().join(\",\")));\n return _el$;\n })();\n}\nfunction parseProps(script) {\n if (!script?.textContent) return {};\n try {\n return JSON.parse(script.textContent);\n } catch (err) {\n console.error(\"[threepane-isolation-root] bad props JSON:\", err);\n return {};\n }\n}\nexport function mountIsolationRoot(element) {\n ensureFrameStyles();\n const script = element.querySelector('script[type=\"application/json\"]');\n const [p, setP] = createStore(parseProps(script));\n const observer = new MutationObserver(() => {\n setP(reconcile(parseProps(script)));\n });\n if (script) {\n observer.observe(script, {\n characterData: true,\n childList: true,\n subtree: true\n });\n }\n const dispose = render(() => (() => {\n var _el$3 = _tmpl$2();\n _$insert(_el$3, _$createComponent(DocumentAreaRoot, {\n selectedDocUrl: () => p.selectedDocUrl,\n selectedToolId: () => p.selectedToolId,\n doctitleSlots: () => p.doctitleSlots,\n isLeftCollapsed: () => p.isLeftCollapsed ?? false,\n initialRightWidth: () => p.initialRightWidth ?? DEFAULT_SIDEBAR_WIDTH,\n initialRightCollapsed: () => p.initialRightCollapsed ?? false\n }));\n return _el$3;\n })(), element);\n return () => {\n observer.disconnect();\n dispose();\n };\n}", "import { template as _$template } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { getOwner as _$getOwner } from \"solid-js/web\";\nimport { use as _$use } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<patchwork-view component=patchwork-draft-state-provider>`, true, false, false),\n _tmpl$2 = /*#__PURE__*/_$template(`<div class=frame__main-column><div class=frame__doc-column><div class=main-area>`),\n _tmpl$3 = /*#__PURE__*/_$template(`<patchwork-view component=patchwork-draft-overlay-provider><patchwork-view component=patchwork-comments-provider><patchwork-view component=patchwork-focus-provider>`, true, false, false);\nimport { makePersisted } from \"@solid-primitives/storage\";\nimport { createEffect, createMemo, createSignal, on, onCleanup, onMount, Show } from \"solid-js\";\nimport { useProviderReady, useTaggedComponents, SIDEBAR_KEYS, COLLAPSE_CONTEXT_SIDEBAR_EVENT } from \"../hooks\";\nimport { useSidebarResize } from \"../hooks/useSidebarResize\";\nimport { FrameTopBar } from \"./FrameTopBar\";\nimport { ContextSidebar } from \"./ContextSidebar\";\nimport { MainDocumentView } from \"./MainDocumentView\";\nexport function DocumentAreaRoot(props) {\n const [isRightSidebarCollapsed, setIsRightSidebarCollapsed] = createSignal(props.initialRightCollapsed());\n const [rightSidebarWidth, setRightSidebarWidth] = createSignal(props.initialRightWidth());\n createEffect(on(isRightSidebarCollapsed, value => {\n try {\n localStorage.setItem(SIDEBAR_KEYS.rightCollapsed, String(value));\n } catch {}\n }, {\n defer: true\n }));\n createEffect(on(rightSidebarWidth, value => {\n try {\n localStorage.setItem(SIDEBAR_KEYS.rightWidth, String(value));\n } catch {}\n }, {\n defer: true\n }));\n const sidebarResize = useSidebarResize(\"right\", {\n isCollapsed: isRightSidebarCollapsed,\n setCollapsed: setIsRightSidebarCollapsed,\n setWidth: setRightSidebarWidth\n });\n onMount(() => {\n const onCollapse = () => setIsRightSidebarCollapsed(true);\n window.addEventListener(COLLAPSE_CONTEXT_SIDEBAR_EVENT, onCollapse);\n onCleanup(() => window.removeEventListener(COLLAPSE_CONTEXT_SIDEBAR_EVENT, onCollapse));\n });\n const [selectedContextToolId, setSelectedContextToolId] = makePersisted(createSignal(), {\n name: SIDEBAR_KEYS.contextToolId\n });\n const [draftStateProviderHost, setDraftStateProviderHost] = createSignal();\n const isDraftStateProviderReady = useProviderReady(\"patchwork-draft-state-provider\", draftStateProviderHost);\n const readyDraftStateHost = () => isDraftStateProviderReady() ? draftStateProviderHost() : void 0;\n return _$createComponent(Show, {\n get when() {\n return props.selectedDocUrl();\n },\n keyed: true,\n children: docUrl => (() => {\n var _el$ = _tmpl$();\n _$use(setDraftStateProviderHost, _el$);\n _el$.docUrl = docUrl;\n _el$._$owner = _$getOwner();\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return readyDraftStateHost();\n },\n children: host => _$createComponent(DraftDocumentArea, {\n get host() {\n return host();\n },\n get setMainDocElement() {\n return props.setMainDocElement;\n },\n get selectedDocUrl() {\n return props.selectedDocUrl;\n },\n get selectedToolId() {\n return props.selectedToolId;\n },\n get doctitleSlots() {\n return props.doctitleSlots;\n },\n get isLeftCollapsed() {\n return props.isLeftCollapsed;\n },\n isRightSidebarCollapsed: isRightSidebarCollapsed,\n setIsRightSidebarCollapsed: setIsRightSidebarCollapsed,\n rightSidebarWidth: rightSidebarWidth,\n get handleMouseDown() {\n return sidebarResize.handleMouseDown;\n },\n get handleToggleClick() {\n return sidebarResize.handleToggleClick;\n },\n selectedContextToolId: selectedContextToolId,\n setSelectedContextToolId: setSelectedContextToolId\n })\n }));\n return _el$;\n })()\n });\n}\nfunction DraftDocumentArea(props) {\n const contextItems = useTaggedComponents(\"context-tool\");\n const hasContext = () => contextItems().length > 0;\n const mainViewKey = createMemo(() => props.selectedDocUrl());\n const [draftOverlayProviderHost, setDraftOverlayProviderHost] = createSignal();\n const isDraftOverlayProviderReady = useProviderReady(\"patchwork-draft-overlay-provider\", draftOverlayProviderHost);\n const [commentsProviderElement, setCommentsProviderElement] = createSignal();\n const isCommentsProviderReady = useProviderReady(\"patchwork-comments-provider\", commentsProviderElement);\n const [focusProviderElement, setFocusProviderElement] = createSignal();\n const isFocusProviderReady = useProviderReady(\"patchwork-focus-provider\", focusProviderElement);\n const areDocProvidersReady = createMemo(() => isDraftOverlayProviderReady() && isCommentsProviderReady() && isFocusProviderReady());\n return (() => {\n var _el$2 = _tmpl$3(),\n _el$3 = _el$2.firstChild,\n _el$4 = _el$3.firstChild;\n _$use(setDraftOverlayProviderHost, _el$2);\n _el$2._$owner = _$getOwner();\n _$use(setCommentsProviderElement, _el$3);\n _el$3._$owner = _$getOwner();\n _$use(setFocusProviderElement, _el$4);\n _el$4._$owner = _$getOwner();\n _$insert(_el$4, _$createComponent(Show, {\n get when() {\n return areDocProvidersReady();\n },\n get children() {\n var _el$5 = _tmpl$2(),\n _el$6 = _el$5.firstChild,\n _el$7 = _el$6.firstChild;\n _$insert(_el$6, _$createComponent(FrameTopBar, {\n get docUrl() {\n return props.selectedDocUrl;\n },\n get toolSlots() {\n return props.doctitleSlots;\n },\n get isLeftCollapsed() {\n return props.isLeftCollapsed;\n },\n hasContext: hasContext,\n get isRightCollapsed() {\n return props.isRightSidebarCollapsed;\n },\n onToggleRight: () => props.setIsRightSidebarCollapsed(v => !v)\n }), _el$7);\n _$insert(_el$7, _$createComponent(MainDocumentView, {\n viewKey: mainViewKey,\n get selectedDocUrl() {\n return props.selectedDocUrl;\n },\n get toolId() {\n return props.selectedToolId;\n },\n ref: el => props.setMainDocElement?.(el)\n }));\n _$insert(_el$5, _$createComponent(Show, {\n get when() {\n return hasContext();\n },\n get children() {\n return _$createComponent(ContextSidebar, {\n get selectedToolId() {\n return props.selectedContextToolId;\n },\n get setSelectedToolId() {\n return props.setSelectedContextToolId;\n },\n get isCollapsed() {\n return props.isRightSidebarCollapsed;\n },\n get width() {\n return props.rightSidebarWidth;\n },\n get onMouseDown() {\n return props.handleMouseDown;\n },\n get onToggleClick() {\n return props.handleToggleClick;\n },\n onCollapse: () => props.setIsRightSidebarCollapsed(true)\n });\n }\n }), null);\n return _el$5;\n }\n }));\n return _el$2;\n })();\n}", "import { createUniqueId, untrack } from \"solid-js\";\nimport { isServer, isDev } from \"solid-js/web\";\nimport { reconcile } from \"solid-js/store\";\nexport function makePersisted(signal, options = {}) {\n const storage = options.storage || globalThis.localStorage;\n const name = options.name || `storage-${createUniqueId()}`;\n if (!storage) {\n return Object.assign(signal, { 2: null });\n }\n const storageOptions = options.storageOptions;\n const serialize = options.serialize || JSON.stringify.bind(JSON);\n const deserialize = options.deserialize || JSON.parse.bind(JSON);\n const init = storage.getItem(name, storageOptions);\n const set = typeof signal[0] === \"function\"\n ? (data) => {\n try {\n const value = deserialize(data);\n signal[1](() => value);\n }\n catch (e) {\n // eslint-disable-next-line no-console\n if (isDev)\n console.warn(e);\n }\n }\n : (data) => {\n try {\n const value = deserialize(data);\n signal[1](reconcile(value));\n }\n catch (e) {\n // eslint-disable-next-line no-console\n if (isDev)\n console.warn(e);\n }\n };\n let unchanged = true;\n if (init instanceof Promise)\n init.then(data => unchanged && data && set(data));\n else if (init)\n set(init);\n if (typeof options.sync?.[0] === \"function\") {\n const get = typeof signal[0] === \"function\" ? signal[0] : () => signal[0];\n options.sync[0]((data) => {\n if (data.key !== name ||\n (!isServer && (data.url || globalThis.location.href) !== globalThis.location.href) ||\n data.newValue === serialize(untrack(get))) {\n return;\n }\n set(data.newValue);\n });\n }\n return Object.assign([], signal, {\n 1: typeof signal[0] === \"function\"\n ? (value) => {\n const output = signal[1](value);\n const serialized = value != null ? serialize(output) : value;\n options.sync?.[1](name, serialized);\n if (serialized != null)\n storage.setItem(name, serialized, storageOptions);\n else\n storage.removeItem(name, storageOptions);\n unchanged = false;\n return output;\n }\n : (...args) => {\n signal[1](...args);\n const value = untrack(() => serialize(signal[0]));\n options.sync?.[1](name, value);\n storage.setItem(name, value, storageOptions);\n unchanged = false;\n },\n 2: init,\n });\n}\n/**\n * storageSync - synchronize localStorage\n * This does only work for { storage: localStorage }.\n * If you wish to use e.g. cookieStorage, you may use a different sync method\n */\nexport const storageSync = [\n (subscriber) => window.addEventListener(\"storage\", ev => subscriber(ev)),\n () => {\n /*storage already sends events fulfilling the PersistenceSyncData<T> conditions*/\n },\n];\n/**\n * messageSync - synchronize over post message or broadcast channel API\n */\nexport const messageSync = (channel = window) => [\n (subscriber) => channel.addEventListener(\"message\", ev => {\n subscriber(ev.data);\n }),\n (key, newValue) => channel.postMessage({ key, newValue, timeStamp: +new Date(), url: location.href }, location.origin),\n];\n/**\n * wsSync - syncronize persisted storage via web socket\n */\nexport const wsSync = (ws, warnOnError = isDev) => [\n (subscriber) => ws.addEventListener(\"message\", (ev) => {\n try {\n const data = JSON.parse(ev.data);\n if ([\"key\", \"newValue\", \"timeStamp\"].every(item => Object.hasOwn(data, item))) {\n subscriber(data);\n }\n }\n catch (e) {\n // eslint-disable-next-line no-console\n if (warnOnError)\n console.warn(e);\n }\n }),\n (key, newValue) => ws.send(JSON.stringify({\n key,\n newValue,\n timeStamp: +new Date(),\n ...(isServer ? {} : { url: location.href }),\n })),\n];\n/**\n * multiplex arbitrary sync APIs\n *\n * ```ts\n * makePersisted(createSignal(0), { sync: multiplexSync(messageSync(bc), wsSync(ws)) })\n * ```\n */\nexport const multiplexSync = (...syncAPIs) => [\n subscriber => syncAPIs.forEach(([subscribe]) => subscribe(subscriber)),\n (key, value) => syncAPIs.forEach(([_, updater]) => updater(key, value)),\n];\n", "import { createEffect, createSignal, on } from \"solid-js\";\n\n/**\n * The localStorage keys for persisted sidebar state. Defined here, the canonical\n * sidebar-persistence module, and imported wherever sidebar state is read/written\n * (e.g. the isolated document-area root seeds + persists the right-sidebar keys),\n * so the key strings live in exactly one place.\n */\nexport const SIDEBAR_KEYS = {\n leftCollapsed: \"patchwork:leftSidebarCollapsed\",\n rightCollapsed: \"patchwork:rightSidebarCollapsed\",\n leftWidth: \"patchwork:leftSidebarWidth\",\n rightWidth: \"patchwork:rightSidebarWidth\",\n contextToolId: \"patchwork:contextSidebarToolId\",\n} as const;\n\n/**\n * DOM event (dispatched on `window`) asking the context (right) sidebar to\n * collapse. The left sidebar is host-owned and collapsed directly, but the\n * right-sidebar collapse state lives inside `DocumentAreaRoot` (so it survives\n * the isolation boundary), so the host signals it out-of-band through this event.\n */\nexport const COLLAPSE_CONTEXT_SIDEBAR_EVENT =\n \"patchwork:collapse-context-sidebar\";\n\n/** Default sidebar width (px) when nothing is persisted. */\nexport const DEFAULT_SIDEBAR_WIDTH = 400;\n\n/**\n * Reads a number from localStorage with a default fallback\n */\nexport function getStoredNumber(key: string, defaultValue: number): number {\n const stored = localStorage.getItem(key);\n return stored ? parseInt(stored, 10) : defaultValue;\n}\n\n/**\n * Reads a boolean from localStorage (returns true if value is \"true\")\n */\nexport function getStoredBoolean(key: string): boolean {\n return localStorage.getItem(key) === \"true\";\n}\n\n/**\n * The host-owned LEFT sidebar's collapse and width state, persisted to\n * localStorage. The right (context) sidebar's state is owned by\n * `DocumentAreaRoot`, so it survives inside the isolation boundary.\n */\nexport function useSidebarState() {\n const [isSidebarCollapsed, setIsSidebarCollapsed] = createSignal(\n getStoredBoolean(SIDEBAR_KEYS.leftCollapsed)\n );\n const [leftSidebarWidth, setLeftSidebarWidth] = createSignal(\n getStoredNumber(SIDEBAR_KEYS.leftWidth, DEFAULT_SIDEBAR_WIDTH)\n );\n\n createEffect(\n on(isSidebarCollapsed, (value) => {\n localStorage.setItem(SIDEBAR_KEYS.leftCollapsed, String(value));\n })\n );\n createEffect(\n on(leftSidebarWidth, (value) => {\n localStorage.setItem(SIDEBAR_KEYS.leftWidth, String(value));\n })\n );\n\n return {\n isSidebarCollapsed,\n setIsSidebarCollapsed,\n leftSidebarWidth,\n setLeftSidebarWidth,\n };\n}\n", "import { onCleanup, onMount } from \"solid-js\";\n\nexport type SidebarSide = \"left\" | \"right\";\n\nexport const MIN_SIDEBAR_WIDTH = 180;\nexport const MAX_SIDEBAR_WIDTH = 720;\n/** Drag a sidebar narrower than this and it snaps closed (Things-3 style), and\n * re-opens once dragged back out past it. */\nexport const AUTO_CLOSE_WIDTH = 120;\n/** Pointer travel (px) before a press on the handle counts as a drag. */\nexport const DRAG_THRESHOLD = 3;\n\ninterface UseSidebarResizeParams {\n isCollapsed: () => boolean;\n setCollapsed: (value: boolean | ((prev: boolean) => boolean)) => void;\n setWidth: (width: number) => void;\n}\n\n/**\n * Resize and toggle interactions for ONE sidebar. Whoever owns a sidebar's\n * width/collapsed state calls this once for it: the host for the left sidebar,\n * `DocumentAreaRoot` for the right (context) one.\n */\nexport function useSidebarResize(\n side: SidebarSide,\n { isCollapsed, setCollapsed, setWidth }: UseSidebarResizeParams\n) {\n // Non-reactive refs for drag state\n let isResizing = false;\n let dragStartPos: { x: number; y: number } | null = null;\n let hasDragged = false;\n // The last *open* width applied during the live drag (null while the drag is\n // previewing a collapse). Read on release to decide whether to spring back.\n let lastDragWidth: number | null = null;\n\n // Apply a candidate width from a live drag. The panel tracks the pointer to\n // *any* size (Things 3 / nextaction feel) - it is allowed below the minimum\n // so you can see it shrink past the limit; the over-shrink is rejected later,\n // on release (see `settleDrag`). Below the auto-close threshold it snaps shut\n // live (so it reads as \"let go here and it stays closed\", and so the collapsed\n // 1px strip can be grabbed and dragged back open).\n const applyDragWidth = (raw: number) => {\n if (raw < AUTO_CLOSE_WIDTH) {\n if (!isCollapsed()) setCollapsed(true);\n lastDragWidth = null;\n return;\n }\n if (isCollapsed()) setCollapsed(false);\n const w = Math.min(MAX_SIDEBAR_WIDTH, raw);\n setWidth(w);\n lastDragWidth = w;\n };\n\n // Decide the resting state when a drag ends. The width transition is live\n // again by now (the resizing flag was cleared in `endDrag`), so any width we\n // set here animates: if the drag finished too small (in the [auto-close, min)\n // band) the panel springs back out to the minimum; if it finished below\n // auto-close it already snapped collapsed during the drag, so we leave it.\n const settleDrag = () => {\n if (isCollapsed()) return;\n if (lastDragWidth !== null && lastDragWidth < MIN_SIDEBAR_WIDTH) {\n setWidth(MIN_SIDEBAR_WIDTH);\n }\n };\n\n // A full-window overlay, added the moment a real drag begins. It keeps every\n // pointer event (and the resize cursor) on the parent document even as the\n // cursor passes over a tool iframe - otherwise the iframe swallows the\n // mousemove/mouseup and the drag can never end (\"you can't let go\"). It's\n // added lazily (not on mousedown) so a plain click still lands on the handle\n // and toggles collapse.\n let dragOverlay: HTMLDivElement | null = null;\n\n const beginDragVisuals = () => {\n // suppress the width transition so the panel tracks the pointer 1:1, and tag\n // which side is dragging so the divider glow can extend up through the top\n // bar on that side (see `[data-sidebar-resizing]` rules in the stylesheet).\n document.body.setAttribute(\"data-sidebar-resizing\", side);\n dragOverlay = document.createElement(\"div\");\n dragOverlay.style.cssText =\n \"position:fixed;inset:0;z-index:2147483647;cursor:col-resize;\";\n document.body.appendChild(dragOverlay);\n };\n\n const endDrag = () => {\n isResizing = false;\n dragStartPos = null;\n document.body.style.userSelect = \"\";\n document.body.removeAttribute(\"data-sidebar-resizing\");\n dragOverlay?.remove();\n dragOverlay = null;\n };\n\n const handleMouseDown = (e: MouseEvent) => {\n e.preventDefault();\n dragStartPos = { x: e.clientX, y: e.clientY };\n hasDragged = false;\n lastDragWidth = null;\n isResizing = true;\n document.body.style.userSelect = \"none\";\n };\n\n const handleMouseUp = () => {\n // Capture the drag state before endDrag() clears it, then resolve the\n // resting size with the width transition restored so spring-backs animate.\n const wasResizing = isResizing;\n const dragged = hasDragged;\n endDrag();\n if (wasResizing && dragged) settleDrag();\n };\n\n const handleMouseMove = (e: MouseEvent) => {\n if (!isResizing || !dragStartPos) return;\n\n // Once past the threshold this is a drag: drop the overlay in now, before\n // the cursor can reach any iframe, and suppress the width transition.\n const deltaX = Math.abs(e.clientX - dragStartPos.x);\n const deltaY = Math.abs(e.clientY - dragStartPos.y);\n if (!hasDragged && (deltaX > DRAG_THRESHOLD || deltaY > DRAG_THRESHOLD)) {\n hasDragged = true;\n beginDragVisuals();\n }\n\n applyDragWidth(\n side === \"left\" ? e.clientX : window.innerWidth - e.clientX\n );\n };\n\n const handleToggleClick = (e: MouseEvent) => {\n // Only toggle if we didn't drag\n if (hasDragged) {\n e.preventDefault();\n e.stopPropagation();\n // Reset the flag for next interaction\n hasDragged = false;\n return;\n }\n setCollapsed((prev) => !prev);\n };\n\n onMount(() => {\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n onCleanup(() => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n // Reset body styles if component unmounts during drag\n if (isResizing) {\n endDrag();\n }\n });\n });\n\n return {\n handleMouseDown,\n handleToggleClick,\n };\n}\n", "import {\n createEffect,\n createSignal,\n onCleanup,\n type Accessor,\n} from \"solid-js\";\n\n/**\n * Tracks whether a `<patchwork-view>` provider has dispatched its\n * `patchwork:mounted` event yet, so callers can gate consumers that fire\n * `patchwork:request` events on the host listener being attached.\n *\n * The caller owns the element binding (typically a signal). Pass an accessor\n * that returns the current element; the effect re-runs whenever that element\n * changes and rewires the listener.\n */\nexport const useProviderReady = (\n componentId: string,\n element: Accessor<HTMLElement | undefined>\n): Accessor<boolean> => {\n const [isReady, setReady] = createSignal(false);\n\n createEffect(() => {\n const el = element();\n if (!el) return;\n setReady(false);\n const onMounted = (event: Event) => {\n const detail = (event as CustomEvent<{ componentId?: string }>).detail;\n if (detail?.componentId !== componentId) return;\n setReady(true);\n };\n el.addEventListener(\"patchwork:mounted\", onMounted);\n onCleanup(() => el.removeEventListener(\"patchwork:mounted\", onMounted));\n });\n\n return isReady;\n};\n", "import {\n createEffect,\n createSignal,\n onCleanup,\n type Accessor,\n} from \"solid-js\";\n\n// Safety net for the \"failed to mount\" case: a tool whose module throws sets\n// the view's internal state to \"error\" without dispatching any settling event,\n// so without this the sidebar would suspend forever. Long enough that a slow\n// (but healthy) load still wins the race and settles via its real event.\nconst MOUNT_TIMEOUT_MS = 5000;\n\n/**\n * Tracks whether the main document `<patchwork-view>` has settled *at least\n * once* \u2014 either it dispatched `patchwork:mounted` (a tool rendered) or\n * `patchwork:no-tool` (no tool could be resolved). Used to defer the sidebar\n * widgets until the main column has loaded, so the primary document wins the\n * initial render race.\n *\n * The result LATCHES: once true it stays true. We only want to win the *first*\n * render race \u2014 re-suspending on every later doc switch would tear down and\n * rebuild the widgets each time. So once settled we stop listening and never go\n * back to false.\n *\n * Both events bubble, so we listen on a stable container that wraps the view.\n * Events are filtered by url so a sidebar widget mounting inside the same\n * container can't settle us early.\n *\n * A timeout backs the explicit \"failed to mount\" case (see MOUNT_TIMEOUT_MS):\n * the view's error path emits no event, so without a fallback the widgets would\n * never appear.\n */\nexport const useMainDocMounted = (\n element: Accessor<HTMLElement | undefined>,\n docUrl: Accessor<string | undefined>\n): Accessor<boolean> => {\n const [isMounted, setMounted] = createSignal(false);\n\n createEffect(() => {\n // Latched: stop watching (and stop re-arming the timeout) once settled.\n if (isMounted()) return;\n const el = element();\n const url = docUrl();\n if (!el || !url) return;\n\n const onSettled = (event: Event) => {\n const detail = (event as CustomEvent<{ url?: string }>).detail;\n // `patchwork:mounted` for a doc view carries the url; ignore events for\n // other documents that happen to bubble through this container.\n if (detail?.url && detail.url !== url) return;\n setMounted(true);\n };\n\n el.addEventListener(\"patchwork:mounted\", onSettled);\n el.addEventListener(\"patchwork:no-tool\", onSettled);\n const timer = setTimeout(() => setMounted(true), MOUNT_TIMEOUT_MS);\n\n onCleanup(() => {\n el.removeEventListener(\"patchwork:mounted\", onSettled);\n el.removeEventListener(\"patchwork:no-tool\", onSettled);\n clearTimeout(timer);\n });\n });\n\n return isMounted;\n};\n", "import {\n getRegistry,\n type ToolDescription,\n} from \"@inkandswitch/patchwork-plugins\";\nimport { createMemo, createSignal, onCleanup, type Accessor } from \"solid-js\";\n\nexport type TaggedComponent = {\n id: string;\n name: string;\n icon?: string;\n};\n\n/**\n * Live, registry-driven list of every `patchwork:component` carrying `tag`\n * (e.g. `\"context-tool\"` or `\"system-tray\"`), sorted by name. A component just\n * declares its tag and shows up everywhere that tag is rendered.\n *\n * Reactive to the registry's `\"changed\"` event, so a late-registering or\n * hot-reloaded plugin appears without a remount. Safe to call from inside the\n * isolated iframe realm too \u2014 it mounts the same plugin set as the host (see\n * `registry.start` in `isolation/src/boot/iframe/main.ts`), so each realm\n * resolves its own local, equivalent list.\n */\nexport function useTaggedComponents(tag: string): Accessor<TaggedComponent[]> {\n const registry = getRegistry<ToolDescription>(\"patchwork:component\");\n\n const [version, setVersion] = createSignal(0);\n const off = registry.on(\"changed\", () => setVersion((v) => v + 1));\n onCleanup(off);\n\n return createMemo(() => {\n version();\n return (registry.all?.() ?? [])\n .filter((description) => (description.tags ?? []).includes(tag))\n .map((description) => ({\n id: description.id,\n name: description.name || description.id,\n icon: description.icon,\n }))\n .sort((a, b) => a.name.localeCompare(b.name));\n });\n}\n", "import { template as _$template } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents } from \"solid-js/web\";\nimport { getOwner as _$getOwner } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute } from \"solid-js/web\";\nimport { memo as _$memo } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<div class=threepane__title>`),\n _tmpl$2 = /*#__PURE__*/_$template(`<div class=threepane__doctitle-tools>`),\n _tmpl$3 = /*#__PURE__*/_$template(`<button type=button class=frame__sidebar-toggle title=\"Show context sidebar\"aria-label=\"Show context sidebar\">`),\n _tmpl$4 = /*#__PURE__*/_$template(`<div class=frame__topbar><div class=threepane__spacer>`),\n _tmpl$5 = /*#__PURE__*/_$template(`<patchwork-view>`, true, false, false);\nimport { For, Show } from \"solid-js\";\nimport { DocumentTitle } from \"./DocumentTitle\";\nimport { PanelRightIcon } from \"./ContextSidebar\";\nimport { slotId } from \"./SlotView\";\nexport function FrameTopBar(props) {\n const docToolSlots = () => props.toolSlots() ?? [];\n return (() => {\n var _el$ = _tmpl$4(),\n _el$3 = _el$.firstChild;\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return props.docUrl();\n },\n get children() {\n var _el$2 = _tmpl$();\n _$insert(_el$2, _$createComponent(DocumentTitle, {\n get docUrl() {\n return props.docUrl;\n }\n }));\n return _el$2;\n }\n }), _el$3);\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return _$memo(() => !!props.docUrl())() && docToolSlots().length;\n },\n get children() {\n var _el$4 = _tmpl$2();\n _$insert(_el$4, _$createComponent(For, {\n get each() {\n return docToolSlots();\n },\n children: slot => (() => {\n var _el$6 = _tmpl$5();\n _el$6._$owner = _$getOwner();\n _$effect(_p$ => {\n var _v$ = slotId(slot),\n _v$2 = props.docUrl();\n _v$ !== _p$.e && (_el$6.toolId = _p$.e = _v$);\n _v$2 !== _p$.t && (_el$6.docUrl = _p$.t = _v$2);\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$6;\n })()\n }));\n return _el$4;\n }\n }), null);\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return _$memo(() => !!props.hasContext())() && props.isRightCollapsed();\n },\n get children() {\n var _el$5 = _tmpl$3();\n _el$5.$$click = () => props.onToggleRight();\n _$setAttribute(_el$5, \"aria-pressed\", false);\n _$insert(_el$5, _$createComponent(PanelRightIcon, {}));\n return _el$5;\n }\n }), null);\n _$effect(() => _el$.classList.toggle(\"frame__topbar--left-collapsed\", !!props.isLeftCollapsed()));\n return _el$;\n })();\n}\n_$delegateEvents([\"click\"]);", "import { template as _$template } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { memo as _$memo } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { use as _$use } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<span class=threepane__title-text>`),\n _tmpl$2 = /*#__PURE__*/_$template(`<input class=threepane__title-input type=text>`);\nimport { useDocument } from \"solid-automerge\";\nimport { getType } from \"@inkandswitch/patchwork-filesystem\";\nimport { getRegistry, isLoadedPlugin } from \"@inkandswitch/patchwork-plugins\";\nimport { createEffect, createMemo, createSignal, onCleanup, onMount, Show } from \"solid-js\";\nexport function DocumentTitle(props) {\n let anchor;\n const [repo, setRepo] = createSignal();\n onMount(() => {\n setRepo(anchor.closest(\"repo-provider\")?.repo);\n });\n return _$createComponent(Show, {\n get when() {\n return repo();\n },\n get fallback() {\n return (() => {\n var _el$ = _tmpl$();\n var _ref$ = anchor;\n typeof _ref$ === \"function\" ? _$use(_ref$, _el$) : anchor = _el$;\n return _el$;\n })();\n },\n children: resolvedRepo => _$createComponent(DocumentTitleInner, {\n get docUrl() {\n return props.docUrl;\n },\n get repo() {\n return resolvedRepo();\n }\n })\n });\n}\nfunction DocumentTitleInner(props) {\n const [doc, handle] = useDocument(() => props.docUrl(), {\n repo: props.repo\n });\n const registry = getRegistry(\"patchwork:datatype\");\n const [registryVersion, setRegistryVersion] = createSignal(0);\n onMount(() => {\n const off = registry.on(\"changed\", () => setRegistryVersion(v => v + 1));\n onCleanup(off);\n });\n const typeId = createMemo(() => {\n const d = doc();\n return d ? getType(d) : void 0;\n });\n createEffect(() => {\n const id = typeId();\n if (id) void registry.load(id);\n });\n const datatype = createMemo(() => {\n registryVersion();\n const id = typeId();\n if (!id) return void 0;\n const dt = registry.get(id);\n return dt && isLoadedPlugin(dt) ? dt : void 0;\n });\n const title = createMemo(() => {\n const d = doc();\n const dt = datatype();\n if (!d || !dt) return void 0;\n return dt.module.getTitle(d);\n });\n const canEdit = createMemo(() => !!handle() && typeof datatype()?.module.setTitle === \"function\");\n const [editing, setEditing] = createSignal(false);\n let inputRef;\n function startEditing() {\n if (!canEdit()) return;\n setEditing(true);\n queueMicrotask(() => {\n inputRef?.focus();\n inputRef?.select();\n });\n }\n function commit(save) {\n if (!editing()) return;\n setEditing(false);\n if (!save) return;\n const next = inputRef?.value.trim();\n if (!next || next === title()) return;\n const h = handle();\n const setTitle = datatype()?.module.setTitle;\n if (!h || !setTitle) return;\n h.change(d => {\n setTitle(d, next);\n const meta = d[\"@patchwork\"];\n if (meta) meta.title = next;\n });\n }\n return _$createComponent(Show, {\n get when() {\n return editing();\n },\n get fallback() {\n return (() => {\n var _el$3 = _tmpl$();\n _el$3.$$click = startEditing;\n _$insert(_el$3, () => title() ?? \"Untitled\");\n _$effect(_p$ => {\n var _v$ = !!canEdit(),\n _v$2 = canEdit() ? \"Rename\" : void 0;\n _v$ !== _p$.e && _el$3.classList.toggle(\"threepane__title-text--editable\", _p$.e = _v$);\n _v$2 !== _p$.t && _$setAttribute(_el$3, \"title\", _p$.t = _v$2);\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$3;\n })();\n },\n get children() {\n var _el$2 = _tmpl$2();\n _el$2.$$keydown = e => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n commit(true);\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n commit(false);\n }\n };\n _el$2.addEventListener(\"blur\", () => commit(true));\n var _ref$2 = inputRef;\n typeof _ref$2 === \"function\" ? _$use(_ref$2, _el$2) : inputRef = _el$2;\n _$effect(() => _el$2.value = title() ?? \"\");\n return _el$2;\n }\n });\n}\n_$delegateEvents([\"keydown\", \"click\"]);", "// 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", "import type {DocHandleChangePayload} from \"@automerge/automerge-repo/slim\"\nimport {apply, fromAutomerge} from \"cabbages\"\n\n/**\n * convert automerge patches to solid producer operations\n * @param payload the\n * [DocHandleChangePayload](https://automerge.org/automerge-repo/interfaces/_automerge_automerge_repo.DocHandleChangePayload.html)\n * from the handle.on(\"change\n * @returns a callback for an immer-like function. e.g.\n * [produce](https://docs.solidjs.com/reference/store-utilities/produce) for\n * [Solid\n * Stores](https://docs.solidjs.com/reference/store-utilities/create-store)\n */\nexport default function autoproduce<T>(\n\tpayload: DocHandleChangePayload<T>\n): (doc: T) => void {\n\treturn (doc: T) => {\n\t\tfor (let patch of payload.patches) {\n\t\t\tapply(doc, ...fromAutomerge(patch, payload))\n\t\t}\n\t}\n}\n", "import {createMemo, type Accessor} from \"solid-js\"\nimport {type DocHandle, type Doc} from \"@automerge/automerge-repo/slim\"\nimport makeDocumentProjection from \"./makeDocumentProjection.ts\"\nimport {access} from \"@solid-primitives/utils\"\n\n/**\n * get a fine-grained live view of a document from a handle. works with\n * {@link useDocHandle}.\n * @param handle an accessor (signal/resource) of a\n * [DocHandle](https://automerge.org/automerge-repo/classes/_automerge_automerge_repo.DocHandle.html)\n */\nexport default function createDocumentProjection<T extends object>(\n\thandle: Accessor<DocHandle<T> | undefined>\n): Accessor<Doc<T> | undefined> {\n\tconst projection = createMemo<Doc<T> | undefined>(\n\t\t() => access(handle) && makeDocumentProjection<T>(access(handle)!)\n\t)\n\treturn projection\n}\n", "import {onCleanup} from \"solid-js\"\nimport type {\n\tDoc,\n\tDocHandle,\n\tDocHandleChangePayload,\n} from \"@automerge/automerge-repo/slim\"\nimport autoproduce from \"./autoproduce.ts\"\nimport {createStore, produce, reconcile, type Store} from \"solid-js/store\"\n\nconst cache = new WeakMap<\n\tDocHandle<unknown>,\n\t{\n\t\trefs: number\n\t\tstore: Store<Doc<unknown>>\n\t\tcleanup(): void\n\t}\n>()\n\n/**\n * make a fine-grained live view of a document from its handle.\n * @param handle an Automerge\n * [DocHandle](https://automerge.org/automerge-repo/classes/_automerge_automerge_repo.DocHandle.html)\n */\nexport default function makeDocumentProjection<T extends object>(\n\thandle: DocHandle<T>\n): Doc<T> {\n\tonCleanup(() => {\n\t\tconst item = cache.get(handle)!\n\t\tif (!item) return\n\t\tif (!item.refs--) {\n\t\t\titem.cleanup()\n\t\t}\n\t})\n\n\tif (cache.has(handle)) {\n\t\tconst item = cache.get(handle)!\n\t\titem.refs++\n\t\treturn item.store as Doc<T>\n\t}\n\n\tconst [doc, set] = createStore<Doc<T>>(structuredClone(handle.doc()!))\n\n\tcache.set(handle, {\n\t\trefs: 0,\n\t\tstore: doc,\n\t\tcleanup() {\n\t\t\thandle.off(\"change\", patch)\n\t\t\thandle.off(\"delete\", ondelete)\n\t\t\tcache.delete(handle)\n\t\t},\n\t})\n\n\tfunction patch(payload: DocHandleChangePayload<T>) {\n\t\t// `scopeReplaced` means the change landed at or above this (sub-)handle's\n\t\t// scope boundary, so it can't be expressed as in-scope patches. The\n\t\t// payload still carries `doc` \u2014 the new value at the handle's path (the\n\t\t// part of the store this scope points at) \u2014 so we reconcile against that\n\t\t// instead of applying patches. `reconcile` structurally diffs it against\n\t\t// the current store, so unchanged subtrees keep their identity and only\n\t\t// the parts that actually changed notify. `doc` is undefined when the\n\t\t// scope was removed entirely.\n\t\tif (payload.scopeReplaced) {\n\t\t\tset(reconcile((payload.doc ?? {}) as Doc<T>))\n\t\t\treturn\n\t\t}\n\t\tset(produce(autoproduce(payload)))\n\t}\n\n\tfunction ondelete() {\n\t\tset(reconcile({} as Doc<T>))\n\t}\n\n\thandle.on(\"change\", patch)\n\thandle.on(\"delete\", ondelete)\n\n\thandle.whenReady().then(() => {\n\t\tset(structuredClone(handle.doc()!))\n\t})\n\n\treturn doc\n}\n", "import { getOwner, onCleanup, createSignal, untrack, sharedConfig, onMount, DEV, equalFn, } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nexport * from \"./types.js\";\n//\n// GENERAL HELPERS:\n//\nexport { isServer };\nexport const isClient = !isServer;\nexport const isDev = isClient && !!DEV;\nexport const isProd = !isDev;\n/** no operation */\nexport const noop = (() => void 0);\nexport const trueFn = () => true;\nexport const falseFn = () => false;\n/** @deprecated use {@link equalFn} from \"solid-js\" */\nexport const defaultEquals = equalFn;\nexport const EQUALS_FALSE_OPTIONS = { equals: false };\nexport const INTERNAL_OPTIONS = { internal: true };\n/**\n * Check if the value is an instance of ___\n */\nexport const ofClass = (v, c) => v instanceof c || (v && v.constructor === c);\n/** Check if value is typeof \"object\" or \"function\" */\nexport function isObject(value) {\n return value !== null && (typeof value === \"object\" || typeof value === \"function\");\n}\nexport const isNonNullable = (i) => i != null;\nexport const filterNonNullable = (arr) => arr.filter(isNonNullable);\nexport const compare = (a, b) => (a < b ? -1 : a > b ? 1 : 0);\n/**\n * Check shallow array equality\n */\nexport const arrayEquals = (a, b) => a === b || (a.length === b.length && a.every((e, i) => e === b[i]));\n/**\n * Returns a function that will call all functions in the order they were chained with the same arguments.\n */\nexport function chain(callbacks) {\n return (...args) => {\n for (const callback of callbacks)\n callback && callback(...args);\n };\n}\n/**\n * Returns a function that will call all functions in the reversed order with the same arguments.\n */\nexport function reverseChain(callbacks) {\n return (...args) => {\n for (let i = callbacks.length - 1; i >= 0; i--) {\n const callback = callbacks[i];\n callback && callback(...args);\n }\n };\n}\nexport const clamp = (n, min, max) => Math.min(Math.max(n, min), max);\n/**\n * Accesses the value of a MaybeAccessor\n * @example\n * ```ts\n * access(\"foo\") // => \"foo\"\n * access(() => \"foo\") // => \"foo\"\n * ```\n */\nexport const access = (v) => typeof v === \"function\" && !v.length ? v() : v;\nexport const asArray = (value) => Array.isArray(value) ? value : value ? [value] : [];\n/**\n * Access an array of MaybeAccessors\n * @example\n * const list = [1, 2, () => 3)] // T: MaybeAccessor<number>[]\n * const newList = accessArray(list) // T: number[]\n */\nexport const accessArray = (list) => list.map(v => access(v));\n/**\n * Run the function if the accessed value is not `undefined` nor `null`\n * @param value\n * @param fn\n */\nexport const withAccess = (value, fn) => {\n const _value = access(value);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n typeof _value != null && fn(_value);\n};\nexport const asAccessor = (v) => (typeof v === \"function\" ? v : () => v);\n/** If value is a function \u2013 call it with a given arguments \u2013 otherwise get the value as is */\nexport function accessWith(valueOrFn, ...args) {\n return typeof valueOrFn === \"function\" ? valueOrFn(...args) : valueOrFn;\n}\nexport function defer(deps, fn, initialValue) {\n const isArray = Array.isArray(deps);\n let prevInput;\n let shouldDefer = true;\n return prevValue => {\n let input;\n if (isArray) {\n input = Array(deps.length);\n for (let i = 0; i < deps.length; i++)\n input[i] = deps[i]();\n }\n else\n input = deps();\n if (shouldDefer) {\n shouldDefer = false;\n prevInput = input;\n return initialValue;\n }\n const result = untrack(() => fn(input, prevInput, prevValue));\n prevInput = input;\n return result;\n };\n}\n/**\n * Get entries of an object\n */\nexport const entries = Object.entries;\n/**\n * Get keys of an object\n */\nexport const keys = Object.keys;\n/**\n * Solid's `onCleanup` that doesn't warn in development if used outside of a component.\n */\nexport const tryOnCleanup = isDev\n ? fn => (getOwner() ? onCleanup(fn) : fn)\n : onCleanup;\nexport const createCallbackStack = () => {\n let stack = [];\n const clear = () => (stack = []);\n return {\n push: (...callbacks) => stack.push(...callbacks),\n execute(arg0, arg1, arg2, arg3) {\n stack.forEach(cb => cb(arg0, arg1, arg2, arg3));\n clear();\n },\n clear,\n };\n};\n/**\n * Group synchronous function calls.\n * @param fn\n * @returns `fn`\n */\nexport function createMicrotask(fn) {\n let calls = 0;\n let args;\n onCleanup(() => (calls = 0));\n return (...a) => {\n (args = a), calls++;\n queueMicrotask(() => --calls === 0 && fn(...args));\n };\n}\n/**\n * A hydratable version of the {@link createSignal}. It will use the serverValue on the server and the update function on the client. If initialized during hydration it will use serverValue as the initial value and update it once hydration is complete.\n *\n * @param serverValue initial value of the state on the server\n * @param update called once on the client or on hydration to initialize the value\n * @param options {@link SignalOptions}\n * @returns\n * ```ts\n * [state: Accessor<T>, setState: Setter<T>]\n * ```\n * @see {@link createSignal}\n */\nexport function createHydratableSignal(serverValue, update, options) {\n if (isServer) {\n return createSignal(serverValue, options);\n }\n if (sharedConfig.context) {\n const [state, setState] = createSignal(serverValue, options);\n onMount(() => setState(() => update()));\n return [state, setState];\n }\n return createSignal(update(), options);\n}\n/** @deprecated use {@link createHydratableSignal} instead */\nexport const createHydrateSignal = createHydratableSignal;\n/**\n * Handle items removed and added to the array by diffing it by refference.\n *\n * @param current new array instance\n * @param prev previous array copy\n * @param handleAdded called once for every added item to array\n * @param handleRemoved called once for every removed from array\n */\nexport function handleDiffArray(current, prev, handleAdded, handleRemoved) {\n const currLength = current.length;\n const prevLength = prev.length;\n let i = 0;\n if (!prevLength) {\n for (; i < currLength; i++)\n handleAdded(current[i]);\n return;\n }\n if (!currLength) {\n for (; i < prevLength; i++)\n handleRemoved(prev[i]);\n return;\n }\n for (; i < prevLength; i++) {\n if (prev[i] !== current[i])\n break;\n }\n let prevEl;\n let currEl;\n prev = prev.slice(i);\n current = current.slice(i);\n for (prevEl of prev) {\n if (!current.includes(prevEl))\n handleRemoved(prevEl);\n }\n for (currEl of current) {\n if (!prev.includes(currEl))\n handleAdded(currEl);\n }\n}\n// \u2500\u2500\u2500 String transforms \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/**\n * Parse a string as a single JSON value.\n *\n * ```ts\n * const { data } = createSSE<{ status: string }>(url, { transform: json });\n * ```\n */\nexport const json = (raw) => JSON.parse(raw);\n/**\n * Parse a string as newline-delimited JSON (NDJSON / JSON Lines).\n *\n * Each non-empty line is parsed as a separate JSON value and returned as an array.\n *\n * ```ts\n * const { data } = createSSE<TickEvent[]>(url, { transform: ndjson });\n * // data() === [{ id: 1, type: \"tick\" }, { id: 2, type: \"tick\" }]\n * ```\n */\nexport const ndjson = (raw) => raw\n .split(\"\\n\")\n .filter(line => line !== \"\")\n .map(line => JSON.parse(line));\n/**\n * Split a string into individual lines, returning a `string[]`. Empty lines are filtered out.\n *\n * ```ts\n * const { data } = createSSE<string[]>(url, { transform: lines });\n * // data() === [\"line one\", \"line two\"]\n * ```\n */\nexport const lines = (raw) => raw.split(\"\\n\").filter(line => line !== \"\");\n/**\n * Parse a string as a number using `Number()` semantics.\n *\n * Note: `\"\"` \u2192 `0`, non-numeric strings \u2192 `NaN`.\n *\n * ```ts\n * const { data } = createSSE<number>(url, { transform: number });\n * // data() === 42\n * ```\n */\nexport const number = (raw) => Number(raw);\nexport function safe(transform, fallback) {\n return (raw) => {\n try {\n return transform(raw);\n }\n catch {\n return fallback;\n }\n };\n}\n/**\n * Compose two transforms into one: the output of `a` is passed as the input of `b`.\n *\n * ```ts\n * const { data } = createSSE<RawEvent[]>(url, {\n * transform: pipe(ndjson<RawEvent>, rows => rows.filter(r => r.type === \"tick\")),\n * });\n * ```\n */\nexport function pipe(a, b) {\n return (raw) => b(a(raw));\n}\n", "import type {AutomergeUrl, DocHandle} from \"@automerge/automerge-repo/slim\"\nimport {createEffect, createResource, useContext, type Resource} from \"solid-js\"\nimport {access, type MaybeAccessor} from \"@solid-primitives/utils\"\nimport {RepoContext} from \"./context.ts\"\nimport type {UseDocHandleOptions} from \"./types.ts\"\n\n/**\n * get a\n * [DocHandle](https://automerge.org/automerge-repo/classes/_automerge_automerge_repo.DocHandle.html)\n * from an\n * [AutomergeUrl](https://automerge.org/automerge-repo/types/_automerge_automerge_repo.AutomergeUrl.html)\n * as a\n * [Resource](https://docs.solidjs.com/reference/basic-reactivity/create-resource).\n * Waits for the handle to be ready.\n */\nexport default function useDocHandle<T>(\n\turl: MaybeAccessor<AutomergeUrl | undefined>,\n\toptions?: UseDocHandleOptions\n): Resource<DocHandle<T> | undefined> {\n\tconst contextRepo = useContext(RepoContext)\n\n\tif (!options?.repo && !contextRepo) {\n\t\tthrow new Error(\"use outside <RepoContext> requires options.repo\")\n\t}\n\n\tconst repo = (options?.repo || contextRepo)!\n\n\tfunction getExistingHandle() {\n\t\tif (options?.[\"~skipInitialValue\"]) return undefined\n\t\tconst unwrappedURL = access(url)\n\t\tif (!unwrappedURL) return undefined\n\t\tconst state = repo.findWithProgress<T>(unwrappedURL).peek()\n\t\treturn state.state === \"ready\" ? state.handle : undefined\n\t}\n\n\tconst [handle, {mutate}] = createResource(\n\t\turl,\n\t\turl => repo.findWithProgress<T>(url).whenReady(),\n\t\t{\n\t\t\tinitialValue: getExistingHandle(),\n\t\t}\n\t)\n\n\tcreateEffect(() => {\n\t\tif (!access(url)) {\n\t\t\tmutate()\n\t\t}\n\t})\n\n\treturn handle\n}\n", "import type {Repo} from \"@automerge/automerge-repo/slim\"\nimport {createContext, type Context} from \"solid-js\"\n\n/**\n * a [context](https://docs.solidjs.com/concepts/context) that provides access\n * to an Automerge Repo. you don't need this, you can pass the repo in the\n * second arg to the functions that need it.\n */\nexport const RepoContext: Context<Repo | null> = createContext<Repo | null>(\n\tnull\n)\n", "import type {AutomergeUrl, Doc, DocHandle} from \"@automerge/automerge-repo/slim\"\nimport createDocumentProjection from \"./createDocumentProjection.ts\"\nimport type {MaybeAccessor} from \"@solid-primitives/utils\"\nimport useDocHandle from \"./useDocHandle.ts\"\nimport type {UseDocHandleOptions} from \"./types.ts\"\nimport type {Accessor, Resource} from \"solid-js\"\n\n/**\n * get a fine-grained live view of a document, and its handle, from a URL.\n * @param url a function that returns a url\n */\nexport default function useDocument<T extends object>(\n\turl: MaybeAccessor<AutomergeUrl | undefined>,\n\toptions?: UseDocHandleOptions\n): [Accessor<Doc<T> | undefined>, Resource<DocHandle<T> | undefined>] {\n\tconst handle = useDocHandle<T>(url, options)\n\treturn [createDocumentProjection<T>(handle), handle] as const\n}\n", "import {onCleanup, type Accessor} from \"solid-js\"\nimport {createSignal} from \"solid-js\"\nimport type {Doc, DocHandle} from \"@automerge/automerge-repo/slim\"\n\n/**\n * a light coarse-grained primitive when you care only _that_ a doc has changed,\n * and not _how_.\n * @param handle an Automerge\n * [DocHandle](https://automerge.org/automerge-repo/classes/_automerge_automerge_repo.DocHandle.html)\n */\nexport default function makeDocSignal<T extends object>(\n\thandle: DocHandle<T>\n): Accessor<Doc<T> | undefined> {\n\tconst [signal, setSignal] = createSignal<Doc<T> | undefined>(handle.doc())\n\n\tfunction update() {\n\t\tsetSignal(() => handle.doc() as Doc<T> | undefined)\n\t}\n\n\thandle.on(\"change\", update)\n\tonCleanup(() => handle.off(\"change\", update))\n\n\treturn signal\n}\n", "import {createEffect, onCleanup, type Accessor} from \"solid-js\"\nimport {createSignal} from \"solid-js\"\nimport type {Doc, DocHandle} from \"@automerge/automerge-repo/slim\"\n\n/**\n * a light coarse-grained primitive when you care only _that_ a doc has changed,\n * and not _how_. works with {@link useDocHandle}.\n * @param handle an accessor (signal/resource) of a\n * [DocHandle](https://automerge.org/automerge-repo/classes/_automerge_automerge_repo.DocHandle.html)\n */\nexport default function createDocSignal<T extends object>(\n\thandle: Accessor<DocHandle<T> | undefined>\n): Accessor<Doc<T> | undefined> {\n\tconst [signal, setSignal] = createSignal<Doc<T> | undefined>(handle()?.doc())\n\n\tcreateEffect(() => {\n\t\tconst h = handle()\n\n\t\tfunction update() {\n\t\t\tsetSignal(() => h?.doc() as Doc<T> | undefined)\n\t\t}\n\n\t\t// sync the signal with the current handle's doc\n\t\tupdate()\n\n\t\tif (h) {\n\t\t\th.on(\"change\", update)\n\t\t\tonCleanup(() => h.off(\"change\", update))\n\t\t}\n\t})\n\n\treturn signal\n}\n", "import type {Repo} from \"@automerge/automerge-repo/slim\"\nimport {RepoContext} from \"./context.ts\"\nimport {useContext} from \"solid-js\"\n\n/** grab the repo from the {@link RepoContext} */\nexport default function useRepo(): Repo {\n\tconst repo = useContext(RepoContext)\n\tif (!repo) throw new Error(\"Please wrap me in a <RepoContext value={repo}>\")\n\treturn repo\n}\n", "import { template as _$template } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents } from \"solid-js/web\";\nimport { getOwner as _$getOwner } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<div class=context-sidebar__tabs><button type=button class=context-sidebar__close title=\"Hide context sidebar\"aria-label=\"Hide context sidebar\">`),\n _tmpl$2 = /*#__PURE__*/_$template(`<div class=context-sidebar__content>`),\n _tmpl$3 = /*#__PURE__*/_$template(`<div class=context-sidebar>`),\n _tmpl$4 = /*#__PURE__*/_$template(`<patchwork-view>`, true, false, false),\n _tmpl$5 = /*#__PURE__*/_$template(`<svg xmlns=http://www.w3.org/2000/svg width=18 height=18 viewBox=\"0 0 24 24\"fill=none stroke=var(--studio-chrome-line) stroke-width=1.75 stroke-linecap=round stroke-linejoin=round><rect width=18 height=18 x=3 y=3 rx=2></rect><path d=\"M15 3v18\">`);\nimport { Show } from \"solid-js\";\nimport { useTaggedComponents } from \"../hooks\";\nimport { Sidebar } from \"./Sidebar\";\nimport { ContextTabs } from \"./ContextTabs\";\nexport function ContextSidebar(props) {\n const items = useTaggedComponents(\"context-tool\");\n const activeToolId = () => {\n const ids = items().map(item => item.id);\n const selected = props.selectedToolId();\n return selected && ids.includes(selected) ? selected : ids[0];\n };\n return _$createComponent(Sidebar, {\n side: \"right\",\n get isCollapsed() {\n return props.isCollapsed;\n },\n get width() {\n return props.width;\n },\n get onMouseDown() {\n return props.onMouseDown;\n },\n get onToggleClick() {\n return props.onToggleClick;\n },\n get canExpand() {\n return props.canExpand;\n },\n get children() {\n var _el$ = _tmpl$3();\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return items().length;\n },\n get children() {\n var _el$2 = _tmpl$(),\n _el$3 = _el$2.firstChild;\n _$insert(_el$2, _$createComponent(ContextTabs, {\n items: items,\n get selectedToolId() {\n return props.selectedToolId;\n },\n get setSelectedToolId() {\n return props.setSelectedToolId;\n }\n }), _el$3);\n _el$3.$$click = () => props.onCollapse();\n _$insert(_el$3, _$createComponent(PanelRightIcon, {}));\n return _el$2;\n }\n }), null);\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return !props.isCollapsed();\n },\n get children() {\n var _el$4 = _tmpl$2();\n _$insert(_el$4, _$createComponent(Show, {\n get when() {\n return activeToolId();\n },\n keyed: true,\n children: id => (() => {\n var _el$5 = _tmpl$4();\n _el$5.component = id;\n _el$5._$owner = _$getOwner();\n return _el$5;\n })()\n }));\n return _el$4;\n }\n }), null);\n return _el$;\n }\n });\n}\nexport function PanelRightIcon() {\n return _tmpl$5();\n}\n_$delegateEvents([\"click\"]);", "import { template as _$template } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents } from \"solid-js/web\";\nimport { setStyleProperty as _$setStyleProperty } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { memo as _$memo } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<button class=\"sidebar-toggle sidebar-toggle--resizable\">`),\n _tmpl$2 = /*#__PURE__*/_$template(`<div class=sidebar>`);\nimport { Show } from \"solid-js\";\nexport function Sidebar(props) {\n const widthStyle = () => `${props.isCollapsed() ? 0 : props.width()}px`;\n const canExpand = () => props.canExpand?.() ?? true;\n const content = () => _$createComponent(Show, {\n get when() {\n return !props.isCollapsed();\n },\n get children() {\n return props.children;\n }\n });\n const handle = () => _$createComponent(Show, {\n get when() {\n return !props.isCollapsed() || canExpand();\n },\n get children() {\n var _el$ = _tmpl$();\n _el$.$$mousedown = e => props.onMouseDown(e);\n _el$.$$click = e => props.onToggleClick(e);\n _$effect(_p$ => {\n var _v$ = props.isCollapsed() ? \"Expand sidebar\" : \"Toggle or resize sidebar\",\n _v$2 = props.isCollapsed() ? \"Click to expand, drag to resize\" : \"Click to toggle, drag to resize\";\n _v$ !== _p$.e && _$setAttribute(_el$, \"aria-label\", _p$.e = _v$);\n _v$2 !== _p$.t && _$setAttribute(_el$, \"title\", _p$.t = _v$2);\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$;\n }\n });\n return (() => {\n var _el$2 = _tmpl$2();\n _$insert(_el$2, (() => {\n var _c$ = _$memo(() => props.side === \"left\");\n return () => _c$() ? [_$memo(content), _$memo(handle)] : [_$memo(handle), _$memo(content)];\n })());\n _$effect(_p$ => {\n var _v$3 = props.side,\n _v$4 = props.isCollapsed() ? \"\" : void 0,\n _v$5 = widthStyle();\n _v$3 !== _p$.e && _$setAttribute(_el$2, \"data-side\", _p$.e = _v$3);\n _v$4 !== _p$.t && _$setAttribute(_el$2, \"data-collapsed\", _p$.t = _v$4);\n _v$5 !== _p$.a && _$setStyleProperty(_el$2, \"width\", _p$.a = _v$5);\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined\n });\n return _el$2;\n })();\n}\n_$delegateEvents([\"click\", \"mousedown\"]);", "import { template as _$template } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<div role=tablist class=context-sidebar__tablist>`),\n _tmpl$2 = /*#__PURE__*/_$template(`<button type=button role=tab class=context-sidebar__tab>`);\nimport { For } from \"solid-js\";\nexport function ContextTabs(props) {\n const activeToolId = () => {\n const ids = props.items().map(item => item.id);\n const selected = props.selectedToolId();\n return selected && ids.includes(selected) ? selected : ids[0];\n };\n return (() => {\n var _el$ = _tmpl$();\n _$insert(_el$, _$createComponent(For, {\n get each() {\n return props.items();\n },\n children: item => (() => {\n var _el$2 = _tmpl$2();\n _el$2.$$click = () => props.setSelectedToolId(item.id);\n _$insert(_el$2, () => item.name);\n _$effect(() => _$setAttribute(_el$2, \"data-active\", activeToolId() === item.id ? \"\" : void 0));\n return _el$2;\n })()\n }));\n return _el$;\n })();\n}\n_$delegateEvents([\"click\"]);", "import { template as _$template } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { getOwner as _$getOwner } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nimport { memo as _$memo } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<patchwork-view>`, true, false, false);\nimport { Show } from \"solid-js\";\nexport const slotId = slot => Array.isArray(slot) ? String(slot[0]) : String(slot);\nexport function uniqueSlots(slots) {\n const seen = /* @__PURE__ */new Set();\n return slots.filter(slot => {\n const id = slotId(slot);\n if (seen.has(id)) return false;\n seen.add(id);\n return true;\n });\n}\nexport function SlotView(props) {\n return _$createComponent(Show, {\n get when() {\n return _$memo(() => !!Array.isArray(props.slot))() ? props.slot : false;\n },\n get fallback() {\n return (() => {\n var _el$ = _tmpl$();\n _el$._$owner = _$getOwner();\n _$effect(() => _el$.component = String(props.slot));\n return _el$;\n })();\n },\n children: tuple => (() => {\n var _el$2 = _tmpl$();\n _el$2._$owner = _$getOwner();\n _$effect(_p$ => {\n var _v$ = tuple()[1],\n _v$2 = tuple()[0];\n _v$ !== _p$.e && (_el$2.docUrl = _p$.e = _v$);\n _v$2 !== _p$.t && (_el$2.toolId = _p$.t = _v$2);\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$2;\n })()\n });\n}", "import { template as _$template } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { getOwner as _$getOwner } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nimport { memo as _$memo } from \"solid-js/web\";\nimport { use as _$use } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<div class=document-view>`),\n _tmpl$2 = /*#__PURE__*/_$template(`<patchwork-view>`, true, false, false),\n _tmpl$3 = /*#__PURE__*/_$template(`<div class=placeholder>Select a document in the sidebar`),\n _tmpl$4 = /*#__PURE__*/_$template(`<div class=doc-stack>`);\nimport { parseAutomergeUrl } from \"@automerge/automerge-repo/slim\";\nimport { getSuggestedImportUrl, getType } from \"@inkandswitch/patchwork-filesystem\";\nimport { getFallbackTool, getRegistry } from \"@inkandswitch/patchwork-plugins\";\nimport { createEffect, createMemo, createSignal, onCleanup, onMount, Show } from \"solid-js\";\nimport { Finding, InvalidUrlCard, NoToolCard, NotSharedCard, ToolFailedCard, UnavailableCard } from \"./DocumentCards\";\nimport { canOpen, cardText, onKeyhiveOps, pageHive } from \"./keyhiveAccess\";\nconst RECHECK_NOT_SHARED_MS = 5e3;\nexport function MainDocumentView({\n viewKey,\n selectedDocUrl,\n toolId,\n ref\n}) {\n let container;\n const [repo, setRepo] = createSignal();\n onMount(() => {\n setRepo(container.closest(\"repo-provider\")?.repo ?? null);\n });\n return (() => {\n var _el$ = _tmpl$();\n _$use(el => {\n container = el;\n ref?.(el);\n }, _el$);\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return _$memo(() => repo() !== void 0)() && viewKey();\n },\n keyed: true,\n children: _key => _$createComponent(Show, {\n get when() {\n return repo();\n },\n get fallback() {\n return (() => {\n var _el$2 = _tmpl$2();\n _el$2._$owner = _$getOwner();\n _$effect(_p$ => {\n var _v$ = selectedDocUrl(),\n _v$2 = toolId();\n _v$ !== _p$.e && (_el$2.docUrl = _p$.e = _v$);\n _v$2 !== _p$.t && (_el$2.toolId = _p$.t = _v$2);\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$2;\n })();\n },\n children: r => _$createComponent(DocumentView, {\n get url() {\n return selectedDocUrl();\n },\n toolId: toolId,\n get repo() {\n return r();\n }\n })\n })\n }), null);\n _$insert(_el$, (() => {\n var _c$ = _$memo(() => !!!selectedDocUrl());\n return () => _c$() && _tmpl$3();\n })(), null);\n return _el$;\n })();\n}\nfunction DocumentView(props) {\n const tools = getRegistry(\"patchwork:tool\");\n const [toolsChanged, setToolsChanged] = createSignal(0);\n onCleanup(tools.on(\"changed\", () => {\n setToolsChanged(n => n + 1);\n }));\n const [lookup, setLookup] = createSignal({\n state: \"finding\"\n });\n const [peekWith, setPeekWith] = createSignal();\n const asked = () => props.toolId() ?? peekWith();\n const [mounted, setMounted] = createSignal(false);\n const [attempt, setAttempt] = createSignal(0);\n let disposed = false;\n onCleanup(() => disposed = true);\n async function find() {\n try {\n const handle = await props.repo.find(props.url);\n if (disposed) return;\n const wasUnavailable = lookup().state === \"unavailable\";\n setLookup({\n state: \"ready\",\n doc: handle.doc()\n });\n if (wasUnavailable && !mounted()) setAttempt(n => n + 1);\n } catch (error) {\n if (disposed) return;\n const invalid = isInvalidUrlError(error);\n setLookup({\n state: invalid ? \"invalid\" : \"unavailable\"\n });\n if (!invalid) setMisses(n => n + 1);\n }\n }\n const [misses, setMisses] = createSignal(0);\n let progress;\n let unwatch;\n function watch() {\n unwatch?.();\n progress = findProgress(props.repo, props.url);\n unwatch = progress?.subscribe(p => {\n if (p.state === \"ready\" && lookup().state === \"unavailable\") void find();\n });\n }\n onCleanup(() => unwatch?.());\n void find();\n watch();\n function askAgain() {\n const repo = props.repo;\n if (typeof repo.resyncSubduction !== \"function\") return;\n try {\n repo.resyncSubduction(parseAutomergeUrl(props.url).documentId);\n } catch {}\n }\n let retryTimer;\n onCleanup(() => clearTimeout(retryTimer));\n function retry(after = 1e3) {\n askAgain();\n clearTimeout(retryTimer);\n retryTimer = setTimeout(() => void find(), after);\n }\n createEffect(() => {\n const n = misses();\n if (n === 0 || lookup().state !== \"unavailable\" || mounted()) return;\n retry(Math.min(3e4, 3e3 * 2 ** (n - 1)));\n onCleanup(() => clearTimeout(retryTimer));\n });\n const view = createMemo(() => {\n toolsChanged();\n const found = lookup();\n if (found.state !== \"ready\") return found;\n const doc = found.doc;\n const type = doc ? getType(doc) : void 0;\n if (!type) return {\n state: \"open\",\n toolId: void 0\n };\n let id = asked();\n let anything;\n if (!id) {\n const fallback = safely(() => getFallbackTool(doc));\n if (fallback && opensOnlyAsAnything(fallback.supportedDatatypes, type)) anything = {\n id: fallback.id,\n name: fallback.name\n };else if (fallback) id = fallback.id;\n }\n if (id && tools.get(id)) return {\n state: \"open\",\n toolId: id\n };\n return {\n state: \"no-tool\",\n type,\n suggestion: getSuggestedImportUrl(doc),\n anything\n };\n });\n const state = createMemo(() => view().state);\n const openTool = createMemo(() => {\n const v = view();\n return v.state === \"open\" ? v.toolId : void 0;\n });\n const [toolError, setToolError] = createSignal();\n async function loadTool(id) {\n try {\n await tools.load(id);\n if (openTool() === id) setToolError(void 0);\n return true;\n } catch (error) {\n if (openTool() === id) {\n setToolError({\n id,\n message: error instanceof Error ? error.message : String(error)\n });\n }\n return false;\n }\n }\n createEffect(() => {\n const id = openTool();\n setToolError(void 0);\n if (id) void loadTool(id);\n });\n const hive = pageHive();\n const [shared, setShared] = createSignal();\n createEffect(() => {\n if (!hive || state() !== \"open\") {\n setShared(void 0);\n return;\n }\n const url = props.url;\n let live = true;\n const check = () => void canOpen(hive, url).then(open => {\n if (live) setShared(open);\n });\n check();\n const off = onKeyhiveOps(hive, check);\n const poll = setInterval(() => {\n if (shared() === false) check();\n }, RECHECK_NOT_SHARED_MS);\n onCleanup(() => {\n live = false;\n off();\n clearInterval(poll);\n });\n });\n async function retryTool() {\n const id = toolError()?.id;\n if (id && (await loadTool(id))) setAttempt(n => n + 1);\n }\n const noTool = createMemo(() => {\n const v = view();\n return v.state === \"no-tool\" ? v : void 0;\n });\n return (() => {\n var _el$4 = _tmpl$4();\n _$use(el => {\n const onMounted = event => {\n const detail = event.detail;\n if (detail?.url && detail.url !== props.url) return;\n setMounted(true);\n if (lookup().state === \"unavailable\") void find();\n };\n el.addEventListener(\"patchwork:mounted\", onMounted);\n onCleanup(() => el.removeEventListener(\"patchwork:mounted\", onMounted));\n }, _el$4);\n _$insert(_el$4, _$createComponent(Show, {\n get when() {\n return _$memo(() => state() === \"open\")() && !toolError() || state() === \"unavailable\";\n },\n get children() {\n return _$createComponent(Show, {\n get when() {\n return attempt() + 1;\n },\n keyed: true,\n children: _attempt => (() => {\n var _el$5 = _tmpl$2();\n _el$5._$owner = _$getOwner();\n _$effect(_p$ => {\n var _v$3 = props.url,\n _v$4 = asked();\n _v$3 !== _p$.e && (_el$5.docUrl = _p$.e = _v$3);\n _v$4 !== _p$.t && (_el$5.toolId = _p$.t = _v$4);\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$5;\n })()\n });\n }\n }), null);\n _$insert(_el$4, _$createComponent(Show, {\n get when() {\n return state() === \"finding\";\n },\n get children() {\n return _$createComponent(Finding, {});\n }\n }), null);\n _$insert(_el$4, _$createComponent(Show, {\n get when() {\n return _$memo(() => state() === \"open\")() && shared() === false;\n },\n get children() {\n return _$createComponent(NotSharedCard, {\n get url() {\n return props.url;\n },\n get card() {\n return hive && cardText(hive);\n }\n });\n }\n }), null);\n _$insert(_el$4, _$createComponent(Show, {\n get when() {\n return toolError();\n },\n children: failed => _$createComponent(ToolFailedCard, {\n get url() {\n return props.url;\n },\n get name() {\n return tools.get(failed().id)?.name ?? failed().id;\n },\n get error() {\n return failed().message;\n },\n onRetry: retryTool\n })\n }), null);\n _$insert(_el$4, _$createComponent(Show, {\n get when() {\n return state() === \"invalid\";\n },\n get children() {\n return _$createComponent(InvalidUrlCard, {\n get url() {\n return props.url;\n }\n });\n }\n }), null);\n _$insert(_el$4, _$createComponent(Show, {\n get when() {\n return _$memo(() => state() === \"unavailable\")() && !mounted();\n },\n get children() {\n return _$createComponent(UnavailableCard, {\n get url() {\n return props.url;\n },\n get repo() {\n return props.repo;\n },\n onRetry: retry\n });\n }\n }), null);\n _$insert(_el$4, _$createComponent(Show, {\n get when() {\n return noTool();\n },\n children: v => _$createComponent(NoToolCard, {\n get url() {\n return props.url;\n },\n get type() {\n return v().type;\n },\n get suggestion() {\n return v().suggestion;\n },\n get anything() {\n return v().anything;\n },\n onPeek: setPeekWith,\n get repo() {\n return props.repo;\n }\n })\n }), null);\n return _el$4;\n })();\n}\nfunction findProgress(repo, url) {\n const withProgress = repo.findWithProgress;\n if (typeof withProgress !== \"function\") return void 0;\n return safely(() => {\n const p = withProgress.call(repo, url);\n return typeof p?.subscribe === \"function\" && typeof p?.peek === \"function\" ? p : void 0;\n });\n}\nfunction isInvalidUrlError(error) {\n const message = error?.message ?? String(error);\n return /invalid (automergeurl|document url|documentid|document id)/i.test(message);\n}\nfunction opensOnlyAsAnything(supported, type) {\n const list = supported === \"*\" ? [\"*\"] : supported ?? [];\n return list.includes(\"*\") && !list.includes(type);\n}\nfunction safely(fn) {\n try {\n return fn();\n } catch {\n return void 0;\n }\n}", "import { template as _$template } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { memo as _$memo } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { use as _$use } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<div class=doc-card><svg class=doc-card__defs aria-hidden=true><filter id=doc-card-rough><feTurbulence type=fractalNoise baseFrequency=0.04 numOctaves=2 seed=1></feTurbulence><feDisplacementMap in=SourceGraphic scale=1.4></feDisplacementMap></filter></svg><div class=doc-card__sheet><h2 class=doc-card__rough>`),\n _tmpl$2 = /*#__PURE__*/_$template(`<div class=\"doc-card doc-card--finding\"role=status><span class=doc-card__dot></span><span class=doc-card__finding-label>finding this doc\u2026`),\n _tmpl$3 = /*#__PURE__*/_$template(`<p>it's a <code class=doc-card__code></code>.<br>nothing here opens one yet.`),\n _tmpl$4 = /*#__PURE__*/_$template(`<p class=doc-card__links>`),\n _tmpl$5 = /*#__PURE__*/_$template(`<p>it'll open here if a package adds a tool for it.`),\n _tmpl$6 = /*#__PURE__*/_$template(`<p>the doc suggests `),\n _tmpl$7 = /*#__PURE__*/_$template(`<div class=doc-card__actions><button type=button class=\"doc-card__button doc-card__button--primary\">`),\n _tmpl$8 = /*#__PURE__*/_$template(`<strong class=pkg-line>`),\n _tmpl$9 = /*#__PURE__*/_$template(`<span class=pkg-line__version> `),\n _tmpl$0 = /*#__PURE__*/_$template(`<p class=doc-card__notice>couldn't load it: `),\n _tmpl$1 = /*#__PURE__*/_$template(`<button type=button class=doc-card__link>open doc with `),\n _tmpl$10 = /*#__PURE__*/_$template(`<p>we couldn't get it from anywhere we looked.<br>that might mean:`),\n _tmpl$11 = /*#__PURE__*/_$template(`<ul class=doc-card__reasons><li>the person who sent you the link hasn't given you access yet</li><li>it hasn't finished syncing from their device yet</li><li>something's wrong with the `),\n _tmpl$12 = /*#__PURE__*/_$template(`<p>we'll keep looking. if it turns up, it'll open right here.`),\n _tmpl$13 = /*#__PURE__*/_$template(`<button type=button class=doc-card__sync>sync server`),\n _tmpl$14 = /*#__PURE__*/_$template(`<span class=doc-card__sync-told role=status> (<!>)`),\n _tmpl$15 = /*#__PURE__*/_$template(`<p>found it, but it's private.`),\n _tmpl$16 = /*#__PURE__*/_$template(`<p>ask the owner to share it. if you're not in their phonebook, send them your card.`),\n _tmpl$17 = /*#__PURE__*/_$template(`<p>it'll open right here once they do.`),\n _tmpl$18 = /*#__PURE__*/_$template(`<p>the doc is here, but the tool that shows it didn't load.`),\n _tmpl$19 = /*#__PURE__*/_$template(`<p class=doc-card__notice>`),\n _tmpl$20 = /*#__PURE__*/_$template(`<p>a bit of it got lost or changed on the way here, so it can't point at any doc. maybe a character dropped when it was copied, or the link got cut short.`),\n _tmpl$21 = /*#__PURE__*/_$template(`<p>if someone sent it to you, ask them for the link again.`),\n _tmpl$22 = /*#__PURE__*/_$template(`<p class=doc-card__aside><code class=\"doc-card__code doc-card__url\">`);\nimport { importPackage } from \"@inkandswitch/patchwork-filesystem\";\nimport { registerPlugins } from \"@inkandswitch/patchwork-plugins\";\nimport { createResource, createSignal, onCleanup, onMount, Show } from \"solid-js\";\nimport { PackageDetails } from \"./PackageAbout\";\nimport { readClaims } from \"./packageInfo\";\nfunction Card(props) {\n let el;\n onMount(() => {\n el.dispatchEvent(new CustomEvent(\"patchwork:no-tool\", {\n bubbles: true,\n composed: true,\n detail: {\n url: props.url\n }\n }));\n });\n return (() => {\n var _el$ = _tmpl$(),\n _el$2 = _el$.firstChild,\n _el$3 = _el$2.nextSibling,\n _el$4 = _el$3.firstChild;\n var _ref$ = el;\n typeof _ref$ === \"function\" ? _$use(_ref$, _el$) : el = _el$;\n _$insert(_el$4, () => props.title);\n _$insert(_el$3, () => props.children, null);\n return _el$;\n })();\n}\nexport function Finding() {\n return _tmpl$2();\n}\nexport function NoToolCard(props) {\n const [loading, setLoading] = createSignal(false);\n const [failed, setFailed] = createSignal();\n const [claims] = createResource(() => props.suggestion, url => readClaims(url).catch(() => void 0));\n async function load(url) {\n const ok = window.confirm(`Load this package?\n\n${url}\n\nIts code runs in this page and can read and change your documents. Only load it if you trust where it came from.`);\n if (!ok) return;\n setFailed(void 0);\n setLoading(true);\n try {\n const mod = await importPackage(url);\n if (!Array.isArray(mod?.plugins)) throw new Error(\"it doesn't export any plugins\");\n registerPlugins(mod.plugins, url);\n } catch (error) {\n console.error(`couldn't load the package at ${url}`, error);\n setFailed(error?.message ?? String(error));\n } finally {\n setLoading(false);\n }\n }\n const named = () => {\n const c = claims();\n return c && (c.title || c.name) ? c : void 0;\n };\n return _$createComponent(Card, {\n get url() {\n return props.url;\n },\n title: \"no tool for this\",\n get children() {\n return [(() => {\n var _el$6 = _tmpl$3(),\n _el$7 = _el$6.firstChild,\n _el$8 = _el$7.nextSibling;\n _$insert(_el$8, () => props.type);\n return _el$6;\n })(), _$createComponent(Show, {\n get when() {\n return props.suggestion;\n },\n get fallback() {\n return _tmpl$5();\n },\n children: url => [(() => {\n var _el$1 = _tmpl$6(),\n _el$10 = _el$1.firstChild;\n _$insert(_el$1, _$createComponent(Show, {\n get when() {\n return named();\n },\n fallback: \"a package.\",\n children: c => [(() => {\n var _el$14 = _tmpl$8();\n _$insert(_el$14, () => c().title ?? c().name);\n return _el$14;\n })(), _$createComponent(Show, {\n get when() {\n return c().version;\n },\n children: v => (() => {\n var _el$15 = _tmpl$9(),\n _el$16 = _el$15.firstChild;\n _$insert(_el$15, v, null);\n return _el$15;\n })()\n }), \".\"]\n }), null);\n return _el$1;\n })(), (() => {\n var _el$12 = _tmpl$7(),\n _el$13 = _el$12.firstChild;\n _el$13.$$click = () => void load(url());\n _$insert(_el$13, () => loading() ? \"loading\\u2026\" : \"load package\");\n _$effect(() => _el$13.disabled = loading());\n return _el$12;\n })(), _$createComponent(Show, {\n get when() {\n return failed();\n },\n children: why => (() => {\n var _el$17 = _tmpl$0(),\n _el$18 = _el$17.firstChild;\n _$insert(_el$17, why, null);\n return _el$17;\n })()\n })]\n }), _$createComponent(Show, {\n get when() {\n return props.suggestion || props.anything;\n },\n get children() {\n var _el$9 = _tmpl$4();\n _$insert(_el$9, _$createComponent(Show, {\n get when() {\n return props.suggestion;\n },\n children: url => _$createComponent(PackageDetails, {\n get url() {\n return url();\n },\n get repo() {\n return props.repo;\n },\n get claims() {\n return claims();\n },\n get claimsLoading() {\n return claims.loading;\n }\n })\n }), null);\n _$insert(_el$9, _$createComponent(Show, {\n get when() {\n return props.anything;\n },\n children: tool => (() => {\n var _el$19 = _tmpl$1(),\n _el$20 = _el$19.firstChild;\n _el$19.$$click = () => props.onPeek(tool().id);\n _$insert(_el$19, () => tool().name.toLowerCase(), null);\n return _el$19;\n })()\n }), null);\n return _el$9;\n }\n })];\n }\n });\n}\nexport function UnavailableCard(props) {\n const repo = props.repo;\n const knowsConnection = typeof repo.isSubductionConnected === \"function\";\n const [connected, setConnected] = createSignal(knowsConnection ? repo.isSubductionConnected() : void 0);\n const update = now => {\n const was = connected();\n setConnected(now);\n if (now && was === false) props.onRetry();\n };\n if (knowsConnection && repo.on && repo.off) {\n const onConnection = p => update(p.connected);\n repo.on(\"subduction-connection\", onConnection);\n onCleanup(() => repo.off(\"subduction-connection\", onConnection));\n }\n if (knowsConnection) {\n const poll = setInterval(() => update(repo.isSubductionConnected()), 2e3);\n onCleanup(() => clearInterval(poll));\n }\n return _$createComponent(Card, {\n get url() {\n return props.url;\n },\n title: \"can't load this doc\",\n get children() {\n return [_tmpl$10(), (() => {\n var _el$22 = _tmpl$11(),\n _el$23 = _el$22.firstChild,\n _el$24 = _el$23.nextSibling,\n _el$25 = _el$24.nextSibling,\n _el$26 = _el$25.firstChild;\n _$insert(_el$25, _$createComponent(Show, {\n get when() {\n return connected() !== void 0;\n },\n fallback: \"sync server\",\n get children() {\n return _$createComponent(SyncServer, {\n get connected() {\n return connected();\n }\n });\n }\n }), null);\n return _el$22;\n })(), _tmpl$12()];\n }\n });\n}\nfunction SyncServer(props) {\n const [told, setTold] = createSignal(false);\n const status = () => `sync server: ${props.connected ? \"connected\" : \"disconnected\"}`;\n return [(() => {\n var _el$29 = _tmpl$13();\n _el$29.$$click = () => setTold(t => !t);\n _$effect(_p$ => {\n var _v$ = props.connected ? \"\" : void 0,\n _v$2 = status(),\n _v$3 = status(),\n _v$4 = told();\n _v$ !== _p$.e && _$setAttribute(_el$29, \"data-connected\", _p$.e = _v$);\n _v$2 !== _p$.t && _$setAttribute(_el$29, \"title\", _p$.t = _v$2);\n _v$3 !== _p$.a && _$setAttribute(_el$29, \"aria-label\", _p$.a = _v$3);\n _v$4 !== _p$.o && _$setAttribute(_el$29, \"aria-expanded\", _p$.o = _v$4);\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined\n });\n return _el$29;\n })(), _$createComponent(Show, {\n get when() {\n return told();\n },\n get children() {\n var _el$30 = _tmpl$14(),\n _el$31 = _el$30.firstChild,\n _el$34 = _el$31.nextSibling,\n _el$33 = _el$34.nextSibling;\n _$insert(_el$30, () => props.connected ? \"connected\" : \"disconnected\", _el$34);\n return _el$30;\n }\n })];\n}\nexport function NotSharedCard(props) {\n const [copied, setCopied] = createSignal(false);\n let reset;\n onCleanup(() => clearTimeout(reset));\n const copy = async () => {\n if (!props.card) return;\n await navigator.clipboard.writeText(props.card);\n setCopied(true);\n clearTimeout(reset);\n reset = setTimeout(() => setCopied(false), 1500);\n };\n return _$createComponent(Card, {\n get url() {\n return props.url;\n },\n title: \"not shared with you yet\",\n get children() {\n return [_tmpl$15(), _tmpl$16(), _tmpl$17(), _$createComponent(Show, {\n get when() {\n return props.card;\n },\n get children() {\n var _el$38 = _tmpl$7(),\n _el$39 = _el$38.firstChild;\n _el$39.$$click = () => void copy();\n _$insert(_el$39, () => copied() ? \"copied\" : \"copy my card\");\n return _el$38;\n }\n })];\n }\n });\n}\nexport function ToolFailedCard(props) {\n const [trying, setTrying] = createSignal(false);\n const retry = async () => {\n setTrying(true);\n try {\n await props.onRetry();\n } finally {\n setTrying(false);\n }\n };\n return _$createComponent(Card, {\n get url() {\n return props.url;\n },\n get title() {\n return `can't load ${props.name}`;\n },\n get children() {\n return [_tmpl$18(), (() => {\n var _el$41 = _tmpl$19();\n _$insert(_el$41, () => props.error);\n return _el$41;\n })(), (() => {\n var _el$42 = _tmpl$7(),\n _el$43 = _el$42.firstChild;\n _el$43.$$click = () => void retry();\n _$insert(_el$43, () => trying() ? \"trying\\u2026\" : \"try again\");\n _$effect(() => _el$43.disabled = trying());\n return _el$42;\n })()];\n }\n });\n}\nexport function InvalidUrlCard(props) {\n return _$createComponent(Card, {\n get url() {\n return props.url;\n },\n title: \"this link is broken\",\n get children() {\n return [_tmpl$20(), _tmpl$21(), (() => {\n var _el$46 = _tmpl$22(),\n _el$47 = _el$46.firstChild;\n _$insert(_el$47, () => props.url);\n return _el$46;\n })()];\n }\n });\n}\n_$delegateEvents([\"click\"]);", "import { template as _$template } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { memo as _$memo } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nimport { use as _$use } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<button type=button class=doc-card__link>see package details`),\n _tmpl$2 = /*#__PURE__*/_$template(`<p class=pkg-about__quiet>reading\u2026`),\n _tmpl$3 = /*#__PURE__*/_$template(`<p class=pkg-about__quiet>no package.json.`),\n _tmpl$4 = /*#__PURE__*/_$template(`<dl class=pkg-about__facts><dt>plugins</dt><dd>`),\n _tmpl$5 = /*#__PURE__*/_$template(`<dt>pinned`),\n _tmpl$6 = /*#__PURE__*/_$template(`<dd>`),\n _tmpl$7 = /*#__PURE__*/_$template(`<dt>history`),\n _tmpl$8 = /*#__PURE__*/_$template(`<dd class=pkg-about__quiet>reading\u2026`),\n _tmpl$9 = /*#__PURE__*/_$template(`<dd class=pkg-about__quiet>couldn't get its folder.`),\n _tmpl$0 = /*#__PURE__*/_$template(`<div class=pkg-about popover=auto><header class=pkg-about__header><h3 class=doc-card__rough></h3><button type=button class=\"doc-card__link pkg-about__close\"popovertargetaction=hide aria-label=close>\u00D7</button></header><section class=\"pkg-about__section pkg-about__section--claims\"><h4>self-reported <span class=pkg-about__tag>unverified</span></h4></section><section class=pkg-about__section><h4>source</h4><dl class=pkg-about__facts><dt>url</dt><dd><code class=\"doc-card__code doc-card__url\">`),\n _tmpl$1 = /*#__PURE__*/_$template(`<span class=pkg-about__version> `),\n _tmpl$10 = /*#__PURE__*/_$template(`<button type=button class=doc-card__link>`),\n _tmpl$11 = /*#__PURE__*/_$template(`<span class=pkg-about__quiet>unknown until loaded`),\n _tmpl$12 = /*#__PURE__*/_$template(`<p class=doc-card__notice>`),\n _tmpl$13 = /*#__PURE__*/_$template(`<dt>heads`),\n _tmpl$14 = /*#__PURE__*/_$template(`<dd> <!>, <!> <p class=pkg-about__quiet>writers are devices, not people. folder only.`),\n _tmpl$15 = /*#__PURE__*/_$template(`<dt>`),\n _tmpl$16 = /*#__PURE__*/_$template(`<ul class=pkg-about__list>`),\n _tmpl$17 = /*#__PURE__*/_$template(`<span>nothing`),\n _tmpl$18 = /*#__PURE__*/_$template(`<span class=pkg-about__quiet> for `),\n _tmpl$19 = /*#__PURE__*/_$template(`<li>`),\n _tmpl$20 = /*#__PURE__*/_$template(`<span class=pkg-about__quiet> \u00B7 `),\n _tmpl$21 = /*#__PURE__*/_$template(`<span class=pkg-about__heads>`),\n _tmpl$22 = /*#__PURE__*/_$template(`<code class=doc-card__code>`),\n _tmpl$23 = /*#__PURE__*/_$template(`<li class=pkg-about__quiet>and <!> more`),\n _tmpl$24 = /*#__PURE__*/_$template(`<li><code class=doc-card__code></code> <!> `);\nimport { createResource, createSignal, For, Match, onMount, Show, Switch } from \"solid-js\";\nimport { askPlugins, isAutomergeUrl, pinnedHeads, readHistory } from \"./packageInfo\";\nlet popovers = 0;\nexport function PackageDetails(props) {\n const id = `pkg-about-${++popovers}`;\n const automerge = isAutomergeUrl(props.url);\n const pinned = pinnedHeads(props.url);\n const [opened, setOpened] = createSignal(false);\n const [history] = createResource(() => opened() && automerge ? props.url : void 0, url => readHistory(props.repo, url));\n const [asking, setAsking] = createSignal(false);\n const [asked, setAsked] = createSignal();\n const [askFailed, setAskFailed] = createSignal();\n async function ask() {\n const ok = window.confirm(`Listing its plugins runs the package's code in a background worker.\n\n${props.url}\n\nIt can use the network and this site's stored data, including your documents. Only run it if you trust where it came from.\n\nRun it?`);\n if (!ok) return;\n setAskFailed(void 0);\n setAsking(true);\n try {\n setAsked(await askPlugins(props.url));\n } catch (error) {\n setAskFailed(error?.message ?? String(error));\n } finally {\n setAsking(false);\n }\n }\n let popover;\n onMount(() => {\n popover.addEventListener(\"toggle\", event => {\n if (event.newState === \"open\") setOpened(true);\n });\n });\n const heading = () => props.claims?.title ?? props.claims?.name ?? \"package\";\n const listed = () => asked() ?? props.claims?.plugins;\n return [(() => {\n var _el$ = _tmpl$();\n _$setAttribute(_el$, \"popovertarget\", id);\n return _el$;\n })(), (() => {\n var _el$2 = _tmpl$0(),\n _el$3 = _el$2.firstChild,\n _el$4 = _el$3.firstChild,\n _el$5 = _el$4.nextSibling,\n _el$6 = _el$3.nextSibling,\n _el$7 = _el$6.firstChild,\n _el$11 = _el$6.nextSibling,\n _el$12 = _el$11.firstChild,\n _el$13 = _el$12.nextSibling,\n _el$14 = _el$13.firstChild,\n _el$15 = _el$14.nextSibling,\n _el$16 = _el$15.firstChild;\n var _ref$ = popover;\n typeof _ref$ === \"function\" ? _$use(_ref$, _el$2) : popover = _el$2;\n _$setAttribute(_el$2, \"id\", id);\n _$insert(_el$4, heading, null);\n _$insert(_el$4, _$createComponent(Show, {\n get when() {\n return props.claims?.version;\n },\n children: v => (() => {\n var _el$23 = _tmpl$1(),\n _el$24 = _el$23.firstChild;\n _$insert(_el$23, v, null);\n return _el$23;\n })()\n }), null);\n _$setAttribute(_el$5, \"popovertarget\", id);\n _$insert(_el$6, _$createComponent(Switch, {\n get children() {\n return [_$createComponent(Match, {\n get when() {\n return props.claimsLoading;\n },\n get children() {\n return _tmpl$2();\n }\n }), _$createComponent(Match, {\n get when() {\n return _$memo(() => !!!props.claims)() && !asked();\n },\n get children() {\n return _tmpl$3();\n }\n }), _$createComponent(Match, {\n when: true,\n get children() {\n var _el$0 = _tmpl$4(),\n _el$1 = _el$0.firstChild,\n _el$10 = _el$1.nextSibling;\n _$insert(_el$0, _$createComponent(Fact, {\n label: \"name\",\n get value() {\n return props.claims?.name;\n }\n }), _el$1);\n _$insert(_el$0, _$createComponent(Fact, {\n label: \"title\",\n get value() {\n return props.claims?.title;\n }\n }), _el$1);\n _$insert(_el$0, _$createComponent(Fact, {\n label: \"author\",\n get value() {\n return props.claims?.author;\n }\n }), _el$1);\n _$insert(_el$0, _$createComponent(Fact, {\n label: \"description\",\n get value() {\n return props.claims?.description;\n }\n }), _el$1);\n _$insert(_el$10, _$createComponent(Show, {\n get when() {\n return listed();\n },\n get fallback() {\n return _$createComponent(Show, {\n when: automerge,\n get fallback() {\n return _tmpl$11();\n },\n get children() {\n var _el$25 = _tmpl$10();\n _el$25.$$click = () => void ask();\n _$insert(_el$25, () => asking() ? \"listing\\u2026\" : \"list them\");\n _$effect(() => _el$25.disabled = asking());\n return _el$25;\n }\n });\n },\n children: plugins => _$createComponent(Plugins, {\n get plugins() {\n return plugins();\n }\n })\n }), null);\n _$insert(_el$10, _$createComponent(Show, {\n get when() {\n return askFailed();\n },\n children: why => (() => {\n var _el$27 = _tmpl$12();\n _$insert(_el$27, why);\n return _el$27;\n })()\n }), null);\n return _el$0;\n }\n })];\n }\n }), null);\n _$insert(_el$16, () => props.url);\n _$insert(_el$13, _$createComponent(Show, {\n get when() {\n return pinned.length;\n },\n get children() {\n return [_tmpl$5(), (() => {\n var _el$18 = _tmpl$6();\n _$insert(_el$18, _$createComponent(Heads, {\n heads: pinned\n }));\n return _el$18;\n })()];\n }\n }), null);\n _$insert(_el$13, _$createComponent(Show, {\n when: automerge,\n get children() {\n return _$createComponent(Switch, {\n get children() {\n return [_$createComponent(Match, {\n get when() {\n return history.loading;\n },\n get children() {\n return [_tmpl$7(), _tmpl$8()];\n }\n }), _$createComponent(Match, {\n get when() {\n return history.error;\n },\n get children() {\n return [_tmpl$7(), _tmpl$9()];\n }\n }), _$createComponent(Match, {\n get when() {\n return history();\n },\n children: h => [_tmpl$13(), (() => {\n var _el$29 = _tmpl$6();\n _$insert(_el$29, _$createComponent(Heads, {\n get heads() {\n return h().heads;\n }\n }));\n return _el$29;\n })(), _tmpl$7(), (() => {\n var _el$31 = _tmpl$14(),\n _el$32 = _el$31.firstChild,\n _el$36 = _el$32.nextSibling,\n _el$33 = _el$36.nextSibling,\n _el$37 = _el$33.nextSibling,\n _el$34 = _el$37.nextSibling,\n _el$35 = _el$34.nextSibling;\n _$insert(_el$31, () => h().changes, _el$32);\n _$insert(_el$31, () => h().changes === 1 ? \"change\" : \"changes\", _el$36);\n _$insert(_el$31, () => h().writers.length, _el$37);\n _$insert(_el$31, () => h().writers.length === 1 ? \"writer\" : \"writers\", _el$35);\n _$insert(_el$31, _$createComponent(Writers, {\n get writers() {\n return h().writers;\n }\n }), _el$35);\n return _el$31;\n })()]\n })];\n }\n });\n }\n }), null);\n return _el$2;\n })()];\n}\nfunction Fact(props) {\n return _$createComponent(Show, {\n get when() {\n return props.value;\n },\n get children() {\n return [(() => {\n var _el$38 = _tmpl$15();\n _$insert(_el$38, () => props.label);\n return _el$38;\n })(), (() => {\n var _el$39 = _tmpl$6();\n _$insert(_el$39, () => props.value);\n return _el$39;\n })()];\n }\n });\n}\nfunction Plugins(props) {\n return _$createComponent(Show, {\n get when() {\n return props.plugins.length;\n },\n get fallback() {\n return _tmpl$17();\n },\n get children() {\n var _el$40 = _tmpl$16();\n _$insert(_el$40, _$createComponent(For, {\n get each() {\n return props.plugins;\n },\n children: p => (() => {\n var _el$42 = _tmpl$19();\n _$insert(_el$42, () => p.name ?? p.id ?? \"(unnamed)\", null);\n _$insert(_el$42, _$createComponent(Show, {\n get when() {\n return p.type;\n },\n children: t => (() => {\n var _el$46 = _tmpl$20(),\n _el$47 = _el$46.firstChild;\n _$insert(_el$46, t, null);\n return _el$46;\n })()\n }), null);\n _$insert(_el$42, _$createComponent(Show, {\n get when() {\n return p.supportedDatatypes?.length;\n },\n get children() {\n var _el$43 = _tmpl$18(),\n _el$44 = _el$43.firstChild;\n _$insert(_el$43, () => p.supportedDatatypes.join(\", \"), null);\n return _el$43;\n }\n }), null);\n return _el$42;\n })()\n }));\n return _el$40;\n }\n });\n}\nfunction Heads(props) {\n return (() => {\n var _el$48 = _tmpl$21();\n _$insert(_el$48, _$createComponent(For, {\n get each() {\n return props.heads;\n },\n children: head => (() => {\n var _el$49 = _tmpl$22();\n _$setAttribute(_el$49, \"title\", head);\n _$insert(_el$49, () => head.slice(0, 7));\n return _el$49;\n })()\n }));\n return _el$48;\n })();\n}\nconst MOST_WRITERS = 6;\nfunction Writers(props) {\n const more = () => props.writers.length - MOST_WRITERS;\n return (() => {\n var _el$50 = _tmpl$16();\n _$insert(_el$50, _$createComponent(For, {\n get each() {\n return props.writers.slice(0, MOST_WRITERS);\n },\n children: w => (() => {\n var _el$55 = _tmpl$24(),\n _el$56 = _el$55.firstChild,\n _el$57 = _el$56.nextSibling,\n _el$61 = _el$57.nextSibling,\n _el$58 = _el$61.nextSibling;\n _$insert(_el$56, () => w.actor.slice(0, 8));\n _$insert(_el$55, () => w.changes, _el$61);\n _$insert(_el$55, () => w.changes === 1 ? \"change\" : \"changes\", null);\n _$insert(_el$55, _$createComponent(Show, {\n get when() {\n return w.last;\n },\n get children() {\n var _el$59 = _tmpl$20(),\n _el$60 = _el$59.firstChild;\n _$insert(_el$59, () => span(w), null);\n return _el$59;\n }\n }), null);\n _$effect(() => _$setAttribute(_el$56, \"title\", w.actor));\n return _el$55;\n })()\n }), null);\n _$insert(_el$50, _$createComponent(Show, {\n get when() {\n return more() > 0;\n },\n get children() {\n var _el$51 = _tmpl$23(),\n _el$52 = _el$51.firstChild,\n _el$54 = _el$52.nextSibling,\n _el$53 = _el$54.nextSibling;\n _$insert(_el$51, more, _el$54);\n return _el$51;\n }\n }), null);\n return _el$50;\n })();\n}\nfunction day(seconds) {\n return new Date(seconds * 1e3).toLocaleDateString(void 0, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\"\n });\n}\nfunction span(w) {\n const last = day(w.last);\n const first = w.first ? day(w.first) : last;\n return first === last ? last : `${first} \\u2013 ${last}`;\n}\n_$delegateEvents([\"click\"]);", "// What we can learn about a package a doc suggests, before anyone loads it.\n//\n// Two kinds of thing, kept apart because they deserve different trust:\n//\n// \u2022 what the package says about itself: its package.json (fetched, never\n// run), and, only when asked, the plugins it reports when its entry module\n// is imported in the host's module-loader worker. Either can say anything.\n// \u2022 what we can see for ourselves: the automerge URL, its heads, and who has\n// written to the package's folder doc, read from our own repo.\n//\n// The package.json reading and the worker protocol are copied from the\n// packages tool (packages/src/pkg-meta.ts, packages/src/discover-plugins.ts),\n// minus its main-thread import paths: here nothing a doc suggests runs on the\n// page before it's loaded for real.\n\nimport type { AutomergeUrl, Repo } from \"@automerge/automerge-repo/slim\";\nimport * as Automerge from \"@automerge/automerge/slim\";\nimport { getImportableUrlFromAutomergeUrl } from \"@inkandswitch/patchwork-filesystem\";\n\nexport const isAutomergeUrl = (url: string): boolean =>\n url.startsWith(\"automerge:\");\n\n/** The url without any `#heads` pin or `?query`. */\nexport function bareAutomergeUrl(url: string): AutomergeUrl {\n return url.replace(/[#?].*$/, \"\") as AutomergeUrl;\n}\n\n/** The heads an automerge url is pinned to, if it is (`automerge:<id>#a|b`). */\nexport function pinnedHeads(url: string): string[] {\n const hash = url.split(\"#\")[1];\n return hash ? hash.split(\"|\").filter(Boolean) : [];\n}\n\n// \u2500\u2500 what it says \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface PluginClaim {\n id?: string;\n name?: string;\n type?: string;\n supportedDatatypes?: string[];\n}\n\nexport interface PackageClaims {\n name?: string;\n title?: string;\n version?: string;\n description?: string;\n author?: string;\n /** the plugins its package.json lists, if it lists any */\n plugins?: PluginClaim[];\n}\n\nconst text = (value: unknown): string | undefined =>\n typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n\nfunction author(value: unknown): string | undefined {\n if (typeof value === \"string\") return text(value);\n if (value && typeof value === \"object\") {\n const { name, email } = value as { name?: unknown; email?: unknown };\n const n = text(name);\n const e = text(email);\n return n && e ? `${n} <${e}>` : (n ?? e);\n }\n return undefined;\n}\n\nfunction pluginClaim(plugin: unknown): PluginClaim {\n if (!plugin || typeof plugin !== \"object\") return {};\n const p = plugin as Record<string, unknown>;\n const datatypes = p.supportedDatatypes;\n return {\n id: text(p.id),\n name: text(p.name),\n type: text(p.type),\n supportedDatatypes:\n typeof datatypes === \"string\"\n ? [datatypes]\n : Array.isArray(datatypes)\n ? datatypes.filter((d): d is string => typeof d === \"string\")\n : undefined,\n };\n}\n\nasync function fetchJson(url: string): Promise<unknown> {\n try {\n const res = await fetch(url);\n return res.ok ? await res.json() : undefined;\n } catch {\n return undefined;\n }\n}\n\n// build output dirs to look past for an http package's package.json\nconst BUILD_DIRS = new Set([\"dist\", \"build\", \"lib\", \"out\", \"esm\", \"src\", \"public\"]);\n\nasync function packageJson(url: string): Promise<unknown> {\n if (isAutomergeUrl(url)) {\n // the service worker serves the folder doc's files; fetching one runs nothing\n const base = getImportableUrlFromAutomergeUrl(url as AutomergeUrl);\n return fetchJson(new URL(\"package.json\", base).href);\n }\n let u: URL;\n try {\n u = new URL(url);\n } catch {\n return undefined;\n }\n const dirs = u.pathname.split(\"/\").filter(Boolean);\n if (/\\.[a-z0-9]+$/i.test(dirs.at(-1) ?? \"\")) dirs.pop();\n for (;;) {\n const base = `${u.origin}/${dirs.join(\"/\")}${dirs.length ? \"/\" : \"\"}`;\n const pkg = await fetchJson(new URL(\"package.json\", base).href);\n if (pkg && typeof pkg === \"object\") return pkg;\n if (!BUILD_DIRS.has(dirs.at(-1)?.toLowerCase() ?? \"\")) return undefined;\n dirs.pop();\n }\n}\n\n/** What the package's package.json says, read without running anything. */\nexport async function readClaims(url: string): Promise<PackageClaims | undefined> {\n const pkg = (await packageJson(url)) as Record<string, unknown> | undefined;\n if (!pkg) return undefined;\n return {\n name: text(pkg.name),\n title: text(pkg.title),\n version: text(pkg.version),\n description: text(pkg.description),\n author: author(pkg.author),\n plugins: Array.isArray(pkg.plugins) ? pkg.plugins.map(pluginClaim) : undefined,\n };\n}\n\n// the host's module-loader worker (the bootloader emits it), shared by every\n// card that asks. it imports the package's entry module and reports back the\n// plugins it exports, as plain descriptions\ntype WorkerReply =\n | { type: \"descriptors\"; id: number; descriptors: unknown[] }\n | { type: \"error\"; id: number; error: string };\n\nlet worker: Worker | undefined;\nlet nextRequest = 1;\nconst waiting = new Map<\n number,\n { resolve: (plugins: PluginClaim[]) => void; reject: (error: Error) => void }\n>();\n\nfunction moduleLoader(): Worker {\n if (worker) return worker;\n const w = new Worker(\"/module-loader-worker.js\", {\n type: \"module\",\n name: \"threepane-package-preview\",\n });\n w.addEventListener(\"message\", (event: MessageEvent<WorkerReply>) => {\n const reply = event.data;\n const entry = reply && waiting.get(reply.id);\n if (!entry) return;\n waiting.delete(reply.id);\n if (reply.type === \"descriptors\")\n entry.resolve(reply.descriptors.map(pluginClaim));\n else entry.reject(new Error(reply.error));\n });\n w.addEventListener(\"error\", (event) => {\n // not tied to any one request: fail them all, and start afresh next time\n const error = new Error(`the background worker stopped: ${event.message ?? \"no reason given\"}`);\n for (const entry of waiting.values()) entry.reject(error);\n waiting.clear();\n worker = undefined;\n });\n worker = w;\n return w;\n}\n\n/**\n * Ask the package what plugins it brings, by importing it in the host's\n * module-loader worker. This RUNS the package's entry module (off the page,\n * but with the site's storage and network), so only call it once the reader\n * has said yes. Automerge packages only: there's no worker that imports http.\n */\nexport function askPlugins(url: string, timeoutMs = 15000): Promise<PluginClaim[]> {\n const id = nextRequest++;\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n if (waiting.delete(id)) reject(new Error(\"it took too long to answer\"));\n }, timeoutMs);\n waiting.set(id, {\n resolve: (plugins) => {\n clearTimeout(timer);\n resolve(plugins);\n },\n reject: (error) => {\n clearTimeout(timer);\n reject(error);\n },\n });\n try {\n moduleLoader().postMessage({ type: \"discover\", id, url });\n } catch (error) {\n clearTimeout(timer);\n waiting.delete(id);\n reject(error instanceof Error ? error : new Error(String(error)));\n }\n });\n}\n\n// \u2500\u2500 what we can see \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface Writer {\n actor: string;\n changes: number;\n /** seconds since the epoch, as automerge keeps them (0 when unrecorded) */\n first: number;\n last: number;\n}\n\nexport interface PackageHistory {\n heads: string[];\n changes: number;\n /** most changes first */\n writers: Writer[];\n}\n\n/**\n * The folder doc's current heads, and which actors have written to it. Only\n * the folder doc itself: each file in the package is a doc of its own, with\n * its own history. Rejects when the repo can't get the folder.\n */\nexport async function readHistory(repo: Repo, url: string): Promise<PackageHistory> {\n const handle = await repo.find(bareAutomergeUrl(url));\n const doc = handle.doc();\n // give the page a moment before walking what may be a long history\n await new Promise((resolve) => setTimeout(resolve, 0));\n const metas = Automerge.getChangesMetaSince(doc, []);\n const byActor = new Map<string, Writer>();\n for (const meta of metas) {\n const time = meta.time ?? 0;\n const writer = byActor.get(meta.actor);\n if (!writer) {\n byActor.set(meta.actor, { actor: meta.actor, changes: 1, first: time, last: time });\n continue;\n }\n writer.changes++;\n if (time && (!writer.first || time < writer.first)) writer.first = time;\n if (time > writer.last) writer.last = time;\n }\n return {\n heads: [...handle.heads()],\n changes: metas.length,\n writers: [...byActor.values()].sort((a, b) => b.changes - a.changes),\n };\n}\n", "import type { AutomergeUrl } from \"@automerge/automerge-repo/slim\";\nimport * as elements from \"@inkandswitch/patchwork-elements\";\nimport { isKeyhiveDoc } from \"@inkandswitch/patchwork-plugins\";\n\n// patchwork-view's own access check, from a patchwork that has one to share:\n// it counts a doc made public, which this identity's keyhive can't see\nconst gateCheck = (\n elements as {\n hasActiveAccess?: (hive: never, url: AutomergeUrl) => Promise<boolean>;\n }\n).hasActiveAccess;\n\n/** The parts of the page's keyhive this reads. patchwork's setup() puts it on window.hive. */\ntype Hive = {\n active: {\n individual: { id: unknown };\n contactCard: { toBytes(): Uint8Array };\n };\n accessForDoc(id: unknown, url: AutomergeUrl): Promise<unknown>;\n bestAccessForDoc?(id: unknown, url: AutomergeUrl): Promise<unknown>;\n networkAdapter?: {\n on(event: \"ingest-remote\", listener: () => void): unknown;\n off(event: \"ingest-remote\", listener: () => void): unknown;\n };\n};\n\nexport const pageHive = (): Hive | undefined =>\n (globalThis as { hive?: Hive }).hive;\n\n/**\n * Whether this identity may open `url`, decided the way patchwork-view's gate\n * decides it, so a \"not shared with you\" card shows exactly when the view\n * won't open. An older patchwork's gate only counts the identity's own\n * access. Undefined when keyhive doesn't govern the doc, or can't say.\n */\nexport async function canOpen(\n hive: Hive,\n url: AutomergeUrl\n): Promise<boolean | undefined> {\n if (!isKeyhiveDoc(url)) return undefined;\n try {\n if (gateCheck) return await gateCheck(hive as never, url);\n const id = hive.active.individual.id;\n const access = hive.bestAccessForDoc\n ? await hive.bestAccessForDoc(id, url)\n : await hive.accessForDoc(id, url);\n return !!access;\n } catch {\n return undefined;\n }\n}\n\n/** Calls `listener` whenever keyhive takes in ops from elsewhere, a grant among them. */\nexport function onKeyhiveOps(hive: Hive, listener: () => void): () => void {\n hive.networkAdapter?.on(\"ingest-remote\", listener);\n return () => hive.networkAdapter?.off(\"ingest-remote\", listener);\n}\n\n/** This identity's contact card, as the phonebook copies it: base64 of its bytes. */\nexport function cardText(hive: Hive): string | undefined {\n try {\n let binary = \"\";\n for (const byte of hive.active.contactCard.toBytes()) {\n binary += String.fromCharCode(byte);\n }\n return btoa(binary);\n } catch {\n return undefined;\n }\n}\n", ":root,\n:host,\n[theme] {\n --threepane-bg: var(--studio-fill, white);\n --threepane-sidebar-fill: var(--studio-chrome, var(--studio-fill, white));\n --threepane-fg: var(--studio-line, black);\n /* ink for text sitting ON the sidebar/account-bar chrome surface. mirrors the\n toolbar/context-sidebar fg: it rides --studio-chrome-line (the chrome's own\n ink) so it tracks the chrome palette, not the content page. --threepane-fg\n is content ink and only belongs on --threepane-bg surfaces. */\n --threepane-sidebar-fg: var(--studio-chrome-line, var(--studio-line, black));\n --threepane-muted: var(--studio-line-offset-50, #999);\n --threepane-family: var(--studio-family-sans, system-ui, sans-serif);\n --threepane-family-code: var(--studio-family-code, ui-monospace, monospace);\n\n /* spacing scale, aliased from the base theme */\n --threepane-space-3xs: var(--studio-space-3xs, 0.125rem);\n --threepane-space-2xs: var(--studio-space-2xs, 0.25rem);\n --threepane-space-xs: var(--studio-space-xs, 0.375rem);\n --threepane-space-sm: var(--studio-space-sm, 0.5rem);\n --threepane-space: var(--studio-space, 0.75rem);\n --threepane-space-md: var(--studio-space-md, 1rem);\n --threepane-space-2xl: var(--studio-space-2xl, 3rem);\n\n /* radius scale, aliased from the base theme */\n --threepane-radius-xs: var(--studio-radius-xs, 2px);\n --threepane-radius-sm: var(--studio-radius-sm, 4px);\n --threepane-radius-md: var(--studio-radius-md, 8px);\n --threepane-radius-round: var(--studio-radius-round, 9999px);\n\n /* Height of the frame's top strip: the top bar over the main column, and the\n matching empty space reserved above the left sidebar's widgets so the two\n line up and the left toggle has a home. */\n --threepane-header-height: calc(\n env(safe-area-inset-top, 0px) + var(--threepane-space-2xl)\n );\n\n /* the left footer and right tray boxes share one height so they line up. */\n --threepane-tray-height: var(--threepane-space-2xl);\n /* sidebar toggles ride a touch paler than the line (first ink offset). they\n sit on chrome (left toggle over the sidebar, right over the toolbar), so\n they use the chrome ink ramp, not the content one. */\n --threepane-toggle-fg: var(--studio-chrome-line-offset-10, var(--studio-line-offset-10, #333));\n\n --threepane-toolbar: var(--studio-chrome, white);\n /* toolbar text rides on the chrome surface, so it uses the chrome ink */\n --threepane-toolbar-fg: var(--studio-chrome-line, var(--studio-line, black));\n --threepane-toolbar-border: var(--studio-chrome-offset-10, #ddd);\n /* Resize handle: a faint 1px divider that tracks the chrome ramp's contrast\n (it mixes toward the chrome ink, so it reads darker on light themes and\n lighter on dark ones), plus a primary-tinted glow + grab pill on hover. */\n --threepane-sidebar-divider: var(--studio-chrome-offset-20, #d4d4d4);\n --threepane-resize-glow: color-mix(in oklch, var(--studio-primary-fill, var(--studio-primary, #35f7ca)), transparent 35%);\n --threepane-resize-pill: var(--studio-primary-fill, var(--studio-primary, #35f7ca));\n\n /* The context (right) sidebar sits on a chrome surface stepped one offset off\n the toolbar's flat chrome, so the two chrome regions read as distinct. */\n --threepane-context-sidebar-fill: var(--studio-chrome-offset-10, #ececec);\n\n /* Context sidebar (tabbed) */\n --context-sidebar-bg: var(--threepane-context-sidebar-fill);\n /* the tab-bar header rides on the same flat chrome as the toolbar above it,\n so the two chrome strips read as one continuous band */\n --context-sidebar-header-bg: var(--studio-chrome, #f2f2f2);\n --context-sidebar-fg: var(--studio-chrome-line, var(--studio-line, black));\n /* match the lines drawn around the document-view so tab/tray edges read as\n one continuous frame */\n --context-sidebar-border: var(--threepane-toolbar-border);\n --context-sidebar-tab-fg: var(--studio-chrome-line-offset-40, var(--studio-line-offset-40, #666));\n --context-sidebar-tab-hover: var(--studio-chrome-offset-10, #e5e5e5);\n --context-sidebar-tab-active-bg: var(--studio-fill, white);\n --context-sidebar-tab-active-fg: var(--studio-line, black);\n --context-sidebar-tab-active-accent: var(--studio-primary-line, var(--studio-primary, #35f7ca));\n /* the content panel shares the active tab's surface so the selected tab\n connects seamlessly into the tool view below it */\n --context-sidebar-content-bg: var(--context-sidebar-tab-active-bg);\n --context-sidebar-family: var(--studio-family-sans, system-ui, sans-serif);\n}\n\n.frame-shell {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n}\n\n.frame-warning-banner {\n flex: none;\n padding: var(--threepane-space-2xs) var(--threepane-space-sm);\n text-align: center;\n text-transform: uppercase;\n font-family: var(--studio-family-ui, var(--threepane-family));\n font-size: 0.75rem;\n background: var(--studio-warning-fill, yellow);\n color: var(--studio-warning-line);\n}\n\n.frame {\n position: relative;\n display: flex;\n width: 100%;\n flex: 1;\n min-height: 0;\n font-family: var(--threepane-family);\n color: var(--threepane-fg);\n background: var(--threepane-bg);\n}\n\n.frame__version {\n position: absolute;\n top: var(--threepane-space-2xs);\n right: var(--threepane-space-sm);\n z-index: var(--studio-layer-raised, 10);\n color: var(--threepane-muted);\n font-size: 0.75rem;\n font-weight: 500;\n pointer-events: none;\n user-select: none;\n}\n\n.sidebar {\n position: relative;\n display: flex;\n flex: none;\n /* visible so the resize handle can straddle the boundary (sit on *both*\n sides of the divider line); the content clips itself instead. z-index lifts\n the handle's outer half above the main area so it stays grabbable. */\n overflow: visible;\n z-index: 1;\n}\n\n.sidebar[data-collapsed] {\n overflow: visible;\n}\n\n.sidebar[data-side=\"left\"] {\n background: var(--threepane-sidebar-fill);\n color: var(--threepane-sidebar-fg);\n}\n\n.sidebar[data-side=\"right\"] {\n background: var(--threepane-context-sidebar-fill);\n}\n\n.main-area {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n\n/* The main column (right of the left sidebar): a row of\n [document column | right sidebar], so the right sidebar spans the full frame\n height and its resize divider runs top-to-bottom exactly like the left one. */\n.frame__main-column {\n position: relative;\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: row;\n height: 100%;\n overflow: hidden;\n}\n\n/* The document column: the top bar over the main document view. Sits left of the\n full-height context sidebar. */\n.frame__doc-column {\n flex: 1;\n min-width: 0;\n width: 100%;\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n\n.frame__doc-column > patchwork-view,\n.frame__doc-column > patchwork-view > patchwork-view,\n.frame__doc-column > patchwork-view > patchwork-view > patchwork-view,\n.frame__doc-column\n > patchwork-view\n > patchwork-view\n > patchwork-view\n > patchwork-view {\n display: contents;\n}\n\n/* The full-width top toolbar. Its height + top safe-area inset match the\n sideboard's reserved top margin so the bar reads as continuous across the top\n (the left sidebar's empty top region lines up with it). */\n.frame__topbar {\n display: flex;\n align-items: stretch;\n box-sizing: border-box;\n min-height: var(--threepane-space-2xl);\n padding-top: env(safe-area-inset-top, 0px);\n padding-inline: var(--threepane-space-2xs);\n gap: var(--threepane-space-2xs);\n background: var(--threepane-toolbar);\n color: var(--threepane-toolbar-fg);\n /* A hairline along the bottom, in the same colour as the document-view's\n border, so the line under the bar runs unbroken across the whole width\n (document column + context tabs). The active tab pulls down 1px to break\n through it and connect to its panel below. */\n border-bottom: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--threepane-toolbar-border);\n /* Animate the collapsed left-slot in step with the sidebar's width transition\n so the title glides up against the pinned toggle instead of jumping. */\n transition: padding-left var(--studio-transition-slow, 0.25s ease);\n}\n\n/* When the left sidebar is collapsed the bar's left edge reaches the frame edge,\n where the pinned left toggle lives; reserve a matching slot so the title slides\n up against the toggle rather than under it. */\n.frame__topbar--left-collapsed {\n padding-left: var(--threepane-space-2xl);\n}\n\n/* The left sidebar toggle, pinned to the frame's top-left corner so it keeps the\n same spot whether the sidebar is open or closed. Square, filling the top strip;\n sits over the sidebar's reserved (empty) top area when open. */\n.frame__left-toggle {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n width: var(--threepane-space-2xl);\n height: var(--threepane-header-height);\n padding-top: env(safe-area-inset-top, 0px);\n}\n\n/* A sidebar toggle at either end of the top bar (always present). */\n.frame__sidebar-toggle {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n padding-inline: var(--threepane-space-sm);\n border: none;\n background: transparent;\n color: var(--threepane-toggle-fg);\n cursor: var(--studio-cursor-pointer, pointer);\n transition: color var(--studio-transition-fast, 0.1s ease);\n}\n\n.frame__sidebar-toggle:hover {\n color: var(--threepane-sidebar-fg);\n}\n\n/* The document title, rendered intrinsically: shrinks to the title's width but\n never past half the bar; ellipsis beyond. */\n.threepane__title {\n display: flex;\n align-items: center;\n flex: 0 1 auto;\n min-width: 0;\n max-width: 50%;\n overflow: hidden;\n padding-inline: var(--threepane-space-sm);\n}\n\n.threepane__title-text {\n font-weight: 600;\n white-space: nowrap;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.threepane__title-text--editable {\n cursor: var(--studio-cursor-text, text);\n}\n\n.threepane__title-text--editable:hover {\n opacity: 0.7;\n}\n\n.threepane__title-input {\n font: inherit;\n font-weight: 600;\n color: inherit;\n min-width: 0;\n width: 100%;\n padding: 0;\n margin: 0;\n border: none;\n outline: none;\n background: transparent;\n}\n\n/* built-in spacer between the title and the right-hand tools */\n.threepane__spacer {\n flex: 1;\n min-width: var(--threepane-space-sm);\n}\n\n/* configured doctitle tools at the right end; scroll horizontally when they\n overflow rather than squashing. */\n.threepane__doctitle-tools {\n display: flex;\n align-items: center;\n gap: var(--threepane-space-sm);\n min-width: 0;\n padding-inline: var(--threepane-space-sm);\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: none;\n}\n\n.threepane__doctitle-tools::-webkit-scrollbar {\n display: none;\n}\n\n.threepane__doctitle-tools patchwork-view {\n display: flex;\n align-items: center;\n height: 2rem;\n flex-shrink: 0;\n width: auto;\n}\n\n.document-view {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n /* Left divider only, square corners. The top line is the top bar's\n border-bottom and the bottom is open to the frame edge. The right divider\n (to the context sidebar) is the sidebar's own full-height border-left, so\n it runs the whole frame height rather than just the document view. When the\n left sidebar is collapsed the left divider is dropped (see the :has rule\n below) so nothing rides the frame edge. */\n border-left: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--threepane-toolbar-border);\n}\n\n/* Left sidebar collapsed to 0: drop the document-view's left divider so there's\n no stray line hugging the frame's left edge. */\n.frame:has(.sidebar[data-side=\"left\"][data-collapsed]) .document-view {\n border-left: none;\n}\n\n.document-view patchwork-view {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: var(--threepane-fg);\n}\n\n/* the main doc, and what's said in its place when it can't be shown. the\n cards lie over the patchwork-view (which may still be recovering) */\n.doc-stack {\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n/* a card in place of a doc: the sheet lattice and knit draw, in the theme's\n colours, with its serif drawn a little by hand (but holding still) */\n.doc-card {\n --doc-card-ink: var(--studio-line, #1c1a17);\n --doc-card-muted: var(--studio-line-offset-50, color-mix(in oklab, var(--doc-card-ink) 55%, transparent));\n --doc-card-line: var(--studio-chrome-line, var(--doc-card-ink));\n --doc-card-sheet: var(--editor-fill, var(--text-editor-fill, var(--studio-fill, #fffdf5)));\n --doc-card-highlighter: var(--studio-selection-fill, #ffee8888);\n --doc-card-accent: var(--studio-primary-fill, var(--studio-primary, #ff2284));\n --doc-card-accent-ink: var(--studio-primary-line, #fff);\n --doc-card-danger: var(--studio-danger-text, var(--studio-danger, #d33a4c));\n --doc-card-good: var(--studio-added, #40dcba);\n --doc-card-radius: var(--studio-radius-sm, 3px);\n --doc-card-serif: \"Fraunces\", \"Iowan Old Style\", Palatino, Georgia, serif;\n --doc-card-mono: var(--studio-family-code, Monaco, ui-monospace, monospace);\n\n position: absolute;\n inset: 0;\n z-index: 1;\n display: grid;\n box-sizing: border-box;\n place-items: center;\n overflow: auto;\n padding: 16px;\n background: var(--threepane-bg);\n color: var(--doc-card-ink);\n font-family: var(--studio-family-ui, var(--threepane-family));\n /* a doc that's only slow shouldn't flash a card on its way in */\n animation: doc-card-in var(--studio-duration-slow, 0.3s) ease 0.4s both;\n}\n\n@keyframes doc-card-in {\n from { opacity: 0; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .doc-card {\n animation-duration: 0.01s;\n }\n}\n\n.doc-card__defs {\n position: absolute;\n width: 0;\n height: 0;\n}\n\n.doc-card__sheet {\n box-sizing: border-box;\n max-width: 440px;\n padding: 24px 28px 20px;\n border: 1px solid var(--doc-card-line);\n border-radius: 0.5em;\n background: var(--doc-card-sheet);\n box-shadow: 0 0 10px 2px #66003322;\n text-align: center;\n\n & p {\n margin: 0 0 12px;\n color: var(--doc-card-muted);\n }\n}\n\n.doc-card__rough {\n margin: 0 0 6px;\n font: 400 28px/1.1 var(--doc-card-serif);\n filter: url(#doc-card-rough);\n}\n\n.doc-card__code {\n padding: 1px 5px;\n border-radius: var(--doc-card-radius);\n background: var(--doc-card-highlighter);\n color: var(--doc-card-ink);\n font: 11px var(--doc-card-mono);\n}\n\n.doc-card__url {\n display: inline-block;\n max-width: 100%;\n margin-top: 4px;\n overflow-wrap: anywhere;\n}\n\n.doc-card__reasons {\n margin: 0 0 12px;\n padding: 0 0 0 1.2em;\n color: var(--doc-card-muted);\n text-align: left;\n\n & li + li {\n margin-top: 4px;\n }\n}\n\n/* how the sync server looks from here */\n/* \"sync server\", in the colour of the connection as it stands. a button, so\n a tap can say which on a phone, where a title never shows */\n.doc-card__sync {\n padding: 0;\n border: none;\n background: none;\n color: var(--doc-card-danger);\n font: inherit;\n text-decoration: underline dotted;\n text-underline-offset: 3px;\n cursor: help;\n\n &[data-connected] {\n color: var(--doc-card-good);\n }\n}\n\n.doc-card__sync-told {\n color: var(--doc-card-ink);\n}\n\n.doc-card__actions {\n display: flex;\n justify-content: center;\n gap: 8px;\n margin: 0 0 12px;\n}\n\n.doc-card__button {\n padding: 2px 10px;\n border: 1px solid var(--doc-card-line);\n border-radius: 2px;\n background: var(--doc-card-sheet);\n box-shadow: 1px 1px 0 var(--doc-card-line);\n color: inherit;\n font: inherit;\n cursor: pointer;\n\n &:hover:not(:disabled) {\n translate: -1px -1px;\n box-shadow: 2px 2px 0 var(--doc-card-line);\n }\n\n &:active:not(:disabled) {\n translate: 1px 1px;\n box-shadow: none;\n }\n\n &:disabled {\n cursor: progress;\n opacity: 0.7;\n }\n}\n\n.doc-card__button--primary {\n min-width: 5em;\n background: var(--doc-card-accent);\n color: var(--doc-card-accent-ink);\n font-weight: 600;\n}\n\n.doc-card__link {\n padding: 0;\n border: none;\n background: none;\n color: inherit;\n font: inherit;\n text-decoration: underline;\n text-underline-offset: 2px;\n cursor: pointer;\n}\n\n.doc-card__aside {\n font-size: 0.9em;\n\n &:last-child {\n margin-bottom: 0;\n }\n}\n\n.doc-card__notice {\n color: var(--doc-card-danger) !important;\n}\n\n/* a suggested package, as its package.json names it */\n.pkg-line {\n color: var(--doc-card-ink);\n}\n\n.pkg-line__version {\n color: var(--doc-card-muted);\n}\n\n/* the card's quieter ways on, one to a line */\n.doc-card__links {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n font-size: 0.9em;\n\n &:last-child {\n margin-bottom: 0;\n }\n}\n\n/* everything known about a suggested package. a popover, so it sits in the\n top layer, but still inherits the card's colours */\n.pkg-about[popover] {\n box-sizing: border-box;\n width: min(440px, calc(100vw - 32px));\n max-height: calc(100vh - 64px);\n margin: auto;\n overflow: auto;\n padding: 18px 22px 16px;\n border: 1px solid var(--doc-card-line);\n border-radius: 0.5em;\n background: var(--doc-card-sheet);\n box-shadow: 0 0 10px 2px #66003322, 3px 3px 0 var(--doc-card-line);\n color: var(--doc-card-ink);\n font: 13px/1.45 var(--studio-family-ui, var(--threepane-family));\n text-align: left;\n\n &::backdrop {\n background: color-mix(in oklab, var(--doc-card-ink) 12%, transparent);\n }\n\n & h3 {\n margin: 0;\n font-size: 22px;\n }\n\n & h4 {\n margin: 0 0 6px;\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--doc-card-muted);\n }\n}\n\n.pkg-about__header {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.pkg-about__close {\n font-size: 20px;\n line-height: 1;\n text-decoration: none;\n}\n\n.pkg-about__section {\n margin: 0 0 14px;\n padding: 10px 12px;\n border: 1px solid var(--doc-card-line);\n border-radius: var(--doc-card-radius);\n\n &:last-child {\n margin-bottom: 0;\n }\n}\n\n/* the package's own word gets a dashed edge and the highlighter: it's quoted,\n not vouched for */\n.pkg-about__section--claims {\n border-style: dashed;\n background: color-mix(in oklab, var(--doc-card-highlighter) 35%, transparent);\n}\n\n.pkg-about__version {\n color: var(--doc-card-muted);\n font-size: 0.7em;\n}\n\n/* the claims are the package's own: say so where they're headed */\n.pkg-about__tag {\n margin-left: 4px;\n padding: 0 5px;\n border: 1px dashed currentColor;\n border-radius: var(--doc-card-radius);\n font-weight: 400;\n letter-spacing: 0.04em;\n}\n\n.pkg-about__quiet {\n color: var(--doc-card-muted);\n}\n\n.pkg-about__facts {\n display: grid;\n grid-template-columns: max-content 1fr;\n gap: 4px 12px;\n margin: 0 0 8px;\n\n & dt {\n color: var(--doc-card-muted);\n }\n\n & dd {\n min-width: 0;\n margin: 0;\n overflow-wrap: anywhere;\n }\n}\n\n.pkg-about__list {\n margin: 4px 0;\n padding: 0 0 0 1.1em;\n}\n\n.pkg-about__heads {\n display: inline-flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.pkg-about__ask {\n & .doc-card__notice {\n margin: 6px 0 0;\n }\n}\n\n/* still finding it: a quiet dot, once it's been a moment */\n.doc-card--finding {\n display: flex;\n justify-content: center;\n gap: 8px;\n color: var(--doc-card-muted);\n font-size: 0.9em;\n animation-delay: 1.5s;\n}\n\n.doc-card__dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: currentColor;\n animation: doc-card-pulse 2s ease-in-out infinite;\n}\n\n@keyframes doc-card-pulse {\n 0%, 100% { opacity: 0.25; transform: scale(0.6); }\n 50% { opacity: 1; transform: scale(1); }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .doc-card__dot {\n animation: none;\n }\n}\n\n.sidebar patchwork-view {\n display: block;\n width: 100%;\n height: 100%;\n /* the sidebar itself doesn't clip, so the content does */\n overflow: hidden;\n}\n\n/* Context sidebar (tabbed): lifted tabs with a top accent bar and surface fill\n on the active tab, a hover surface, and a bottom-border separator between the\n tab bar and the mounted tool view. */\n.context-sidebar {\n flex: 1;\n min-width: 0;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n font-family: var(--context-sidebar-family);\n color: var(--context-sidebar-fg);\n background: var(--context-sidebar-bg);\n /* The full-height divider between the document column and the sidebar. Lives\n here (not on the document view) so it runs the whole frame height \u2014 top bar\n level included \u2014 and the resize handle straddling this edge is grabbable end\n to end, matching the left sidebar. */\n border-left: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--context-sidebar-border);\n}\n\n/* Tab bar: the row holding the tab list and the collapse button. Its height +\n top safe-area inset match the document column's top bar so the two header\n strips line up and their bottom hairlines read as one continuous line across\n the divider. */\n.context-sidebar__tabs {\n display: flex;\n align-items: flex-end;\n box-sizing: border-box;\n min-height: var(--threepane-space-2xl);\n padding-top: env(safe-area-inset-top, 0px);\n background: var(--context-sidebar-header-bg);\n border-bottom: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--context-sidebar-border);\n}\n\n.context-sidebar__tablist {\n display: flex;\n flex: 1;\n min-width: 0;\n align-items: flex-end;\n gap: var(--threepane-space-2xs);\n padding-inline: var(--threepane-space-2xs);\n /* when there are more tabs than fit, scroll them horizontally rather than\n letting them shrink/wrap; scrollbar hidden for a clean header. */\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: none;\n /* extend the clip box 1px past the tab-bar border (compensated by the\n negative margin so layout is unchanged) so the active tab's -1px overflow\n isn't clipped by the horizontal scroll container, and it can still cover\n the border-bottom to connect into the panel. */\n padding-bottom: 1px;\n margin-bottom: -1px;\n}\n.context-sidebar__tablist::-webkit-scrollbar {\n display: none;\n}\n\n/* A single tab. */\n.context-sidebar__tab {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n padding: var(--threepane-space-xs) var(--threepane-space-sm);\n border: var(--studio-border-width, 1px) var(--studio-border-style, solid) transparent;\n border-bottom: none;\n border-top-left-radius: var(--threepane-radius-xs);\n border-top-right-radius: var(--threepane-radius-xs);\n background: transparent;\n font-family: inherit;\n font-size: 0.875rem;\n white-space: nowrap;\n color: var(--context-sidebar-tab-fg);\n cursor: var(--studio-cursor-pointer, pointer);\n user-select: none;\n transition: background var(--studio-transition-fast, 0.1s ease),\n color var(--studio-transition-fast, 0.1s ease);\n}\n\n.context-sidebar__tab:hover {\n background: var(--studio-chrome-hover-fill, var(--context-sidebar-tab-hover));\n color: var(--context-sidebar-tab-active-fg);\n}\n\n/* Exception: the selected tab. Pulled down 1px so its fill covers the tab-bar's\n bottom border, connecting the tab seamlessly into the panel below. */\n.context-sidebar__tab[data-active] {\n position: relative;\n margin-bottom: -1px;\n background: var(--context-sidebar-tab-active-bg);\n color: var(--context-sidebar-tab-active-fg);\n border-color: var(--context-sidebar-border);\n box-shadow: inset 0 1px 0 0 var(--context-sidebar-tab-active-accent);\n}\n\n/* The close (collapse) button. Centred vertically in the tab header (the header\n is otherwise flex-end for the tabs) so it lands at the same height as the\n reopen toggle in the top bar when the sidebar is collapsed. */\n.context-sidebar__close {\n display: flex;\n align-items: center;\n justify-content: center;\n align-self: center;\n flex-shrink: 0;\n padding-inline: var(--threepane-space-sm);\n margin-right: var(--threepane-space-2xs);\n border: none;\n background: transparent;\n color: var(--context-sidebar-fg);\n cursor: var(--studio-cursor-pointer, pointer);\n opacity: 0.5;\n transition: opacity var(--studio-transition-fast, 0.1s ease);\n}\n\n.context-sidebar__close:hover {\n opacity: 1;\n}\n\n/* The mounted tool view. */\n.context-sidebar__content {\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--context-sidebar-content-bg);\n contain: content;\n}\n\n.context-sidebar__content patchwork-view {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n/* Left sidebar body: a stack of widgets with the account footer pinned below. */\n.threepane-sidebar {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-height: 0;\n}\n\n/* Reserve the docked tray's height at the sidebar's bottom so the account bar\n sits above the tray (which is pinned outside this collapsing column). */\n.threepane-sidebar--has-tray {\n padding-bottom: calc(\n var(--threepane-tray-height) + env(safe-area-inset-bottom, 0px)\n );\n}\n\n/* account / packages / settings footer, pinned to the sidebar bottom */\n.threepane-sidebar--has-tray .threepane-sidebar__footer {\n flex: none;\n margin-bottom: calc(var(--threepane-tray-height) + env(safe-area-inset-bottom, 0px));\n}\n\n/* The inlined account bar: avatar (account picker) + Packages + Settings. */\n.threepane-account-bar {\n container-type: inline-size;\n display: flex;\n align-items: center;\n gap: var(--threepane-space-md);\n min-height: var(--threepane-space-2xl);\n box-sizing: border-box;\n background: var(--threepane-sidebar-fill);\n color: var(--threepane-sidebar-fg);\n border-top: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--threepane-sidebar-divider);\n padding-block: var(--threepane-space-2xs);\n padding-bottom: calc(var(--threepane-space-2xs) + env(safe-area-inset-bottom));\n padding-left: calc(env(safe-area-inset-left) + var(--threepane-space-md));\n padding-right: calc(env(safe-area-inset-right) + var(--threepane-space-md));\n justify-content: space-between;\n overflow: hidden;\n}\n\n.threepane-account-bar__button {\n display: flex;\n align-items: center;\n border: var(--studio-border-width, 1px) var(--studio-border-style, solid) transparent;\n padding-inline: var(--threepane-space-2xs);\n padding-block: var(--threepane-space-3xs);\n border-radius: var(--threepane-radius-xs);\n background: transparent;\n color: inherit;\n font: inherit;\n white-space: nowrap;\n cursor: var(--studio-cursor-pointer, pointer);\n}\n\n.threepane-account-bar__button:hover {\n border-color: var(--threepane-sidebar-divider);\n}\n\n.threepane-account-bar__avatar {\n padding: 0;\n}\n\n.threepane-account-bar__avatar patchwork-view {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n/* Left sidebar: a stack of configured widgets. The widgets start below the\n frame's top strip (the empty space matching the top bar), so the frame owns\n that spacing rather than each widget reserving its own top margin. */\n.threepane-widgets {\n flex: 1;\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: 0;\n padding-top: var(--threepane-header-height);\n gap: 1rem;\n}\n\n.threepane-widget {\n position: relative;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.threepane-widget patchwork-view {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n/* empty state: offer to add the document list */\n.threepane-widgets__empty {\n flex: 1;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n}\n\n.threepane-widgets__add {\n padding: var(--threepane-space-xs) var(--threepane-space-sm);\n border: var(--studio-border-width, 1px) dashed var(--threepane-sidebar-divider);\n border-radius: var(--threepane-radius-sm);\n background: transparent;\n color: var(--threepane-muted);\n font: inherit;\n cursor: var(--studio-cursor-pointer, pointer);\n white-space: nowrap;\n}\n\n.threepane-widgets__add:hover:not(:disabled) {\n color: var(--threepane-sidebar-fg);\n border-color: var(--threepane-sidebar-fg);\n}\n\n.threepane-widgets__add:disabled {\n opacity: var(--studio-disabled-opacity, 0.5);\n cursor: var(--studio-cursor-default, default);\n}\n\n/* System tray dock: pinned to the frame's bottom-left. Lives outside the\n collapsing left sidebar so it isn't torn down when the sidebar closes. When\n the sidebar is open the dock spans its width (set inline) and fills the space\n reserved by `threepane-sidebar--has-tray`; when the sidebar closes the dock is\n hidden (`display: none`) but stays mounted, so the tray is invisible while its\n tools keep running. */\n.frame__tray-dock {\n position: absolute;\n left: 0;\n bottom: 0;\n z-index: 4;\n box-sizing: border-box;\n /* Fade the tray in only *after* the sidebar's width animation completes, so it\n doesn't flash at full size over the still-expanding sidebar. The delay equals\n the sidebar's transition duration; collapsing overrides this to hide at once. */\n opacity: 1;\n transition: opacity var(--studio-transition-fast, 0.1s ease) 0.25s;\n}\n\n.frame__tray-dock--collapsed {\n opacity: 0;\n pointer-events: none;\n /* Hide immediately on collapse \u2014 no wait, no fade. */\n transition: opacity 0s;\n}\n\n/* A row of tray-tagged tools, filling the dock. */\n.frame-tray {\n display: flex;\n align-items: center;\n gap: var(--threepane-space-2xs);\n box-sizing: border-box;\n /* min-height includes the safe-area inset (border-box), and the matching\n padding-bottom lifts the tray's contents clear of it while the tray's own\n background fills the inset down to the very bottom edge. */\n min-height: calc(\n var(--threepane-tray-height) + env(safe-area-inset-bottom, 0px)\n );\n padding-inline: var(--threepane-space-sm);\n padding-bottom: env(safe-area-inset-bottom, 0px);\n border-top: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--threepane-sidebar-divider);\n background: var(--threepane-sidebar-fill);\n}\n\n.frame-tray__item {\n display: flex;\n align-items: center;\n}\n\n.frame-tray patchwork-view {\n display: flex;\n width: auto;\n height: auto;\n}\n\n/* Isolation-mode chrome popover.\n In isolation the main document area is a sandboxed iframe, so host-realm tools\n opened from the account bar (account picker / Packages / Settings) are floated\n over the frame here instead of being routed into the iframe. The backdrop is a\n lowish-opacity, theme-tinted ink wash (dims the frame + picks up the theme's\n ink hue); the panel carries a soft drop shadow so it reads as lifted. Absolute\n inset:0 resolves to the `.frame` (its nearest positioned ancestor). */\n.frame__popover-backdrop {\n position: absolute;\n inset: 0;\n z-index: var(--studio-layer-modal, 1000);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--threepane-space-2xl);\n background: var(--studio-backdrop, color-mix(in oklch, var(--threepane-fg), transparent 82%));\n animation: frame-popover-fade var(--studio-transition, 0.15s ease);\n}\n\n.frame__popover {\n display: flex;\n flex-direction: column;\n width: min(1100px, 100%);\n height: min(900px, 100%);\n overflow: hidden;\n background: var(--threepane-bg);\n color: var(--threepane-fg);\n border: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--threepane-toolbar-border);\n border-radius: var(--threepane-radius-md);\n box-shadow:\n 0 32px 80px color-mix(in oklch, var(--threepane-fg), transparent 45%),\n 0 12px 32px color-mix(in oklch, var(--threepane-fg), transparent 60%),\n 0 2px 8px color-mix(in oklch, var(--threepane-fg), transparent 70%);\n animation: frame-popover-pop var(--studio-transition, 0.15s ease);\n}\n\n/* The \"Open with\" picker, docked to the popover's top. Sits at its natural\n height above the tool body; the doc-openwith tool renders a small titlebar\n button, so this is left-aligned chrome rather than a full-height view. */\n.frame__popover-toolbar {\n display: flex;\n align-items: center;\n flex: 0 0 auto;\n gap: var(--threepane-space-sm);\n padding: var(--threepane-space-sm) var(--threepane-space-md);\n border-bottom: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--threepane-toolbar-border);\n}\n\n.frame__popover-toolbar patchwork-view {\n display: block;\n}\n\n.frame__popover-body {\n flex: 1 1 auto;\n min-height: 0;\n overflow: auto;\n}\n\n.frame__popover-body patchwork-view {\n display: block;\n width: 100%;\n height: 100%;\n overflow: auto;\n}\n\n@keyframes frame-popover-fade {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes frame-popover-pop {\n from {\n opacity: 0;\n transform: translateY(8px) scale(0.98);\n }\n to {\n opacity: 1;\n transform: none;\n }\n}\n\n.frame {\n.sidebar-toggle {\n position: relative;\n align-self: stretch;\n height: 100%;\n padding: 0;\n /* 1px wide, overlapping the divider border while reserving no layout column\n (content stays flush against the view's border - no offset-bg seam). The\n divider border is painted inside the following column, so a centered 2px\n strip reads half a pixel left of the line. */\n width: 1px;\n margin-inline: 0 -1px;\n margin-block: 0;\n border: 0;\n z-index: 1;\n cursor: var(--studio-cursor-pointer, pointer);\n /* transparent at rest - the visible divider is the main view's border; the\n handle lights up (full-height glow + pill) on hover to signal resize. */\n background: transparent;\n transition: background-color var(--studio-transition, 0.15s ease);\n /* invisible hit target straddling the divider. The toggle sits on opposite\n edges of the two sidebars (right edge of the left pane, left edge of the\n right pane). The grab area reaches 6px past the line on both sides, so it\n works the same on either edge without per-side rules. */\n &::before {\n content: \"\";\n position: absolute;\n inset-block: 0;\n inset-inline: -6px;\n }\n &::after {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n width: 5px;\n height: 44px;\n border-radius: var(--threepane-radius-round);\n background: var(--threepane-resize-pill);\n opacity: 0;\n transform: translate(-50%, -50%) scaleY(0.55);\n transition: opacity var(--studio-transition, 0.15s ease),\n transform var(--studio-transition, 0.15s ease);\n pointer-events: none;\n }\n /* on hover the divider line lights up in the frame primary */\n &:hover,\n &:active {\n background: var(--threepane-resize-glow);\n }\n &:hover::after,\n &:active::after {\n opacity: 1;\n transform: translate(-50%, -50%) scaleY(1);\n }\n}\n\n.sidebar-toggle--resizable {\n cursor: var(--studio-cursor-resize-col, col-resize);\n &:hover {\n cursor: var(--studio-cursor-resize-col, col-resize);\n }\n &:active {\n cursor: var(--studio-cursor-resize-col, col-resize);\n }\n}\n\n}\n\n/* Animate sidebar width on collapse/expand, but never while the handle is being\n actively dragged - the width must track the pointer 1:1 with no easing lag.\n The body flag is set for the duration of a drag by `useSidebarResize`. */\n.sidebar {\n transition: width var(--studio-transition-slow, 0.25s ease);\n}\nbody[data-sidebar-resizing] .sidebar {\n transition: none;\n}\n", "// Imported as a string (not a side-effect import) so the stylesheet is only\n// injected when the frame tool actually activates \u2014 not when index.js loads.\n// esbuild's `.css` text loader (esbuild/options.ts) returns the CSS source.\nimport frameStyles from \"./styles.css\";\n\n/**\n * Inject the threepane stylesheet into the current realm's document, once.\n *\n * Called from both realms: host-side by `PatchworkFrame`, and inside the isolated iframe by\n * `IsolationRoot`.\n */\nexport function ensureFrameStyles() {\n const id = \"patchwork-frame-styles\";\n const existing = document.getElementById(id);\n if (existing) {\n // Already injected in this realm. Refresh its contents if the bundled CSS\n // has changed (a remount after a rebuild) so a stale stylesheet from an\n // earlier mount can't shadow newer rules; otherwise leave it untouched.\n if (existing.textContent !== frameStyles) existing.textContent = frameStyles;\n return;\n }\n const el = document.createElement(\"style\");\n el.id = id;\n el.textContent = frameStyles;\n document.head.append(el);\n}\n"],
5
- "mappings": "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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
6
- "names": ["require_ms", "__commonJSMin", "exports", "module", "s", "m", "h", "d", "w", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "msAbs", "plural", "name", "isPlural", "require_common", "__commonJSMin", "exports", "module", "setup", "env", "createDebug", "coerce", "disable", "enable", "enabled", "destroy", "key", "selectColor", "namespace", "hash", "i", "prevTime", "enableOverride", "namespacesCache", "enabledCache", "debug", "args", "self", "curr", "ms", "index", "match", "format", "formatter", "val", "extend", "v", "delimiter", "newDebug", "namespaces", "split", "ns", "matchesTemplate", "search", "template", "searchIndex", "templateIndex", "starIndex", "matchIndex", "name", "skip", "require_browser", "__commonJSMin", "exports", "module", "formatArgs", "save", "load", "useColors", "localstorage", "warned", "m", "args", "c", "index", "lastC", "match", "namespaces", "r", "formatters", "v", "error", "_$template", "_$createComponent", "_$setAttribute", "_$effect", "_$insert", "_$getOwner", "createMemo", "createStore", "reconcile", "render", "_$template", "_$insert", "_$getOwner", "_$use", "_$createComponent", "createUniqueId", "untrack", "isServer", "isDev", "reconcile", "makePersisted", "signal", "options", "storage", "name", "storageOptions", "serialize", "deserialize", "init", "set", "data", "value", "e", "unchanged", "get", "output", "serialized", "args", "createEffect", "createMemo", "createSignal", "on", "onCleanup", "onMount", "Show", "createEffect", "createSignal", "on", "SIDEBAR_KEYS", "COLLAPSE_CONTEXT_SIDEBAR_EVENT", "DEFAULT_SIDEBAR_WIDTH", "getStoredNumber", "key", "defaultValue", "stored", "getStoredBoolean", "useSidebarState", "isSidebarCollapsed", "setIsSidebarCollapsed", "leftSidebarWidth", "setLeftSidebarWidth", "value", "onCleanup", "onMount", "MIN_SIDEBAR_WIDTH", "MAX_SIDEBAR_WIDTH", "AUTO_CLOSE_WIDTH", "DRAG_THRESHOLD", "useSidebarResize", "side", "isCollapsed", "setCollapsed", "setWidth", "isResizing", "dragStartPos", "hasDragged", "lastDragWidth", "applyDragWidth", "raw", "w", "settleDrag", "dragOverlay", "beginDragVisuals", "endDrag", "handleMouseDown", "e", "handleMouseUp", "wasResizing", "dragged", "handleMouseMove", "deltaX", "deltaY", "handleToggleClick", "prev", "createEffect", "createSignal", "onCleanup", "useProviderReady", "componentId", "element", "isReady", "setReady", "el", "onMounted", "event", "createEffect", "createSignal", "onCleanup", "MOUNT_TIMEOUT_MS", "useMainDocMounted", "element", "docUrl", "isMounted", "setMounted", "el", "url", "onSettled", "event", "detail", "timer", "getRegistry", "createMemo", "createSignal", "onCleanup", "useTaggedComponents", "tag", "registry", "version", "setVersion", "off", "v", "description", "a", "b", "_$template", "_$delegateEvents", "_$getOwner", "_$effect", "_$setAttribute", "_$memo", "_$insert", "_$createComponent", "For", "Show", "_$template", "_$delegateEvents", "_$setAttribute", "_$insert", "_$effect", "_$use", "_$createComponent", "import_debug", "log", "debug", "pojo", "target", "BLOCK_MARKER", "apply", "rest", "path", "range", "val", "p", "key", "RANGE_ARRAY", "start", "end", "ZERO_LENGTH", "DELETE", "INSERT", "APPEND", "REPLACE", "seq", "n", "a", "b", "nextkey", "get", "obj", "key", "p", "fromAutomerge", "autopatch", "payload", "path", "log", "autoproduce", "payload", "doc", "patch", "apply", "fromAutomerge", "createMemo", "onCleanup", "createStore", "produce", "reconcile", "cache", "makeDocumentProjection", "handle", "onCleanup", "item", "doc", "set", "patch", "ondelete", "payload", "autoproduce", "getOwner", "onCleanup", "createSignal", "untrack", "sharedConfig", "onMount", "DEV", "equalFn", "isServer", "access", "v", "createDocumentProjection", "handle", "createMemo", "access", "makeDocumentProjection", "createEffect", "createResource", "useContext", "createContext", "RepoContext", "useDocHandle", "url", "options", "contextRepo", "useContext", "RepoContext", "repo", "getExistingHandle", "unwrappedURL", "access", "state", "handle", "mutate", "createResource", "createEffect", "useDocument", "url", "options", "handle", "useDocHandle", "createDocumentProjection", "onCleanup", "createSignal", "createEffect", "onCleanup", "createSignal", "useContext", "getType", "getRegistry", "isLoadedPlugin", "createEffect", "createMemo", "createSignal", "onCleanup", "onMount", "Show", "_tmpl$", "_$template", "_tmpl$2", "DocumentTitle", "props", "anchor", "repo", "setRepo", "_$createComponent", "_el$", "_ref$", "_$use", "resolvedRepo", "DocumentTitleInner", "doc", "handle", "useDocument", "registry", "registryVersion", "setRegistryVersion", "off", "v", "typeId", "d", "id", "datatype", "dt", "title", "canEdit", "editing", "setEditing", "inputRef", "startEditing", "commit", "save", "next", "h", "setTitle", "meta", "_el$3", "_$insert", "_$effect", "_p$", "_v$", "_v$2", "_$setAttribute", "_el$2", "e", "_ref$2", "_$delegateEvents", "_$template", "_$delegateEvents", "_$getOwner", "_$insert", "_$createComponent", "Show", "_$template", "_$delegateEvents", "_$setStyleProperty", "_$insert", "_$setAttribute", "_$effect", "_$memo", "_$createComponent", "Show", "_tmpl$", "_tmpl$2", "Sidebar", "props", "widthStyle", "canExpand", "content", "handle", "_el$", "e", "_p$", "_v$", "_v$2", "_el$2", "_c$", "_v$3", "_v$4", "_v$5", "_$template", "_$delegateEvents", "_$setAttribute", "_$effect", "_$insert", "_$createComponent", "For", "_tmpl$", "_tmpl$2", "ContextTabs", "props", "activeToolId", "ids", "item", "selected", "_el$", "_el$2", "_tmpl$", "_$template", "_tmpl$2", "_tmpl$3", "_tmpl$4", "_tmpl$5", "ContextSidebar", "props", "items", "useTaggedComponents", "activeToolId", "ids", "item", "selected", "_$createComponent", "Sidebar", "_el$", "_$insert", "Show", "_el$2", "_el$3", "ContextTabs", "PanelRightIcon", "_el$4", "id", "_el$5", "_$getOwner", "_$delegateEvents", "_$template", "_$effect", "_$getOwner", "_$createComponent", "_$memo", "Show", "_tmpl$", "slotId", "slot", "uniqueSlots", "slots", "seen", "id", "SlotView", "props", "_el$", "tuple", "_el$2", "_p$", "_v$", "_v$2", "_tmpl$", "_$template", "_tmpl$2", "_tmpl$3", "_tmpl$4", "_tmpl$5", "FrameTopBar", "props", "docToolSlots", "_el$", "_el$3", "_$insert", "_$createComponent", "Show", "_el$2", "DocumentTitle", "_$memo", "_el$4", "For", "slot", "_el$6", "_$getOwner", "_$effect", "_p$", "_v$", "slotId", "_v$2", "_el$5", "_$setAttribute", "PanelRightIcon", "_$delegateEvents", "_$template", "_$effect", "_$getOwner", "_$insert", "_$createComponent", "_$memo", "_$use", "parseAutomergeUrl", "getSuggestedImportUrl", "getType", "getFallbackTool", "getRegistry", "createEffect", "createMemo", "createSignal", "onCleanup", "onMount", "Show", "_$template", "_$delegateEvents", "_$setAttribute", "_$effect", "_$createComponent", "_$insert", "_$use", "importPackage", "registerPlugins", "createResource", "createSignal", "onCleanup", "onMount", "Show", "_$template", "_$delegateEvents", "_$effect", "_$memo", "_$insert", "_$createComponent", "_$use", "_$setAttribute", "createResource", "createSignal", "For", "Match", "onMount", "Show", "Switch", "Automerge", "getImportableUrlFromAutomergeUrl", "isAutomergeUrl", "url", "bareAutomergeUrl", "pinnedHeads", "hash", "text", "value", "author", "name", "email", "n", "e", "pluginClaim", "plugin", "p", "datatypes", "d", "fetchJson", "res", "BUILD_DIRS", "packageJson", "base", "u", "dirs", "pkg", "readClaims", "worker", "nextRequest", "waiting", "moduleLoader", "w", "event", "reply", "entry", "error", "askPlugins", "timeoutMs", "id", "resolve", "reject", "timer", "plugins", "readHistory", "repo", "handle", "doc", "metas", "byActor", "meta", "time", "writer", "b", "_tmpl$", "_$template", "_tmpl$2", "_tmpl$3", "_tmpl$4", "_tmpl$5", "_tmpl$6", "_tmpl$7", "_tmpl$8", "_tmpl$9", "_tmpl$0", "_tmpl$1", "_tmpl$10", "_tmpl$11", "_tmpl$12", "_tmpl$13", "_tmpl$14", "_tmpl$15", "_tmpl$16", "_tmpl$17", "_tmpl$18", "_tmpl$19", "_tmpl$20", "_tmpl$21", "_tmpl$22", "_tmpl$23", "_tmpl$24", "popovers", "PackageDetails", "props", "id", "automerge", "isAutomergeUrl", "pinned", "pinnedHeads", "opened", "setOpened", "createSignal", "history", "createResource", "url", "readHistory", "asking", "setAsking", "asked", "setAsked", "askFailed", "setAskFailed", "ask", "askPlugins", "error", "popover", "onMount", "event", "heading", "listed", "_el$", "_$setAttribute", "_el$2", "_el$3", "_el$4", "_el$5", "_el$6", "_el$7", "_el$11", "_el$12", "_el$13", "_el$14", "_el$15", "_el$16", "_ref$", "_$use", "_$insert", "_$createComponent", "Show", "v", "_el$23", "_el$24", "Switch", "Match", "_$memo", "_el$0", "_el$1", "_el$10", "Fact", "_el$25", "_$effect", "plugins", "Plugins", "why", "_el$27", "_el$18", "Heads", "h", "_el$29", "_el$31", "_el$32", "_el$36", "_el$33", "_el$37", "_el$34", "_el$35", "Writers", "_el$38", "_el$39", "_el$40", "For", "p", "_el$42", "t", "_el$46", "_el$47", "_el$43", "_el$44", "_el$48", "head", "_el$49", "MOST_WRITERS", "more", "_el$50", "w", "_el$55", "_el$56", "_el$57", "_el$61", "_el$58", "_el$59", "_el$60", "span", "_el$51", "_el$52", "_el$54", "_el$53", "day", "seconds", "last", "first", "_$delegateEvents", "_tmpl$", "_$template", "_tmpl$2", "_tmpl$3", "_tmpl$4", "_tmpl$5", "_tmpl$6", "_tmpl$7", "_tmpl$8", "_tmpl$9", "_tmpl$0", "_tmpl$1", "_tmpl$10", "_tmpl$11", "_tmpl$12", "_tmpl$13", "_tmpl$14", "_tmpl$15", "_tmpl$16", "_tmpl$17", "_tmpl$18", "_tmpl$19", "_tmpl$20", "_tmpl$21", "_tmpl$22", "Card", "props", "el", "onMount", "_el$", "_el$2", "_el$3", "_el$4", "_ref$", "_$use", "_$insert", "Finding", "NoToolCard", "loading", "setLoading", "createSignal", "failed", "setFailed", "claims", "createResource", "url", "readClaims", "load", "mod", "importPackage", "registerPlugins", "error", "named", "c", "_$createComponent", "_el$6", "_el$7", "_el$8", "Show", "_el$1", "_el$10", "_el$14", "v", "_el$15", "_el$16", "_el$12", "_el$13", "_$effect", "why", "_el$17", "_el$18", "_el$9", "PackageDetails", "tool", "_el$19", "_el$20", "UnavailableCard", "repo", "knowsConnection", "connected", "setConnected", "update", "now", "was", "onConnection", "p", "onCleanup", "poll", "_el$22", "_el$23", "_el$24", "_el$25", "_el$26", "SyncServer", "told", "setTold", "status", "_el$29", "t", "_p$", "_v$", "_v$2", "_v$3", "_v$4", "_$setAttribute", "_el$30", "_el$31", "_el$34", "_el$33", "NotSharedCard", "copied", "setCopied", "reset", "copy", "_el$38", "_el$39", "ToolFailedCard", "trying", "setTrying", "retry", "_el$41", "_el$42", "_el$43", "InvalidUrlCard", "_el$46", "_el$47", "_$delegateEvents", "elements", "isKeyhiveDoc", "gateCheck", "pageHive", "canOpen", "hive", "url", "id", "onKeyhiveOps", "listener", "cardText", "binary", "byte", "_tmpl$", "_$template", "_tmpl$2", "_tmpl$3", "_tmpl$4", "RECHECK_NOT_SHARED_MS", "MainDocumentView", "viewKey", "selectedDocUrl", "toolId", "ref", "container", "repo", "setRepo", "createSignal", "onMount", "_el$", "_$use", "el", "_$insert", "_$createComponent", "Show", "_$memo", "_key", "_el$2", "_$getOwner", "_$effect", "_p$", "_v$", "_v$2", "r", "DocumentView", "_c$", "props", "tools", "getRegistry", "toolsChanged", "setToolsChanged", "onCleanup", "n", "lookup", "setLookup", "peekWith", "setPeekWith", "asked", "mounted", "setMounted", "attempt", "setAttempt", "disposed", "find", "handle", "wasUnavailable", "error", "invalid", "isInvalidUrlError", "setMisses", "misses", "progress", "unwatch", "watch", "findProgress", "p", "askAgain", "parseAutomergeUrl", "retryTimer", "retry", "after", "createEffect", "view", "createMemo", "found", "doc", "type", "getType", "id", "anything", "fallback", "safely", "getFallbackTool", "opensOnlyAsAnything", "getSuggestedImportUrl", "state", "openTool", "v", "toolError", "setToolError", "loadTool", "hive", "pageHive", "shared", "setShared", "url", "live", "check", "canOpen", "open", "off", "onKeyhiveOps", "poll", "retryTool", "noTool", "_el$4", "onMounted", "event", "detail", "_attempt", "_el$5", "_v$3", "_v$4", "Finding", "NotSharedCard", "cardText", "failed", "ToolFailedCard", "InvalidUrlCard", "UnavailableCard", "NoToolCard", "withProgress", "message", "supported", "list", "fn", "_tmpl$", "_$template", "_tmpl$2", "_tmpl$3", "DocumentAreaRoot", "props", "isRightSidebarCollapsed", "setIsRightSidebarCollapsed", "createSignal", "rightSidebarWidth", "setRightSidebarWidth", "createEffect", "on", "value", "SIDEBAR_KEYS", "sidebarResize", "useSidebarResize", "onMount", "onCollapse", "COLLAPSE_CONTEXT_SIDEBAR_EVENT", "onCleanup", "selectedContextToolId", "setSelectedContextToolId", "makePersisted", "draftStateProviderHost", "setDraftStateProviderHost", "isDraftStateProviderReady", "useProviderReady", "readyDraftStateHost", "_$createComponent", "Show", "docUrl", "_el$", "_$use", "_$getOwner", "_$insert", "host", "DraftDocumentArea", "contextItems", "useTaggedComponents", "hasContext", "mainViewKey", "createMemo", "draftOverlayProviderHost", "setDraftOverlayProviderHost", "isDraftOverlayProviderReady", "commentsProviderElement", "setCommentsProviderElement", "isCommentsProviderReady", "focusProviderElement", "setFocusProviderElement", "isFocusProviderReady", "areDocProvidersReady", "_el$2", "_el$3", "_el$4", "_el$5", "_el$6", "_el$7", "FrameTopBar", "v", "MainDocumentView", "el", "ContextSidebar", "styles_default", "ensureFrameStyles", "id", "existing", "styles_default", "el", "_tmpl$", "_$template", "_tmpl$2", "IsolatedDocumentArea", "props", "rootUrls", "createMemo", "urls", "selected", "propsJson", "_el$", "_el$2", "_$getOwner", "_$insert", "_$effect", "_$setAttribute", "parseProps", "script", "err", "mountIsolationRoot", "element", "ensureFrameStyles", "p", "setP", "createStore", "observer", "reconcile", "dispose", "render", "_el$3", "_$createComponent", "DocumentAreaRoot", "DEFAULT_SIDEBAR_WIDTH"]
7
- }