dsh-tiddlywiki 0.33.4 → 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -4
- package/docs/CHANGELOG.md +8 -2
- package/docs/development.md +0 -1
- package/docs/features.md +0 -1
- package/docs/seed-initialization.md +3 -7
- package/docs/usage.md +0 -47
- package/lib/client.js +3 -3
- package/lib/index.js +186 -1442
- package/lib/index.js.map +1 -1
- package/package.json +4 -7
- package/src/client/i18n-config.ts +1 -20
- package/src/client/settings-page-config.ts +3 -25
- package/src/client/settings-page.ts +1 -1
- package/src/host/admin-secrets.ts +0 -10
- package/src/host/clip-bridge-payload.ts +1 -1
- package/src/host/config.ts +1 -30
- package/src/host/git.ts +1 -1
- package/src/host/prompt.ts +5 -32
- package/src/host/routes-helpers.ts +1 -1
- package/src/host/routes-tw-proxy.ts +1 -1
- package/src/host/routes.ts +1 -46
- package/src/host/seeds-registry.ts +0 -38
- package/src/host/seeds.ts +1 -20
- package/src/host/tools-notes-write.ts +1 -1
- package/src/host/tools-support.ts +2 -2
- package/src/host/wiki-instance.ts +1 -17
- package/src/index-config.ts +0 -19
- package/src/index-git.ts +2 -14
- package/src/index-prompt.ts +1 -5
- package/src/index-routes.ts +11 -25
- package/src/index.ts +2 -44
- package/docs/plans/2026-09-17-wechat-publish-design.md +0 -208
- package/docs/wechat-publish-setup.md +0 -459
- package/src/host/routes-wechat.ts +0 -230
- package/src/host/seed-publish-spec.ts +0 -146
- package/src/host/seed-wechat-docs.ts +0 -70
- package/src/host/seed-wechat-publish.ts +0 -81
- package/src/host/wechat-publish-contract.ts +0 -275
- package/src/host/wechat-publish.ts +0 -454
- package/tools/wechat/backfill-publish-state.mjs +0 -165
- package/tools/wechat/create-article.js +0 -114
- package/tools/wechat/install-wechat-adapters.mjs +0 -137
- package/tools/wechat/publish-note-imgs.js +0 -379
- package/tools/wechat/publish-note.js +0 -280
- package/tools/wechat/seed-publish-spec-now.mts +0 -77
- package/tools/wechat/wechat-html.js +0 -190
- package/tools/wechat/weixin-flow.js +0 -461
package/lib/client.js
CHANGED
|
@@ -20,9 +20,9 @@ Ctrl+Enter to save`,"note.uploadTitle":`Upload a file into the wiki and insert a
|
|
|
20
20
|
Current: {root}`,"settings.wikis.moveNamePrompt":`Folder name (current: {name}; enter . to use the root folder above directly)`,"settings.wikis.rootRequired":`The root folder cannot be empty`,"settings.wikis.moving":`Moving (this wiki will be stopped and started)…`,"settings.wikis.needRootAndName":`Please fill in both the root folder and the folder name`,"settings.wikis.adding":`Adding (a new wiki has to be initialised and cold-started, one moment)…`,"settings.wikis.listFailed":`Could not read the knowledge-base list: {message}`,"settings.wikis.locationTitle":`Knowledge base location (switchable)`,"settings.wikis.rootPlaceholderSingle":`Absolute path, e.g. D:\\notes or $DSH_HOME/tiddlywiki`,"settings.wikis.folderPlaceholderSingle":`Folder name (default main; enter . to use the folder above directly)`,"settings.wikis.rootField":`Root folder (wikiRoot)`,"settings.wikis.folderField":`Folder name (wiki)`,"settings.wikis.switchHere":`Switch to this location`,"settings.wikis.resetToConfig":`Reset to the configured default`,"settings.wikis.locationHint":"Switching stops and restarts the TW child process in place (a few seconds); if the new folder has no tiddlywiki.info yet, the plugin runs `--init server` to create a fresh knowledge base there. The chosen location is remembered in a pointer file under $DSH_HOME (outside any wiki) and can be cleared with Reset to the configured default.","settings.wikis.locationUnavailable":`request failed`,"settings.wikis.current":`Current: {path}`,"settings.wikis.unknownPath":`(unknown)`,"settings.wikis.sourceState":`Source: pointer file (switched from this settings page)`,"settings.wikis.sourceConfig":`Source: cordis config (config.wikiRoot / config.wiki)`,"settings.wikis.sourceDefault":`Source: defaults ($DSH_HOME/tiddlywiki + main)`,"settings.wikis.sourceLine":`{source} · Configured default: {path}`,"settings.wikis.stateFile":`Pointer file: {path} (absent = using the configured default)`,"settings.wikis.candidatesLabel":`Wikis available in the same folder:`,"settings.wikis.rootItself":`(the root folder itself)`,"settings.wikis.candidateTitle":`Fill in the folder name "{name}"`,"settings.wikis.locationFailed":`Could not read the location: {message}`,"settings.wikis.needRoot":`Please fill in the root folder (an absolute path) first`,"settings.wikis.switchConfirm":`Switch the knowledge base to:
|
|
21
21
|
{path}
|
|
22
22
|
|
|
23
|
-
The TW child process will be stopped and restarted; this conversation and the tools will then read and write the new knowledge base. Continue?`,"settings.wikis.switching":`Switching… (restarting TW)`,"settings.wikis.switched":`Switched to {path}`,"settings.wikis.switchedWarn":`Switched to {path} (note: {warning})`,"settings.wikis.switchFailed":`Switch failed: {message}`,"settings.wikis.resetConfirm":`Reset to the configured default location? The location pointer file will be deleted and (if needed) the knowledge base from the config will be used again.`,"settings.wikis.resetDone":`Reset to the configured default: {path}`,"settings.wikis.resetWarn":`Reset to the default (note: {warning})`,"settings.wikis.resetFailed":`Reset failed: {message}`,"settings.iconPicker.label":`Icon`,"settings.iconPicker.aria":`Choose entry icon`,"settings.iconPicker.titleDefault":`Choose entry icon (default)`,"settings.iconPicker.titleCurrent":`Choose entry icon (current: {icon})`,"settings.iconPicker.default":`Default icon`,"settings.iconPicker.prev":`‹ Previous`,"settings.iconPicker.next":`Next ›`,"settings.iconPicker.page":`Page {page} of {pages} · {total} icons`,"settings.iconPicker.total":`{total} icons`,"settings.icon.archive":`Archive`,"settings.icon.archiveCheck":`Archive (done)`,"settings.icon.archiveOff":`Unarchive`,"settings.icon.unarchive":`Take out of archive`,"settings.icon.database":`Database`,"settings.icon.data":`Data`,"settings.icon.folder":`Folder`,"settings.icon.globe":`Globe / public`,"settings.icon.branch":`Branch`,"settings.icon.list":`List`,"settings.icon.checklist":`Checklist`,"settings.icon.flatList":`Flat list`,"settings.icon.skill":`Skill`,"settings.icon.goal":`Goal`,"settings.icon.compact":`Compact`,"settings.icon.clock":`Clock / history`,"settings.icon.alarm":`Reminder`,"settings.icon.pin":`Pinned`,"settings.icon.shield":`Secure / private`,"settings.icon.api":`API`,"settings.icon.code":`Code`,"settings.icon.users":`Team`,"settings.icon.user":`Personal`,"settings.icon.plugin":`Plugin`,"settings.icon.pinwheel":`Pinwheel`,"settings.icon.gauge":`Gauge / usage`,"settings.icon.tree":`Workspace tree`,"settings.icon.personalization":`Personalisation`,"settings.icon.link":`Link`,"settings.icon.search":`Search`,"settings.icon.settings":`Settings`,"settings.icon.sparkle":`Sparkle`,"settings.icon.think":`Thinking`,"settings.icon.light":`Light`,"settings.icon.dark":`Dark`,"settings.icon.refresh":`Refresh`,"settings.icon.book":`Book`,"settings.icon.briefcase":`Briefcase`,"settings.icon.home":`Home`,"settings.icon.notebook":`Notebook`,"settings.icon.flask":`Lab`,"settings.icon.star":`Star`,"settings.plugin.title":`Plugins (bundled official plugins)`,"settings.plugin.hint":`A tick writes the plugin into the startup install list in tiddlywiki.info (offline, matched to the engine version) and TW restarts on apply. This covers engine-bundled plugins only; plugins installed, disabled or removed in the TW control panel appear below under "Plugins inside the wiki".`,"settings.plugin.searchPlaceholder":`Search plugins…`,"settings.plugin.apply":`Apply plugins (restart TW)`,"settings.plugin.badgeDisabled":`Disabled in TW`,"settings.plugin.badgeDisabledTitle":`This plugin is in tiddlywiki.info but was disabled in the TW control panel ($:/config/Plugins/Disabled) — re-enable it there`,"settings.plugin.badgeInstalled":`Installed in wiki`,"settings.plugin.badgeInstalledTitle":`Not in the startup list, but the wiki holds a plugin tiddler with the same title (installed natively in TW) and the TW runtime is already using it`,"settings.plugin.applied":`Plugins applied, TW restarted`,"settings.wikiPlugins.title":`Plugins inside the wiki (installed natively in TW, read-only)`,"settings.wikiPlugins.hint":`These plugins are stored as tiddlers inside the wiki files (TW control panel → Plugins → install/import) and are not affected by the ticks above. Enable, disable or remove them from the TW control panel.`,"settings.wikiPlugins.disabled":`Disabled`,"settings.wikiPlugins.disabledTitle":`This plugin was disabled in the TW control panel`,"settings.themes.title":`Themes (bundled themes)`,"settings.themes.hint":`"Loaded" = themes available in TW (multi-select; the dependency chain comes along, e.g. heavier pulls in snowwhite+vanilla); "Active" = the theme you see (single choice, added to the loaded set automatically). TW restarts on apply.`,"settings.themes.colLoad":`Loaded`,"settings.themes.colActive":`Active`,"settings.themes.colTheme":`Theme`,"settings.themes.apply":`Apply themes (restart TW)`,"settings.themes.loadTitle":`Load this theme`,"settings.themes.activeTitle":`Make this the active theme`,"settings.themes.applied":`Themes applied, TW restarted`,"settings.langs.title":`Languages (bundled official language packs)`,"settings.langs.hint":`Tick to enable a language plugin and restart TW; for Chinese pick zh-Hans (simplified) or zh-CN.`,"settings.langs.apply":`Apply languages (restart TW)`,"settings.langs.applied":`Languages applied, TW restarted`,"settings.catalog.applyFailed":`Apply failed: {message}`,"settings.seeds.title":`Initialisation (one-time seeds)`,"settings.seeds.hint":`These are the tiddlers and settings the plugin seeds into the wiki so that it can work with dsh. "Send to agent button" and "TW front-end API base URL" are required: they are written automatically at startup (only when missing, never overwriting your edits). The rest are optional — not written by default and never forced. Click Re-initialise when you want them, and De-initialise to take them back out.`,"settings.seeds.fetchFailed":`request failed`,"settings.seeds.present":`Present`,"settings.seeds.missing":`Missing`,"settings.seeds.updateChip":`⬆ Update available`,"settings.seeds.updateTitle":`The built-in content changed after this wiki was seeded — click Re-initialise to take it`,"settings.seeds.modifiedChip":`✏️ Edited locally`,"settings.seeds.modifiedTitle":`This one is your content: re-initialising will overwrite it`,"settings.seeds.updateToBuiltin":`Update to built-in version`,"settings.seeds.reinit":`Re-initialise`,"settings.seeds.rewriteTitle":`Force-rewrite the built-in content of "{title}" (overwrites the current tiddler)`,"settings.seeds.overwriteModified":`"{title}" has local edits and updating will overwrite them.`,"settings.seeds.overwriteUnknown":`Cannot tell whether "{title}" was edited (old-style marker); updating may overwrite your changes.`,"settings.seeds.overwriteConfirm":`{warning}Overwrite with the built-in version?`,"settings.seeds.running":`Working…`,"settings.seeds.reinitFailed":`Re-initialise failed: {message}`,"settings.seeds.reinitDone":`Re-initialised "{title}"`,"settings.seeds.remove":`De-initialise`,"settings.seeds.removeTitle":`Remove the tiddlers and markers written by "{title}" (back to the never-seeded state)`,"settings.seeds.removeConfirm":`De-initialise "{title}"? The tiddlers it wrote (including its one-time marker) will be deleted; you can bring them back later with Re-initialise.`,"settings.seeds.removing":`Removing…`,"settings.seeds.removeFailed":`De-initialise failed: {message}`,"settings.seeds.removeDone":`De-initialised "{title}"`,"settings.seeds.statusLine":`{total} items, {present} ready; {removable} removable`,"settings.seeds.loadStatusFailed":`Could not load the initialisation status: {message}`,"settings.seeds.runAll":`Re-initialise all`,"settings.seeds.runAllTitle":`Force-rewrite every one-time seed (optional seeds included; overwrites the current tiddlers and settings)`,"settings.seeds.allReinitDone":`All seeds re-initialised`,"settings.seeds.removeAll":`De-initialise all`,"settings.seeds.removeAllTitle":`Remove the tiddlers and markers written by every optional seed (required items are kept)`,"settings.seeds.removeAllConfirm":`De-initialise all optional seeds? Every tiddler they wrote (including their one-time markers) will be deleted. Required items (the send-to-agent button and the TW front-end API base URL) are kept.`,"settings.seeds.allRemoved":`All optional seeds de-initialised`}},{zh:{"config.title":`常规配置`,"config.token.showHide":`显示 / 隐藏`,"config.num.empty":`不能为空`,"config.num.nan":`请输入数字`,"config.num.integer":`必须是整数`,"config.num.belowMin":`不能小于 {min}`,"config.num.aboveMax":`不能大于 {max}`,"config.num.invalidHint":`⚠️ {message}(保存会被拒绝)`,"config.note.tag":`快速笔记默认 tag`,"config.note.workspaceMark":`新建笔记自动标工作区(ws/<项目名> 标签 + workspace 字段,取自当前会话工作目录)`,"config.git.autoCommit":`自动 commit(防抖)`,"config.git.debounceMs":`自动 commit 防抖(ms;范围 0–3600000)`,"config.git.remote":"git 远端(**空=自动用该库所在仓库的 `origin`**;填了则以填的为准。保存后即时生效,但**清空不会删除已配置的 origin**,需要时请用 git 命令处理)","config.git.branch":`git 分支(**只在仓库首次初始化时生效**;已有仓库请用 git 命令改分支——上面的状态行显示的是真实分支)`,"config.startup.readyTimeoutMs":`TW 启动就绪等待(ms;默认 60000,范围 5000–600000,超时上限为其 3 倍,对下次启动/重启生效)`,"config.ui.showQuickNote":`显示「知识库」按钮里的「快速笔记」入口`,"config.ui.showQuickNoteDock":`显示聊天输入框上方的「快速笔记」快捷按钮`,"config.ui.quickNoteMode":`点击「快速笔记」的打开方式`,"config.ui.quickNoteModeNative":`原生编辑器:直接弹出 TW 原生编辑页(新建/恢复草稿)`,"config.ui.quickNoteModeCard":`Markdown 卡片:弹出现有快速笔记卡片(CodeMirror 编辑器)`,"config.ui.multiWikiSidebarHint":`侧边栏入口:多库模式下每个知识库各占一行、各用自己的「显示名」(在「知识库列表」里改),不再是统一的一个名称,所以这里没有对应配置项。`,"config.ui.sidebarLabel":`侧边栏 TW 入口显示名称`,"config.ui.showPanelStatus":`显示「知识库」按钮里的 TW 面板/重载入口与状态行`,"config.ui.showSyncButton":`显示「知识库」按钮里的「同步」入口与 git 状态点`,"config.ui.followDshTheme":`嵌入式 TW 跟随 DSH 深浅主题(暗色时自动切深色 palette,不写回 wiki)`,"config.ui.darkPalette":`暗色时 TW palette(tiddler 标题)`,"config.ui.tabLabel":`会话顶部「知识库」Tab 名称`,"config.ui.showSessionTab":`显示会话顶部「知识库」Tab(本会话相关 wiki 笔记汇总)`,"config.ui.showRightbarTab":`在 DSH 右侧边栏提供 TiddlyWiki 入口/Tab(与聊天并排)`,"config.ui.sendToAgent.enabled":`启用「发送给 Agent」(TW 笔记 → DSH 会话注入)`,"config.ui.sendToAgent.endpoint":`TW 端请求基址(空=自动取当前 DSH origin)`,"config.ui.sendToAgent.token":`共享 token(非空时路由校验 x-send-to-agent-token 头;已设置时显示为 ********,原样保存=不改,清空=删除)`,"config.ui.allArticles.pageSize":`「所有文章」每页条数(1–200)`,"config.wechat.title":`可选功能:微信公众号发布`,"config.wechat.hint":`把 wiki 笔记一键发到公众号草稿箱(可选点发表)。**需要额外安装**:opencli 与 Browser Bridge 浏览器扩展,并让浏览器登录 mp.weixin.qq.com;adapter 在本仓库 tools/wechat/,安装与排错见 docs/wechat-publish-setup.md。不安装/不开启它,插件其他功能完全不受影响。开启后:注入提示词会多一条「发布前先读发布元数据规范」的约定,并在启动时把「发布元数据规范」与「微信公众号发布指南」(安装/换机还原步骤,等于仓库 docs/wechat-publish-setup.md)两篇文档写进 wiki(同名不覆盖)。`,"config.wechat.enabled":`启用微信公众号发布(默认关;需先按 docs/wechat-publish-setup.md 安装 opencli + 浏览器扩展)`,"config.wechat.command":`opencli 命令(默认 opencli;用别名或绝对路径时填这里。仅在启用微信发布时生效)`,"config.wechat.adapter":`发布适配器(仅在启用微信发布时生效)`,"config.wechat.adapterDefault":`publish-note(默认):图文排版,封面单图`,"config.wechat.adapterImgs":`publish-note-imgs:正文内嵌图全部上传 CDN(需先重跑 install-wechat-adapters.mjs)`,"config.wechat.token":`发布 token(非空时 /wechat/* 校验 x-wechat-publish-token 头,强烈建议设置,否则任何能打开本页的人都能替你发文;已设置时显示为 ********,原样保存=不改,清空=删除。仅在启用微信发布时生效)`,"config.wechat.dsn":`渲染基址 dsn(adapter 回连 DSH 用,形如 http://127.0.0.1:<端口>/dsh-tiddlywiki;留空=按请求自动推导。仅在启用微信发布时生效)`,"config.prompt.title":`系统提示词(注入每个会话)`,"config.prompt.hint":`插件把自己的约定(同步纪律 / 标签约定 / 链接格式等)注入每个会话的系统提示词。保存后**无需重启 dsh web**:section 会即时重新注册,当前会话从下一步起就使用新文本。`,"config.prompt.enabled":`注入 TiddlyWiki 提示词(关闭后本插件不再注入任何文本)`,"config.prompt.mode":`内置文本形态`,"config.prompt.modeSlim":`精简(默认):只保留工具 schema 表达不了的约定`,"config.prompt.modeFull":`完整:额外附一份由工具注册表实时生成的参数索引`,"config.prompt.extra":`附加说明(永远追加在末尾,可放团队/个人规范)`,"config.prompt.override":`整段替换(非空时替换内置提示词,附加说明仍会追加在末尾)`,"config.prompt.preview":`预览注入文本(按表单当前值)`,"config.prompt.previewTitle":`按表单当前值渲染注入文本(不用先保存);点「保存配置」后这就是实际注入的内容`,"config.prompt.fetchFailed":`获取失败`,"config.prompt.previewDisabled":`(已关闭:不会注入任何提示词)`,"config.prompt.previewHeader":`# 形态 {mode} · {length} 字符{dirty}
|
|
23
|
+
The TW child process will be stopped and restarted; this conversation and the tools will then read and write the new knowledge base. Continue?`,"settings.wikis.switching":`Switching… (restarting TW)`,"settings.wikis.switched":`Switched to {path}`,"settings.wikis.switchedWarn":`Switched to {path} (note: {warning})`,"settings.wikis.switchFailed":`Switch failed: {message}`,"settings.wikis.resetConfirm":`Reset to the configured default location? The location pointer file will be deleted and (if needed) the knowledge base from the config will be used again.`,"settings.wikis.resetDone":`Reset to the configured default: {path}`,"settings.wikis.resetWarn":`Reset to the default (note: {warning})`,"settings.wikis.resetFailed":`Reset failed: {message}`,"settings.iconPicker.label":`Icon`,"settings.iconPicker.aria":`Choose entry icon`,"settings.iconPicker.titleDefault":`Choose entry icon (default)`,"settings.iconPicker.titleCurrent":`Choose entry icon (current: {icon})`,"settings.iconPicker.default":`Default icon`,"settings.iconPicker.prev":`‹ Previous`,"settings.iconPicker.next":`Next ›`,"settings.iconPicker.page":`Page {page} of {pages} · {total} icons`,"settings.iconPicker.total":`{total} icons`,"settings.icon.archive":`Archive`,"settings.icon.archiveCheck":`Archive (done)`,"settings.icon.archiveOff":`Unarchive`,"settings.icon.unarchive":`Take out of archive`,"settings.icon.database":`Database`,"settings.icon.data":`Data`,"settings.icon.folder":`Folder`,"settings.icon.globe":`Globe / public`,"settings.icon.branch":`Branch`,"settings.icon.list":`List`,"settings.icon.checklist":`Checklist`,"settings.icon.flatList":`Flat list`,"settings.icon.skill":`Skill`,"settings.icon.goal":`Goal`,"settings.icon.compact":`Compact`,"settings.icon.clock":`Clock / history`,"settings.icon.alarm":`Reminder`,"settings.icon.pin":`Pinned`,"settings.icon.shield":`Secure / private`,"settings.icon.api":`API`,"settings.icon.code":`Code`,"settings.icon.users":`Team`,"settings.icon.user":`Personal`,"settings.icon.plugin":`Plugin`,"settings.icon.pinwheel":`Pinwheel`,"settings.icon.gauge":`Gauge / usage`,"settings.icon.tree":`Workspace tree`,"settings.icon.personalization":`Personalisation`,"settings.icon.link":`Link`,"settings.icon.search":`Search`,"settings.icon.settings":`Settings`,"settings.icon.sparkle":`Sparkle`,"settings.icon.think":`Thinking`,"settings.icon.light":`Light`,"settings.icon.dark":`Dark`,"settings.icon.refresh":`Refresh`,"settings.icon.book":`Book`,"settings.icon.briefcase":`Briefcase`,"settings.icon.home":`Home`,"settings.icon.notebook":`Notebook`,"settings.icon.flask":`Lab`,"settings.icon.star":`Star`,"settings.plugin.title":`Plugins (bundled official plugins)`,"settings.plugin.hint":`A tick writes the plugin into the startup install list in tiddlywiki.info (offline, matched to the engine version) and TW restarts on apply. This covers engine-bundled plugins only; plugins installed, disabled or removed in the TW control panel appear below under "Plugins inside the wiki".`,"settings.plugin.searchPlaceholder":`Search plugins…`,"settings.plugin.apply":`Apply plugins (restart TW)`,"settings.plugin.badgeDisabled":`Disabled in TW`,"settings.plugin.badgeDisabledTitle":`This plugin is in tiddlywiki.info but was disabled in the TW control panel ($:/config/Plugins/Disabled) — re-enable it there`,"settings.plugin.badgeInstalled":`Installed in wiki`,"settings.plugin.badgeInstalledTitle":`Not in the startup list, but the wiki holds a plugin tiddler with the same title (installed natively in TW) and the TW runtime is already using it`,"settings.plugin.applied":`Plugins applied, TW restarted`,"settings.wikiPlugins.title":`Plugins inside the wiki (installed natively in TW, read-only)`,"settings.wikiPlugins.hint":`These plugins are stored as tiddlers inside the wiki files (TW control panel → Plugins → install/import) and are not affected by the ticks above. Enable, disable or remove them from the TW control panel.`,"settings.wikiPlugins.disabled":`Disabled`,"settings.wikiPlugins.disabledTitle":`This plugin was disabled in the TW control panel`,"settings.themes.title":`Themes (bundled themes)`,"settings.themes.hint":`"Loaded" = themes available in TW (multi-select; the dependency chain comes along, e.g. heavier pulls in snowwhite+vanilla); "Active" = the theme you see (single choice, added to the loaded set automatically). TW restarts on apply.`,"settings.themes.colLoad":`Loaded`,"settings.themes.colActive":`Active`,"settings.themes.colTheme":`Theme`,"settings.themes.apply":`Apply themes (restart TW)`,"settings.themes.loadTitle":`Load this theme`,"settings.themes.activeTitle":`Make this the active theme`,"settings.themes.applied":`Themes applied, TW restarted`,"settings.langs.title":`Languages (bundled official language packs)`,"settings.langs.hint":`Tick to enable a language plugin and restart TW; for Chinese pick zh-Hans (simplified) or zh-CN.`,"settings.langs.apply":`Apply languages (restart TW)`,"settings.langs.applied":`Languages applied, TW restarted`,"settings.catalog.applyFailed":`Apply failed: {message}`,"settings.seeds.title":`Initialisation (one-time seeds)`,"settings.seeds.hint":`These are the tiddlers and settings the plugin seeds into the wiki so that it can work with dsh. "Send to agent button" and "TW front-end API base URL" are required: they are written automatically at startup (only when missing, never overwriting your edits). The rest are optional — not written by default and never forced. Click Re-initialise when you want them, and De-initialise to take them back out.`,"settings.seeds.fetchFailed":`request failed`,"settings.seeds.present":`Present`,"settings.seeds.missing":`Missing`,"settings.seeds.updateChip":`⬆ Update available`,"settings.seeds.updateTitle":`The built-in content changed after this wiki was seeded — click Re-initialise to take it`,"settings.seeds.modifiedChip":`✏️ Edited locally`,"settings.seeds.modifiedTitle":`This one is your content: re-initialising will overwrite it`,"settings.seeds.updateToBuiltin":`Update to built-in version`,"settings.seeds.reinit":`Re-initialise`,"settings.seeds.rewriteTitle":`Force-rewrite the built-in content of "{title}" (overwrites the current tiddler)`,"settings.seeds.overwriteModified":`"{title}" has local edits and updating will overwrite them.`,"settings.seeds.overwriteUnknown":`Cannot tell whether "{title}" was edited (old-style marker); updating may overwrite your changes.`,"settings.seeds.overwriteConfirm":`{warning}Overwrite with the built-in version?`,"settings.seeds.running":`Working…`,"settings.seeds.reinitFailed":`Re-initialise failed: {message}`,"settings.seeds.reinitDone":`Re-initialised "{title}"`,"settings.seeds.remove":`De-initialise`,"settings.seeds.removeTitle":`Remove the tiddlers and markers written by "{title}" (back to the never-seeded state)`,"settings.seeds.removeConfirm":`De-initialise "{title}"? The tiddlers it wrote (including its one-time marker) will be deleted; you can bring them back later with Re-initialise.`,"settings.seeds.removing":`Removing…`,"settings.seeds.removeFailed":`De-initialise failed: {message}`,"settings.seeds.removeDone":`De-initialised "{title}"`,"settings.seeds.statusLine":`{total} items, {present} ready; {removable} removable`,"settings.seeds.loadStatusFailed":`Could not load the initialisation status: {message}`,"settings.seeds.runAll":`Re-initialise all`,"settings.seeds.runAllTitle":`Force-rewrite every one-time seed (optional seeds included; overwrites the current tiddlers and settings)`,"settings.seeds.allReinitDone":`All seeds re-initialised`,"settings.seeds.removeAll":`De-initialise all`,"settings.seeds.removeAllTitle":`Remove the tiddlers and markers written by every optional seed (required items are kept)`,"settings.seeds.removeAllConfirm":`De-initialise all optional seeds? Every tiddler they wrote (including their one-time markers) will be deleted. Required items (the send-to-agent button and the TW front-end API base URL) are kept.`,"settings.seeds.allRemoved":`All optional seeds de-initialised`}},{zh:{"config.title":`常规配置`,"config.token.showHide":`显示 / 隐藏`,"config.num.empty":`不能为空`,"config.num.nan":`请输入数字`,"config.num.integer":`必须是整数`,"config.num.belowMin":`不能小于 {min}`,"config.num.aboveMax":`不能大于 {max}`,"config.num.invalidHint":`⚠️ {message}(保存会被拒绝)`,"config.note.tag":`快速笔记默认 tag`,"config.note.workspaceMark":`新建笔记自动标工作区(ws/<项目名> 标签 + workspace 字段,取自当前会话工作目录)`,"config.git.autoCommit":`自动 commit(防抖)`,"config.git.debounceMs":`自动 commit 防抖(ms;范围 0–3600000)`,"config.git.remote":"git 远端(**空=自动用该库所在仓库的 `origin`**;填了则以填的为准。保存后即时生效,但**清空不会删除已配置的 origin**,需要时请用 git 命令处理)","config.git.branch":`git 分支(**只在仓库首次初始化时生效**;已有仓库请用 git 命令改分支——上面的状态行显示的是真实分支)`,"config.startup.readyTimeoutMs":`TW 启动就绪等待(ms;默认 60000,范围 5000–600000,超时上限为其 3 倍,对下次启动/重启生效)`,"config.ui.showQuickNote":`显示「知识库」按钮里的「快速笔记」入口`,"config.ui.showQuickNoteDock":`显示聊天输入框上方的「快速笔记」快捷按钮`,"config.ui.quickNoteMode":`点击「快速笔记」的打开方式`,"config.ui.quickNoteModeNative":`原生编辑器:直接弹出 TW 原生编辑页(新建/恢复草稿)`,"config.ui.quickNoteModeCard":`Markdown 卡片:弹出现有快速笔记卡片(CodeMirror 编辑器)`,"config.ui.multiWikiSidebarHint":`侧边栏入口:多库模式下每个知识库各占一行、各用自己的「显示名」(在「知识库列表」里改),不再是统一的一个名称,所以这里没有对应配置项。`,"config.ui.sidebarLabel":`侧边栏 TW 入口显示名称`,"config.ui.showPanelStatus":`显示「知识库」按钮里的 TW 面板/重载入口与状态行`,"config.ui.showSyncButton":`显示「知识库」按钮里的「同步」入口与 git 状态点`,"config.ui.followDshTheme":`嵌入式 TW 跟随 DSH 深浅主题(暗色时自动切深色 palette,不写回 wiki)`,"config.ui.darkPalette":`暗色时 TW palette(tiddler 标题)`,"config.ui.tabLabel":`会话顶部「知识库」Tab 名称`,"config.ui.showSessionTab":`显示会话顶部「知识库」Tab(本会话相关 wiki 笔记汇总)`,"config.ui.showRightbarTab":`在 DSH 右侧边栏提供 TiddlyWiki 入口/Tab(与聊天并排)`,"config.ui.sendToAgent.enabled":`启用「发送给 Agent」(TW 笔记 → DSH 会话注入)`,"config.ui.sendToAgent.endpoint":`TW 端请求基址(空=自动取当前 DSH origin)`,"config.ui.sendToAgent.token":`共享 token(非空时路由校验 x-send-to-agent-token 头;已设置时显示为 ********,原样保存=不改,清空=删除)`,"config.ui.allArticles.pageSize":`「所有文章」每页条数(1–200)`,"config.prompt.title":`系统提示词(注入每个会话)`,"config.prompt.hint":`插件把自己的约定(同步纪律 / 标签约定 / 链接格式等)注入每个会话的系统提示词。保存后**无需重启 dsh web**:section 会即时重新注册,当前会话从下一步起就使用新文本。`,"config.prompt.enabled":`注入 TiddlyWiki 提示词(关闭后本插件不再注入任何文本)`,"config.prompt.mode":`内置文本形态`,"config.prompt.modeSlim":`精简(默认):只保留工具 schema 表达不了的约定`,"config.prompt.modeFull":`完整:额外附一份由工具注册表实时生成的参数索引`,"config.prompt.extra":`附加说明(永远追加在末尾,可放团队/个人规范)`,"config.prompt.override":`整段替换(非空时替换内置提示词,附加说明仍会追加在末尾)`,"config.prompt.preview":`预览注入文本(按表单当前值)`,"config.prompt.previewTitle":`按表单当前值渲染注入文本(不用先保存);点「保存配置」后这就是实际注入的内容`,"config.prompt.fetchFailed":`获取失败`,"config.prompt.previewDisabled":`(已关闭:不会注入任何提示词)`,"config.prompt.previewHeader":`# 形态 {mode} · {length} 字符{dirty}
|
|
24
24
|
|
|
25
|
-
{text}`,"config.prompt.previewDirty":`(含未保存的修改,保存后才真正注入)`,"config.prompt.readFailed":`读取提示词失败:{message}`,"config.bridge.enabled":`启用「本地剪藏桥」(书签小工具后端监听 127.0.0.1 端口,保存后立即生效)`,"config.bridge.port":`剪藏桥端口(整数 1–65535;改端口需重启 dsh web 生效)`,"config.bridge.token":`剪藏桥 token(非空时校验书签的 x-clip-token 头;强烈建议设置。已设置时显示为 ********,原样保存=不改,清空=删除)`,"config.bridge.tag":`剪藏笔记默认 tag`,"config.bridge.wiki":`剪藏写入的知识库(不指定 = 写进知识库列表里带 ★ 的那个库;多库时可指定具体的库)`,"config.clipWiki.followDefault":`(跟随默认的那个库)`,"config.clipWiki.defaultSuffix":`{label}(默认)`,"config.clipWiki.option":`{label}({id}){suffix}`,"config.clipWiki.notRunning":` · 未运行`,"config.clipWiki.notInListWithDefault":`{current}(不在清单里,保存后写进 {label})`,"config.clipWiki.notInList":`{current}(不在清单里)`,"config.bridge.pluginScopeOnly":`剪藏桥是插件级设置(整插件共用一个监听端口和一个写入目标),只在「未选中具体库」的作用域里可改——请先点上方「退出配置」。`,"config.save":`保存配置`,"config.invalidFields":`有 {count} 个字段填得不对(见字段旁的红色提示),未保存`,"config.noChanges":`没有改动`,"config.saved":`配置已保存`,"config.saveFailed":`保存失败:{message}`},en:{"config.title":`General settings`,"config.token.showHide":`Show / hide`,"config.num.empty":`Cannot be empty`,"config.num.nan":`Enter a number`,"config.num.integer":`Must be an integer`,"config.num.belowMin":`Cannot be less than {min}`,"config.num.aboveMax":`Cannot be greater than {max}`,"config.num.invalidHint":`⚠️ {message} (save will be refused)`,"config.note.tag":`Default tag for quick notes`,"config.note.workspaceMark":`Tag new notes with their workspace (ws/<project> tag + workspace field, taken from the session working directory)`,"config.git.autoCommit":`Auto-commit (debounced)`,"config.git.debounceMs":`Auto-commit debounce (ms; range 0–3600000)`,"config.git.remote":"Git remote (**empty = use the `origin` of the repository this wiki lives in**; a value here overrides it. Takes effect right after saving, but **clearing it does NOT delete a configured origin** — use git commands for that)","config.git.branch":`Git branch (**only used when the repository is first initialised**; for an existing repository change the branch with git commands — the status row above shows the real branch)`,"config.startup.readyTimeoutMs":`TW startup readiness wait (ms; default 60000, range 5000–600000, hard limit 3× that, applies to the next start/restart)`,"config.ui.showQuickNote":`Show the Quick note entry in the Knowledge base button`,"config.ui.showQuickNoteDock":`Show the Quick note shortcut above the chat input`,"config.ui.quickNoteMode":`What clicking Quick note opens`,"config.ui.quickNoteModeNative":`Native editor: opens the TW edit page directly (new or restored draft)`,"config.ui.quickNoteModeCard":`Markdown card: opens the quick-note card (CodeMirror editor)`,"config.ui.multiWikiSidebarHint":`Sidebar entry: in multi-wiki mode every knowledge base gets its own row and its own display name (edited in the knowledge-base list), so there is no single name to configure here.`,"config.ui.sidebarLabel":`Sidebar TW entry display name`,"config.ui.showPanelStatus":`Show the TW panel / reload entry and status row in the Knowledge base button`,"config.ui.showSyncButton":`Show the Sync entry and git status dot in the Knowledge base button`,"config.ui.followDshTheme":`Make the embedded TW follow the DSH light/dark theme (switch palette in dark mode, never written back to the wiki)`,"config.ui.darkPalette":`TW palette in dark mode (tiddler title)`,"config.ui.tabLabel":`Name of the Knowledge base tab above the conversation`,"config.ui.showSessionTab":`Show the Knowledge base tab above the conversation (wiki notes related to this session)`,"config.ui.showRightbarTab":`Offer a TiddlyWiki entry/tab in the DSH right sidebar (next to the chat)`,"config.ui.sendToAgent.enabled":`Enable Send to agent (TW note → inject into the DSH conversation)`,"config.ui.sendToAgent.endpoint":`TW-side request base URL (empty = use the current DSH origin)`,"config.ui.sendToAgent.token":`Shared token (when non-empty the route checks the x-send-to-agent-token header; shown as ******** once set — saving it unchanged keeps it, clearing it deletes it)`,"config.ui.allArticles.pageSize":`Items per page in All articles (1–200)`,"config.
|
|
25
|
+
{text}`,"config.prompt.previewDirty":`(含未保存的修改,保存后才真正注入)`,"config.prompt.readFailed":`读取提示词失败:{message}`,"config.bridge.enabled":`启用「本地剪藏桥」(书签小工具后端监听 127.0.0.1 端口,保存后立即生效)`,"config.bridge.port":`剪藏桥端口(整数 1–65535;改端口需重启 dsh web 生效)`,"config.bridge.token":`剪藏桥 token(非空时校验书签的 x-clip-token 头;强烈建议设置。已设置时显示为 ********,原样保存=不改,清空=删除)`,"config.bridge.tag":`剪藏笔记默认 tag`,"config.bridge.wiki":`剪藏写入的知识库(不指定 = 写进知识库列表里带 ★ 的那个库;多库时可指定具体的库)`,"config.clipWiki.followDefault":`(跟随默认的那个库)`,"config.clipWiki.defaultSuffix":`{label}(默认)`,"config.clipWiki.option":`{label}({id}){suffix}`,"config.clipWiki.notRunning":` · 未运行`,"config.clipWiki.notInListWithDefault":`{current}(不在清单里,保存后写进 {label})`,"config.clipWiki.notInList":`{current}(不在清单里)`,"config.bridge.pluginScopeOnly":`剪藏桥是插件级设置(整插件共用一个监听端口和一个写入目标),只在「未选中具体库」的作用域里可改——请先点上方「退出配置」。`,"config.save":`保存配置`,"config.invalidFields":`有 {count} 个字段填得不对(见字段旁的红色提示),未保存`,"config.noChanges":`没有改动`,"config.saved":`配置已保存`,"config.saveFailed":`保存失败:{message}`},en:{"config.title":`General settings`,"config.token.showHide":`Show / hide`,"config.num.empty":`Cannot be empty`,"config.num.nan":`Enter a number`,"config.num.integer":`Must be an integer`,"config.num.belowMin":`Cannot be less than {min}`,"config.num.aboveMax":`Cannot be greater than {max}`,"config.num.invalidHint":`⚠️ {message} (save will be refused)`,"config.note.tag":`Default tag for quick notes`,"config.note.workspaceMark":`Tag new notes with their workspace (ws/<project> tag + workspace field, taken from the session working directory)`,"config.git.autoCommit":`Auto-commit (debounced)`,"config.git.debounceMs":`Auto-commit debounce (ms; range 0–3600000)`,"config.git.remote":"Git remote (**empty = use the `origin` of the repository this wiki lives in**; a value here overrides it. Takes effect right after saving, but **clearing it does NOT delete a configured origin** — use git commands for that)","config.git.branch":`Git branch (**only used when the repository is first initialised**; for an existing repository change the branch with git commands — the status row above shows the real branch)`,"config.startup.readyTimeoutMs":`TW startup readiness wait (ms; default 60000, range 5000–600000, hard limit 3× that, applies to the next start/restart)`,"config.ui.showQuickNote":`Show the Quick note entry in the Knowledge base button`,"config.ui.showQuickNoteDock":`Show the Quick note shortcut above the chat input`,"config.ui.quickNoteMode":`What clicking Quick note opens`,"config.ui.quickNoteModeNative":`Native editor: opens the TW edit page directly (new or restored draft)`,"config.ui.quickNoteModeCard":`Markdown card: opens the quick-note card (CodeMirror editor)`,"config.ui.multiWikiSidebarHint":`Sidebar entry: in multi-wiki mode every knowledge base gets its own row and its own display name (edited in the knowledge-base list), so there is no single name to configure here.`,"config.ui.sidebarLabel":`Sidebar TW entry display name`,"config.ui.showPanelStatus":`Show the TW panel / reload entry and status row in the Knowledge base button`,"config.ui.showSyncButton":`Show the Sync entry and git status dot in the Knowledge base button`,"config.ui.followDshTheme":`Make the embedded TW follow the DSH light/dark theme (switch palette in dark mode, never written back to the wiki)`,"config.ui.darkPalette":`TW palette in dark mode (tiddler title)`,"config.ui.tabLabel":`Name of the Knowledge base tab above the conversation`,"config.ui.showSessionTab":`Show the Knowledge base tab above the conversation (wiki notes related to this session)`,"config.ui.showRightbarTab":`Offer a TiddlyWiki entry/tab in the DSH right sidebar (next to the chat)`,"config.ui.sendToAgent.enabled":`Enable Send to agent (TW note → inject into the DSH conversation)`,"config.ui.sendToAgent.endpoint":`TW-side request base URL (empty = use the current DSH origin)`,"config.ui.sendToAgent.token":`Shared token (when non-empty the route checks the x-send-to-agent-token header; shown as ******** once set — saving it unchanged keeps it, clearing it deletes it)`,"config.ui.allArticles.pageSize":`Items per page in All articles (1–200)`,"config.prompt.title":`System prompt (injected into every session)`,"config.prompt.hint":`The plugin injects its own conventions (sync discipline, tag rules, link format and so on) into every session system prompt. Saving needs **no dsh web restart**: the section is re-registered immediately and the current session uses the new text from its next step.`,"config.prompt.enabled":`Inject the TiddlyWiki prompt (when off the plugin injects no text at all)`,"config.prompt.mode":`Built-in text form`,"config.prompt.modeSlim":`Slim (default): keeps only the conventions the tool schemas cannot express`,"config.prompt.modeFull":`Full: adds a parameter index generated live from the tool registry`,"config.prompt.extra":`Extra notes (always appended at the end; good for team or personal rules)`,"config.prompt.override":`Full replacement (when non-empty it replaces the built-in prompt; extra notes are still appended)`,"config.prompt.preview":`Preview the injected text (from the current form values)`,"config.prompt.previewTitle":`Render the injected text from the current form values (no need to save first); after Save this is exactly what gets injected`,"config.prompt.fetchFailed":`request failed`,"config.prompt.previewDisabled":`(disabled: no prompt will be injected)`,"config.prompt.previewHeader":`# form {mode} · {length} characters{dirty}
|
|
26
26
|
|
|
27
27
|
{text}`,"config.prompt.previewDirty":` (includes unsaved edits; only saved values are really injected)`,"config.prompt.readFailed":`Could not read the prompt: {message}`,"config.bridge.enabled":`Enable the local clip bridge (bookmarklet backend listening on a 127.0.0.1 port; effective immediately after saving)`,"config.bridge.port":`Clip bridge port (integer 1–65535; changing it needs a dsh web restart)`,"config.bridge.token":`Clip bridge token (when non-empty the bookmarklet x-clip-token header is checked; strongly recommended. Shown as ******** once set — saving it unchanged keeps it, clearing it deletes it)`,"config.bridge.tag":`Default tag for clipped notes`,"config.bridge.wiki":`Knowledge base that clips are written to (unspecified = the one marked ★ in the knowledge-base list; in multi-wiki mode you can name a specific one)`,"config.clipWiki.followDefault":`(follow whichever wiki is the default)`,"config.clipWiki.defaultSuffix":`{label} (default)`,"config.clipWiki.option":`{label} ({id}){suffix}`,"config.clipWiki.notRunning":` · not running`,"config.clipWiki.notInListWithDefault":`{current} (not in the list; saving writes to {label})`,"config.clipWiki.notInList":`{current} (not in the list)`,"config.bridge.pluginScopeOnly":`The clip bridge is a plugin-wide setting (one listener, one write target), so it can only be changed when no specific library is selected — use “Exit configuration” above first.`,"config.save":`Save settings`,"config.invalidFields":`{count} fields are filled in incorrectly (see the red hint next to them); nothing was saved`,"config.noChanges":`No changes`,"config.saved":`Settings saved`,"config.saveFailed":`Save failed: {message}`}},{zh:{},en:{}},{zh:{"frame.syncRestarted":`,TW 已重启`,"frame.syncNotRestarted":`,TW 未自动重启`,"frame.rightbarTitle":`TiddlyWiki 知识库`,"frame.rightbarDescription":`在右侧边栏打开 TiddlyWiki 编辑器(与聊天并排)`,"frame.settingsSection":`TiddlyWiki 知识库`,"frame.syncTooltip":`同步知识库`,"frame.gitUnavailable":`git 仓库不可用`,"frame.branch":`分支 {branch}`,"frame.ahead":`领先 {n}`,"frame.behind":`落后 {n}`,"frame.dirty":`有 {n} 个未提交改动`,"frame.lastSync":`上次同步 {time}`,"frame.syncing":`同步进行中…`,"frame.syncDone":`同步完成:{message}`,"frame.syncFailed":`同步失败:{message}`,"frame.tabLabelDefault":`知识库`,"frame.twUnavailable":`TiddlyWiki 服务不可用`,"frame.twStarting":`TiddlyWiki 服务正在启动…`,"frame.retry":`重试`,"frame.restarting":`重启中…`,"frame.loadingWiki":`正在载入知识库「{label}」…`,"frame.statusUnreachable":`无法访问 /dsh-tiddlywiki/status`,"frame.noEditorUrl":`服务未返回编辑器地址`,"frame.statusError":`服务状态:{status}`,"frame.tidPreviewTitle":`真 TiddlyWiki 渲染`,"frame.tidMoreFields":`另外 {n} 个字段`,"frame.tidPreviewWaiting":`等待文件内容…`,"frame.tidPreviewNoBody":`这个 .tid 只有字段、没有正文。`,"frame.tidPreviewFallback":`渲染失败,下面是原文:`},en:{"frame.syncRestarted":`, TiddlyWiki restarted`,"frame.syncNotRestarted":`, TiddlyWiki was not restarted automatically`,"frame.rightbarTitle":`TiddlyWiki knowledge base`,"frame.rightbarDescription":`Open the TiddlyWiki editor in the right sidebar, next to the chat`,"frame.settingsSection":`TiddlyWiki knowledge base`,"frame.syncTooltip":`Sync knowledge base`,"frame.gitUnavailable":`git repository unavailable`,"frame.branch":`branch {branch}`,"frame.ahead":`{n} ahead`,"frame.behind":`{n} behind`,"frame.dirty":`{n} uncommitted change(s)`,"frame.lastSync":`last synced {time}`,"frame.syncing":`Syncing…`,"frame.syncDone":`Sync finished: {message}`,"frame.syncFailed":`Sync failed: {message}`,"frame.tabLabelDefault":`Knowledge base`,"frame.twUnavailable":`TiddlyWiki service unavailable`,"frame.twStarting":`TiddlyWiki service is starting…`,"frame.retry":`Retry`,"frame.restarting":`Restarting…`,"frame.loadingWiki":`Loading knowledge base "{label}"…`,"frame.statusUnreachable":`Cannot reach /dsh-tiddlywiki/status`,"frame.noEditorUrl":`The service returned no editor address`,"frame.statusError":`Service status: {status}`,"frame.tidPreviewTitle":`Rendered TiddlyWiki`,"frame.tidMoreFields":`{n} more fields`,"frame.tidPreviewWaiting":`Waiting for file content…`,"frame.tidPreviewNoBody":`This .tid has fields but no body text.`,"frame.tidPreviewFallback":`Rendering failed; showing the raw text:`}}],u={zh:Object.assign({},...l.map(e=>e.zh)),en:Object.assign({},...l.map(e=>e.en))},d=`dsh-tiddlywiki`;let f;function p(e){if(f=void 0,e===void 0)return[];let t;try{t=e(`locale`)}catch{return[]}if(t==null)return[];let n=[];try{let e=t.register?.(d,u);typeof e==`function`&&n.push(e)}catch(e){return console.warn(`[dsh-tiddlywiki] locale registration failed:`,e),n}try{let e=t.bind?.(d);typeof e==`function`&&(f=e)}catch(e){console.warn(`[dsh-tiddlywiki] locale bind failed:`,e)}return n}function m(e,t,n){if(f!==void 0)try{let n=f(e,t);if(typeof n==`string`&&n.length>0&&n!==e)return n}catch{}return n(e,t)}const h=`dsh-tiddlywiki:lang`;function g(e){if(typeof e!=`string`)return`zh`;let t=e.trim().toLowerCase();return t.startsWith(`en`)?`en`:(t.startsWith(`zh`),`zh`)}function _(){try{let e=globalThis.localStorage?.getItem(h);return e==null?void 0:g(e)}catch{return}}let v=_()??`zh`;function y(){return v}function b(e){if(typeof e!=`string`||e.trim().length===0)return!1;let t=g(e);if(t===v)return!1;v=t;try{globalThis.localStorage?.setItem(h,t)}catch{}return!0}function x(e,t){let n=u[v],r=u.zh,i=n?.[e]??r?.[e]??e;return t===void 0?i:i.replace(/\{(\w+)\}/g,(e,n)=>{let r=t[n];return r===void 0?e:String(r)})}function S(e,t){return m(e,t,x)}const C=`
|
|
28
28
|
/* ── sidebar entry ───────────────────────────────────────────── */
|
|
@@ -957,7 +957,7 @@ html[data-dsh-tw-active] .dshDesktopConversationSurface > :not([data-dsh-tw-view
|
|
|
957
957
|
\${}
|
|
958
958
|
}`,{label:`enum`,detail:`definition`,type:`keyword`})]),hg=new Su,gg=new Set([`Script`,`Block`,`FunctionExpression`,`FunctionDeclaration`,`ArrowFunction`,`MethodDeclaration`,`ForStatement`]);function _g(e){return(t,n)=>{let r=t.node.getChild(`VariableDefinition`);return r&&n(r,e),!0}}const vg=[`FunctionDeclaration`],yg={FunctionDeclaration:_g(`function`),ClassDeclaration:_g(`class`),ClassExpression:()=>!0,EnumDeclaration:_g(`constant`),TypeAliasDeclaration:_g(`type`),NamespaceDeclaration:_g(`namespace`),VariableDefinition(e,t){e.matchContext(vg)||t(e,`variable`)},TypeDefinition(e,t){t(e,`type`)},__proto__:null};function bg(e,t){let n=hg.get(t);if(n)return n;let r=[],i=!0;function a(t,n){let i=e.sliceString(t.from,t.to);r.push({label:i,type:n})}return t.cursor(G.IncludeAnonymous).iterate(t=>{if(i)i=!1;else if(t.name){let e=yg[t.name];if(e&&e(t,a)||gg.has(t.name))return!1}else if(t.to-t.from>8192){for(let n of bg(e,t.node))r.push(n);return!1}}),hg.set(t,r),r}const xg=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,Sg=[`TemplateString`,`String`,`RegExp`,`LineComment`,`BlockComment`,`VariableDefinition`,`TypeDefinition`,`Label`,`PropertyDefinition`,`PropertyName`,`PrivatePropertyDefinition`,`PrivatePropertyName`,`JSXText`,`JSXAttributeValue`,`JSXOpenTag`,`JSXCloseTag`,`JSXSelfClosingTag`,`.`,`?.`];function Cg(e){let t=Y(e.state).resolveInner(e.pos,-1);if(Sg.indexOf(t.name)>-1)return null;let n=t.name==`VariableName`||t.to-t.from<20&&xg.test(e.state.sliceDoc(t.from,t.to));if(!n&&!e.explicit)return null;let r=[];for(let n=t;n;n=n.parent)gg.has(n.name)&&(r=r.concat(bg(e.state.doc,n)));return{options:r,from:n?t.from:e.pos,validFor:xg}}const wg=yd.define({name:`javascript`,parser:fg.configure({props:[Ld.add({IfStatement:Yd({except:/^\s*({|else\b)/}),TryStatement:Yd({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:Jd,SwitchBody:e=>{let t=e.textAfter,n=/^\s*\}/.test(t),r=/^\s*(case|default)\b/.test(t);return e.baseIndent+(n?0:r?1:2)*e.unit},Block:Kd({closing:`}`}),ArrowFunction:e=>e.baseIndent+e.unit,"TemplateString BlockComment":()=>null,"Statement Property":Yd({except:/^\s*{/}),JSXElement(e){let t=/^\s*<\//.test(e.textAfter);return e.lineIndent(e.node.from)+(t?0:e.unit)},JSXEscape(e){let t=/\s*\}/.test(e.textAfter);return e.lineIndent(e.node.from)+(t?0:e.unit)},"JSXOpenTag JSXSelfClosingTag"(e){return e.column(e.node.from)+e.unit}}),Zd.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":Qd,BlockComment(e){return{from:e.from+2,to:e.to-2}},JSXElement(e){let t=e.firstChild;if(!t||t.name==`JSXSelfClosingTag`)return null;let n=e.lastChild;return{from:t.to,to:n.type.isError?e.to:n.from}},"JSXSelfClosingTag JSXOpenTag"(e){let t=e.firstChild?.nextSibling,n=e.lastChild;return!t||t.type.isError?null:{from:t.to,to:n.type.isError?e.to:n.from}}})]}),languageData:{closeBrackets:{brackets:[`(`,`[`,`{`,`'`,`"`,"`"]},commentTokens:{line:`//`,block:{open:`/*`,close:`*/`}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:`$`}}),Tg={test:e=>/^JSX/.test(e.name),facet:hd({commentTokens:{block:{open:`{/*`,close:`*/}`}}})},Eg=wg.configure({dialect:`ts`},`typescript`),Dg=wg.configure({dialect:`jsx`,props:[gd.add(e=>e.isTop?[Tg]:void 0)]}),Og=wg.configure({dialect:`jsx ts`,props:[gd.add(e=>e.isTop?[Tg]:void 0)]},`typescript`);let kg=e=>({label:e,type:`keyword`});const Ag=`break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield`.split(` `).map(kg),jg=Ag.concat([`declare`,`implements`,`private`,`protected`,`public`].map(kg));function Mg(e={}){let t=e.jsx?e.typescript?Og:Dg:e.typescript?Eg:wg,n=e.typescript?mg.concat(jg):pg.concat(Ag);return new kd(t,[wg.data.of({autocomplete:wf(Sg,Cf(n))}),wg.data.of({autocomplete:Cg}),e.jsx?Ig:[]])}function Ng(e){for(;;){if(e.name==`JSXOpenTag`||e.name==`JSXSelfClosingTag`||e.name==`JSXFragmentTag`)return e;if(e.name==`JSXEscape`||!e.parent)return null;e=e.parent}}function Pg(e,t,n=e.length){for(let r=t?.firstChild;r;r=r.nextSibling)if(r.name==`JSXIdentifier`||r.name==`JSXBuiltin`||r.name==`JSXNamespacedName`||r.name==`JSXMemberExpression`)return e.sliceString(r.from,Math.min(r.to,n));return``}const Fg=typeof navigator==`object`&&/Android\b/.test(navigator.userAgent),Ig=U.inputHandler.of((e,t,n,r,i)=>{if((Fg?e.composing:e.compositionStarted)||e.state.readOnly||t!=n||r!=`>`&&r!=`/`||!wg.isActiveAt(e.state,t,-1))return!1;let a=i(),{state:o}=a,s=o.changeByRange(e=>{let{head:t}=e,n=Y(o).resolveInner(t-1,-1),i;if(n.name==`JSXStartTag`&&(n=n.parent),!(o.doc.sliceString(t-1,t)!=r||n.name==`JSXAttributeValue`&&n.to>t)){if(r==`>`&&n.name==`JSXFragmentTag`)return{range:e,changes:{from:t,insert:`</>`}};if(r==`/`&&n.name==`JSXStartCloseTag`){let e=n.parent,r=e.parent;if(r&&e.from==t-2&&((i=Pg(o.doc,r.firstChild,t))||r.firstChild?.name==`JSXFragmentTag`)){let e=`${i}>`;return{range:M.cursor(t+e.length,-1),changes:{from:t,insert:e}}}}else if(r==`>`){let r=Ng(n);if(r&&r.name==`JSXOpenTag`&&!/^\/?>|^<\//.test(o.doc.sliceString(t,t+2))&&(i=Pg(o.doc,r,t)))return{range:e,changes:{from:t,insert:`</${i}>`}}}}return{range:e}});return s.changes.empty?!1:(e.dispatch([a,o.update(s,{userEvent:`input.complete`,scrollIntoView:!0})]),!0)}),Lg=[`_blank`,`_self`,`_top`,`_parent`],Rg=[`ascii`,`utf-8`,`utf-16`,`latin1`,`latin1`],zg=[`get`,`post`,`put`,`delete`],Bg=[`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`],Vg=[`true`,`false`],Q={},Hg={a:{attrs:{href:null,ping:null,type:null,media:null,target:Lg,hreflang:null}},abbr:Q,address:Q,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:[`default`,`rect`,`circle`,`poly`]}},article:Q,aside:Q,audio:{attrs:{src:null,mediagroup:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`none`,`metadata`,`auto`],autoplay:[`autoplay`],loop:[`loop`],controls:[`controls`]}},b:Q,base:{attrs:{href:null,target:Lg}},bdi:Q,bdo:Q,blockquote:{attrs:{cite:null}},body:Q,br:Q,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:[`autofocus`],disabled:[`autofocus`],formenctype:Bg,formmethod:zg,formnovalidate:[`novalidate`],formtarget:Lg,type:[`submit`,`reset`,`button`]}},canvas:{attrs:{width:null,height:null}},caption:Q,center:Q,cite:Q,code:Q,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:[`command`,`checkbox`,`radio`],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:[`disabled`],checked:[`checked`]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:[`disabled`],multiple:[`multiple`]}},datalist:{attrs:{data:null}},dd:Q,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:[`open`]}},dfn:Q,div:Q,dl:Q,dt:Q,em:Q,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:[`disabled`],form:null,name:null}},figcaption:Q,figure:Q,footer:Q,form:{attrs:{action:null,name:null,"accept-charset":Rg,autocomplete:[`on`,`off`],enctype:Bg,method:zg,novalidate:[`novalidate`],target:Lg}},h1:Q,h2:Q,h3:Q,h4:Q,h5:Q,h6:Q,head:{children:[`title`,`base`,`link`,`style`,`meta`,`script`,`noscript`,`command`]},header:Q,hgroup:Q,hr:Q,html:{attrs:{manifest:null}},i:Q,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:[`allow-top-navigation`,`allow-same-origin`,`allow-forms`,`allow-scripts`],seamless:[`seamless`]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:[`audio/*`,`video/*`,`image/*`],autocomplete:[`on`,`off`],autofocus:[`autofocus`],checked:[`checked`],disabled:[`disabled`],formenctype:Bg,formmethod:zg,formnovalidate:[`novalidate`],formtarget:Lg,multiple:[`multiple`],readonly:[`readonly`],required:[`required`],type:[`hidden`,`text`,`search`,`tel`,`url`,`email`,`password`,`datetime`,`date`,`month`,`week`,`time`,`datetime-local`,`number`,`range`,`color`,`checkbox`,`radio`,`file`,`submit`,`image`,`reset`,`button`]}},ins:{attrs:{cite:null,datetime:null}},kbd:Q,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:[`autofocus`],disabled:[`disabled`],keytype:[`RSA`]}},label:{attrs:{for:null,form:null}},legend:Q,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:[`all`,`16x16`,`16x16 32x32`,`16x16 32x32 64x64`]}},map:{attrs:{name:null}},mark:Q,menu:{attrs:{label:null,type:[`list`,`context`,`toolbar`]}},meta:{attrs:{content:null,charset:Rg,name:[`viewport`,`application-name`,`author`,`description`,`generator`,`keywords`],"http-equiv":[`content-language`,`content-type`,`default-style`,`refresh`]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:Q,noscript:Q,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:[`typemustmatch`]}},ol:{attrs:{reversed:[`reversed`],start:null,type:[`1`,`a`,`A`,`i`,`I`]},children:[`li`,`script`,`template`,`ul`,`ol`]},optgroup:{attrs:{disabled:[`disabled`],label:null}},option:{attrs:{disabled:[`disabled`],label:null,selected:[`selected`],value:null}},output:{attrs:{for:null,form:null,name:null}},p:Q,param:{attrs:{name:null,value:null}},pre:Q,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:Q,rt:Q,ruby:Q,samp:Q,script:{attrs:{type:[`text/javascript`],src:null,async:[`async`],defer:[`defer`],charset:Rg}},section:Q,select:{attrs:{form:null,name:null,size:null,autofocus:[`autofocus`],disabled:[`disabled`],multiple:[`multiple`]}},slot:{attrs:{name:null}},small:Q,source:{attrs:{src:null,type:null,media:null}},span:Q,strong:Q,style:{attrs:{type:[`text/css`],media:null,scoped:null}},sub:Q,summary:Q,sup:Q,table:Q,tbody:Q,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:Q,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:[`autofocus`],disabled:[`disabled`],readonly:[`readonly`],required:[`required`],wrap:[`soft`,`hard`]}},tfoot:Q,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:[`row`,`col`,`rowgroup`,`colgroup`]}},thead:Q,time:{attrs:{datetime:null}},title:Q,tr:Q,track:{attrs:{src:null,label:null,default:null,kind:[`subtitles`,`captions`,`descriptions`,`chapters`,`metadata`],srclang:null}},ul:{children:[`li`,`script`,`template`,`ul`,`ol`]},var:Q,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`auto`,`metadata`,`none`],autoplay:[`autoplay`],mediagroup:[`movie`],muted:[`muted`],controls:[`controls`]}},wbr:Q},Ug={accesskey:null,class:null,contenteditable:Vg,contextmenu:null,dir:[`ltr`,`rtl`,`auto`],draggable:[`true`,`false`,`auto`],dropzone:[`copy`,`move`,`link`,`string:`,`file:`],hidden:[`hidden`],id:null,inert:[`inert`],itemid:null,itemprop:null,itemref:null,itemscope:[`itemscope`],itemtype:null,lang:[`ar`,`bn`,`de`,`en-GB`,`en-US`,`es`,`fr`,`hi`,`id`,`ja`,`pa`,`pt`,`ru`,`tr`,`zh`],spellcheck:Vg,autocorrect:Vg,autocapitalize:Vg,style:null,tabindex:null,title:null,translate:[`yes`,`no`],rel:[`stylesheet`,`alternate`,`author`,`bookmark`,`help`,`license`,`next`,`nofollow`,`noreferrer`,`prefetch`,`prev`,`search`,`tag`],role:`alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer`.split(` `),"aria-activedescendant":null,"aria-atomic":Vg,"aria-autocomplete":[`inline`,`list`,`both`,`none`],"aria-busy":Vg,"aria-checked":[`true`,`false`,`mixed`,`undefined`],"aria-controls":null,"aria-describedby":null,"aria-disabled":Vg,"aria-dropeffect":null,"aria-expanded":[`true`,`false`,`undefined`],"aria-flowto":null,"aria-grabbed":[`true`,`false`,`undefined`],"aria-haspopup":Vg,"aria-hidden":Vg,"aria-invalid":[`true`,`false`,`grammar`,`spelling`],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":[`off`,`polite`,`assertive`],"aria-multiline":Vg,"aria-multiselectable":Vg,"aria-owns":null,"aria-posinset":null,"aria-pressed":[`true`,`false`,`mixed`,`undefined`],"aria-readonly":Vg,"aria-relevant":null,"aria-required":Vg,"aria-selected":[`true`,`false`,`undefined`],"aria-setsize":null,"aria-sort":[`ascending`,`descending`,`none`,`other`],"aria-valuemax":null,"aria-valuemin":null,"aria-valuenow":null,"aria-valuetext":null},Wg=`beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload`.split(` `).map(e=>`on`+e);for(let e of Wg)Ug[e]=null;var Gg=class{constructor(e,t){this.tags={...Hg,...e},this.globalAttrs={...Ug,...t},this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};Gg.default=new Gg;function Kg(e,t,n=e.length){if(!t)return``;let r=t.firstChild,i=r&&r.getChild(`TagName`);return i?e.sliceString(i.from,Math.min(i.to,n)):``}function qg(e,t=!1){for(;e;e=e.parent)if(e.name==`Element`)if(t)t=!1;else return e;return null}function Jg(e,t,n){return n.tags[Kg(e,qg(t))]?.children||n.allTags}function Yg(e,t){let n=[];for(let r=qg(t);r&&!r.type.isTop;r=qg(r.parent)){let i=Kg(e,r);if(i&&r.lastChild.name==`CloseTag`)break;i&&n.indexOf(i)<0&&(t.name==`EndTag`||t.from>=r.firstChild.to)&&n.push(i)}return n}const Xg=/^[:\-\.\w\u00b7-\uffff]*$/;function Zg(e,t,n,r,i){let a=/\s*>/.test(e.sliceDoc(i,i+5))?``:`>`,o=qg(n,n.name==`StartTag`||n.name==`TagName`);return{from:r,to:i,options:Jg(e.doc,o,t).map(e=>({label:e,type:`type`})).concat(Yg(e.doc,n).map((e,t)=>({label:`/`+e,apply:`/`+e+a,type:`type`,boost:99-t}))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function Qg(e,t,n,r){let i=/\s*>/.test(e.sliceDoc(r,r+5))?``:`>`;return{from:n,to:r,options:Yg(e.doc,t).map((e,t)=>({label:e,apply:e+i,type:`type`,boost:99-t})),validFor:Xg}}function $g(e,t,n,r){let i=[],a=0;for(let r of Jg(e.doc,n,t))i.push({label:`<`+r,type:`type`});for(let t of Yg(e.doc,n))i.push({label:`</`+t+`>`,type:`type`,boost:99-a++});return{from:r,to:r,options:i,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function e_(e,t,n,r,i){let a=qg(n),o=a?t.tags[Kg(e.doc,a)]:null,s=o&&o.attrs?Object.keys(o.attrs):[];return{from:r,to:i,options:(o&&o.globalAttrs===!1?s:s.length?s.concat(t.globalAttrNames):t.globalAttrNames).map(e=>({label:e,type:`property`})),validFor:Xg}}function t_(e,t,n,r,i){let a=n.parent?.getChild(`AttributeName`),o=[],s;if(a){let c=e.sliceDoc(a.from,a.to),l=t.globalAttrs[c];if(!l){let r=qg(n),i=r?t.tags[Kg(e.doc,r)]:null;l=i?.attrs&&i.attrs[c]}if(l){let t=e.sliceDoc(r,i).toLowerCase(),n=`"`,a=`"`;/^['"]/.test(t)?(s=t[0]==`"`?/^[^"]*$/:/^[^']*$/,n=``,a=e.sliceDoc(i,i+1)==t[0]?``:t[0],t=t.slice(1),r++):s=/^[^\s<>='"]*$/;for(let e of l)o.push({label:e,apply:n+e+a,type:`constant`})}}return{from:r,to:i,options:o,validFor:s}}function n_(e,t){let{state:n,pos:r}=t,i=Y(n).resolveInner(r,-1),a=i.resolve(r);for(let e=r,t;a==i&&(t=i.childBefore(e));){let n=t.lastChild;if(!n||!n.type.isError||n.from<n.to)break;a=i=t,e=n.from}return i.name==`TagName`?i.parent&&/CloseTag$/.test(i.parent.name)?Qg(n,i,i.from,r):Zg(n,e,i,i.from,r):i.name==`StartTag`||i.name==`IncompleteTag`?Zg(n,e,i,r,r):i.name==`StartCloseTag`||i.name==`IncompleteCloseTag`?Qg(n,i,r,r):i.name==`OpenTag`||i.name==`SelfClosingTag`||i.name==`AttributeName`?e_(n,e,i,i.name==`AttributeName`?i.from:r,r):i.name==`Is`||i.name==`AttributeValue`||i.name==`UnquotedAttributeValue`?t_(n,e,i,i.name==`Is`?r:i.from,r):t.explicit&&(a.name==`Element`||a.name==`Text`||a.name==`Document`)?$g(n,e,i,r):null}function r_(e){return n_(Gg.default,e)}function i_(e){let{extraTags:t,extraGlobalAttributes:n}=e,r=n||t?new Gg(t,n):Gg.default;return e=>n_(r,e)}const a_=wg.parser.configure({top:`SingleExpression`}),o_=[{tag:`script`,attrs:e=>e.type==`text/typescript`||e.lang==`ts`,parser:Eg.parser},{tag:`script`,attrs:e=>e.type==`text/babel`||e.type==`text/jsx`,parser:Dg.parser},{tag:`script`,attrs:e=>e.type==`text/typescript-jsx`,parser:Og.parser},{tag:`script`,attrs(e){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(e.type)},parser:a_},{tag:`script`,attrs(e){return!e.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(e.type)},parser:wg.parser},{tag:`style`,attrs(e){return(!e.lang||e.lang==`css`)&&(!e.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(e.type))},parser:Qh.parser}],s_=[{name:`style`,parser:Qh.parser.configure({top:`Styles`})}].concat(Wg.map(e=>({name:e,parser:wg.parser}))),c_=yd.define({name:`html`,parser:_h.configure({props:[Ld.add({Element(e){let t=/^(\s*)(<\/)?/.exec(e.textAfter);return e.node.to<=e.pos+t[0].length?e.continue():e.lineIndent(e.node.from)+(t[2]?0:e.unit)},"OpenTag CloseTag SelfClosingTag"(e){return e.column(e.node.from)+e.unit},Document(e){if(e.pos+/\s*/.exec(e.textAfter)[0].length<e.node.to)return e.continue();let t=null,n;for(let n=e.node;;){let e=n.lastChild;if(!e||e.name!=`Element`||e.to!=n.to)break;t=n=e}return t&&!((n=t.lastChild)&&(n.name==`CloseTag`||n.name==`SelfClosingTag`))?e.lineIndent(t.from)+e.unit:null}}),Zd.add({Element(e){let t=e.firstChild,n=e.lastChild;return!t||t.name!=`OpenTag`?null:{from:t.to,to:n.name==`CloseTag`?n.from:e.to}}}),sf.add({"OpenTag CloseTag":e=>e.getChild(`TagName`)})]}),languageData:{commentTokens:{block:{open:`<!--`,close:`-->`}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:`-_`}}),l_=c_.configure({wrap:xh(o_,s_)});function u_(e={}){let t=``,n;return e.matchClosingTags===!1&&(t=`noMatch`),e.selfClosingTags===!0&&(t=(t?t+` `:``)+`selfClosing`),(e.nestedLanguages&&e.nestedLanguages.length||e.nestedAttributes&&e.nestedAttributes.length)&&(n=xh((e.nestedLanguages||[]).concat(o_),(e.nestedAttributes||[]).concat(s_))),new kd(n?c_.configure({wrap:n,dialect:t}):t?l_.configure({dialect:t}):l_,[l_.data.of({autocomplete:i_(e)}),e.autoCloseTags===!1?[]:p_,Mg().support,$h().support])}const d_=new Set(`area base br col command embed frame hr img input keygen link meta param source track wbr menuitem`.split(` `));function f_(e,t,n){for(;;){if(t.lastChild?.name!=`CloseTag`)return!1;let r=t.parent;if(!r||Kg(e,r)!=n)return!0;t=r}}const p_=U.inputHandler.of((e,t,n,r,i)=>{if(e.composing||e.state.readOnly||t!=n||r!=`>`&&r!=`/`||!l_.isActiveAt(e.state,t,-1))return!1;let a=i(),{state:o}=a,s=o.changeByRange(e=>{let t=o.doc.sliceString(e.from-1,e.to)==r,{head:n}=e,i=Y(o).resolveInner(n,-1),a;if(t&&r==`>`&&i.name==`EndTag`){let t=i.parent;if((a=Kg(o.doc,t.parent,n))&&!d_.has(a)&&!f_(o.doc,t.parent,a))return{range:e,changes:{from:n,to:n+ +(o.doc.sliceString(n,n+1)===`>`),insert:`</${a}>`}}}else if(t&&r==`/`&&i.name==`IncompleteCloseTag`){let e=i.parent;if(i.from==n-2&&e.lastChild?.name!=`CloseTag`&&(a=Kg(o.doc,e,n))&&!d_.has(a)){let e=n+ +(o.doc.sliceString(n,n+1)===`>`),t=`${a}>`;return{range:M.cursor(n+t.length,-1),changes:{from:n,to:e,insert:t}}}}return{range:e}});return s.changes.empty?!1:(e.dispatch([a,o.update(s,{userEvent:`input.complete`,scrollIntoView:!0})]),!0)}),m_=hd({commentTokens:{block:{open:`<!--`,close:`-->`}}}),h_=new W,g_=Xp.configure({props:[Zd.add(e=>!e.is(`Block`)||e.is(`Document`)||__(e)!=null||v_(e)?void 0:(e,t)=>({from:t.doc.lineAt(e.from).to,to:e.to})),h_.add(__),Ld.add({Document:()=>null}),md.add({Document:m_})]});function __(e){let t=/^(?:ATX|Setext)Heading(\d)$/.exec(e.name);return t?+t[1]:void 0}function v_(e){return e.name==`OrderedList`||e.name==`BulletList`}function y_(e,t){let n=e;for(;;){let e=n.nextSibling,r;if(!e||(r=__(e.type))!=null&&r<=t)break;n=e}return n.to}const b_=Xd.of((e,t,n)=>{for(let r=Y(e).resolveInner(n,-1);r&&!(r.from<t);r=r.parent){let e=r.type.prop(h_);if(e==null)continue;let t=y_(r,e);if(t>n)return{from:n,to:t}}return null});function x_(e){return new _d(m_,e,[],`markdown`)}const S_=x_(g_),C_=x_(g_.configure([gm,ym,vm,bm,{props:[Zd.add({Table:(e,t)=>({from:t.doc.lineAt(e.from).to,to:e.to})})]}]));function w_(e,t){return n=>{if(n&&e){let t=null;if(n=/\S*/.exec(n)[0],t=typeof e==`function`?e(n):Ad.matchLanguageName(e,n,!0),t instanceof Ad)return t.support?t.support.language.parser:Sd.getSkippingParser(t.load());if(t)return t.parser}return t?t.parser:null}}var T_=class{constructor(e,t,n,r,i,a,o){this.node=e,this.from=t,this.to=n,this.spaceBefore=r,this.spaceAfter=i,this.type=a,this.item=o}blank(e,t=!0){let n=this.spaceBefore+(this.node.name==`Blockquote`?`>`:``);if(e!=null){for(;n.length<e;)n+=` `;return n}else{for(let e=this.to-this.from-n.length-this.spaceAfter.length;e>0;e--)n+=` `;return n+(t?this.spaceAfter:``)}}marker(e,t){let n=this.node.name==`OrderedList`?String(+D_(this.item,e)[2]+t):``;return this.spaceBefore+n+this.type+this.spaceAfter}};function E_(e,t){let n=[],r=[];for(let t=e;t;t=t.parent){if(t.name==`FencedCode`)return r;(t.name==`ListItem`||t.name==`Blockquote`)&&n.push(t)}for(let e=n.length-1;e>=0;e--){let i=n[e],a,o=t.lineAt(i.from),s=i.from-o.from;if(i.name==`Blockquote`&&(a=/^ *>( ?)/.exec(o.text.slice(s))))r.push(new T_(i,s,s+a[0].length,``,a[1],`>`,null));else if(i.name==`ListItem`&&i.parent.name==`OrderedList`&&(a=/^( *)\d+([.)])( *)/.exec(o.text.slice(s)))){let e=a[3],t=a[0].length;e.length>=4&&(e=e.slice(0,e.length-4),t-=4),r.push(new T_(i.parent,s,s+t,a[1],e,a[2],i))}else if(i.name==`ListItem`&&i.parent.name==`BulletList`&&(a=/^( *)([-+*])( {1,4}\[[ xX]\])?( +)/.exec(o.text.slice(s)))){let e=a[4],t=a[0].length;e.length>4&&(e=e.slice(0,e.length-4),t-=4);let n=a[2];a[3]&&(n+=a[3].replace(/[xX]/,` `)),r.push(new T_(i.parent,s,s+t,a[1],e,n,i))}}return r}function D_(e,t){return/^(\s*)(\d+)(?=[.)])/.exec(t.sliceString(e.from,e.from+10))}function O_(e,t,n,r=0){for(let i=-1,a=e;;){if(a.name==`ListItem`){let e=D_(a,t),o=+e[2];if(i>=0){if(o!=i+1)return;n.push({from:a.from+e[1].length,to:a.from+e[0].length,insert:String(i+2+r)})}i=o}let e=a.nextSibling;if(!e)break;a=e}}function k_(e,t){let n=/^[ \t]*/.exec(e)[0].length;if(!n||t.facet(Md)!=` `)return e;let r=ci(e,4,n),i=``;for(let e=r;e>0;)e>=4?(i+=` `,e-=4):(i+=` `,e--);return i+e.slice(n)}const A_=((e={})=>({state:t,dispatch:n})=>{let r=Y(t),{doc:i}=t,a=null,o=t.changeByRange(n=>{if(!n.empty||!C_.isActiveAt(t,n.from,-1)&&!C_.isActiveAt(t,n.from,1))return a={range:n};let o=n.from,s=i.lineAt(o),c=E_(r.resolveInner(o,-1),i);for(;c.length&&c[c.length-1].from>o-s.from;)c.pop();if(!c.length)return a={range:n};let l=c[c.length-1];if(l.to-l.spaceAfter.length>o-s.from)return a={range:n};let u=o>=l.to-l.spaceAfter.length&&!/\S/.test(s.text.slice(l.to));if(l.item&&u){if(l.item.from<s.from&&!/^[\s>]*$/.test(s.text.slice(0,l.to)))return a={range:n};let r=l.node.firstChild,u=l.node.getChild(`ListItem`,`ListItem`);if(r.to>=o||u&&u.to<o||s.from>0&&!/[^\s>]/.test(i.lineAt(s.from-1).text)||e.nonTightLists===!1){let e=c.length>1?c[c.length-2]:null,t,n=``;e&&e.item?(t=s.from+e.from,n=e.marker(i,1)):t=s.from+(e?e.to:0);let r=[{from:t,to:o,insert:n}];return l.node.name==`OrderedList`&&O_(l.item,i,r,-2),e&&e.node.name==`OrderedList`&&O_(e.item,i,r),{range:M.cursor(t+n.length),changes:r}}else{let e=N_(c,t,s);return{range:M.cursor(o+e.length+1),changes:{from:s.from,insert:e+t.lineBreak}}}}if(l.node.name==`Blockquote`&&u&&s.from){let e=i.lineAt(s.from-1),r=/>\s*$/.exec(e.text);if(r&&r.index==l.from){let i=t.changes([{from:e.from+r.index,to:e.to},{from:s.from+l.from,to:s.to}]);return{range:n.map(i),changes:i}}}let d=[];l.node.name==`OrderedList`&&O_(l.item,i,d);let f=l.item&&l.item.from<s.from,p=``;if(!f||/^[\s\d.)\-+*>]*/.exec(s.text)[0].length>=l.to)for(let e=0,t=c.length-1;e<=t;e++)p+=e==t&&!f?c[e].marker(i,1):c[e].blank(e<t?ci(s.text,4,c[e+1].from)-p.length:null);let m=o;for(;m>s.from&&/\s/.test(s.text.charAt(m-s.from-1));)m--;return p=k_(p,t),M_(l.node,t.doc)&&(p=N_(c,t,s)+t.lineBreak+p),d.push({from:m,to:o,insert:t.lineBreak+p}),{range:M.cursor(m+p.length+1),changes:d}});return a?!1:(n(t.update(o,{scrollIntoView:!0,userEvent:`input`})),!0)})();function j_(e){return e.name==`QuoteMark`||e.name==`ListMark`}function M_(e,t){if(e.name!=`OrderedList`&&e.name!=`BulletList`)return!1;let n=e.firstChild,r=e.getChild(`ListItem`,`ListItem`);if(!r)return!1;let i=t.lineAt(n.to),a=t.lineAt(r.from),o=/^[\s>]*$/.test(i.text);return i.number+ +!o<a.number}function N_(e,t,n){let r=``;for(let t=0,i=e.length-2;t<=i;t++)r+=e[t].blank(t<i?ci(n.text,4,e[t+1].from)-r.length:null,t<i);return k_(r,t)}function P_(e,t){let n=e.resolveInner(t,-1),r=t;j_(n)&&(r=n.from,n=n.parent);for(let e;e=n.childBefore(r);)if(j_(e))r=e.from;else if(e.name==`OrderedList`||e.name==`BulletList`)n=e.lastChild,r=n.to;else break;return n}const F_=[{key:`Enter`,run:A_},{key:`Backspace`,run:({state:e,dispatch:t})=>{let n=Y(e),r=null,i=e.changeByRange(t=>{let i=t.from,{doc:a}=e;if(t.empty&&C_.isActiveAt(e,t.from)){let t=a.lineAt(i),r=E_(P_(n,i),a);if(r.length){let n=r[r.length-1],a=n.to-n.spaceAfter.length+ +!!n.spaceAfter;if(i-t.from>a&&!/\S/.test(t.text.slice(a,i-t.from)))return{range:M.cursor(t.from+a),changes:{from:t.from+a,to:i}};if(i-t.from==a&&(n.item&&t.from<=n.item.from||/^[\s>]*$/.test(t.text.slice(0,n.to)))){let r=t.from+n.from;if(n.item&&n.node.from<n.item.from&&/\S/.test(t.text.slice(n.from,n.to))){let i=n.blank(ci(t.text,4,n.to)-ci(t.text,4,n.from));return r==t.from&&(i=k_(i,e)),{range:M.cursor(r+i.length),changes:{from:r,to:t.from+n.to,insert:i}}}if(r<i)return{range:M.cursor(r),changes:{from:r,to:i}}}}}return r={range:t}});return r?!1:(t(e.update(i,{scrollIntoView:!0,userEvent:`delete`})),!0)}}],I_=u_({matchClosingTags:!1});function L_(e={}){let{codeLanguages:t,defaultCodeLanguage:n,addKeymap:r=!0,base:{parser:i}=S_,completeHTMLTags:a=!0,pasteURLAsLink:o=!0,htmlTagLanguage:s=I_}=e;if(!(i instanceof wp))throw RangeError("Base parser provided to `markdown` should be a Markdown parser");let c=e.extensions?[e.extensions]:[],l=[s.support,b_],u;o&&l.push(H_),n instanceof kd?(l.push(n.support),u=n.language):n&&(u=n);let d=t||u?w_(t,u):void 0;c.push(Qp({codeParser:d,htmlParser:s.language.parser})),r&&l.push(dr.high(Sl.of(F_)));let f=x_(i.configure(c));return a&&l.push(f.data.of({autocomplete:R_})),new kd(f,l)}function R_(e){let{state:t,pos:n}=e,r=/<[:\-\.\w\u00b7-\uffff]*$/.exec(t.sliceDoc(n-25,n));if(!r)return null;let i=Y(t).resolveInner(n,-1);for(;i&&!i.type.isTop;){if(i.name==`CodeBlock`||i.name==`FencedCode`||i.name==`ProcessingInstructionBlock`||i.name==`CommentBlock`||i.name==`Link`||i.name==`Image`)return null;i=i.parent}return{from:n-r[0].length,to:n,options:B_(),validFor:/^<[:\-\.\w\u00b7-\uffff]*$/}}let z_=null;function B_(){if(z_)return z_;let e=r_(new bf(F.create({extensions:I_}),0,!0));return z_=e?e.options:[]}const V_=/code|horizontalrule|html|link|comment|processing|escape|entity|image|mark|url/i,H_=U.domEventHandlers({paste:(e,t)=>{let{main:n}=t.state.selection;if(n.empty)return!1;let r=e.clipboardData?.getData(`text/plain`);if(!r||!/^(https?:\/\/|mailto:|xmpp:|www\.)/.test(r)||(/^www\./.test(r)&&(r=`https://`+r),!C_.isActiveAt(t.state,n.from,1)))return!1;let i=Y(t.state),a=!1;return i.iterate({from:n.from,to:n.to,enter:e=>{(e.from>n.from||V_.test(e.name))&&(a=!0)},leave:e=>{e.to<n.to&&(a=!0)}}),a?!1:(t.dispatch({changes:[{from:n.from,insert:`[`},{from:n.to,insert:`](${r})`}],userEvent:`input.paste`,scrollIntoView:!0}),!0)}}),U_=e=>{let{state:t}=e,n=t.doc.lineAt(t.selection.main.from),r=J_(e.state,n.from);return r.line?G_(e):r.block?q_(e):!1};function W_(e,t){return({state:n,dispatch:r})=>{if(n.readOnly)return!1;let i=e(t,n);return i?(r(n.update(i)),!0):!1}}const G_=W_(Q_,0),K_=W_(Z_,0),q_=W_((e,t)=>Z_(e,t,X_(t)),0);function J_(e,t){let n=e.languageDataAt(`commentTokens`,t,1);return n.length?n[0]:{}}function Y_(e,{open:t,close:n},r,i){let a=e.sliceDoc(r-50,r),o=e.sliceDoc(i,i+50),s=/\s*$/.exec(a)[0].length,c=/^\s*/.exec(o)[0].length,l=a.length-s;if(a.slice(l-t.length,l)==t&&o.slice(c,c+n.length)==n)return{open:{pos:r-s,margin:s&&1},close:{pos:i+c,margin:c&&1}};let u,d;i-r<=100?u=d=e.sliceDoc(r,i):(u=e.sliceDoc(r,r+50),d=e.sliceDoc(i-50,i));let f=/^\s*/.exec(u)[0].length,p=/\s*$/.exec(d)[0].length,m=d.length-p-n.length;return u.slice(f,f+t.length)==t&&d.slice(m,m+n.length)==n?{open:{pos:r+f+t.length,margin:+!!/\s/.test(u.charAt(f+t.length))},close:{pos:i-p-n.length,margin:+!!/\s/.test(d.charAt(m-1))}}:null}function X_(e){let t=[];for(let n of e.selection.ranges){let r=e.doc.lineAt(n.from),i=n.to<=r.to?r:e.doc.lineAt(n.to);i.from>r.from&&i.from==n.to&&(i=n.to==r.to+1?r:e.doc.lineAt(n.to-1));let a=t.length-1;a>=0&&t[a].to>r.from?t[a].to=i.to:t.push({from:r.from+/^\s*/.exec(r.text)[0].length,to:i.to})}return t}function Z_(e,t,n=t.selection.ranges){let r=n.map(e=>J_(t,e.from).block);if(!r.every(e=>e))return null;let i=n.map((e,n)=>Y_(t,r[n],e.from,e.to));if(e!=2&&!i.every(e=>e))return{changes:t.changes(n.map((e,t)=>i[t]?[]:[{from:e.from,insert:r[t].open+` `},{from:e.to,insert:` `+r[t].close}]))};if(e!=1&&i.some(e=>e)){let e=[];for(let t=0,n;t<i.length;t++)if(n=i[t]){let i=r[t],{open:a,close:o}=n;e.push({from:a.pos-i.open.length,to:a.pos+a.margin},{from:o.pos-o.margin,to:o.pos+i.close.length})}return{changes:e}}return null}function Q_(e,t,n=t.selection.ranges){let r=[],i=-1;ranges:for(let{from:e,to:a}of n){let n=r.length,o=1e9,s;for(let n=e;n<=a;){let c=t.doc.lineAt(n);if(s==null&&(s=J_(t,c.from).line,!s))continue ranges;if(c.from>i&&(e==a||a>c.from)){i=c.from;let e=/^\s*/.exec(c.text)[0].length,t=e==c.length,n=c.text.slice(e,e+s.length)==s?e:-1;e<c.text.length&&e<o&&(o=e),r.push({line:c,comment:n,token:s,indent:e,empty:t,single:!1})}n=c.to+1}if(o<1e9)for(let e=n;e<r.length;e++)r[e].indent<r[e].line.text.length&&(r[e].indent=o);r.length==n+1&&(r[n].single=!0)}if(e!=2&&r.some(e=>e.comment<0&&(!e.empty||e.single))){let e=[];for(let{line:t,token:n,indent:i,empty:a,single:o}of r)(o||!a)&&e.push({from:t.from+i,insert:n+` `});let n=t.changes(e);return{changes:n,selection:t.selection.map(n,1)}}else if(e!=1&&r.some(e=>e.comment>=0)){let e=[];for(let{line:t,comment:n,token:i}of r)if(n>=0){let r=t.from+n,a=r+i.length;t.text[a-t.from]==` `&&a++,e.push({from:r,to:a})}return{changes:e}}return null}const $_=Er.define(),ev=Er.define(),tv=N.define(),nv=N.define({combine(e){return Ur(e,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(n,r)=>e(n,r)||t(n,r)})}}),rv=cr.define({create(){return xv.empty},update(e,t){let n=t.state.facet(nv),r=t.annotation($_);if(r){let i=uv.fromTransaction(t,r.selection),a=r.side,o=a==0?e.undone:e.done;return o=i?dv(o,o.length,n.minDepth,i):gv(o,t.startState.selection),new xv(a==0?r.rest:o,a==0?o:r.rest)}let i=t.annotation(ev);if((i==`full`||i==`before`)&&(e=e.isolate()),t.annotation(kr.addToHistory)===!1)return t.changes.empty?e:e.addMapping(t.changes.desc);let a=uv.fromTransaction(t),o=t.annotation(kr.time),s=t.annotation(kr.userEvent);return a?e=e.addChanges(a,o,s,n,t):t.selection&&(e=e.addSelection(t.startState.selection,o,s,n.newGroupDelay)),(i==`full`||i==`after`)&&(e=e.isolate()),e},toJSON(e){return{done:e.done.map(e=>e.toJSON()),undone:e.undone.map(e=>e.toJSON())}},fromJSON(e){return new xv(e.done.map(uv.fromJSON),e.undone.map(uv.fromJSON))}});function iv(e={}){return[rv,nv.of(e),U.domEventHandlers({beforeinput(e,t){let n=e.inputType==`historyUndo`?ov:e.inputType==`historyRedo`?sv:null;return n?(e.preventDefault(),n(t)):!1}})]}function av(e,t){return function({state:n,dispatch:r}){if(!t&&n.readOnly)return!1;let i=n.field(rv,!1);if(!i)return!1;let a=i.pop(e,n,t);return a?(r(a),!0):!1}}const ov=av(0,!1),sv=av(1,!1),cv=av(0,!0),lv=av(1,!0);var uv=class e{constructor(e,t,n,r,i){this.changes=e,this.effects=t,this.mapped=n,this.startSelection=r,this.selectionsAfter=i}setSelAfter(t){return new e(this.changes,this.effects,this.mapped,this.startSelection,t)}toJSON(){return{changes:this.changes?.toJSON(),mapped:this.mapped?.toJSON(),startSelection:this.startSelection?.toJSON(),selectionsAfter:this.selectionsAfter.map(e=>e.toJSON())}}static fromJSON(t){return new e(t.changes&&Kn.fromJSON(t.changes),[],t.mapped&&Gn.fromJSON(t.mapped),t.startSelection&&M.fromJSON(t.startSelection),t.selectionsAfter.map(M.fromJSON))}static fromTransaction(t,n){let r=hv;for(let e of t.startState.facet(tv)){let n=e(t);n.length&&(r=r.concat(n))}return!r.length&&t.changes.empty?null:new e(t.changes.invert(t.startState.doc),r,void 0,n||t.startState.selection,hv)}static selection(t){return new e(void 0,hv,void 0,void 0,t)}};function dv(e,t,n,r){let i=t+1>n+20?t-n-1:0,a=e.slice(i,t);return a.push(r),a}function fv(e,t){let n=[],r=!1;return e.iterChangedRanges((e,t)=>n.push(e,t)),t.iterChangedRanges((e,t,i,a)=>{for(let e=0;e<n.length;){let t=n[e++],o=n[e++];a>=t&&i<=o&&(r=!0)}}),r}function pv(e,t){return e.ranges.length==t.ranges.length&&e.ranges.filter((e,n)=>e.empty!=t.ranges[n].empty).length===0}function mv(e,t){return e.length?t.length?e.concat(t):e:t}const hv=[];function gv(e,t){if(e.length){let n=e[e.length-1],r=n.selectionsAfter.slice(Math.max(0,n.selectionsAfter.length-200));return r.length&&r[r.length-1].eq(t)?e:(r.push(t),dv(e,e.length-1,1e9,n.setSelAfter(r)))}else return[uv.selection([t])]}function _v(e){let t=e[e.length-1],n=e.slice();return n[e.length-1]=t.setSelAfter(t.selectionsAfter.slice(0,t.selectionsAfter.length-1)),n}function vv(e,t){if(!e.length)return e;let n=e.length,r=hv;for(;n;){let i=yv(e[n-1],t,r);if(i.changes&&!i.changes.empty||i.effects.length){let t=e.slice(0,n);return t[n-1]=i,t}else t=i.mapped,n--,r=i.selectionsAfter}return r.length?[uv.selection(r)]:hv}function yv(e,t,n){let r=mv(e.selectionsAfter.length?e.selectionsAfter.map(e=>e.map(t)):hv,n);if(!e.changes)return uv.selection(r);let i=e.changes.map(t),a=t.mapDesc(e.changes,!0),o=e.mapped?e.mapped.composeDesc(a):a;return new uv(i,P.mapEffects(e.effects,t),o,e.startSelection.map(a),r)}const bv=/^(input\.type|delete)($|\.)/;var xv=class e{constructor(e,t,n=0,r=void 0){this.done=e,this.undone=t,this.prevTime=n,this.prevUserEvent=r}isolate(){return this.prevTime?new e(this.done,this.undone):this}addChanges(t,n,r,i,a){let o=this.done,s=o[o.length-1];return o=s&&s.changes&&!s.changes.empty&&t.changes&&(!r||bv.test(r))&&(!s.selectionsAfter.length&&n-this.prevTime<i.newGroupDelay&&i.joinToEvent(a,fv(s.changes,t.changes))||r==`input.type.compose`)?dv(o,o.length-1,i.minDepth,new uv(t.changes.compose(s.changes),mv(P.mapEffects(t.effects,s.changes),s.effects),s.mapped,s.startSelection,hv)):dv(o,o.length,i.minDepth,t),new e(o,hv,n,r)}addSelection(t,n,r,i){let a=this.done.length?this.done[this.done.length-1].selectionsAfter:hv;return a.length>0&&n-this.prevTime<i&&r==this.prevUserEvent&&r&&/^select($|\.)/.test(r)&&pv(a[a.length-1],t)?this:new e(gv(this.done,t),this.undone,n,r)}addMapping(t){return new e(vv(this.done,t),vv(this.undone,t),this.prevTime,this.prevUserEvent)}pop(e,t,n){let r=e==0?this.done:this.undone;if(r.length==0)return null;let i=r[r.length-1],a=i.selectionsAfter[0]||(i.startSelection?i.startSelection.map(i.changes.invertedDesc,1):t.selection);if(n&&i.selectionsAfter.length)return t.update({selection:i.selectionsAfter[i.selectionsAfter.length-1],annotations:$_.of({side:e,rest:_v(r),selection:a}),userEvent:e==0?`select.undo`:`select.redo`,scrollIntoView:!0});if(i.changes){let n=r.length==1?hv:r.slice(0,r.length-1);return i.mapped&&(n=vv(n,i.mapped)),t.update({changes:i.changes,selection:i.startSelection,effects:i.effects,annotations:$_.of({side:e,rest:n,selection:a}),filter:!1,userEvent:e==0?`undo`:`redo`,scrollIntoView:!0})}else return null}};xv.empty=new xv(hv,hv);const Sv=[{key:`Mod-z`,run:ov,preventDefault:!0},{key:`Mod-y`,mac:`Mod-Shift-z`,run:sv,preventDefault:!0},{linux:`Ctrl-Shift-z`,run:sv,preventDefault:!0},{key:`Mod-u`,run:cv,preventDefault:!0},{key:`Alt-u`,mac:`Mod-Shift-u`,run:lv,preventDefault:!0}];function Cv(e,t){return M.create(e.ranges.map(t),e.mainIndex)}function wv(e,t){return e.update({selection:t,scrollIntoView:!0,userEvent:`select`})}function Tv({state:e,dispatch:t},n){let r=Cv(e.selection,n);return r.eq(e.selection,!0)?!1:(t(wv(e,r)),!0)}function Ev(e,t){return M.cursor(t?e.to:e.from)}function Dv(e,t){return Tv(e,n=>n.empty?e.moveByChar(n,t):Ev(n,t))}function Ov(e){return e.textDirectionAt(e.state.selection.main.head)==z.LTR}const kv=e=>Dv(e,!Ov(e)),Av=e=>Dv(e,Ov(e));function jv(e,t){return Tv(e,n=>n.empty?e.moveByGroup(n,t):Ev(n,t))}const Mv=e=>jv(e,!Ov(e)),Nv=e=>jv(e,Ov(e));typeof Intl<`u`&&Intl.Segmenter;function Pv(e,t,n){if(t.type.prop(n))return!0;let r=t.to-t.from;return r&&(r>2||/[^\s,.;:]/.test(e.sliceDoc(t.from,t.to)))||t.firstChild}function Fv(e,t,n){let r=Y(e).resolveInner(t.head),i=n?W.closedBy:W.openedBy;for(let a=t.head;;){let t=n?r.childAfter(a):r.childBefore(a);if(!t)break;Pv(e,t,i)?r=t:a=n?t.to:t.from}let a=r.type.prop(i),o,s;return s=a&&(o=n?uf(e,r.from,1):uf(e,r.to,-1))&&o.matched?n?o.end.to:o.end.from:n?r.to:r.from,M.cursor(s,n?-1:1)}const Iv=e=>Tv(e,t=>Fv(e.state,t,!Ov(e))),Lv=e=>Tv(e,t=>Fv(e.state,t,Ov(e)));function Rv(e,t){return Tv(e,n=>{if(!n.empty)return Ev(n,t);let r=e.moveVertically(n,t);return r.head==n.head?e.moveToLineBoundary(n,t):r})}const zv=e=>Rv(e,!1),Bv=e=>Rv(e,!0);function Vv(e){let t=e.scrollDOM.clientHeight<e.scrollDOM.scrollHeight-2,n=0,r=0,i;if(t){for(let t of e.state.facet(U.scrollMargins)){let i=t(e);i?.top&&(n=Math.max(i?.top,n)),i?.bottom&&(r=Math.max(i?.bottom,r))}i=e.scrollDOM.clientHeight-n-r}else i=(e.dom.ownerDocument.defaultView||window).innerHeight;return{marginTop:n,marginBottom:r,selfScroll:t,height:Math.max(e.defaultLineHeight,i-5)}}function Hv(e,t){let n=Vv(e),{state:r}=e,i=Cv(r.selection,r=>r.empty?e.moveVertically(r,t,n.height):Ev(r,t));if(i.eq(r.selection))return!1;let a;if(n.selfScroll){let t=e.coordsAtPos(r.selection.main.head),o=e.scrollDOM.getBoundingClientRect(),s=o.top+n.marginTop,c=o.bottom-n.marginBottom;t&&t.top>s&&t.bottom<c&&(a=U.scrollIntoView(i.main.head,{y:`start`,yMargin:t.top-s}))}return e.dispatch(wv(r,i),{effects:a}),!0}const Uv=e=>Hv(e,!1),Wv=e=>Hv(e,!0);function Gv(e,t,n){let r=e.lineBlockAt(t.head),i=e.moveToLineBoundary(t,n);if(i.head==t.head&&i.head!=(n?r.to:r.from)&&(i=e.moveToLineBoundary(t,n,!1)),!n&&i.head==r.from&&r.length){let n=/^\s*/.exec(e.state.sliceDoc(r.from,Math.min(r.from+100,r.to)))[0].length;n&&t.head!=r.from+n&&(i=M.cursor(r.from+n))}return i}const Kv=e=>Tv(e,t=>Gv(e,t,!0)),qv=e=>Tv(e,t=>Gv(e,t,!1)),Jv=e=>Tv(e,t=>Gv(e,t,!Ov(e))),Yv=e=>Tv(e,t=>Gv(e,t,Ov(e))),Xv=e=>Tv(e,t=>M.cursor(e.lineBlockAt(t.head).from,1)),Zv=e=>Tv(e,t=>M.cursor(e.lineBlockAt(t.head).to,-1));function Qv(e,t,n){let r=!1,i=Cv(e.selection,t=>{let i=uf(e,t.head,-1)||uf(e,t.head,1)||t.head>0&&uf(e,t.head-1,1)||t.head<e.doc.length&&uf(e,t.head+1,-1);if(!i||!i.end)return t;r=!0;let a=i.start.from==t.head?i.end.to:i.end.from;return n?M.range(t.anchor,a):M.cursor(a)});return r?(t(wv(e,i)),!0):!1}const $v=({state:e,dispatch:t})=>Qv(e,t,!1);function ey(e,t,n){let r=Cv(e.state.selection,e=>{e.undirectional&&e.head>=e.anchor!=t&&(e=M.range(e.head,e.anchor));let r=n(e);return M.range(e.anchor,r.head,r.goalColumn,r.bidiLevel||void 0,r.assoc)});return r.eq(e.state.selection)?!1:(e.dispatch(wv(e.state,r)),!0)}function ty(e,t){return ey(e,t,n=>e.moveByChar(n,t))}const ny=e=>ty(e,!Ov(e)),ry=e=>ty(e,Ov(e));function iy(e,t){return ey(e,t,n=>e.moveByGroup(n,t))}const ay=e=>iy(e,!Ov(e)),oy=e=>iy(e,Ov(e)),sy=e=>{let t=!Ov(e);return ey(e,t,n=>Fv(e.state,n,t))},cy=e=>{let t=Ov(e);return ey(e,t,n=>Fv(e.state,n,t))};function ly(e,t){return ey(e,t,n=>e.moveVertically(n,t))}const uy=e=>ly(e,!1),dy=e=>ly(e,!0);function fy(e,t){return ey(e,t,n=>e.moveVertically(n,t,Vv(e).height))}const py=e=>fy(e,!1),my=e=>fy(e,!0),hy=e=>ey(e,!0,t=>Gv(e,t,!0)),gy=e=>ey(e,!1,t=>Gv(e,t,!1)),_y=e=>{let t=!Ov(e);return ey(e,t,n=>Gv(e,n,t))},vy=e=>{let t=Ov(e);return ey(e,t,n=>Gv(e,n,t))},yy=e=>ey(e,!1,t=>M.cursor(e.lineBlockAt(t.head).from)),by=e=>ey(e,!0,t=>M.cursor(e.lineBlockAt(t.head).to)),xy=({state:e,dispatch:t})=>(t(wv(e,{anchor:0})),!0),Sy=({state:e,dispatch:t})=>(t(wv(e,{anchor:e.doc.length})),!0),Cy=({state:e,dispatch:t})=>(t(wv(e,{anchor:e.selection.main.anchor,head:0})),!0),wy=({state:e,dispatch:t})=>(t(wv(e,{anchor:e.selection.main.anchor,head:e.doc.length})),!0),Ty=({state:e,dispatch:t})=>(t(e.update({selection:{anchor:0,head:e.doc.length},userEvent:`select`})),!0),Ey=({state:e,dispatch:t})=>{let n=Gy(e).map(({from:t,to:n})=>M.undirectionalRange(t,Math.min(n+1,e.doc.length)));return t(e.update({selection:M.create(n),userEvent:`select`})),!0},Dy=({state:e,dispatch:t})=>{let n=Cv(e.selection,t=>{let n=Y(e),r=n.resolveStack(t.from,1);if(t.empty){let e=n.resolveStack(t.from,-1);e.node.from>=r.node.from&&e.node.to<=r.node.to&&(r=e)}for(let e=r;e;e=e.next){let{node:n}=e;if((n.from<t.from&&n.to>=t.to||n.to>t.to&&n.from<=t.from)&&e.next)return M.undirectionalRange(n.from,n.to)}return t});return n.eq(e.selection)?!1:(t(wv(e,n)),!0)};function Oy(e,t){let{state:n}=e,r=n.selection,i=n.selection.ranges.slice();for(let r of n.selection.ranges){let a=n.doc.lineAt(r.head);if(t?a.to<e.state.doc.length:a.from>0)for(let n=r;;){let r=e.moveVertically(n,t);if(r.head<a.from||r.head>a.to){i.some(e=>e.head==r.head)||i.push(r);break}else if(r.head==n.head)break;else n=r}}return i.length==r.ranges.length?!1:(e.dispatch(wv(n,M.create(i,i.length-1))),!0)}const ky=e=>Oy(e,!1),Ay=e=>Oy(e,!0),jy=({state:e,dispatch:t})=>{let n=e.selection,r=null;return n.ranges.length>1?r=M.create([n.main]):n.main.empty||(r=M.create([M.cursor(n.main.head)])),r?(t(wv(e,r)),!0):!1};function My(e,t){if(e.state.readOnly)return!1;let n=`delete.selection`,{state:r}=e,i=r.changeByRange(r=>{let{from:i,to:a}=r;if(i==a){let o=t(r);o<i?(n=`delete.backward`,o=Ny(e,o,!1)):o>i&&(n=`delete.forward`,o=Ny(e,o,!0)),i=Math.min(i,o),a=Math.max(a,o)}else i=Ny(e,i,!1),a=Ny(e,a,!0);return i==a?{range:r}:{changes:{from:i,to:a},range:M.cursor(i,i<r.head?-1:1)}});return i.changes.empty?!1:(e.dispatch(r.update(i,{scrollIntoView:!0,userEvent:n,effects:n==`delete.selection`?U.announce.of(r.phrase(`Selection deleted`)):void 0})),!0)}function Ny(e,t,n){if(e instanceof U)for(let r of e.state.facet(U.atomicRanges).map(t=>t(e)))r.between(t,t,(e,r)=>{e<t&&r>t&&(t=n?r:e)});return t}const Py=(e,t,n)=>My(e,r=>{let i=r.from,{state:a}=e,o=a.doc.lineAt(i),s,c;if(n&&!t&&i>o.from&&i<o.from+200&&!/[^ \t]/.test(s=o.text.slice(0,i-o.from))){if(s[s.length-1]==` `)return i-1;let e=ci(s,a.tabSize)%Nd(a)||Nd(a);for(let t=0;t<e&&s[s.length-1-t]==` `;t++)i--;c=i}else c=Rn(o.text,i-o.from,t,t)+o.from,c==i&&o.number!=(t?a.doc.lines:1)?c+=t?1:-1:!t&&/[\ufe00-\ufe0f]/.test(o.text.slice(c-o.from,i-o.from))&&(c=Rn(o.text,c-o.from,!1,!1)+o.from);return c}),Fy=e=>Py(e,!1,!0),Iy=e=>Py(e,!0,!1),Ly=(e,t)=>My(e,n=>{let r=n.head,{state:i}=e,a=i.doc.lineAt(r),o=i.charCategorizer(r);for(let e=null;;){if(r==(t?a.to:a.from)){r==n.head&&a.number!=(t?i.doc.lines:1)&&(r+=t?1:-1);break}let s=Rn(a.text,r-a.from,t)+a.from,c=a.text.slice(Math.min(r,s)-a.from,Math.max(r,s)-a.from),l=o(c);if(e!=null&&l!=e)break;(c!=` `||r!=n.head)&&(e=l),r=s}return r}),Ry=e=>Ly(e,!1),zy=e=>Ly(e,!0),By=e=>My(e,t=>{let n=e.lineBlockAt(t.head).to;return t.head<n?n:Math.min(e.state.doc.length,t.head+1)}),Vy=e=>My(e,t=>{let n=e.moveToLineBoundary(t,!1).head;return t.head>n?n:Math.max(0,t.head-1)}),Hy=e=>My(e,t=>{let n=e.moveToLineBoundary(t,!0).head;return t.head<n?n:Math.min(e.state.doc.length,t.head+1)}),Uy=({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=e.changeByRange(e=>({changes:{from:e.from,to:e.to,insert:j.of([``,``])},range:M.cursor(e.from)}));return t(e.update(n,{scrollIntoView:!0,userEvent:`input`})),!0},Wy=({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=e.changeByRange(t=>{if(!t.empty||t.from==0||t.from==e.doc.length)return{range:t};let n=t.from,r=e.doc.lineAt(n),i=n==r.from?n-1:Rn(r.text,n-r.from,!1)+r.from,a=n==r.to?n+1:Rn(r.text,n-r.from,!0)+r.from;return{changes:{from:i,to:a,insert:e.doc.slice(n,a).append(e.doc.slice(i,n))},range:M.cursor(a)}});return n.changes.empty?!1:(t(e.update(n,{scrollIntoView:!0,userEvent:`move.character`})),!0)};function Gy(e){let t=[],n=-1;for(let r of e.selection.ranges){let i=e.doc.lineAt(r.from),a=e.doc.lineAt(r.to);if(!r.empty&&r.to==a.from&&(a=e.doc.lineAt(r.to-1)),n>=i.number){let e=t[t.length-1];e.to=a.to,e.ranges.push(r)}else t.push({from:i.from,to:a.to,ranges:[r]});n=a.number+1}return t}function Ky(e,t,n){if(e.readOnly)return!1;let r=[],i=[];for(let t of Gy(e)){if(n?t.to==e.doc.length:t.from==0)continue;let a=e.doc.lineAt(n?t.to+1:t.from-1),o=a.length+1;if(n){r.push({from:t.to,to:a.to},{from:t.from,insert:a.text+e.lineBreak});for(let n of t.ranges)i.push(M.range(Math.min(e.doc.length,n.anchor+o),Math.min(e.doc.length,n.head+o)))}else{r.push({from:a.from,to:t.from},{from:t.to,insert:e.lineBreak+a.text});for(let e of t.ranges)i.push(M.range(e.anchor-o,e.head-o))}}return r.length?(t(e.update({changes:r,scrollIntoView:!0,selection:M.create(i,e.selection.mainIndex),userEvent:`move.line`})),!0):!1}const qy=({state:e,dispatch:t})=>Ky(e,t,!1),Jy=({state:e,dispatch:t})=>Ky(e,t,!0);function Yy(e,t,n){if(e.readOnly)return!1;let r=[];for(let t of Gy(e))n?r.push({from:t.from,insert:e.doc.slice(t.from,t.to)+e.lineBreak}):r.push({from:t.to,insert:e.lineBreak+e.doc.slice(t.from,t.to)});let i=e.changes(r);return t(e.update({changes:i,selection:e.selection.map(i,n?1:-1),scrollIntoView:!0,userEvent:`input.copyline`})),!0}const Xy=({state:e,dispatch:t})=>Yy(e,t,!1),Zy=({state:e,dispatch:t})=>Yy(e,t,!0),Qy=e=>{if(e.state.readOnly)return!1;let{state:t}=e,n=t.changes(Gy(t).map(({from:e,to:n})=>(e>0?e--:n<t.doc.length&&n++,{from:e,to:n}))),r=Cv(t.selection,t=>{let n;if(e.lineWrapping){let r=e.lineBlockAt(t.head),i=e.coordsAtPos(t.head,t.assoc||1);i&&(n=r.bottom+e.documentTop-i.bottom+e.defaultLineHeight/2)}return e.moveVertically(t,!0,n)}).map(n);return e.dispatch({changes:n,selection:r,scrollIntoView:!0,userEvent:`delete.line`}),!0};function $y(e,t){if(/\(\)|\[\]|\{\}/.test(e.sliceDoc(t-1,t+1)))return{from:t,to:t};let n=Y(e).resolveInner(t),r=n.childBefore(t),i=n.childAfter(t),a;return r&&i&&r.to<=t&&i.from>=t&&(a=r.type.prop(W.closedBy))&&a.indexOf(i.name)>-1&&e.doc.lineAt(r.to).from==e.doc.lineAt(i.from).from&&!/\S/.test(e.sliceDoc(r.to,i.from))?{from:r.to,to:i.from}:null}const eb=nb(!1),tb=nb(!0);function nb(e){return({state:t,dispatch:n})=>{if(t.readOnly)return!1;let r=t.changeByRange(n=>{let{from:r,to:i}=n,a=t.doc.lineAt(r),o=!e&&r==i&&$y(t,r);e&&(r=i=(i<=a.to?a:t.doc.lineAt(i)).to);let s=new Id(t,{simulateBreak:r,simulateDoubleBreak:!!o}),c=Fd(s,r);for(c??=ci(/^\s*/.exec(t.doc.lineAt(r).text)[0],t.tabSize);i<a.to&&/\s/.test(a.text[i-a.from]);)i++;o?{from:r,to:i}=o:r>a.from&&r<a.from+100&&!/\S/.test(a.text.slice(0,r))&&(r=a.from);let l=[``,Pd(t,c)];return o&&l.push(Pd(t,s.lineIndent(a.from,-1))),{changes:{from:r,to:i,insert:j.of(l)},range:M.cursor(r+1+l[1].length)}});return n(t.update(r,{scrollIntoView:!0,userEvent:`input`})),!0}}function rb(e,t){let n=-1;return e.changeByRange(r=>{let i=[];for(let a=r.from;a<=r.to;){let o=e.doc.lineAt(a);o.number>n&&(r.empty||r.to>o.from)&&(t(o,i,r),n=o.number),a=o.to+1}let a=e.changes(i);return{changes:i,range:M.range(a.mapPos(r.anchor,1),a.mapPos(r.head,1))}})}const ib=({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=Object.create(null),r=new Id(e,{overrideIndentation:e=>n[e]??-1}),i=rb(e,(t,i,a)=>{let o=Fd(r,t.from);if(o==null)return;/\S/.test(t.text)||(o=0);let s=/^\s*/.exec(t.text)[0],c=Pd(e,o);(s!=c||a.from<t.from+s.length)&&(n[t.from]=o,i.push({from:t.from,to:t.from+s.length,insert:c}))});return i.changes.empty||t(e.update(i,{userEvent:`indent`})),!0},ab=({state:e,dispatch:t})=>e.readOnly?!1:(t(e.update(rb(e,(t,n)=>{n.push({from:t.from,insert:e.facet(Md)})}),{userEvent:`input.indent`})),!0),ob=({state:e,dispatch:t})=>e.readOnly?!1:(t(e.update(rb(e,(t,n)=>{let r=/^\s*/.exec(t.text)[0];if(!r)return;let i=ci(r,e.tabSize),a=0,o=Pd(e,Math.max(0,i-Nd(e)));for(;a<r.length&&a<o.length&&r.charCodeAt(a)==o.charCodeAt(a);)a++;n.push({from:t.from+a,to:t.from+r.length,insert:o.slice(a)})}),{userEvent:`delete.dedent`})),!0),sb=e=>(e.setTabFocusMode(),!0),cb=[{key:`Ctrl-b`,run:kv,shift:ny,preventDefault:!0},{key:`Ctrl-f`,run:Av,shift:ry},{key:`Ctrl-p`,run:zv,shift:uy},{key:`Ctrl-n`,run:Bv,shift:dy},{key:`Ctrl-a`,run:Xv,shift:yy},{key:`Ctrl-e`,run:Zv,shift:by},{key:`Ctrl-d`,run:Iy},{key:`Ctrl-h`,run:Fy},{key:`Ctrl-k`,run:By},{key:`Ctrl-Alt-h`,run:Ry},{key:`Ctrl-o`,run:Uy},{key:`Ctrl-t`,run:Wy},{key:`Ctrl-v`,run:Wv}],lb=[{key:`ArrowLeft`,run:kv,shift:ny,preventDefault:!0},{key:`Mod-ArrowLeft`,mac:`Alt-ArrowLeft`,run:Mv,shift:ay,preventDefault:!0},{mac:`Cmd-ArrowLeft`,run:Jv,shift:_y,preventDefault:!0},{key:`ArrowRight`,run:Av,shift:ry,preventDefault:!0},{key:`Mod-ArrowRight`,mac:`Alt-ArrowRight`,run:Nv,shift:oy,preventDefault:!0},{mac:`Cmd-ArrowRight`,run:Yv,shift:vy,preventDefault:!0},{key:`ArrowUp`,run:zv,shift:uy,preventDefault:!0},{mac:`Cmd-ArrowUp`,run:xy,shift:Cy},{mac:`Ctrl-ArrowUp`,run:Uv,shift:py},{key:`ArrowDown`,run:Bv,shift:dy,preventDefault:!0},{mac:`Cmd-ArrowDown`,run:Sy,shift:wy},{mac:`Ctrl-ArrowDown`,run:Wv,shift:my},{key:`PageUp`,run:Uv,shift:py},{key:`PageDown`,run:Wv,shift:my},{key:`Home`,run:qv,shift:gy,preventDefault:!0},{key:`Mod-Home`,run:xy,shift:Cy},{key:`End`,run:Kv,shift:hy,preventDefault:!0},{key:`Mod-End`,run:Sy,shift:wy},{key:`Enter`,run:eb,shift:eb},{key:`Mod-a`,run:Ty},{key:`Backspace`,run:Fy,shift:Fy,preventDefault:!0},{key:`Delete`,run:Iy,preventDefault:!0},{key:`Mod-Backspace`,mac:`Alt-Backspace`,run:Ry,preventDefault:!0},{key:`Mod-Delete`,mac:`Alt-Delete`,run:zy,preventDefault:!0},{mac:`Mod-Backspace`,run:Vy,preventDefault:!0},{mac:`Mod-Delete`,run:Hy,preventDefault:!0}].concat(cb.map(e=>({mac:e.key,run:e.run,shift:e.shift}))),ub=[{key:`Alt-ArrowLeft`,mac:`Ctrl-ArrowLeft`,run:Iv,shift:sy},{key:`Alt-ArrowRight`,mac:`Ctrl-ArrowRight`,run:Lv,shift:cy},{key:`Alt-ArrowUp`,run:qy},{key:`Shift-Alt-ArrowUp`,run:Xy},{key:`Alt-ArrowDown`,run:Jy},{key:`Shift-Alt-ArrowDown`,run:Zy},{key:`Mod-Alt-ArrowUp`,run:ky},{key:`Mod-Alt-ArrowDown`,run:Ay},{key:`Escape`,run:jy},{key:`Mod-Enter`,run:tb},{key:`Alt-l`,mac:`Ctrl-l`,run:Ey},{key:`Mod-i`,run:Dy,preventDefault:!0},{key:`Mod-[`,run:ob},{key:`Mod-]`,run:ab},{key:`Mod-Alt-\\`,run:ib},{key:`Shift-Mod-k`,run:Qy},{key:`Shift-Mod-\\`,run:$v},{key:`Mod-/`,run:U_},{key:`Alt-A`,mac:`Ctrl-A`,run:K_},{key:`Ctrl-m`,mac:`Shift-Alt-m`,run:sb}].concat(lb),db=`var(--dsw-alias-brand-primary, #3e63dd)`,fb=`color-mix(in srgb, var(--dsw-alias-brand-primary, #3e63dd) 55%, transparent)`,pb=`var(--dsw-alias-label-dimmed, #999)`,mb=`ui-monospace, "Cascadia Mono", Consolas, "SF Mono", Menlo, monospace`,hb=$d.define([{tag:[J.heading1,J.heading2,J.heading3,J.heading4,J.heading5,J.heading6],color:db,fontWeight:`700`},{tag:J.processingInstruction,color:fb},{tag:J.monospace,fontFamily:mb,backgroundColor:`color-mix(in srgb, var(--dsw-alias-label-secondary, #888) 12%, transparent)`,borderRadius:`4px`,padding:`0 3px`},{tag:J.content,fontFamily:mb,backgroundColor:`color-mix(in srgb, var(--dsw-alias-label-secondary, #888) 8%, transparent)`},{tag:J.strong,fontWeight:`700`},{tag:J.emphasis,fontStyle:`italic`},{tag:J.strikethrough,textDecoration:`line-through`,opacity:`.75`},{tag:J.link,color:db,textDecoration:`underline`},{tag:J.url,color:fb,textDecoration:`underline dotted`},{tag:J.quote,fontStyle:`italic`,color:`var(--dsw-alias-label-secondary, #888)`},{tag:J.contentSeparator,color:pb,textDecoration:`line-through`},{tag:J.comment,color:pb}]);function gb(e={}){let t=document.createElement(`div`);t.className=`dsh-tw-note-editor`;let n=new U({parent:t,state:F.create({doc:``,extensions:[U.lineWrapping,iv(),L_({base:C_}),rf(hb),Rl(),Kl(e.placeholder??``),Sl.of([...ub,...Sv,{key:`Mod-Enter`,run:()=>(e.onSave?.(),!0)}]),U.updateListener.of(t=>{t.docChanged&&e.onChange?.()})]})});return{el:t,view:n,getValue:()=>n.state.doc.toString(),setValue(e){n.dispatch({changes:{from:0,to:n.state.doc.length,insert:e}})},insertAtCaret(e){let{from:t}=n.state.selection.main,r=`${t===n.state.doc.lineAt(t).from?``:`
|
|
959
959
|
`}${e}\n`;n.dispatch({changes:{from:t,insert:r},selection:{anchor:t+r.length},scrollIntoView:!0}),n.focus()},focus:()=>n.focus()}}function _b(e={}){let t=document.createElement(`div`);t.className=`dsh-tw-note-tags`;let n=document.createElement(`div`);n.className=`dsh-tw-note-chips`;let r=document.createElement(`input`);r.className=`dsh-tw-note-taginput`,r.placeholder=S(`note.tagsPlaceholder`);let i=document.createElement(`div`);i.className=`dsh-tw-note-tagsuggest`,i.hidden=!0,t.append(n,r,i);let a=[],o=()=>{i.hidden=!0},s=()=>{e.onChange?.()},c=()=>{n.replaceChildren();for(let e of a){let t=document.createElement(`span`);t.className=`dsh-tw-note-tagchip`,t.textContent=e;let r=document.createElement(`span`);r.className=`dsh-tw-note-tagchip-x`,r.textContent=`×`,r.title=S(`note.removeTag`,{tag:e}),r.addEventListener(`click`,t=>{t.stopPropagation();let n=a.indexOf(e);n>=0&&(a.splice(n,1),c(),s())}),t.append(r),n.append(t)}},l=e=>{let t=e.trim();t.length===0||a.includes(t)||(a.push(t),r.value=``,c(),o(),r.focus(),s())},u=()=>{for(let e of r.value.split(/\s+/))l(e)},d=[],f,p,m=()=>{let t=e.wikiQuery?.(ae)??ae;return(f===void 0||p!==t)&&(p=t,f=fetch(t,{signal:AbortSignal.timeout(5e3)}).then(e=>e.ok?e.json():Promise.resolve({})).then(e=>[...e.tags??[]].sort((e,t)=>e.localeCompare(t,`zh`))).catch(()=>[]),f.then(e=>{p===t&&(d=e)})),f},h=()=>{let e=r.value.trim().toLowerCase(),t=d.filter(t=>!a.includes(t)&&(e.length===0||t.toLowerCase().includes(e))).slice(0,8);i.replaceChildren();for(let e of t){let t=document.createElement(`div`);t.className=`dsh-tw-note-tagsuggest-item`,t.textContent=e,t.setAttribute(`role`,`button`),t.tabIndex=0,t.setAttribute(`aria-label`,S(`note.addTag`,{tag:e})),t.addEventListener(`mousedown`,t=>{t.preventDefault(),l(e)}),t.addEventListener(`keydown`,t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),l(e))}),i.append(t)}i.hidden=t.length===0};r.addEventListener(`focus`,()=>{m().then(h)}),r.addEventListener(`input`,()=>{d.length===0?m().then(h):h()}),r.addEventListener(`keydown`,e=>{e.key===`Enter`||e.key===`,`?(e.preventDefault(),u()):e.key===`Backspace`&&r.value.length===0&&a.length>0?(a.pop(),c(),s()):e.key===`Escape`&&o()});let g=e=>{t.contains(e.target)||o()};return document.addEventListener(`click`,g,!0),{el:t,getTags:()=>(u(),[...a]),peekTags:()=>[...a],setDefault:e=>{if(a.length===0){let t=e.trim();t.length>0&&(a.push(t),c())}},setTags:e=>{a.length=0;for(let t of Array.isArray(e)?e:[]){let e=typeof t==`string`?t.trim():``;e.length>0&&!a.includes(e)&&a.push(e)}r.value=``,c(),o()},dispose:()=>document.removeEventListener(`click`,g,!0)}}async function vb(e,t,n=e=>e){if(e.size>67108864){k(S(`note.uploadTooLarge`,{mb:64}));return}try{let r=await fetch(n(`${ce}?name=${encodeURIComponent(e.name)}`),{method:`POST`,headers:{"content-type":e.type||`application/octet-stream`},body:e,signal:AbortSignal.timeout(12e4)}),i=await r.json().catch(()=>null);if(!r.ok||i?.ok!==!0){k(S(`note.uploadFailed`,{message:i?.error??`HTTP ${r.status}`}));return}let a=i.name??e.name,o=e.type.startsWith(`image/`)?``:`[${a}](${i.url})`;t.insertAtCaret(o),k(S(`note.uploaded`,{name:a}))}catch(e){k(S(`note.uploadFailed`,{message:e instanceof Error?e.message:String(e)}))}}function yb(e){let{editor:t,wikiQuery:n}=e,r=document.createElement(`button`);r.type=`button`,r.className=`dsh-tw-note-upload`,r.title=S(`note.uploadTitle`),r.textContent=S(`note.upload`);let i=document.createElement(`input`);i.type=`file`,i.multiple=!0,i.hidden=!0,r.addEventListener(`click`,()=>{i.click()}),i.addEventListener(`change`,()=>{for(let e of Array.from(i.files??[]))vb(e,t,n);i.value=``});let a=0;return t.el.addEventListener(`dragenter`,e=>{e.preventDefault(),a++,t.el.classList.add(`dsh-tw-note-drop`)}),t.el.addEventListener(`dragover`,e=>{e.preventDefault()}),t.el.addEventListener(`dragleave`,e=>{e.preventDefault(),a=Math.max(0,a-1),a===0&&t.el.classList.remove(`dsh-tw-note-drop`)}),t.el.addEventListener(`drop`,e=>{e.preventDefault(),a=0,t.el.classList.remove(`dsh-tw-note-drop`);let r=e.dataTransfer?.files;if(!(r===void 0||r.length===0))for(let e of Array.from(r))vb(e,t,n)}),{button:r}}function bb(e){let{uploadButton:t,onRecent:n}=e,r=document.createElement(`div`);r.className=`dsh-tw-note-foot`;let i=document.createElement(`div`);i.className=`dsh-tw-note-foot-left`;let a=document.createElement(`span`);a.className=`dsh-tw-note-hint`,a.textContent=`Ctrl+Enter`;let o=document.createElement(`button`);o.type=`button`,o.className=`dsh-tw-note-recent-btn`,o.title=S(`note.recentTitle`),o.textContent=S(`note.recent`),o.addEventListener(`click`,()=>{n()}),i.append(t,o,a);let s=document.createElement(`div`);s.className=`dsh-tw-note-foot-right`;let c=document.createElement(`button`);c.type=`button`,c.className=`dsh-tw-note-edit`,c.title=S(`note.editTitle`),c.textContent=S(`note.editInTw`);let l=document.createElement(`button`);return l.type=`button`,l.className=`dsh-tw-note-save`,l.textContent=S(`note.save`),s.append(c,l),r.append(i,s),{foot:r,footLeft:i,footRight:s,saveBtn:l,editBtn:c}}function xb(e){return e<10?`0${e}`:String(e)}const Sb=`dsh-tw-note-draft-v1`,Cb=`dsh-tw-note-window-id`,wb=(()=>{try{let e=sessionStorage.getItem(Cb);if(e!==null&&e.length>0)return e;let t=Math.random().toString(36).slice(2,10);return sessionStorage.setItem(Cb,t),t}catch{return Math.random().toString(36).slice(2,10)}})();function Tb(){return`dsh-tw-note-draft-v1:${wb}`}function Eb(e){if(e===null)return null;try{let t=JSON.parse(e);return typeof t.text!=`string`||typeof t.title!=`string`?null:{text:t.text,title:t.title,tags:Array.isArray(t.tags)?t.tags.filter(e=>typeof e==`string`):[],savedAt:typeof t.savedAt==`number`?t.savedAt:0,windowId:typeof t.windowId==`string`?t.windowId:void 0}}catch{return null}}function Db(e){try{return Eb(localStorage.getItem(e))}catch{return null}}function Ob(){let e=Db(Tb());if(e!==null)return{draft:e,foreign:e.windowId!==void 0&&e.windowId!==wb};let t=Db(Sb);if(t===null)return null;let n={...t,windowId:wb};Ab(n);try{localStorage.removeItem(Sb)}catch{}return{draft:n,foreign:!0}}function kb(e){Ab({...e,windowId:wb})}function Ab(e){try{localStorage.setItem(Tb(),JSON.stringify({...e,windowId:wb}))}catch{}}function jb(){try{localStorage.removeItem(Tb())}catch{}}function Mb(e,t,n){return`${e}\u0000${t}\u0000${n.join(``)}`}function Nb(e=new Date){return`${e.getFullYear()}-${xb(e.getMonth()+1)}-${xb(e.getDate())} ${xb(e.getHours())}:${xb(e.getMinutes())}`}function Pb(e){if(e===null)return``;let t=new Date(e).getTime();if(Number.isNaN(t))return``;let n=Date.now()-t,r=Math.floor(n/6e4);if(r<1)return S(`note.relJustNow`);if(r<60)return S(`note.relMinutes`,{n:r});let i=Math.floor(r/60);if(i<24)return S(`note.relHours`,{n:i});let a=Math.floor(i/24);return a<30?S(`note.relDays`,{n:a}):new Date(t).toLocaleDateString(y()===`zh`?`zh-CN`:`en-US`)}async function Fb(){let e=await Ae();return typeof e?.note?.tag==`string`&&e.note.tag.length>0?e.note.tag:`inbox`}function Ib(e){let{getUi:t,wikiQuery:n,hideDraftBanner:r,setLoadedToken:i,setPersistedSignature:a}=e,o=!1,s=()=>{o=!1;let e=t();e!==void 0&&(e.recentWrap.hidden=!0)},c=async e=>{try{let o=await fetch(n(`${te}?title=${encodeURIComponent(e)}`),{signal:AbortSignal.timeout(1e4)}),c=await o.json().catch(()=>null);if(!o.ok||c?.ok!==!0||typeof c.title!=`string`){k(S(`note.loadFailed`,{message:c?.notFound===!0?S(`note.notFound`):c?.error??`HTTP ${o.status}`}));return}let l=t();if(l===void 0)return;l.editor.setValue(c.text??``),l.titleInput.value=c.title,l.tagEditor.setTags(c.tags??[]),i({title:c.title,...typeof c.modified==`string`&&c.modified.length>0?{modified:c.modified}:{},...typeof c.revision==`number`?{revision:c.revision}:{}}),a(Mb(c.title,c.text??``,c.tags??[])),r(),s(),k(S(`note.loaded`,{title:c.title})),l.editor.focus()}catch(e){k(S(`note.loadFailed`,{message:e instanceof Error?e.message:String(e)}))}};return{toggle:()=>{let e=t();if(e===void 0)return;if(o){s();return}o=!0,e.recentWrap.hidden=!1,e.recentWrap.textContent=``;let r=document.createElement(`div`);r.className=`dsh-tw-note-recent-muted`,r.textContent=S(`note.loading`),e.recentWrap.append(r),(async()=>{try{let e=await(await fetch(n(`${oe}?limit=15`),{signal:AbortSignal.timeout(1e4)})).json().catch(()=>null),r=t();if(!o||r===void 0)return;r.recentWrap.replaceChildren();let i=[];if(e?.ok===!0)for(let t of e.items??[]){if(typeof t!=`object`||!t)continue;let e=t,n=typeof e.title==`string`?e.title:``;n.length!==0&&i.push({title:n,tags:Array.isArray(e.tags)?e.tags.filter(e=>typeof e==`string`):[],modified:typeof e.modified==`string`?e.modified:null,snippet:typeof e.snippet==`string`?e.snippet:``})}if(i.length===0){let t=document.createElement(`div`);t.className=`dsh-tw-note-recent-muted`,t.textContent=e?.ok===!0?S(`note.noNotes`):S(`note.listFailed`,{message:e?.error??S(`note.unknown`)}),r.recentWrap.append(t);return}for(let e of i){let t=document.createElement(`div`);t.className=`dsh-tw-note-recent-item`,t.title=e.snippet||e.title,t.setAttribute(`role`,`button`),t.tabIndex=0,t.setAttribute(`aria-label`,S(`note.loadNote`,{title:e.title}));let n=document.createElement(`span`);n.className=`dsh-tw-note-recent-name`,n.textContent=e.title;let i=document.createElement(`span`);i.className=`dsh-tw-note-recent-meta`;let a=[Pb(e.modified)];e.tags.length>0&&a.unshift(e.tags.slice(0,3).join(`,`)),i.textContent=a.join(` · `),t.append(n,i),t.addEventListener(`click`,()=>{c(e.title)}),t.addEventListener(`keydown`,t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),c(e.title))}),r.recentWrap.append(t)}}catch(e){let n=t();if(!o||n===void 0)return;n.recentWrap.replaceChildren();let r=document.createElement(`div`);r.className=`dsh-tw-note-recent-muted`,r.textContent=S(`note.listFailed`,{message:e instanceof Error?e.message:String(e)}),n.recentWrap.append(r)}})()},close:s}}function Lb(e){let{isDisposed:t}=e,n,r=!1,i=`single`,a=[],o,s,c,l=0,u=()=>{};return{wikiQuery:e=>De(e,n),ensureTarget:()=>{let e=c!==void 0&&Date.now()-l>=1e4;return c!==void 0&&!e?c:(l=Date.now(),c=Ae().then(e=>{if(t())return;if(e==null){c=void 0;return}if(i=typeof e.mode==`string`?e.mode:`single`,a=(Array.isArray(e.wikis)?e.wikis:[]).map(e=>({id:e.id,label:e.label,running:e.running})),a.length<=1)return;o=typeof e.defaultId==`string`?e.defaultId:void 0;let l=()=>{r||(n=Ge(a,o))};l(),s??=We(()=>{l(),u()}),u()}),c)},stoppedTarget:()=>{if(n===void 0)return;let e=a.find(e=>e.id===n);return e!==void 0&&!e.running?e:void 0},pick:e=>{r=!0,n=e},getRoster:()=>a,getDefaultWikiId:()=>o,getTargetWiki:()=>n,getMode:()=>i,setSyncDom:e=>{u=e},syncDom:()=>{u()},dispose:()=>{s?.(),s=void 0}}}function Rb(e,t,n){if(n!==void 0){let r=n.getBoundingClientRect(),i=t.offsetWidth||340,a=t.offsetHeight||260,o=window.innerWidth,s=window.innerHeight,c=Math.min(Math.max(r.left+r.width/2-i/2,8),Math.max(8,o-i-8)),l=s-r.top+10,u=Math.min(Math.max(8,l),Math.max(8,s-a-8));e.style.right=`auto`,e.style.top=`auto`,e.style.left=`${c}px`,e.style.bottom=`${u}px`}else e.style.right=`24px`,e.style.bottom=`88px`,e.style.left=`auto`,e.style.top=`auto`}function zb(e){let{root:t,card:n,head:r,closeBtn:i}=e,a=null,o=(e,r)=>{let i=window.innerWidth,a=window.innerHeight,o=n.offsetWidth||340,s=n.offsetHeight||260,c=Math.min(Math.max(e,8),Math.max(8,i-o-8)),l=Math.min(Math.max(r,8),Math.max(8,a-s-8));t.style.right=`auto`,t.style.bottom=`auto`,t.style.left=`${c}px`,t.style.top=`${l}px`};r.addEventListener(`pointerdown`,e=>{if(i.contains(e.target))return;e.preventDefault();let n=t.getBoundingClientRect();a={startX:e.clientX,startY:e.clientY,origLeft:n.left,origTop:n.top,moved:!1};try{r.setPointerCapture(e.pointerId)}catch{}r.classList.add(`dsh-tw-note-head-dragging`)}),r.addEventListener(`pointermove`,e=>{if(a===null)return;let t=e.clientX-a.startX,n=e.clientY-a.startY;!a.moved&&Math.abs(t)<4&&Math.abs(n)<4||(a.moved=!0,o(a.origLeft+t,a.origTop+n))});let s=e=>{if(a!==null){try{r.releasePointerCapture(e.pointerId)}catch{}a=null,r.classList.remove(`dsh-tw-note-head-dragging`)}};r.addEventListener(`pointerup`,s),r.addEventListener(`pointercancel`,s)}function Bb(e){let t,n=null,r=()=>{let t=e.getUi();t!==void 0&&(t.titleInput.value=Nb())},i=()=>{let t=e.getUi();if(t===void 0)return;let r=t.editor.getValue(),i=t.titleInput.value.trim();if(r.trim().length===0){jb();return}let a=Mb(i,r,t.tagEditor.peekTags());n!==null&&a===n||Ab({text:r,title:i,tags:t.tagEditor.peekTags(),savedAt:Date.now()})};return{resetTitle:r,flush:i,schedule:()=>{e.isDisposed()||!e.isOpened()||e.getUi()===void 0||(t!==void 0&&(clearTimeout(t),t=void 0),t=window.setTimeout(()=>{t=void 0,i()},500))},hideBanner:()=>{let t=e.getUi();t!==void 0&&(t.draftBanner.hidden=!0)},resetForNewNote:()=>{t!==void 0&&(clearTimeout(t),t=void 0);let r=e.getUi();r!==void 0&&(r.editor.setValue(``),r.titleInput.value=Nb(),r.tagEditor.setTags([]),n=Mb(r.titleInput.value.trim(),``,[]))},clearTimer:()=>{t!==void 0&&(clearTimeout(t),t=void 0)},setPersistedSignature:e=>{n=e},markPersisted:(e,t,r)=>{n=Mb(e,t,r)}}}function Vb(e){let t=!1,n=t=>{jb(),e.autosave.hideBanner(),e.autosave.markPersisted(t.titleInput.value.trim(),t.editor.getValue(),t.tagEditor.getTags()),e.clearLoadedToken(),e.autosave.resetForNewNote(),e.close()};return{doSave:async()=>{let r=e.getUi();if(r===void 0||t)return;let i=r.editor.getValue().trim();if(i.length===0){k(S(`note.saveEmpty`));return}let a=e.stoppedTarget();if(a!==void 0){k(S(`note.saveTargetStopped`,{label:a.label}));return}t=!0,r.saveBtn.disabled=!0,r.saveBtn.textContent=S(`note.saving`);try{let t=r.titleInput.value.trim(),a={title:t,tags:r.tagEditor.getTags(),text:i},o=e.getLoadedToken();o!==null&&o.title===t&&(o.modified!==void 0&&(a.expectedModified=o.modified),o.revision!==void 0&&(a.expectedRevision=o.revision));let s=await fetch(e.wikiQuery(re),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(a),signal:AbortSignal.timeout(1e4)}),c=await s.json().catch(()=>null);if(!s.ok||c?.ok!==!0){if(s.status===409||c?.conflict===!0){k(S(`note.saveConflict`));return}k(S(`note.saveFailed`,{message:c?.error??`HTTP ${s.status}`}));return}let l=r.titleInput.value.trim();n(r),k(S(`note.saved`,{title:c.title??l}))}catch(e){k(S(`note.saveFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{t=!1,r.saveBtn.disabled=!1,r.saveBtn.textContent=S(`note.save`)}},doEdit:async()=>{let t=e.getUi();if(t===void 0)return;let n=t.titleInput.value.trim().length>0?t.titleInput.value.trim():Nb(),r=t.editor.getValue(),i=t.tagEditor.getTags();t.editBtn.disabled=!0,t.editBtn.textContent=S(`note.opening`);try{await e.postEditAndOpen(n,r,i)}finally{t.editBtn.disabled=!1,t.editBtn.textContent=S(`note.editInTw`)}}}}const Hb=`dsh-tw-note-state`;function Ub(){let e,t=!1,n=!1,r=!1,i,a=`inbox`,o=Lb({isDisposed:()=>t}),s=o.wikiQuery,c=Bb({getUi:()=>e,isOpened:()=>n,isDisposed:()=>t}),{flush:l,schedule:u,hideBanner:d,resetTitle:f}=c,p=null,m=e=>{try{window.dispatchEvent(new CustomEvent(Hb,{detail:{open:e}}))}catch{}},h=async(e,t,n)=>{try{let r=await fetch(s(ie),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({title:e,tags:n,text:t}),signal:AbortSignal.timeout(1e4)}),i=await r.json().catch(()=>null);if(!r.ok||i?.ok!==!0)return k(S(`note.openFailed`,{message:i?.error??`HTTP ${r.status}`})),!1;if(typeof i.twUrl!=`string`||typeof i.draftTitle!=`string`)return k(S(`note.openNoEditorUrl`)),!1;jb(),d(),c.markPersisted(e,t,n),p=null;let a=Ee(o.getMode(),o.getTargetWiki(),i.twUrl,i.twUrlAbsolute);return ln(`${Te(a.relative,a.absolute)}#${encodeURIComponent(i.draftTitle)}`,i.title??e),k(S(`note.openedInPopup`,{title:i.title??e})),!0}catch(e){return k(S(`note.openFailed`,{message:e instanceof Error?e.message:String(e)})),!1}},g=Ib({getUi:()=>e,wikiQuery:s,hideDraftBanner:d,setLoadedToken:e=>{p=e},setPersistedSignature:c.setPersistedSignature}),_=()=>{if(e!==void 0)return;let t=document.createElement(`div`);t.className=`dsh-tw-note`,t.hidden=!0;let r=document.createElement(`div`);r.className=`dsh-tw-note-card`;let a=document.createElement(`div`);a.className=`dsh-tw-note-head`;let f=document.createElement(`span`);f.className=`dsh-tw-note-label`,f.textContent=S(`note.cardLabel`);let _=document.createElement(`button`);_.type=`button`,_.className=`dsh-tw-note-close`,_.title=S(`note.close`),_.textContent=`✕`,a.append(f,_);let v=document.createElement(`div`);v.className=`dsh-tw-note-draft`,v.hidden=!0;let y=document.createElement(`span`);y.className=`dsh-tw-note-draft-text`,y.textContent=S(`note.draftRestored`);let b=document.createElement(`button`);b.type=`button`,b.className=`dsh-tw-note-draft-discard`,b.textContent=S(`note.discard`),v.append(y,b);let x=document.createElement(`div`);x.className=`dsh-tw-note-fields`;let C=document.createElement(`input`);C.className=`dsh-tw-note-title`,C.placeholder=S(`note.titlePlaceholder`),C.setAttribute(`aria-label`,S(`note.titleAriaLabel`));let w=_b({onChange:u,wikiQuery:s});x.append(C,w.el);let T=document.createElement(`label`);T.className=`dsh-tw-note-wiki`,T.hidden=!0;let ee=document.createElement(`span`);ee.className=`dsh-tw-note-wiki-label`,ee.textContent=S(`note.writeTo`);let E=document.createElement(`select`);E.className=`dsh-tw-note-wiki-select`,E.setAttribute(`aria-label`,S(`note.writeToAriaLabel`)),T.append(ee,E);let D=document.createElement(`span`);D.className=`dsh-tw-note-wiki-hint`,D.hidden=!0,x.append(T,D);let O=()=>{let e=o.getRoster().find(e=>e.id===o.getTargetWiki()),t=e!==void 0&&!e.running;D.hidden=!t,D.textContent=t?S(`note.targetStopped`,{label:e.label}):``};E.addEventListener(`change`,()=>{o.pick(E.value.length>0?E.value:void 0),O()}),o.setSyncDom(()=>{let e=o.getRoster();if(e.length<=1){T.hidden=!0,T.style.display=`none`,E.disabled=!0;return}T.style.display=``,E.disabled=!1,E.replaceChildren(...e.map(e=>{let t=document.createElement(`option`);t.value=e.id;let n=e.id===o.getDefaultWikiId()?S(`note.defaultMark`):``;return t.textContent=e.running?`${e.label}${n}`:`${e.label}${n}${S(`note.notRunningSuffix`)}`,t})),E.value=o.getTargetWiki()??``,T.hidden=!1,O()}),o.ensureTarget().then(()=>o.syncDom()),C.addEventListener(`input`,u);let te,ne=gb({placeholder:S(`note.editorPlaceholder`),onSave:()=>{te?.()},onChange:u}),{foot:re,saveBtn:ie,editBtn:ae}=bb({uploadButton:yb({editor:ne,wikiQuery:s}).button,onRecent:()=>{g.toggle()}}),oe=document.createElement(`div`);oe.className=`dsh-tw-note-recent`,oe.hidden=!0,r.append(a,v,x,ne.el,re),t.append(r,oe),document.body.append(t),e={root:t,card:r,editor:ne,titleInput:C,tagEditor:w,saveBtn:ie,editBtn:ae,draftBanner:v,bannerText:y,recentWrap:oe};let se=()=>{n=!1,t.hidden=!0,g.close(),m(!1)},ce=Vb({getUi:()=>e,autosave:c,stoppedTarget:o.stoppedTarget,getLoadedToken:()=>p,clearLoadedToken:()=>{p=null},wikiQuery:s,postEditAndOpen:h,close:se});te=ce.doSave,ie.addEventListener(`click`,()=>{ce.doSave()}),ae.addEventListener(`click`,()=>{ce.doEdit()}),_.addEventListener(`click`,se),zb({root:t,card:r,head:a,closeBtn:_}),b.addEventListener(`click`,()=>{jb(),d(),c.resetForNewNote(),k(S(`note.draftDiscarded`))}),i=()=>{l()},window.addEventListener(`pagehide`,i)};return{async open(r){if(t||(_(),e===void 0||n))return;n=!0,e.root.hidden=!1,Rb(e.root,e.card,r),m(!0);let i=Ob(),o=i?.draft??null;if(o!==null&&(o.text.trim().length>0||o.title.trim().length>0))e.editor.setValue(o.text),e.titleInput.value=o.title,e.tagEditor.setTags(o.tags),e.bannerText.textContent=i?.foreign===!0?S(`note.draftRestoredForeign`):S(`note.draftRestored`),e.draftBanner.hidden=!1,i?.foreign===!0&&(k(S(`note.draftRestoredForeignToast`)),kb(o));else{if(f(),a=await Fb(),t||e===void 0)return;e.tagEditor.setDefault(a)}e!==void 0&&e.editor.focus()},close(){e!==void 0&&(n=!1,e.root.hidden=!0,g.close(),m(!1))},async openNative(){if(!(t||r)&&!(un()&&!dn())){r=!0;try{if(await o.ensureTarget(),t)return;let e=o.stoppedTarget();if(e!==void 0){k(S(`note.nativeTargetStopped`,{label:e.label}));return}let n=Ob(),r=n!==null&&(n.draft.text.trim().length>0||n.draft.title.trim().length>0),i=r&&n.draft.title.trim().length>0?n.draft.title.trim():Nb(),s=r?n.draft.text:``,c=[];if(r)c=n.draft.tags;else{if(a=await Fb(),t)return;c=[a]}n!==null&&n.foreign&&(n.draft.text.trim().length>0||n.draft.title.trim().length>0)&&(k(S(`note.draftRestoredForeignToast`)),kb(n.draft)),await h(i,s,c)}finally{r=!1}}},isOpen(){return n},dispose(){t=!0,o.dispose(),i!==void 0&&(window.removeEventListener(`pagehide`,i),i=void 0),c.clearTimer(),l(),e?.tagEditor.dispose(),e?.editor.view.destroy(),e?.root.remove(),e=void 0}}}function Wb(e){return`${xb(e.getHours())}:${xb(e.getMinutes())}`}function Gb(e,t){let n=e?.git,r=[S(`frame.syncTooltip`)],i=`offline`;if(n==null||n.exists!==!0)r.push(S(`frame.gitUnavailable`));else{r.push(S(`frame.branch`,{branch:n.branch??`?`})),typeof n.lastCommit==`string`&&r.push(n.lastCommit);let e=typeof n.behind==`number`?n.behind:0,t=typeof n.ahead==`number`?n.ahead:0;t>0&&r.push(S(`frame.ahead`,{n:t})),e>0&&r.push(S(`frame.behind`,{n:e})),n.dirty===!0?(i=`dirty`,r.push(S(`frame.dirty`,{n:n.dirtyFiles?.length??0}))):i=e>0?`behind`:`clean`}return t!==void 0&&r.push(S(`frame.lastSync`,{time:Wb(t)})),{state:i,tooltip:r.join(` · `)}}function Kb(){let e={state:`offline`,tooltip:S(`frame.syncTooltip`)},t,n,r=!1,i=!1,a=new Set,o=()=>{for(let e of[...a])e()},s=n=>{if(r)return;let i=Gb(n,t);(i.state!==e.state||i.tooltip!==e.tooltip)&&(e=i,o())},c=async()=>{if(i)return;let e=await Ae();i||s(e)};return c(),n=window.setInterval(()=>{c()},3e4),{getState:()=>e,trigger:async()=>{if(i)return e;if(r)return k(S(`frame.syncing`)),e;r=!0,e={...e,state:`syncing`},o();try{let e=await fetch(le,{method:`POST`,signal:AbortSignal.timeout(12e4)}),n=Oe(await e.json().catch(()=>null),e.status);n.ok?(t=new Date,k(S(`frame.syncDone`,{message:n.message}))):k(S(`frame.syncFailed`,{message:n.message}))}catch(e){k(S(`frame.syncFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{r=!1,await c()}return e},subscribe(e){return a.add(e),()=>{a.delete(e)}},dispose(){i=!0,n!==void 0&&(clearInterval(n),n=void 0),a.clear()}}}async function qb(){let e=await Ae(),t=Array.isArray(e?.wikis)?e.wikis.map(e=>({id:e.id,label:e.label,running:e.running,path:e.path})):[];return{mode:typeof e?.mode==`string`?e.mode:`single`,...typeof e?.defaultId==`string`?{defaultId:e.defaultId}:{},wikis:t}}async function Jb(){let e=await Le();return{showQuickNote:e.showQuickNote,showPanelStatus:e.showPanelStatus,showSyncButton:e.showSyncButton}}async function Yb(){let e=await Ae();if(e===null)return{state:`failed`,text:S(`chrome.fabStatusUnreachable`),logs:[]};let t=Array.isArray(e.logs)?e.logs.filter(e=>typeof e==`string`):[];return e.status===`running`?{state:`running`,text:S(`chrome.fabTwOnline`,{url:e.url??``}),logs:t}:e.status===`starting`?{state:`starting`,text:S(`chrome.fabTwStarting`),logs:t}:{state:`failed`,text:e.error??S(`chrome.fabTwStatus`,{status:e.status??`?`}),logs:t}}function Xb(e,t,n){let r=!1,i,a,o,s,c,l,u,d,f=!1,p,m,h={state:`unknown`,text:S(`chrome.fabServiceUnknown`),logs:[]},g=()=>{f=!1,s!==void 0&&(s.hidden=!0),u!==void 0&&(u.hidden=!0)},_=e=>{if(!f)return;let t=e.target;i!==void 0&&i.contains(t)||g()},v=()=>{if(u===void 0)return;let e=[S(`chrome.fabTipTitle`,{text:h.text})];e.push(S(`chrome.fabTipSync`,{text:n.getState().tooltip})),h.logs.length>0&&(e.push(S(`chrome.fabTipLogs`)),e.push(...h.logs.slice(-3))),u.textContent=e.join(`
|
|
960
|
-
`)},y=()=>{let e=n.getState();o!==void 0&&(o.dataset.state=e.state),a!==void 0&&(a.title=S(`chrome.fabTitle`,{text:e.tooltip})),v()},b=async()=>{h=await Yb(),!r&&(c!==void 0&&(c.textContent=h.text),l!==void 0&&(l.dataset.state=h.state),v())},x,C,w=(e,t)=>e.mode!==t.mode||e.defaultId!==t.defaultId||e.wikis.length!==t.wikis.length||e.wikis.some((e,n)=>{let r=t.wikis[n];return r===void 0||r.id!==e.id||r.label!==e.label||r.running!==e.running}),T=()=>{s!==void 0&&(f=!0,s.hidden=!1,m?.(),y(),b())},ee=(h,D)=>{if(r)return;if(x=h,C=D,document.removeEventListener(`click`,_,!0),p?.(),p=void 0,m=void 0,i?.remove(),i=document.createElement(`div`),i.className=`dsh-tw-fab-wrap`,s=document.createElement(`div`),s.className=`dsh-tw-fab-menu`,s.hidden=!0,h.showPanelStatus){let e=document.createElement(`div`);e.className=`dsh-tw-fab-status dsh-tw-fab-status-tiprow`,l=document.createElement(`span`),l.className=`dsh-tw-fab-status-dot`,l.dataset.state=`unknown`,c=document.createElement(`span`),c.className=`dsh-tw-fab-status-text`,c.textContent=S(`chrome.fabServiceUnknown`),e.append(l,c),u=document.createElement(`div`),u.className=`dsh-tw-fab-tip`,u.hidden=!0,e.append(u),e.addEventListener(`mouseenter`,()=>{v(),u!==void 0&&(u.hidden=!1)}),e.addEventListener(`mouseleave`,()=>{u!==void 0&&(u.hidden=!0)}),s.append(e)}if(h.showQuickNote){let e=document.createElement(`button`);e.type=`button`,e.className=`dsh-tw-fab-item`,e.textContent=S(`chrome.fabQuickNote`),e.title=S(`chrome.fabQuickNoteTip`),e.addEventListener(`click`,()=>{g(),Le().then(e=>{e.quickNoteMode===`native`?t.openNative():t.open()})}),s.append(e)}if(h.showPanelStatus){if(D.wikis.length>1){let t=document.createElement(`div`);t.className=`dsh-tw-fab-group`,t.textContent=S(`chrome.scopeSlotLabel`),s.append(t);let n=new Map,r=()=>{let e=Ge(D.wikis,D.defaultId);for(let[t,r]of n){let n=t===e;r.dataset.current=n?`1`:`0`;let i=D.wikis.find(e=>e.id===t);r.textContent=`${n?`●`:`○`} ${i?.label??t}`}};for(let t of D.wikis){let r=document.createElement(`button`);r.type=`button`,r.className=`dsh-tw-fab-item`,r.dataset.current=`0`,r.title=`${t.path}${t.running?``:S(`chrome.fabWikiNotRunning`)}`,r.addEventListener(`click`,()=>{g(),Ue(t.id),t.running||fetch(`${E}/admin/wikis`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({action:`start`,id:t.id}),signal:AbortSignal.timeout(12e4)}).catch(()=>void 0),e.openPanel()}),n.set(t.id,r),s.append(r)}r(),p=We(()=>{r()}),m=r}d=document.createElement(`span`),d.textContent=S(`chrome.fabOpenPanel`);let t=document.createElement(`button`);t.type=`button`,t.className=`dsh-tw-fab-item`,t.append(document.createTextNode(`🖥 `),d),t.addEventListener(`click`,()=>{g(),e.toggle()}),s.append(t);let n=document.createElement(`button`);n.type=`button`,n.className=`dsh-tw-fab-item`,n.textContent=S(`chrome.fabReload`),n.addEventListener(`click`,()=>{g(),ut(),b()}),s.append(n)}if(h.showSyncButton){let e=document.createElement(`button`);e.type=`button`,e.className=`dsh-tw-fab-item`,e.textContent=S(`chrome.fabSync`),e.addEventListener(`click`,()=>{g(),n.trigger()}),s.append(e)}a=document.createElement(`button`),a.type=`button`,a.className=`dsh-tw-fab`,a.setAttribute(`aria-label`,S(`chrome.fabAriaLabel`));let O=document.createElement(`span`);O.className=`dsh-tw-fab-icon`,O.innerHTML=`<svg viewBox="0 0 16 16" width="17" height="17" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 2.5h8a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-9a1 1 0 0 1 1-1z"/><path d="M6 6h4M6 8.5h2.5"/></svg>`,o=document.createElement(`span`),o.className=`dsh-tw-fab-dot`,o.dataset.state=n.getState().state,a.append(O,o),a.addEventListener(`click`,()=>{if(f){g();return}(async()=>{let e=await qb().catch(()=>void 0);if(!r){if(e!==void 0&&C!==void 0&&x!==void 0&&w(C,e)){ee(x,e),T();return}T()}})()}),i.append(s,a),document.body.append(i),y(),document.addEventListener(`click`,_,!0)},D=e.subscribe(()=>{d!==void 0&&(d.textContent=e.isOpen()?S(`chrome.fabClosePanel`):S(`chrome.fabOpenPanel`))}),O=n.subscribe(y);return(async()=>{let[e,t]=await Promise.all([Jb(),qb()]);r||!e.showQuickNote&&!e.showPanelStatus&&!e.showSyncButton||ee(e,t)})(),()=>{r=!0,p?.(),p=void 0,document.removeEventListener(`click`,_,!0),D(),O(),i?.remove()}}function Zb(e){let t=()=>{let t=null,n=null,r=e;for(;r!==null&&r!==document.documentElement&&(r=r.parentElement,r!==null);){for(let e of r.querySelectorAll(`textarea, [contenteditable]:not([contenteditable="false"]), [role="textbox"]`))if(e.getBoundingClientRect().width>300){t=e,n=r;break}if(n!==null)break}if(t===null||n===null)return null;let i=n.getBoundingClientRect().width,a=t,o=null,s=0;for(;a!==null&&a!==n;){let e=a.getBoundingClientRect().width;e>0&&e<i-8&&e>=s&&(s=e,o=a),a=a.parentElement}return o},n=()=>{let n=e.getBoundingClientRect(),r=t(),i=r===null?n.right:r.getBoundingClientRect().right,a=Math.max(0,n.right-i);return e.style.paddingRight!==`${a}px`&&(e.style.paddingRight=`${a}px`),r!==null};n();let r=new ResizeObserver(()=>{n()}),i=e;for(;i!==null&&i!==document.documentElement&&(r.observe(i),!(i instanceof HTMLElement&&i.hasAttribute(`data-phase`)));)i=i.parentElement;window.addEventListener(`resize`,n),document.addEventListener(`visibilitychange`,n);let a=0,o=0,s=window.setInterval(()=>{if(o++,!n()){o>=20&&window.clearInterval(s);return}a++,a>=3&&window.clearInterval(s)},1500),c=window.setTimeout(n,120),l=window.setTimeout(n,600);return()=>{r.disconnect(),window.removeEventListener(`resize`,n),document.removeEventListener(`visibilitychange`,n),window.clearInterval(s),window.clearTimeout(c),window.clearTimeout(l)}}function Qb(e){return function(){let[t,n]=c.useState(!1),[r,i]=c.useState(null),a=c.useRef(null),o=c.useRef(null);c.useEffect(()=>{let e=!0,t=e=>{let t=e.detail;n(t?.open===!0)};return window.addEventListener(Hb,t),Le().then(t=>{e&&i(t.quickNoteMode)}),()=>{e=!1,window.removeEventListener(Hb,t)}},[]),c.useLayoutEffect(()=>{let e=a.current;if(e!==null)return Zb(e)},[]);let s=r===`native`,l=S(s||!t?`chrome.dockQuickNote`:`chrome.quickNoteOpenLabel`),u=S(s?`chrome.quickNoteTipNative`:t?`chrome.quickNoteTipOpen`:`chrome.quickNoteTipClosed`);return c.createElement(`div`,{ref:a,className:`dsh-tw-dock-note`},c.createElement(`button`,{ref:o,type:`button`,className:t?`dsh-tw-dock-note-btn dsh-tw-dock-note-btn-active`:`dsh-tw-dock-note-btn`,title:u,onClick:()=>{Le().then(t=>{t.quickNoteMode===`native`?un()&&!dn()?pn():e.openNative():e.isOpen()?e.close():e.open(o.current??void 0)})}},c.createElement(`span`,{className:`dsh-tw-dock-note-icon`,"aria-hidden":`true`},`📝`),c.createElement(`span`,{className:`dsh-tw-dock-note-label`},l)))}}const $b=new Map,ex=new Map,tx=new Set;async function nx(e){if(typeof e!=`string`||e.length===0)return;let t=$b.get(e);if(t!==void 0&&Date.now()-t.at<=15e3)return t.wikiId;let n=ex.get(e);if(n!==void 0)return n;let r=(async()=>{try{let t=await fetch(`${we}?session=${encodeURIComponent(e)}`,{signal:AbortSignal.timeout(8e3)});if(!t.ok)return;let n=await t.json().catch(()=>null);if(typeof n?.scope==`string`&&n.scope.length>0)return n.scope;let r=n?.resolved?.id;return n?.mode===`multi`&&typeof r==`string`&&r.length>0?r:void 0}catch{return}finally{ex.delete(e)}})();ex.set(e,r);let i=await r;return $b.set(e,{wikiId:i,at:Date.now()}),i}function rx(e){typeof e==`string`&&e.length>0?$b.delete(e):$b.clear();let t=typeof e==`string`&&e.length>0?e:void 0;for(let e of[...tx])e(t)}function ix(e){return tx.add(e),()=>{tx.delete(e)}}function ax(e){if(typeof e!=`object`||!e)return;let t=e.id;if(typeof t!=`string`||t.length===0)return;let n=e.label;return{id:t,label:typeof n==`string`&&n.length>0?n:t}}function ox(){return function(e){let t=typeof e.sessionId==`string`&&e.sessionId.length>0?e.sessionId:void 0,[n,r]=c.useState([]),[i,a]=c.useState(``),[o,s]=c.useState(void 0),[l,u]=c.useState(void 0),[d,f]=c.useState(!1);if(c.useEffect(()=>{if(t===void 0)return;let e=!0;return(async()=>{let[n,i]=await Promise.all([Ae(),fetch(`${we}?session=${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(8e3)}).then(e=>e.ok?e.json():null).catch(()=>null)]);if(!e)return;let o=(n?.wikis??[]).filter(e=>e.agentVisible);r(o.map(e=>({id:e.id,label:e.label,running:e.running}))),a(typeof i?.scope==`string`?i.scope:``),s(ax(i?.resolved)),u(typeof i?.reason==`string`?i.reason:void 0)})(),()=>{e=!1}},[t]),t===void 0||n.length<=1)return null;let p=o?.id??``,m=e=>n.some(t=>t.id===e),h=i.length>0&&m(i)?i:p,g=[...n];p.length>0&&!m(p)&&g.push({id:p,label:o?.label??p,running:!0});let _=p.length>0&&m(p)?[...g.filter(e=>e.id===p),...g.filter(e=>e.id!==p)]:g,v=e=>{let n=e===p?``:e;f(!0),(async()=>{try{let e=await fetch(we,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({session:t,wiki:n.length>0?n:null}),signal:AbortSignal.timeout(12e4)}),r=await e.json().catch(()=>({}));if(!e.ok||r.ok!==!0){u(r.error??S(`chrome.scopeSwitchFailed`,{status:e.status}));return}a(typeof r.scope==`string`?r.scope:n),s(ax(r.resolved)??o),u(typeof r.reason==`string`?r.reason:void 0),rx(t)}catch(e){u(e instanceof Error?e.message:String(e))}finally{f(!1)}})()};return c.createElement(`div`,{className:`dsh-tw-scope-dock`},c.createElement(`span`,{className:`dsh-tw-scope-label`},S(`chrome.scopeSlotLabel`)),c.createElement(`select`,{className:`dsh-tw-scope-select`,value:h,disabled:d,"aria-label":S(`chrome.scopeAriaLabel`),title:S(`chrome.scopeTitle`),onChange:e=>{v(e.target.value)}},..._.map(e=>c.createElement(`option`,{key:e.id,value:e.id},`${e.label}${e.id===p?S(`chrome.scopeDefaultMark`):``}${e.running?``:S(`chrome.scopeNotRunning`)}`))),l===void 0?null:c.createElement(`span`,{className:`dsh-tw-scope-note`},l))}}async function sx(e,t=15e3,n){try{let r=await fetch(De(ne,n),{method:`POST`,headers:{"content-type":`application/json`,"x-requested-with":`TiddlyWiki`},body:JSON.stringify({title:e}),signal:AbortSignal.timeout(t)});if(!r.ok)return null;let i=await r.text();return i.trim().length>0?i:null}catch{return null}}function cx(){return pt()}async function lx(e,t){try{let n=await fetch(De(`${te}?title=${encodeURIComponent(e)}`,t),{signal:AbortSignal.timeout(8e3)});if(n.status===404)return`no`;if(!n.ok)return`unknown`;let r=await n.json().catch(()=>null);return r===null?`unknown`:r.notFound===!0?`no`:`yes`}catch{return`unknown`}}function ux(e){let{sessionId:t,viewRequest:n,completeViewRequest:r}=e,[i,a]=c.useState(`loading`),[o,s]=c.useState(null),[l,u]=c.useState(null),[d,f]=c.useState(``),[p,m]=c.useState(!1),[h,g]=c.useState(void 0),_=c.useRef(void 0);_.current=h;let v=c.useRef(0),y=c.useRef(!0),b=c.useRef(0),x=c.useRef(0),C=c.useCallback(async e=>{let n=++v.current;if(!y.current)return;let r=e?.silent===!0;r||a(`loading`);let i=e=>{if(b.current++,r){m(!0);return}a(`error`),f(e)};if(typeof t!=`string`||t.length===0){a(`error`),f(S(`chrome.summaryMissingSession`));return}if(b.current>=3){if(r){m(!0);return}a(`error`),f(S(`chrome.summaryRetriesExhausted`,{n:3}));return}try{let e=await nx(t);if(!y.current||n!==v.current)return;g(e);let o=await fetch(De(de,e),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({session:t}),signal:AbortSignal.timeout(25e3)}),c=await o.json().catch(()=>null);if(!y.current||n!==v.current)return;if(!o.ok||c?.ok!==!0){i(c?.error??`HTTP ${o.status}`);return}if(typeof c.title!=`string`||c.title.length===0){i(S(`chrome.summaryNoTitle`));return}u(c.title);let l=await sx(c.title,15e3,e);if(!y.current||n!==v.current)return;if(l===null){let t=await lx(c.title,e);if(!y.current||n!==v.current)return;if(t===`no`){if(b.current++,b.current<3){C();return}a(`error`),f(S(`chrome.summaryRebuildFailed`));return}if(t===`unknown`){if(r){m(!0);return}a(`error`),f(S(`chrome.summaryRenderUnknown`));return}i(S(`chrome.summaryRenderUnavailable`));return}b.current=0,x.current=Date.now(),m(!1),s(l),a(`ready`)}catch(e){if(!y.current||n!==v.current)return;i(e instanceof Error?e.message:String(e))}},[t]);c.useEffect(()=>(y.current=!0,b.current=0,x.current=Date.now(),m(!1),C(),()=>{y.current=!1}),[C]),c.useEffect(()=>{if(l===null)return;let e=!0,t=window.setInterval(()=>{(async()=>{if(!e||typeof document<`u`&&document.hidden)return;let t=await lx(l,_.current);if(e){if(t===`unknown`){m(!0);return}if(t===`no`){if(b.current++,b.current<3){C();return}a(`error`),f(S(`chrome.summaryExpired`));return}if(Date.now()-x.current>18e4){C({silent:!0});return}b.current=0,m(!1)}})()},3e4);return()=>{e=!1,window.clearInterval(t)}},[l,C]),c.useEffect(()=>ix(e=>{typeof t!=`string`||t.length===0||e!==void 0&&e!==t||(b.current=0,x.current=0,C())}),[t,C]),c.useEffect(()=>{n!=null&&r?.()},[n,r]);let w=()=>{b.current=0,C()},T;return T=i===`loading`?c.createElement(`div`,{className:`dsh-tw-summary-state`},c.createElement(`div`,{className:`dsh-tw-summary-state-spin`},`⏳`),c.createElement(`div`,null,S(`chrome.summaryGenerating`))):i===`error`?c.createElement(`div`,{className:`dsh-tw-summary-state`},c.createElement(`div`,{className:`dsh-tw-summary-state-title`},S(`chrome.summaryUnavailable`)),c.createElement(`div`,{className:`dsh-tw-summary-state-detail`},d),c.createElement(`button`,{type:`button`,className:`dsh-tw-summary-btn`,onClick:w},S(`chrome.summaryRetry`))):c.createElement(`div`,{className:`dsh-tw-summary-native dsh-tw-toolcard-native`},p?c.createElement(`div`,{className:`dsh-tw-summary-state-detail`},S(`chrome.summaryStale`)):null,c.createElement(`div`,{dangerouslySetInnerHTML:{__html:o??``}})),c.createElement(`div`,{className:`dsh-tw-summary`,"data-dsh-tw-summary":`true`,"data-dsh-tw-wiki":h},c.createElement(`div`,{className:`dsh-tw-summary-bar`},c.createElement(`span`,{className:`dsh-tw-summary-bar-title`},S(`chrome.summaryBarTitle`)),c.createElement(`span`,{className:`dsh-tw-summary-bar-hint`},S(`chrome.summaryBarHint`)),c.createElement(`span`,{className:`dsh-tw-summary-bar-spacer`}),c.createElement(`button`,{type:`button`,className:`dsh-tw-summary-btn`,onClick:w,disabled:i===`loading`,title:S(`chrome.summaryRefreshTitle`)},S(`chrome.summaryRefresh`))),T)}function dx(e,t){if(!(e===void 0||t.showSessionTab===!1))return ft(t.tabLabel),e.inject(`conversation.view`,()=>e.register({name:`conversation.view`,id:`dsh-tiddlywiki-summary`,order:20,label:cx},ux))}function $(e,t,n){let r=document.createElement(e);return t!==void 0&&(r.className=t),n!==void 0&&(r.textContent=n),r}function fx(e){let t=$(`div`,`dsh-tw-settings-banner`);return t.dataset.tone=`error`,t.setAttribute(`style`,`border:1px solid #c0392b;background:#fdecea;color:#8c1c13;border-radius:6px;padding:10px 12px;margin:0 0 12px;font-size:12px;line-height:1.6;white-space:pre-wrap;`),t.textContent=e,t}async function px(e,t){let n=await fetch(e,{...t,signal:t?.signal??AbortSignal.timeout(15e3)}),r=await n.json().catch(()=>({}));if(!n.ok){let e=r.error??`HTTP ${n.status}`;throw Error(e)}return r}let mx;function hx(e){mx=e}let gx=`overview`;function _x(e){gx=e}function vx(e){mx=e,gx=`library`}function yx(){mx=void 0}function bx(e){return mx===void 0?e:`${e}?wiki=${encodeURIComponent(mx)}`}function xx(){return{archive:S(`settings.icon.archive`),"archive-check":S(`settings.icon.archiveCheck`),"archive-off":S(`settings.icon.archiveOff`),unarchive:S(`settings.icon.unarchive`),database:S(`settings.icon.database`),data:S(`settings.icon.data`),folder:S(`settings.icon.folder`),globe:S(`settings.icon.globe`),branch:S(`settings.icon.branch`),list:S(`settings.icon.list`),checklist:S(`settings.icon.checklist`),"flat-list":S(`settings.icon.flatList`),skill:S(`settings.icon.skill`),goal:S(`settings.icon.goal`),compact:S(`settings.icon.compact`),clock:S(`settings.icon.clock`),alarm:S(`settings.icon.alarm`),pin:S(`settings.icon.pin`),shield:S(`settings.icon.shield`),api:S(`settings.icon.api`),code:S(`settings.icon.code`),users:S(`settings.icon.users`),user:S(`settings.icon.user`),plugin:S(`settings.icon.plugin`),pinwheel:S(`settings.icon.pinwheel`),gauge:S(`settings.icon.gauge`),tree:S(`settings.icon.tree`),personalization:S(`settings.icon.personalization`),link:S(`settings.icon.link`),search:S(`settings.icon.search`),settings:S(`settings.icon.settings`),sparkle:S(`settings.icon.sparkle`),think:S(`settings.icon.think`),light:S(`settings.icon.light`),dark:S(`settings.icon.dark`),refresh:S(`settings.icon.refresh`),book:S(`settings.icon.book`),briefcase:S(`settings.icon.briefcase`),home:S(`settings.icon.home`),notebook:S(`settings.icon.notebook`),flask:S(`settings.icon.flask`),star:S(`settings.icon.star`)}}const Sx=[`📚`,`💼`,`🏠`,`✍️`,`🧪`,`🌱`,`🎯`,`🗂️`];function Cx(e){let t=xx(),n=[{value:``,label:S(`settings.iconPicker.default`),kind:`default`}];for(let e of Qe)n.push({value:e,label:t[e]??e,kind:`name`});for(let e of Sx)n.push({value:e,label:e,kind:`emoji`});return e.length>0&&!n.some(t=>t.value===e)&&n.push({value:e,label:e,kind:`custom`}),n}function wx(e,t){if(e.replaceChildren(),t.length===0){e.innerHTML=Je;return}let n=Ze[t];if(n!==void 0){e.innerHTML=n;return}e.textContent=t}function Tx(e,t){let n=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn dsh-tw-settings-iconbtn`);n.type=`button`,n.setAttribute(`aria-label`,t),n.title=e.length===0?S(`settings.iconPicker.titleDefault`):S(`settings.iconPicker.titleCurrent`,{icon:e});let r=$(`span`,`dsh-tw-settings-iconbtn-face`);return wx(r,e),n.append(r,$(`span`,`dsh-tw-settings-iconbtn-label`,S(`settings.iconPicker.label`))),n}function Ex(e,t,n){document.querySelector(`.dsh-tw-iconpicker`)?.remove();let r=Cx(t),i=Math.max(1,Math.ceil(r.length/48)),a=Math.max(0,Math.floor(r.findIndex(e=>e.value===t)/48)),o=$(`div`,`dsh-tw-iconpicker`);o.setAttribute(`role`,`dialog`),o.setAttribute(`aria-label`,S(`settings.iconPicker.aria`));let s=$(`div`,`dsh-tw-iconpicker-grid`),c=$(`div`,`dsh-tw-iconpicker-pager`);o.append(s,c);let l=()=>{o.remove(),document.removeEventListener(`keydown`,u,!0),document.removeEventListener(`mousedown`,d,!0)},u=e=>{e.key===`Escape`&&(e.stopPropagation(),l())},d=t=>{let n=t.target;n instanceof Node&&!o.contains(n)&&!e.contains(n)&&l()},f=()=>{s.replaceChildren();let e=r.slice(a*48,(a+1)*48);for(let r of e){let e=$(`button`,`dsh-tw-iconpicker-cell`);e.type=`button`,e.title=r.label,e.setAttribute(`aria-label`,r.label),r.value===t&&(e.dataset.current=`true`);let i=$(`span`,`dsh-tw-iconpicker-face`);wx(i,r.value),e.append(i,$(`span`,`dsh-tw-iconpicker-name`,r.label)),e.addEventListener(`click`,()=>{l(),n(r.value)}),s.append(e)}if(c.replaceChildren(),i>1){let e=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,S(`settings.iconPicker.prev`));e.type=`button`,e.disabled=a===0,e.addEventListener(`click`,()=>{--a,f()});let t=$(`span`,`dsh-tw-settings-muted`,S(`settings.iconPicker.page`,{page:a+1,pages:i,total:r.length})),n=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,S(`settings.iconPicker.next`));n.type=`button`,n.disabled=a>=i-1,n.addEventListener(`click`,()=>{a+=1,f()}),c.append(e,t,n)}else c.append($(`span`,`dsh-tw-settings-muted`,S(`settings.iconPicker.total`,{total:r.length})))};f(),document.body.append(o);let p=e.getBoundingClientRect(),m=o.offsetHeight,h=window.innerHeight-p.bottom<m+12&&p.top>m+12?p.top-m-6:p.bottom+6;o.style.top=`${Math.max(6,Math.min(h,window.innerHeight-12))}px`,o.style.left=`${Math.max(6,Math.min(p.left,window.innerWidth-o.offsetWidth-6))}px`,document.addEventListener(`keydown`,u,!0),document.addEventListener(`mousedown`,d,!0)}function Dx(e,t,n){let r=$(`section`,`dsh-tw-settings-section`);r.append($(`h3`,`dsh-tw-settings-h`,S(`settings.wikis.title`)));let i=$(`div`,`dsh-tw-settings-muted`,S(`settings.wikis.loading`)),a=$(`div`,`dsh-tw-settings-row`),o=$(`div`),s=$(`input`,`dsh-tw-settings-input`);s.placeholder=S(`settings.wikis.rootPlaceholder`);let c=$(`input`,`dsh-tw-settings-input`);c.placeholder=S(`settings.wikis.namePlaceholder`);let l=$(`input`,`dsh-tw-settings-input`);l.placeholder=S(`settings.wikis.labelPlaceholder`);let u=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,S(`settings.wikis.add`));u.type=`button`;let d=$(`div`,`dsh-tw-settings-row dsh-tw-settings-field`);d.append(s,c,l,u);let f=$(`div`,`dsh-tw-settings-muted`,S(`settings.wikis.hint`));r.append(i,a,o,d,f),e.append(r);let p=async(e,r)=>{i.textContent=r;try{let r=await px(Ce,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),signal:AbortSignal.timeout(18e4)});if(t())return;let i=r.change?.errors??[];i.length>0&&k(S(`settings.wikis.partialFailure`,{message:i.map(e=>S(`settings.wikis.failureItem`,{id:e.id,message:e.message})).join(S(`settings.wikis.failureJoin`))})),h(r),await n()}catch(e){if(t())return;k(S(`settings.wikis.actionFailed`,{message:e instanceof Error?e.message:String(e)})),await g()}},m=async(e,r,a)=>{i.textContent=a;try{let i=await px(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(r),signal:AbortSignal.timeout(18e4)});if(t())return;i.ok!==!0&&k(S(`settings.wikis.failed`,{message:i.error??S(`settings.wikis.unknownError`)})),await g(),await n()}catch(e){if(t())return;k(S(`settings.wikis.failed`,{message:e instanceof Error?e.message:String(e)})),await g()}},h=e=>{i.textContent=e.error!==void 0&&e.error.length>0?`⚠️ ${e.error}`:``;let t=(e.wikis??[]).find(t=>t.id===e.defaultId)?.label,r=t!==void 0&&t.length>0?t:S(`settings.wikis.unknownName`);a.replaceChildren($(`span`,`dsh-tw-settings-label`,S(`settings.wikis.modeLabel`)));let c=[[`single`,S(`settings.wikis.modeSingle`,{name:r})],[`multi`,S(`settings.wikis.modeMulti`)]];for(let[t,n]of c){let i=e.mode===t,o=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn${i?` dsh-tw-settings-primary`:``}`,n);o.type=`button`,o.disabled=i,o.addEventListener(`click`,()=>{window.confirm(t===`multi`?S(`settings.wikis.switchToMulti`):S(`settings.wikis.switchToSingle`,{name:r}))&&p({action:`set-mode`,mode:t},S(`settings.wikis.switchingMode`))}),a.append(o)}o.replaceChildren();let l=e.wikis??[];for(let t of l){let r=$(`div`,`dsh-tw-settings-kbrow`),i=t.id===e.defaultId;r.append($(`div`,`dsh-tw-settings-label`,S(`settings.wikis.rowTitle`,{mark:i?`★ `:``,label:t.label,id:t.id}))),r.append($(`div`,`dsh-tw-settings-muted`,[t.running?S(`settings.wikis.running`):S(`settings.wikis.stopped`),t.agentVisible?S(`settings.wikis.agentVisible`):S(`settings.wikis.agentHidden`),t.autostart?S(`settings.wikis.autostart`):S(`settings.wikis.onDemand`),t.path].join(` · `)));let a=$(`div`,`dsh-tw-settings-row`),s=mx===t.id,c=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn${s?` dsh-tw-settings-primary`:``}`,S(s?`settings.exitConfig`:`settings.wikis.configure`));c.type=`button`,c.title=S(s?`settings.wikis.exitConfigTitle`:`settings.wikis.configureTitle`,{label:t.label}),c.addEventListener(`click`,()=>{s?yx():vx(t.id),n()});let u=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,t.running?S(`settings.wikis.stop`):S(`settings.wikis.start`));u.type=`button`,u.addEventListener(`click`,()=>{p({action:t.running?`stop`:`start`,id:t.id},t.running?S(`settings.wikis.stopping`):S(`settings.wikis.starting`))});let d=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,S(`settings.wikis.setDefault`));d.type=`button`,d.disabled=i,d.addEventListener(`click`,()=>{p({action:`set-default`,id:t.id},S(`settings.wikis.saving`))});let f=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,t.agentVisible?S(`settings.wikis.hideFromAgent`):S(`settings.wikis.showToAgent`));f.type=`button`,f.addEventListener(`click`,()=>{p({action:`update`,wiki:{...t,agentVisible:!t.agentVisible}},S(`settings.wikis.saving`))});let h=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,t.autostart?S(`settings.wikis.disableAutostart`):S(`settings.wikis.autostart`));h.type=`button`,h.addEventListener(`click`,()=>{p({action:`update`,wiki:{...t,autostart:!t.autostart}},S(`settings.wikis.saving`))});let g=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,S(`settings.wikis.removeFromList`));g.type=`button`,g.disabled=l.length<=1,g.addEventListener(`click`,()=>{window.confirm(S(`settings.wikis.removeConfirm`,{label:t.label,path:t.path}))&&p({action:`remove`,id:t.id},S(`settings.wikis.removing`))});let _=typeof t.icon==`string`?t.icon:``,v=Tx(_,S(`settings.wikis.iconAria`,{label:t.label}));if(v.addEventListener(`click`,()=>{Ex(v,_,e=>{p({action:`update`,wiki:{...t,icon:e}},S(`settings.wikis.saving`))})}),e.mode===`multi`){let e=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,S(`settings.wikis.moveDir`));e.type=`button`,e.addEventListener(`click`,()=>{let e=window.prompt(S(`settings.wikis.moveRootPrompt`,{label:t.label,root:t.root}),t.root);if(e===null)return;if(e.trim().length===0){k(S(`settings.wikis.rootRequired`));return}let n=window.prompt(S(`settings.wikis.moveNamePrompt`,{name:t.name}),t.name);if(n===null)return;let r={root:e.trim(),name:n.trim().length>0?n.trim():t.name};i?m(xe,r,S(`settings.wikis.moving`)):p({action:`update`,wiki:{...t,...r}},S(`settings.wikis.saving`))}),a.append(e)}a.append(c,u,d,f,h,v,g),r.append(a),o.append(r)}s.value.length===0&&typeof l[0]?.root==`string`&&(s.value=l[0].root)};u.addEventListener(`click`,()=>{let e=s.value.trim(),t=c.value.trim();if(e.length===0||t.length===0){k(S(`settings.wikis.needRootAndName`));return}let n={root:e,name:t},r=l.value.trim();r.length>0&&(n.label=r),p({action:`add`,wiki:n},S(`settings.wikis.adding`))});let g=async()=>{if(!t())try{let e=await px(Ce);if(t())return;h(e)}catch(e){if(t())return;i.textContent=S(`settings.wikis.listFailed`,{message:e instanceof Error?e.message:String(e)})}};g()}function Ox(e,t,n){(async()=>{try{let e=await px(Ce);if(t()||e.mode===`multi`)return}catch{}t()||kx(e,t,n)})()}function kx(e,t,n){let r=$(`section`,`dsh-tw-settings-section`);r.append($(`h3`,`dsh-tw-settings-h`,S(`settings.wikis.locationTitle`)));let i=$(`div`,`dsh-tw-settings-muted`,S(`settings.wikis.loading`)),a=$(`div`,`dsh-tw-settings-muted`),o=$(`div`,`dsh-tw-settings-muted`),s=$(`div`,`dsh-tw-settings-muted`),c=$(`input`,`dsh-tw-settings-input`),l=$(`input`,`dsh-tw-settings-input`);c.placeholder=S(`settings.wikis.rootPlaceholderSingle`),l.placeholder=S(`settings.wikis.folderPlaceholderSingle`);let u=$(`label`,`dsh-tw-settings-field`);u.append($(`span`,`dsh-tw-settings-label`,S(`settings.wikis.rootField`)),c);let d=$(`label`,`dsh-tw-settings-field`);d.append($(`span`,`dsh-tw-settings-label`,S(`settings.wikis.folderField`)),l);let f=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,S(`settings.wikis.switchHere`));f.type=`button`;let p=$(`button`,`dsh-tw-settings-btn`,S(`settings.wikis.resetToConfig`));p.type=`button`;let m=$(`div`,`dsh-tw-settings-row`);m.append(f,p);let h=$(`div`,`dsh-tw-settings-row dsh-tw-settings-candidates`),g=$(`div`,`dsh-tw-settings-muted`,S(`settings.wikis.locationHint`)),_=(e,t)=>{f.disabled=e,p.disabled=e,f.textContent=e?t:S(`settings.wikis.switchHere`)},v=async()=>{if(!t())try{let e=await px(be);if(t())return;if(e.ok!==!0)throw Error(e.error??S(`settings.wikis.locationUnavailable`));let n=e.current??{};i.textContent=S(`settings.wikis.current`,{path:n.path??S(`settings.wikis.unknownPath`)});let r=n.source===`state`?S(`settings.wikis.sourceState`):n.source===`config`?S(`settings.wikis.sourceConfig`):S(`settings.wikis.sourceDefault`);a.textContent=S(`settings.wikis.sourceLine`,{source:r,path:e.default?.path??S(`settings.wikis.unknownPath`)}),o.textContent=e.stateFile===void 0?``:S(`settings.wikis.stateFile`,{path:e.stateFile}),s.textContent=e.error===void 0?``:`⚠️ ${e.error}`,c.value.length===0&&typeof n.root==`string`&&(c.value=n.root),l.value.length===0&&typeof n.name==`string`&&(l.value=n.name),h.replaceChildren();let u=e.candidates??[];if(u.length>0){h.append($(`span`,`dsh-tw-settings-label`,S(`settings.wikis.candidatesLabel`)));for(let e of u){let t=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,e===`.`?S(`settings.wikis.rootItself`):e);t.type=`button`,t.title=S(`settings.wikis.candidateTitle`,{name:e}),t.addEventListener(`click`,()=>{l.value=e}),h.append(t)}}}catch(e){if(t())return;i.textContent=S(`settings.wikis.locationFailed`,{message:e instanceof Error?e.message:String(e)})}};f.addEventListener(`click`,()=>{let e=c.value.trim(),t=l.value.trim().length>0?l.value.trim():`main`;if(e.length===0){k(S(`settings.wikis.needRoot`));return}window.confirm(S(`settings.wikis.switchConfirm`,{path:`${e}\\${t}`}))&&(_(!0,S(`settings.wikis.switching`)),(async()=>{try{let r=await px(xe,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({root:e,name:t}),signal:AbortSignal.timeout(12e4)});r.warning===void 0?k(S(`settings.wikis.switched`,{path:r.path??``})):k(S(`settings.wikis.switchedWarn`,{path:r.path??``,warning:r.warning})),Ie(),await v(),await n()}catch(e){k(S(`settings.wikis.switchFailed`,{message:e instanceof Error?e.message:String(e)})),await v()}finally{_(!1,``)}})())}),p.addEventListener(`click`,()=>{window.confirm(S(`settings.wikis.resetConfirm`))&&(_(!0,S(`settings.wikis.switching`)),(async()=>{try{let e=await px(Se,{method:`POST`,headers:{"content-type":`application/json`},body:`{}`,signal:AbortSignal.timeout(12e4)});k(e.warning===void 0?S(`settings.wikis.resetDone`,{path:e.path??``}):S(`settings.wikis.resetWarn`,{warning:e.warning})),Ie(),await v(),await n()}catch(e){k(S(`settings.wikis.resetFailed`,{message:e instanceof Error?e.message:String(e)})),await v()}finally{_(!1,``)}})())}),r.append(i,a,o,u,d,m,h,s,g),e.append(r),v()}function Ax(e,t,n,r,i,a=()=>!1){let o=$(`section`,`dsh-tw-settings-section`);o.append($(`h3`,`dsh-tw-settings-h`,S(`config.title`)));let s=t.note??{},c=t.git??{},l=t.ui??{},u=[],d=o,f=(e,t,n)=>{let r=$(`input`,`dsh-tw-settings-input`);r.autocomplete=`off`,r.value=n;let i=$(`label`,`dsh-tw-settings-field`);i.append($(`span`,`dsh-tw-settings-label`,t),r),u.push({key:e,initial:n,read:()=>r.value.trim(),changed:()=>r.value.trim()!==n}),d.append(i)},p=(e,t,n)=>{let r=$(`input`,`dsh-tw-settings-input`);r.type=`password`,r.value=n,r.autocomplete=`off`;let i=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,`👁`);i.type=`button`,i.title=S(`config.token.showHide`),i.setAttribute(`aria-label`,S(`config.token.showHide`)),i.addEventListener(`click`,e=>{e.preventDefault();let t=r.type===`password`;r.type=t?`text`:`password`,i.textContent=t?`🙈`:`👁`});let a=$(`label`,`dsh-tw-settings-field`);a.append($(`span`,`dsh-tw-settings-label`,t),r,i),u.push({key:e,initial:n,read:()=>r.value.trim(),changed:()=>r.value.trim()!==n}),d.append(a)},m=(e,t,n)=>{let r=$(`input`,`dsh-tw-settings-check`);r.type=`checkbox`,r.checked=n;let i=$(`label`,`dsh-tw-settings-field dsh-tw-settings-field-check`);return i.append(r,$(`span`,`dsh-tw-settings-label`,t)),u.push({key:e,initial:n,read:()=>r.checked,changed:()=>r.checked!==n}),d.append(i),r},h=(e,t,n,r)=>{let i=$(`input`,`dsh-tw-settings-input`);i.type=`number`,i.value=String(n),r?.min!==void 0&&(i.min=String(r.min)),r?.max!==void 0&&(i.max=String(r.max)),r?.step!==void 0&&(i.step=String(r.step));let a=$(`div`,`dsh-tw-settings-error`);a.hidden=!0;let o=()=>{let e=i.value.trim();if(e.length===0)return S(`config.num.empty`);let t=Number(e);if(!Number.isFinite(t))return S(`config.num.nan`);if(r?.integer===!0&&!Number.isInteger(t))return S(`config.num.integer`);if(r?.min!==void 0&&t<r.min)return S(`config.num.belowMin`,{min:r.min});if(r?.max!==void 0&&t>r.max)return S(`config.num.aboveMax`,{max:r.max})},s=()=>{let e=o();a.textContent=e===void 0?``:S(`config.num.invalidHint`,{message:e}),a.hidden=e===void 0,e===void 0?i.removeAttribute(`aria-invalid`):i.setAttribute(`aria-invalid`,`true`)};i.addEventListener(`input`,s);let c=()=>{let e=i.value.trim(),t=Number(e);return e.length===0||!Number.isFinite(t)?e:t},l=$(`label`,`dsh-tw-settings-field`);l.append($(`span`,`dsh-tw-settings-label`,t),i,a),u.push({key:e,initial:n,read:c,changed:()=>c()!==n,invalid:o}),s(),d.append(l)},g=(e,t,n,r)=>{let i=$(`select`,`dsh-tw-settings-input`);for(let e of r){let t=document.createElement(`option`);t.value=e.value,t.textContent=e.label,e.value===n&&(t.selected=!0),i.append(t)}let a=$(`label`,`dsh-tw-settings-field`);return a.append($(`span`,`dsh-tw-settings-label`,t),i),u.push({key:e,initial:n,read:()=>i.value,changed:()=>i.value!==n}),d.append(a),i},_=(e,t,n,r)=>{let i=$(`textarea`,`dsh-tw-settings-input dsh-tw-settings-area`);i.rows=r,i.value=n;let a=$(`label`,`dsh-tw-settings-field dsh-tw-settings-field-area`);return a.append($(`span`,`dsh-tw-settings-label`,t),i),u.push({key:e,initial:n,read:()=>i.value.trim(),changed:()=>i.value.trim()!==n}),d.append(a),i};f(`note.tag`,S(`config.note.tag`),typeof s.tag==`string`?s.tag:`inbox`),m(`note.workspaceMark`,S(`config.note.workspaceMark`),s.workspaceMark!==!1),m(`git.autoCommit`,S(`config.git.autoCommit`),c.autoCommit!==!1),h(`git.debounceMs`,S(`config.git.debounceMs`),typeof c.debounceMs==`number`?c.debounceMs:6e4,{min:0,max:36e5,step:1e3,integer:!0}),f(`git.remote`,S(`config.git.remote`),typeof c.remote==`string`?c.remote:``),f(`git.branch`,S(`config.git.branch`),typeof c.branch==`string`?c.branch:`main`);let v=t.startup??{};h(`startup.readyTimeoutMs`,S(`config.startup.readyTimeoutMs`),typeof v.readyTimeoutMs==`number`&&v.readyTimeoutMs>0?v.readyTimeoutMs:6e4,{min:5e3,max:6e5,step:1e3}),m(`ui.showQuickNote`,S(`config.ui.showQuickNote`),l.showQuickNote!==!1),m(`ui.showQuickNoteDock`,S(`config.ui.showQuickNoteDock`),l.showQuickNoteDock!==!1),g(`ui.quickNoteMode`,S(`config.ui.quickNoteMode`),typeof l.quickNoteMode==`string`&&l.quickNoteMode===`card`?`card`:`native`,[{value:`native`,label:S(`config.ui.quickNoteModeNative`)},{value:`card`,label:S(`config.ui.quickNoteModeCard`)}]),i===`multi`?o.append($(`div`,`dsh-tw-settings-muted`,S(`config.ui.multiWikiSidebarHint`))):f(`ui.sidebarLabel`,S(`config.ui.sidebarLabel`),typeof l.sidebarLabel==`string`&&l.sidebarLabel.trim().length>0?l.sidebarLabel.trim():`TiddlyWiki`),m(`ui.showPanelStatus`,S(`config.ui.showPanelStatus`),l.showPanelStatus!==!1),m(`ui.showSyncButton`,S(`config.ui.showSyncButton`),l.showSyncButton!==!1),m(`ui.followDshTheme`,S(`config.ui.followDshTheme`),l.followDshTheme!==!1),f(`ui.darkPalette`,S(`config.ui.darkPalette`),typeof l.darkPalette==`string`&&l.darkPalette.trim().length>0?l.darkPalette.trim():`$:/palettes/CupertinoDark`),f(`ui.tabLabel`,S(`config.ui.tabLabel`),typeof l.tabLabel==`string`&&l.tabLabel.trim().length>0?l.tabLabel.trim():S(`frame.tabLabelDefault`)),m(`ui.showSessionTab`,S(`config.ui.showSessionTab`),l.showSessionTab!==!1),m(`ui.showRightbarTab`,S(`config.ui.showRightbarTab`),l.showRightbarTab!==!1);let y=l.sendToAgent??{};m(`ui.sendToAgent.enabled`,S(`config.ui.sendToAgent.enabled`),y.enabled!==!1),f(`ui.sendToAgent.endpoint`,S(`config.ui.sendToAgent.endpoint`),typeof y.endpoint==`string`?y.endpoint:``),p(`ui.sendToAgent.token`,S(`config.ui.sendToAgent.token`),typeof y.token==`string`?y.token:``);let b=l.allArticles??{};h(`ui.allArticles.pageSize`,S(`config.ui.allArticles.pageSize`),typeof b.pageSize==`number`?b.pageSize:10,{min:1,max:200,step:1,integer:!0}),o.append($(`h3`,`dsh-tw-settings-h`,S(`config.wechat.title`))),o.append($(`div`,`dsh-tw-settings-muted`,S(`config.wechat.hint`)));let x=t.wechat??{},C=m(`wechat.enabled`,S(`config.wechat.enabled`),x.enabled===!0);f(`wechat.command`,S(`config.wechat.command`),typeof x.command==`string`&&x.command.trim().length>0?x.command.trim():`opencli`),g(`wechat.adapter`,S(`config.wechat.adapter`),x.adapter===`publish-note-imgs`?`publish-note-imgs`:`publish-note`,[{value:`publish-note`,label:S(`config.wechat.adapterDefault`)},{value:`publish-note-imgs`,label:S(`config.wechat.adapterImgs`)}]),p(`wechat.token`,S(`config.wechat.token`),typeof x.token==`string`?x.token:``),f(`wechat.dsn`,S(`config.wechat.dsn`),typeof x.dsn==`string`?x.dsn:``);let w=t.prompt??{};o.append($(`h3`,`dsh-tw-settings-h`,S(`config.prompt.title`))),o.append($(`div`,`dsh-tw-settings-muted`,S(`config.prompt.hint`)));let T=m(`prompt.enabled`,S(`config.prompt.enabled`),w.enabled!==!1),ee=g(`prompt.mode`,S(`config.prompt.mode`),w.mode===`full`?`full`:`slim`,[{value:`slim`,label:S(`config.prompt.modeSlim`)},{value:`full`,label:S(`config.prompt.modeFull`)}]),E=_(`prompt.extra`,S(`config.prompt.extra`),typeof w.extra==`string`?w.extra:``,5),D=_(`prompt.override`,S(`config.prompt.override`),typeof w.override==`string`?w.override:``,8),O=()=>u.some(e=>(e.key.startsWith(`prompt.`)||e.key===`wechat.enabled`)&&e.changed()),te=$(`button`,`dsh-tw-settings-btn`,S(`config.prompt.preview`));te.type=`button`,te.title=S(`config.prompt.previewTitle`);let ne=$(`pre`,`dsh-tw-settings-prompt-preview`);ne.hidden=!0,te.addEventListener(`click`,()=>{if(!ne.hidden){ne.hidden=!0,ne.textContent=``;return}te.disabled=!0,(async()=>{try{let e=await px(bx(pe),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({enabled:T.checked,mode:ee.value,extra:E.value,override:D.value,wechat:C.checked})});if(e.ok!==!0)throw Error(e.error??S(`config.prompt.fetchFailed`));ne.textContent=e.enabled===!1?S(`config.prompt.previewDisabled`):S(`config.prompt.previewHeader`,{mode:e.mode??``,length:e.length??0,dirty:O()?S(`config.prompt.previewDirty`):``,text:e.text??``}),ne.hidden=!1}catch(e){k(S(`config.prompt.readFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{te.disabled=!1}})()}),o.append(te,ne);let re=$(`div`,`dsh-tw-settings-bridge`);d=re;let ie=t.bridge??{};m(`bridge.enabled`,S(`config.bridge.enabled`),ie.enabled===!0),h(`bridge.port`,S(`config.bridge.port`),typeof ie.port==`number`&&ie.port>0?ie.port:8618,{min:1,max:65535,step:1,integer:!0}),p(`bridge.token`,S(`config.bridge.token`),typeof ie.token==`string`?ie.token:``),f(`bridge.tag`,S(`config.bridge.tag`),typeof ie.tag==`string`&&ie.tag.trim().length>0?ie.tag.trim():`clip`);let ae=g(`bridge.wiki`,S(`config.bridge.wiki`),typeof ie.wiki==`string`?ie.wiki.trim():``,[{value:``,label:S(`config.clipWiki.followDefault`)}]);(async()=>{try{let e=await px(Ce);if(a())return;let t=Array.isArray(e.wikis)?e.wikis:[],n=ae.value,r=t.find(t=>t.id===e.defaultId)?.label??void 0,i=ae.options.item(0);i!==null&&r!==void 0&&(i.textContent=S(`config.clipWiki.defaultSuffix`,{label:r}));for(let n of t){if(n.id===e.defaultId)continue;let t=document.createElement(`option`);t.value=n.id,t.textContent=S(`config.clipWiki.option`,{label:n.label,id:n.id,suffix:n.running?``:S(`config.clipWiki.notRunning`)}),ae.append(t)}if(n.length>0&&!t.some(e=>e.id===n)){let e=document.createElement(`option`);e.value=n,e.textContent=r===void 0?S(`config.clipWiki.notInList`,{current:n}):S(`config.clipWiki.notInListWithDefault`,{current:n,label:r}),ae.append(e)}ae.value=n}catch{}})(),d=o,i!==`multi`||mx===void 0?o.append(re):o.append($(`div`,`dsh-tw-settings-muted`,S(`config.bridge.pluginScopeOnly`)));let oe=fx(r.saveError??``);oe.hidden=r.saveError===void 0;let se=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,S(`config.save`));se.type=`button`,se.addEventListener(`click`,()=>{se.disabled=!0,(async()=>{let e=u.filter(e=>e.invalid?.()!==void 0);if(e.length>0){k(S(`config.invalidFields`,{count:e.length})),se.disabled=!1;return}let t={};for(let e of u){if(!e.changed())continue;let n=e.key.split(`.`),r=t;for(let t=0;t<n.length;t++){let i=n[t];if(i===void 0)break;if(t===n.length-1)r[i]=e.read();else{let e=r[i]??{};r[i]=e,r=e}}}if(Object.keys(t).length===0){k(S(`config.noChanges`)),se.disabled=!1;return}try{await px(bx(he),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),Ie(),r.saveError=void 0,oe.hidden=!0,oe.textContent=``,k(S(`config.saved`)),n()}catch(e){r.saveError=S(`config.saveFailed`,{message:e instanceof Error?e.message:String(e)}),oe.textContent=r.saveError,oe.hidden=!1,n()}finally{se.disabled=!1}})()}),r.isDirty=()=>u.some(e=>e.changed()),o.append(oe,se),e.append(o)}function jx(e,t,n,r,i,a){let o=n?.plugins??[],s=n?.themes??[],c=n?.languages??[],l=t?.plugins??[],u=new Set(t?.themes??[]),d=t?.languages??[],f=()=>a.plugins??new Set(l),p=()=>a.themes??new Set(u),m=()=>a.languages??new Set(d),h=new Set(r?.disabled??[]),g=new Set((r?.wikiPlugins??[]).map(e=>e.title)),_=$(`section`,`dsh-tw-settings-section`);_.append($(`h3`,`dsh-tw-settings-h`,S(`settings.plugin.title`)));let v=$(`div`,`dsh-tw-settings-muted`,S(`settings.plugin.hint`));_.append(v);let y=$(`input`,`dsh-tw-settings-input dsh-tw-settings-search`);y.placeholder=S(`settings.plugin.searchPlaceholder`);let b=$(`div`,`dsh-tw-settings-list`),x=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,S(`settings.plugin.apply`));x.type=`button`;let C=()=>{x.disabled=a.plugins===void 0},w=e=>{b.replaceChildren();let t=e.toLowerCase();for(let e of o){if(t.length>0&&!`${e.label} ${e.name} ${e.description}`.toLowerCase().includes(t))continue;let n=$(`input`,`dsh-tw-settings-check`);n.type=`checkbox`,n.checked=f().has(e.name),n.addEventListener(`change`,()=>{let t=f();n.checked?t.add(e.name):t.delete(e.name),a.plugins=t,C()});let i=$(`label`,`dsh-tw-settings-row dsh-tw-settings-plugin`),o=$(`span`,`dsh-tw-settings-name`,e.label);o.title=e.name;let s=$(`span`,`dsh-tw-settings-muted`,e.description||e.name);if(i.append(n,o),r!=null&&h.has(e.title)){let e=$(`span`,`dsh-tw-settings-chip`,S(`settings.plugin.badgeDisabled`));e.dataset.state=`disabled`,e.title=S(`settings.plugin.badgeDisabledTitle`),i.append(e)}else if(r!=null&&!l.includes(e.name)&&g.has(e.title)){let e=$(`span`,`dsh-tw-settings-chip`,S(`settings.plugin.badgeInstalled`));e.dataset.state=`update`,e.title=S(`settings.plugin.badgeInstalledTitle`),i.append(e)}i.append(s),b.append(i)}};if(y.addEventListener(`input`,()=>w(y.value)),x.addEventListener(`click`,()=>{a.plugins!==void 0&&(x.disabled=!0,(async()=>{try{await px(bx(me),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({plugins:[...f()]})}),a.plugins=void 0,k(S(`settings.plugin.applied`)),ut(),je(),i()}catch(e){k(S(`settings.catalog.applyFailed`,{message:e instanceof Error?e.message:String(e)})),C()}})())}),w(``),C(),_.append(y,b,x),e.append(_),r!=null){let t=new Set(o.map(e=>e.title)),n=(r.wikiPlugins??[]).filter(e=>!t.has(e.title));if(n.length>0){let t=$(`section`,`dsh-tw-settings-section`);t.append($(`h3`,`dsh-tw-settings-h`,S(`settings.wikiPlugins.title`))),t.append($(`div`,`dsh-tw-settings-muted`,S(`settings.wikiPlugins.hint`)));let r=$(`div`,`dsh-tw-settings-list`);for(let e of n){let t=$(`div`,`dsh-tw-settings-row dsh-tw-settings-plugin`),n=$(`span`,`dsh-tw-settings-name`,e.name||e.title);if(n.title=e.title,t.append(n),h.has(e.title)){let e=$(`span`,`dsh-tw-settings-chip`,S(`settings.wikiPlugins.disabled`));e.dataset.state=`disabled`,e.title=S(`settings.wikiPlugins.disabledTitle`),t.append(e)}else if(e.version){let n=$(`span`,`dsh-tw-settings-chip`,`v${e.version}`);n.dataset.state=`ok`,t.append(n)}let i=$(`span`,`dsh-tw-settings-muted`,e.description||e.title);i.title=e.title,t.append(i),r.append(t)}t.append(r),e.append(t)}}let T=$(`section`,`dsh-tw-settings-section`);T.append($(`h3`,`dsh-tw-settings-h`,S(`settings.themes.title`)));let ee=$(`div`,`dsh-tw-settings-muted`,S(`settings.themes.hint`)),E=$(`div`,`dsh-tw-settings-row dsh-tw-settings-head`);E.append($(`span`,`dsh-tw-settings-col`,S(`settings.themes.colLoad`)),$(`span`,`dsh-tw-settings-col`,S(`settings.themes.colActive`)),$(`span`,`dsh-tw-settings-name`,S(`settings.themes.colTheme`)));let D=t?.themes??[],O=t?.themeActive,te=D[D.length-1],ne=typeof O==`string`&&s.some(e=>e.name===O)?O:te??`tiddlywiki/vanilla`,re=()=>a.themeActive??ne,ie=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,S(`settings.themes.apply`));ie.type=`button`;let ae=()=>{ie.disabled=a.themes===void 0&&a.themeActive===void 0},oe=$(`div`,`dsh-tw-settings-list`);for(let e of s){let t=$(`input`,`dsh-tw-settings-check`);t.type=`checkbox`,t.checked=p().has(e.name),t.title=S(`settings.themes.loadTitle`),t.addEventListener(`change`,()=>{let n=p();t.checked?n.add(e.name):n.delete(e.name),a.themes=n,ae()});let n=$(`input`,`dsh-tw-settings-check`);n.type=`radio`,n.name=`dsh-tw-active-theme`,n.checked=e.name===re(),n.title=S(`settings.themes.activeTitle`),n.addEventListener(`change`,()=>{n.checked&&(a.themeActive=e.name),ae()});let r=$(`span`,`dsh-tw-settings-name`,e.label);r.title=e.name;let i=$(`span`,`dsh-tw-settings-muted`,e.description||e.name),o=$(`div`,`dsh-tw-settings-row dsh-tw-settings-plugin`);o.append(t,n,r,i),oe.append(o)}ie.addEventListener(`click`,()=>{a.themes===void 0&&a.themeActive===void 0||(ie.disabled=!0,(async()=>{try{await px(bx(me),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({themes:[...p()],themeActive:re()})}),a.themes=void 0,a.themeActive=void 0,k(S(`settings.themes.applied`)),ut(),je(),i()}catch(e){k(S(`settings.catalog.applyFailed`,{message:e instanceof Error?e.message:String(e)})),ae()}})())}),ae(),T.append(ee,E,oe,ie),e.append(T);let se=$(`section`,`dsh-tw-settings-section`);se.append($(`h3`,`dsh-tw-settings-h`,S(`settings.langs.title`)));let ce=$(`div`,`dsh-tw-settings-muted`,S(`settings.langs.hint`)),le=$(`div`,`dsh-tw-settings-list`),ue=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,S(`settings.langs.apply`));ue.type=`button`;let de=()=>{ue.disabled=a.languages===void 0};for(let e of c){let t=$(`input`,`dsh-tw-settings-check`);t.type=`checkbox`,t.checked=m().has(e.name),t.addEventListener(`change`,()=>{let n=m();t.checked?n.add(e.name):n.delete(e.name),a.languages=n,de()});let n=$(`label`,`dsh-tw-settings-row dsh-tw-settings-plugin`),r=$(`span`,`dsh-tw-settings-name`,e.label);r.title=e.name;let i=$(`span`,`dsh-tw-settings-muted`,e.description||e.name);n.append(t,r,i),le.append(n)}ue.addEventListener(`click`,()=>{a.languages!==void 0&&(ue.disabled=!0,(async()=>{try{await px(bx(me),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({languages:[...m()]})}),a.languages=void 0,k(S(`settings.langs.applied`)),ut(),je(),i()}catch(e){k(S(`settings.catalog.applyFailed`,{message:e instanceof Error?e.message:String(e)})),de()}})())}),de(),se.append(ce,le,ue),e.append(se)}function Mx(e,t){let n=$(`section`,`dsh-tw-settings-section`);n.append($(`h3`,`dsh-tw-settings-h`,S(`settings.seeds.title`)));let r=$(`div`,`dsh-tw-settings-muted`,S(`settings.seeds.hint`)),i=$(`div`,`dsh-tw-settings-list`),a=$(`div`,`dsh-tw-settings-muted`),o=async()=>{if(!t())try{let e=await px(bx(_e));if(t())return;if(e.ok!==!0||!Array.isArray(e.items))throw Error(e.error??S(`settings.seeds.fetchFailed`));i.replaceChildren();let n=0,r=0;for(let t of e.items){t.present&&(n+=1),t.removable&&(r+=1);let e=$(`span`,`dsh-tw-settings-chip`,t.present?`✓`:`✗`);e.dataset.state=t.present?`ok`:`missing`,e.title=t.present?S(`settings.seeds.present`):S(`settings.seeds.missing`);let a=$(`span`,`dsh-tw-settings-name`,t.title);a.title=t.id;let s=$(`span`,`dsh-tw-settings-muted`,t.detail??t.description),c=t.updateAvailable===!0?$(`span`,`dsh-tw-settings-chip`,S(`settings.seeds.updateChip`)):void 0;c!==void 0&&(c.dataset.state=`update`,c.title=S(`settings.seeds.updateTitle`));let l=t.userModified===!0?$(`span`,`dsh-tw-settings-chip`,S(`settings.seeds.modifiedChip`)):void 0;l!==void 0&&(l.dataset.state=`missing`,l.title=S(`settings.seeds.modifiedTitle`));let u=$(`button`,`dsh-tw-settings-btn`,t.updateAvailable===!0?S(`settings.seeds.updateToBuiltin`):S(`settings.seeds.reinit`));u.type=`button`,u.title=S(`settings.seeds.rewriteTitle`,{title:t.title}),u.addEventListener(`click`,()=>{if(t.updateAvailable===!0||t.userModified!==!1){let e=t.userModified===!0?S(`settings.seeds.overwriteModified`,{title:t.title}):t.userModified===void 0?S(`settings.seeds.overwriteUnknown`,{title:t.title}):``;if(!window.confirm(S(`settings.seeds.overwriteConfirm`,{warning:e.length>0?`${e}\n\n`:``})))return}u.disabled=!0,u.textContent=S(`settings.seeds.running`),(async()=>{try{let e=await fetch(bx(ve),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:t.id,force:!0}),signal:AbortSignal.timeout(3e4)}),n=await e.json().catch(()=>null);!e.ok||n?.ok!==!0?k(S(`settings.seeds.reinitFailed`,{message:n?.error??n?.results?.[0]?.error??`HTTP ${e.status}`})):k(S(`settings.seeds.reinitDone`,{title:t.title})),o()}catch(e){k(S(`settings.seeds.reinitFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{u.disabled=!1,u.textContent=t.updateAvailable===!0?S(`settings.seeds.updateToBuiltin`):S(`settings.seeds.reinit`)}})()});let d=$(`div`,`dsh-tw-settings-row dsh-tw-settings-plugin`);if(d.append(e,a),c!==void 0&&d.append(c),l!==void 0&&d.append(l),d.append(s,u),t.removable){let e=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-danger`,S(`settings.seeds.remove`));e.type=`button`,e.title=S(`settings.seeds.removeTitle`,{title:t.title}),e.addEventListener(`click`,()=>{window.confirm(S(`settings.seeds.removeConfirm`,{title:t.title}))&&(e.disabled=!0,e.textContent=S(`settings.seeds.removing`),(async()=>{try{let e=await fetch(bx(ye),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:t.id}),signal:AbortSignal.timeout(3e4)}),n=await e.json().catch(()=>null);!e.ok||n?.ok!==!0?k(S(`settings.seeds.removeFailed`,{message:n?.error??n?.results?.[0]?.error??`HTTP ${e.status}`})):k(S(`settings.seeds.removeDone`,{title:t.title})),o()}catch(e){k(S(`settings.seeds.removeFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{e.disabled=!1,e.textContent=S(`settings.seeds.remove`)}})())}),d.append(e)}i.append(d)}a.textContent=S(`settings.seeds.statusLine`,{total:e.items.length,present:n,removable:r})}catch(e){if(t())return;a.textContent=S(`settings.seeds.loadStatusFailed`,{message:e instanceof Error?e.message:String(e)})}},s=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,S(`settings.seeds.runAll`));s.type=`button`,s.title=S(`settings.seeds.runAllTitle`),s.addEventListener(`click`,()=>{s.disabled=!0,s.textContent=S(`settings.seeds.running`),(async()=>{try{let e=await fetch(bx(ve),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({force:!0}),signal:AbortSignal.timeout(6e4)}),t=await e.json().catch(()=>null);!e.ok||t?.ok!==!0?k(S(`settings.seeds.reinitFailed`,{message:t?.error??`HTTP ${e.status}`})):k(S(`settings.seeds.allReinitDone`)),o()}catch(e){k(S(`settings.seeds.reinitFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{s.disabled=!1,s.textContent=S(`settings.seeds.runAll`)}})()});let c=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-danger`,S(`settings.seeds.removeAll`));c.type=`button`,c.title=S(`settings.seeds.removeAllTitle`),c.addEventListener(`click`,()=>{window.confirm(S(`settings.seeds.removeAllConfirm`))&&(c.disabled=!0,c.textContent=S(`settings.seeds.removing`),(async()=>{try{let e=await fetch(bx(ye),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({}),signal:AbortSignal.timeout(6e4)}),t=await e.json().catch(()=>null);!e.ok||t?.ok!==!0?k(S(`settings.seeds.removeFailed`,{message:t?.error??`HTTP ${e.status}`})):k(S(`settings.seeds.allRemoved`)),o()}catch(e){k(S(`settings.seeds.removeFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{c.disabled=!1,c.textContent=S(`settings.seeds.removeAll`)}})())}),n.append(r,a,i,s,c),e.append(n),o()}function Nx(e){let t=!1;e.classList.add(`dsh-tw-settings`);let n=$(`div`,`dsh-tw-settings-error`);n.hidden=!0;let r=$(`div`,`dsh-tw-settings-row dsh-tw-settings-status`),i=$(`div`,`dsh-tw-settings-body`);e.append(n,r,i);let a=[],o={},s={},c,l=!1,u,d,f=async()=>{l||i.replaceChildren($(`div`,`dsh-tw-settings-muted`,S(`settings.loading`)));try{let e=px(Ce).then(e=>{u=typeof e?.mode==`string`?e.mode:void 0,d=e}).catch(()=>{u=void 0}),a=await px(bx(fe));if(await e,t)return;l=!0,n.hidden=!0,n.replaceChildren(),Px(r,a,f),Bx(i,a,f,()=>t,o,s,u,()=>{c!==mx&&(delete s.plugins,delete s.themes,delete s.languages,delete s.themeActive,c=mx)},Ix(d,mx))}catch(e){if(t)return;l||i.replaceChildren($(`div`,`dsh-tw-settings-muted`,S(`settings.notLoaded`)));let r=$(`button`,`dsh-tw-settings-btn`,S(`settings.retry`));r.type=`button`,r.addEventListener(`click`,()=>{f()}),n.replaceChildren($(`span`,void 0,`${S(`settings.loadFailed`,{message:e instanceof Error?e.message:String(e)})} `),r),n.hidden=!1}};return f(),a.push(()=>{t=!0,e.replaceChildren(),e.classList.remove(`dsh-tw-settings`)}),()=>{for(let e of a.splice(0))e()}}function Px(e,t,n){e.replaceChildren();let r=t.server??{},i=r.status??`unknown`,a=$(`span`,`dsh-tw-settings-chip`,i);a.dataset.state=i;let o=$(`span`,`dsh-tw-settings-muted`,[r.url===void 0?``:`TW ${r.url}`,t.git?.branch===void 0?``:`git ${t.git.branch}`,t.git?.lastCommit===void 0?``:t.git.lastCommit,t.git?.conflict===void 0?t.git?.dirty===!0?S(`settings.gitDirty`):``:S(`settings.gitConflict`,{count:t.git.conflict.files.length})].filter(Boolean).join(` · `)),s=$(`button`,`dsh-tw-settings-btn`,S(`settings.sync`));s.type=`button`,s.title=S(`settings.syncTitle`),s.addEventListener(`click`,()=>{s.disabled=!0,s.textContent=S(`settings.syncing`),(async()=>{try{let e=await fetch(bx(le),{method:`POST`,signal:AbortSignal.timeout(12e4)}),t=Oe(await e.json().catch(()=>null),e.status);k(t.ok?S(`settings.syncDone`,{message:t.message}):S(`settings.syncFailed`,{message:t.message}))}catch(e){k(S(`settings.syncFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{s.disabled=!1,s.textContent=S(`settings.sync`),n()}})()});let c=$(`button`,`dsh-tw-settings-btn`,S(`settings.restart`));c.type=`button`,c.addEventListener(`click`,()=>{c.disabled=!0,c.textContent=S(`settings.restarting`),(async()=>{try{await px(bx(ge),{method:`POST`,signal:AbortSignal.timeout(12e4)}),k(S(`settings.restarted`)),ut(),je()}catch(e){k(S(`settings.restartFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{c.disabled=!1,c.textContent=S(`settings.restart`),n()}})()}),e.append(a,o,s,c)}const Fx=[{id:`overview`,label:()=>S(`settings.tabOverview`)},{id:`library`,label:()=>S(`settings.tabLibrary`)},{id:`global`,label:()=>S(`settings.tabGlobal`)}];function Ix(e,t){let n=e?.wikis??[],r=t??e?.defaultId,i=r===void 0?void 0:n.find(e=>e.id===r)?.label;return i!==void 0&&i.length>0?i:t}function Lx(e,t,n,r){if(t!==`multi`)return;let i=$(`div`,`dsh-tw-settings-scopebar`),a=r===void 0||r.length===0?S(`settings.scopeFollowDefault`):S(mx===void 0?`settings.scopeEditingDefault`:`settings.scopeEditing`,{name:r});if(i.append($(`span`,`dsh-tw-settings-scopebar-label`,a)),i.append($(`span`,`dsh-tw-settings-muted`,S(mx===void 0?`settings.scopeHintPick`:`settings.scopeHintEditing`))),mx!==void 0){let e=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn dsh-tw-settings-scopebar-exit`,S(`settings.exitConfig`));e.type=`button`,e.title=S(`settings.scopeExitTitle`),e.addEventListener(`click`,()=>{hx(void 0),n()}),i.append(e)}e.append(i)}function Rx(e,t,n){if(t!==`multi`)return;let r=$(`div`,`dsh-tw-settings-tabs`);r.setAttribute(`role`,`tablist`);for(let e of Fx){let t=gx===e.id,i=$(`button`,`dsh-tw-settings-tab${t?` dsh-tw-settings-tab-active`:``}`,e.label());i.type=`button`,i.setAttribute(`role`,`tab`),i.setAttribute(`aria-selected`,t?`true`:`false`),i.addEventListener(`click`,()=>{gx!==e.id&&(_x(e.id),n())}),r.append(i)}e.append(r)}function zx(e){e.append($(`div`,`dsh-tw-settings-muted`,S(`settings.pickLibraryHint`)))}function Bx(e,t,n,r,i,a,o,s,c){e.replaceChildren(),s?.(),typeof t.configError==`string`&&t.configError.length>0&&e.append(fx(S(`settings.configInactive`,{message:t.configError})));let l=JSON.stringify(t.config??{}),u=i.wiki!==mx,d=i.host!==void 0&&(u||i.signature!==l),f=i.isDirty?.()===!0;if(d&&f&&!u&&e.append(fx(S(`settings.configStale`))),i.host===void 0||u||d&&!f){let e=$(`div`,`dsh-tw-settings-confighost`);Ax(e,t.config??{},n,i,o,r),i.host=e,i.signature=l,i.wiki=mx}Rx(e,o,n),Lx(e,o,n,c);let p=o===`multi`,m=!p||gx===`overview`,h=!p||gx===`library`,g=!p||gx===`global`,_=!p||mx!==void 0;g&&e.append(i.host),m&&(Dx(e,r,n),Ox(e,r,n)),h&&_?(jx(e,t.info,t.catalog,t.runtimePlugins,n,a),Mx(e,r)):h&&zx(e)}function Vx(){let e=c.useRef(null);return c.useEffect(()=>{let t=e.current;return t===null?void 0:Nx(t)},[]),c.createElement(`div`,{ref:e})}function Hx(e){return typeof e==`object`&&!!e&&e.kind===`tool-result`}function Ux(e){if(typeof e!=`object`||!e)return null;let t=e;if(typeof t.call==`object`&&t.call!==null){let e=t.call;if(typeof e.name==`string`&&typeof e.argsRaw==`string`)return e}let n=e;return typeof n.name==`string`&&typeof n.argsRaw==`string`?{name:n.name,argsRaw:n.argsRaw}:null}function Wx(e){try{let t=JSON.parse(e);return typeof t==`object`&&t&&!Array.isArray(t)?t:{}}catch{return{}}}function Gx(e){return Array.isArray(e)?e.filter(e=>typeof e?.text==`string`).map(e=>e.text).join(`
|
|
960
|
+
`)},y=()=>{let e=n.getState();o!==void 0&&(o.dataset.state=e.state),a!==void 0&&(a.title=S(`chrome.fabTitle`,{text:e.tooltip})),v()},b=async()=>{h=await Yb(),!r&&(c!==void 0&&(c.textContent=h.text),l!==void 0&&(l.dataset.state=h.state),v())},x,C,w=(e,t)=>e.mode!==t.mode||e.defaultId!==t.defaultId||e.wikis.length!==t.wikis.length||e.wikis.some((e,n)=>{let r=t.wikis[n];return r===void 0||r.id!==e.id||r.label!==e.label||r.running!==e.running}),T=()=>{s!==void 0&&(f=!0,s.hidden=!1,m?.(),y(),b())},ee=(h,D)=>{if(r)return;if(x=h,C=D,document.removeEventListener(`click`,_,!0),p?.(),p=void 0,m=void 0,i?.remove(),i=document.createElement(`div`),i.className=`dsh-tw-fab-wrap`,s=document.createElement(`div`),s.className=`dsh-tw-fab-menu`,s.hidden=!0,h.showPanelStatus){let e=document.createElement(`div`);e.className=`dsh-tw-fab-status dsh-tw-fab-status-tiprow`,l=document.createElement(`span`),l.className=`dsh-tw-fab-status-dot`,l.dataset.state=`unknown`,c=document.createElement(`span`),c.className=`dsh-tw-fab-status-text`,c.textContent=S(`chrome.fabServiceUnknown`),e.append(l,c),u=document.createElement(`div`),u.className=`dsh-tw-fab-tip`,u.hidden=!0,e.append(u),e.addEventListener(`mouseenter`,()=>{v(),u!==void 0&&(u.hidden=!1)}),e.addEventListener(`mouseleave`,()=>{u!==void 0&&(u.hidden=!0)}),s.append(e)}if(h.showQuickNote){let e=document.createElement(`button`);e.type=`button`,e.className=`dsh-tw-fab-item`,e.textContent=S(`chrome.fabQuickNote`),e.title=S(`chrome.fabQuickNoteTip`),e.addEventListener(`click`,()=>{g(),Le().then(e=>{e.quickNoteMode===`native`?t.openNative():t.open()})}),s.append(e)}if(h.showPanelStatus){if(D.wikis.length>1){let t=document.createElement(`div`);t.className=`dsh-tw-fab-group`,t.textContent=S(`chrome.scopeSlotLabel`),s.append(t);let n=new Map,r=()=>{let e=Ge(D.wikis,D.defaultId);for(let[t,r]of n){let n=t===e;r.dataset.current=n?`1`:`0`;let i=D.wikis.find(e=>e.id===t);r.textContent=`${n?`●`:`○`} ${i?.label??t}`}};for(let t of D.wikis){let r=document.createElement(`button`);r.type=`button`,r.className=`dsh-tw-fab-item`,r.dataset.current=`0`,r.title=`${t.path}${t.running?``:S(`chrome.fabWikiNotRunning`)}`,r.addEventListener(`click`,()=>{g(),Ue(t.id),t.running||fetch(`${E}/admin/wikis`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({action:`start`,id:t.id}),signal:AbortSignal.timeout(12e4)}).catch(()=>void 0),e.openPanel()}),n.set(t.id,r),s.append(r)}r(),p=We(()=>{r()}),m=r}d=document.createElement(`span`),d.textContent=S(`chrome.fabOpenPanel`);let t=document.createElement(`button`);t.type=`button`,t.className=`dsh-tw-fab-item`,t.append(document.createTextNode(`🖥 `),d),t.addEventListener(`click`,()=>{g(),e.toggle()}),s.append(t);let n=document.createElement(`button`);n.type=`button`,n.className=`dsh-tw-fab-item`,n.textContent=S(`chrome.fabReload`),n.addEventListener(`click`,()=>{g(),ut(),b()}),s.append(n)}if(h.showSyncButton){let e=document.createElement(`button`);e.type=`button`,e.className=`dsh-tw-fab-item`,e.textContent=S(`chrome.fabSync`),e.addEventListener(`click`,()=>{g(),n.trigger()}),s.append(e)}a=document.createElement(`button`),a.type=`button`,a.className=`dsh-tw-fab`,a.setAttribute(`aria-label`,S(`chrome.fabAriaLabel`));let O=document.createElement(`span`);O.className=`dsh-tw-fab-icon`,O.innerHTML=`<svg viewBox="0 0 16 16" width="17" height="17" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 2.5h8a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-9a1 1 0 0 1 1-1z"/><path d="M6 6h4M6 8.5h2.5"/></svg>`,o=document.createElement(`span`),o.className=`dsh-tw-fab-dot`,o.dataset.state=n.getState().state,a.append(O,o),a.addEventListener(`click`,()=>{if(f){g();return}(async()=>{let e=await qb().catch(()=>void 0);if(!r){if(e!==void 0&&C!==void 0&&x!==void 0&&w(C,e)){ee(x,e),T();return}T()}})()}),i.append(s,a),document.body.append(i),y(),document.addEventListener(`click`,_,!0)},D=e.subscribe(()=>{d!==void 0&&(d.textContent=e.isOpen()?S(`chrome.fabClosePanel`):S(`chrome.fabOpenPanel`))}),O=n.subscribe(y);return(async()=>{let[e,t]=await Promise.all([Jb(),qb()]);r||!e.showQuickNote&&!e.showPanelStatus&&!e.showSyncButton||ee(e,t)})(),()=>{r=!0,p?.(),p=void 0,document.removeEventListener(`click`,_,!0),D(),O(),i?.remove()}}function Zb(e){let t=()=>{let t=null,n=null,r=e;for(;r!==null&&r!==document.documentElement&&(r=r.parentElement,r!==null);){for(let e of r.querySelectorAll(`textarea, [contenteditable]:not([contenteditable="false"]), [role="textbox"]`))if(e.getBoundingClientRect().width>300){t=e,n=r;break}if(n!==null)break}if(t===null||n===null)return null;let i=n.getBoundingClientRect().width,a=t,o=null,s=0;for(;a!==null&&a!==n;){let e=a.getBoundingClientRect().width;e>0&&e<i-8&&e>=s&&(s=e,o=a),a=a.parentElement}return o},n=()=>{let n=e.getBoundingClientRect(),r=t(),i=r===null?n.right:r.getBoundingClientRect().right,a=Math.max(0,n.right-i);return e.style.paddingRight!==`${a}px`&&(e.style.paddingRight=`${a}px`),r!==null};n();let r=new ResizeObserver(()=>{n()}),i=e;for(;i!==null&&i!==document.documentElement&&(r.observe(i),!(i instanceof HTMLElement&&i.hasAttribute(`data-phase`)));)i=i.parentElement;window.addEventListener(`resize`,n),document.addEventListener(`visibilitychange`,n);let a=0,o=0,s=window.setInterval(()=>{if(o++,!n()){o>=20&&window.clearInterval(s);return}a++,a>=3&&window.clearInterval(s)},1500),c=window.setTimeout(n,120),l=window.setTimeout(n,600);return()=>{r.disconnect(),window.removeEventListener(`resize`,n),document.removeEventListener(`visibilitychange`,n),window.clearInterval(s),window.clearTimeout(c),window.clearTimeout(l)}}function Qb(e){return function(){let[t,n]=c.useState(!1),[r,i]=c.useState(null),a=c.useRef(null),o=c.useRef(null);c.useEffect(()=>{let e=!0,t=e=>{let t=e.detail;n(t?.open===!0)};return window.addEventListener(Hb,t),Le().then(t=>{e&&i(t.quickNoteMode)}),()=>{e=!1,window.removeEventListener(Hb,t)}},[]),c.useLayoutEffect(()=>{let e=a.current;if(e!==null)return Zb(e)},[]);let s=r===`native`,l=S(s||!t?`chrome.dockQuickNote`:`chrome.quickNoteOpenLabel`),u=S(s?`chrome.quickNoteTipNative`:t?`chrome.quickNoteTipOpen`:`chrome.quickNoteTipClosed`);return c.createElement(`div`,{ref:a,className:`dsh-tw-dock-note`},c.createElement(`button`,{ref:o,type:`button`,className:t?`dsh-tw-dock-note-btn dsh-tw-dock-note-btn-active`:`dsh-tw-dock-note-btn`,title:u,onClick:()=>{Le().then(t=>{t.quickNoteMode===`native`?un()&&!dn()?pn():e.openNative():e.isOpen()?e.close():e.open(o.current??void 0)})}},c.createElement(`span`,{className:`dsh-tw-dock-note-icon`,"aria-hidden":`true`},`📝`),c.createElement(`span`,{className:`dsh-tw-dock-note-label`},l)))}}const $b=new Map,ex=new Map,tx=new Set;async function nx(e){if(typeof e!=`string`||e.length===0)return;let t=$b.get(e);if(t!==void 0&&Date.now()-t.at<=15e3)return t.wikiId;let n=ex.get(e);if(n!==void 0)return n;let r=(async()=>{try{let t=await fetch(`${we}?session=${encodeURIComponent(e)}`,{signal:AbortSignal.timeout(8e3)});if(!t.ok)return;let n=await t.json().catch(()=>null);if(typeof n?.scope==`string`&&n.scope.length>0)return n.scope;let r=n?.resolved?.id;return n?.mode===`multi`&&typeof r==`string`&&r.length>0?r:void 0}catch{return}finally{ex.delete(e)}})();ex.set(e,r);let i=await r;return $b.set(e,{wikiId:i,at:Date.now()}),i}function rx(e){typeof e==`string`&&e.length>0?$b.delete(e):$b.clear();let t=typeof e==`string`&&e.length>0?e:void 0;for(let e of[...tx])e(t)}function ix(e){return tx.add(e),()=>{tx.delete(e)}}function ax(e){if(typeof e!=`object`||!e)return;let t=e.id;if(typeof t!=`string`||t.length===0)return;let n=e.label;return{id:t,label:typeof n==`string`&&n.length>0?n:t}}function ox(){return function(e){let t=typeof e.sessionId==`string`&&e.sessionId.length>0?e.sessionId:void 0,[n,r]=c.useState([]),[i,a]=c.useState(``),[o,s]=c.useState(void 0),[l,u]=c.useState(void 0),[d,f]=c.useState(!1);if(c.useEffect(()=>{if(t===void 0)return;let e=!0;return(async()=>{let[n,i]=await Promise.all([Ae(),fetch(`${we}?session=${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(8e3)}).then(e=>e.ok?e.json():null).catch(()=>null)]);if(!e)return;let o=(n?.wikis??[]).filter(e=>e.agentVisible);r(o.map(e=>({id:e.id,label:e.label,running:e.running}))),a(typeof i?.scope==`string`?i.scope:``),s(ax(i?.resolved)),u(typeof i?.reason==`string`?i.reason:void 0)})(),()=>{e=!1}},[t]),t===void 0||n.length<=1)return null;let p=o?.id??``,m=e=>n.some(t=>t.id===e),h=i.length>0&&m(i)?i:p,g=[...n];p.length>0&&!m(p)&&g.push({id:p,label:o?.label??p,running:!0});let _=p.length>0&&m(p)?[...g.filter(e=>e.id===p),...g.filter(e=>e.id!==p)]:g,v=e=>{let n=e===p?``:e;f(!0),(async()=>{try{let e=await fetch(we,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({session:t,wiki:n.length>0?n:null}),signal:AbortSignal.timeout(12e4)}),r=await e.json().catch(()=>({}));if(!e.ok||r.ok!==!0){u(r.error??S(`chrome.scopeSwitchFailed`,{status:e.status}));return}a(typeof r.scope==`string`?r.scope:n),s(ax(r.resolved)??o),u(typeof r.reason==`string`?r.reason:void 0),rx(t)}catch(e){u(e instanceof Error?e.message:String(e))}finally{f(!1)}})()};return c.createElement(`div`,{className:`dsh-tw-scope-dock`},c.createElement(`span`,{className:`dsh-tw-scope-label`},S(`chrome.scopeSlotLabel`)),c.createElement(`select`,{className:`dsh-tw-scope-select`,value:h,disabled:d,"aria-label":S(`chrome.scopeAriaLabel`),title:S(`chrome.scopeTitle`),onChange:e=>{v(e.target.value)}},..._.map(e=>c.createElement(`option`,{key:e.id,value:e.id},`${e.label}${e.id===p?S(`chrome.scopeDefaultMark`):``}${e.running?``:S(`chrome.scopeNotRunning`)}`))),l===void 0?null:c.createElement(`span`,{className:`dsh-tw-scope-note`},l))}}async function sx(e,t=15e3,n){try{let r=await fetch(De(ne,n),{method:`POST`,headers:{"content-type":`application/json`,"x-requested-with":`TiddlyWiki`},body:JSON.stringify({title:e}),signal:AbortSignal.timeout(t)});if(!r.ok)return null;let i=await r.text();return i.trim().length>0?i:null}catch{return null}}function cx(){return pt()}async function lx(e,t){try{let n=await fetch(De(`${te}?title=${encodeURIComponent(e)}`,t),{signal:AbortSignal.timeout(8e3)});if(n.status===404)return`no`;if(!n.ok)return`unknown`;let r=await n.json().catch(()=>null);return r===null?`unknown`:r.notFound===!0?`no`:`yes`}catch{return`unknown`}}function ux(e){let{sessionId:t,viewRequest:n,completeViewRequest:r}=e,[i,a]=c.useState(`loading`),[o,s]=c.useState(null),[l,u]=c.useState(null),[d,f]=c.useState(``),[p,m]=c.useState(!1),[h,g]=c.useState(void 0),_=c.useRef(void 0);_.current=h;let v=c.useRef(0),y=c.useRef(!0),b=c.useRef(0),x=c.useRef(0),C=c.useCallback(async e=>{let n=++v.current;if(!y.current)return;let r=e?.silent===!0;r||a(`loading`);let i=e=>{if(b.current++,r){m(!0);return}a(`error`),f(e)};if(typeof t!=`string`||t.length===0){a(`error`),f(S(`chrome.summaryMissingSession`));return}if(b.current>=3){if(r){m(!0);return}a(`error`),f(S(`chrome.summaryRetriesExhausted`,{n:3}));return}try{let e=await nx(t);if(!y.current||n!==v.current)return;g(e);let o=await fetch(De(de,e),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({session:t}),signal:AbortSignal.timeout(25e3)}),c=await o.json().catch(()=>null);if(!y.current||n!==v.current)return;if(!o.ok||c?.ok!==!0){i(c?.error??`HTTP ${o.status}`);return}if(typeof c.title!=`string`||c.title.length===0){i(S(`chrome.summaryNoTitle`));return}u(c.title);let l=await sx(c.title,15e3,e);if(!y.current||n!==v.current)return;if(l===null){let t=await lx(c.title,e);if(!y.current||n!==v.current)return;if(t===`no`){if(b.current++,b.current<3){C();return}a(`error`),f(S(`chrome.summaryRebuildFailed`));return}if(t===`unknown`){if(r){m(!0);return}a(`error`),f(S(`chrome.summaryRenderUnknown`));return}i(S(`chrome.summaryRenderUnavailable`));return}b.current=0,x.current=Date.now(),m(!1),s(l),a(`ready`)}catch(e){if(!y.current||n!==v.current)return;i(e instanceof Error?e.message:String(e))}},[t]);c.useEffect(()=>(y.current=!0,b.current=0,x.current=Date.now(),m(!1),C(),()=>{y.current=!1}),[C]),c.useEffect(()=>{if(l===null)return;let e=!0,t=window.setInterval(()=>{(async()=>{if(!e||typeof document<`u`&&document.hidden)return;let t=await lx(l,_.current);if(e){if(t===`unknown`){m(!0);return}if(t===`no`){if(b.current++,b.current<3){C();return}a(`error`),f(S(`chrome.summaryExpired`));return}if(Date.now()-x.current>18e4){C({silent:!0});return}b.current=0,m(!1)}})()},3e4);return()=>{e=!1,window.clearInterval(t)}},[l,C]),c.useEffect(()=>ix(e=>{typeof t!=`string`||t.length===0||e!==void 0&&e!==t||(b.current=0,x.current=0,C())}),[t,C]),c.useEffect(()=>{n!=null&&r?.()},[n,r]);let w=()=>{b.current=0,C()},T;return T=i===`loading`?c.createElement(`div`,{className:`dsh-tw-summary-state`},c.createElement(`div`,{className:`dsh-tw-summary-state-spin`},`⏳`),c.createElement(`div`,null,S(`chrome.summaryGenerating`))):i===`error`?c.createElement(`div`,{className:`dsh-tw-summary-state`},c.createElement(`div`,{className:`dsh-tw-summary-state-title`},S(`chrome.summaryUnavailable`)),c.createElement(`div`,{className:`dsh-tw-summary-state-detail`},d),c.createElement(`button`,{type:`button`,className:`dsh-tw-summary-btn`,onClick:w},S(`chrome.summaryRetry`))):c.createElement(`div`,{className:`dsh-tw-summary-native dsh-tw-toolcard-native`},p?c.createElement(`div`,{className:`dsh-tw-summary-state-detail`},S(`chrome.summaryStale`)):null,c.createElement(`div`,{dangerouslySetInnerHTML:{__html:o??``}})),c.createElement(`div`,{className:`dsh-tw-summary`,"data-dsh-tw-summary":`true`,"data-dsh-tw-wiki":h},c.createElement(`div`,{className:`dsh-tw-summary-bar`},c.createElement(`span`,{className:`dsh-tw-summary-bar-title`},S(`chrome.summaryBarTitle`)),c.createElement(`span`,{className:`dsh-tw-summary-bar-hint`},S(`chrome.summaryBarHint`)),c.createElement(`span`,{className:`dsh-tw-summary-bar-spacer`}),c.createElement(`button`,{type:`button`,className:`dsh-tw-summary-btn`,onClick:w,disabled:i===`loading`,title:S(`chrome.summaryRefreshTitle`)},S(`chrome.summaryRefresh`))),T)}function dx(e,t){if(!(e===void 0||t.showSessionTab===!1))return ft(t.tabLabel),e.inject(`conversation.view`,()=>e.register({name:`conversation.view`,id:`dsh-tiddlywiki-summary`,order:20,label:cx},ux))}function $(e,t,n){let r=document.createElement(e);return t!==void 0&&(r.className=t),n!==void 0&&(r.textContent=n),r}function fx(e){let t=$(`div`,`dsh-tw-settings-banner`);return t.dataset.tone=`error`,t.setAttribute(`style`,`border:1px solid #c0392b;background:#fdecea;color:#8c1c13;border-radius:6px;padding:10px 12px;margin:0 0 12px;font-size:12px;line-height:1.6;white-space:pre-wrap;`),t.textContent=e,t}async function px(e,t){let n=await fetch(e,{...t,signal:t?.signal??AbortSignal.timeout(15e3)}),r=await n.json().catch(()=>({}));if(!n.ok){let e=r.error??`HTTP ${n.status}`;throw Error(e)}return r}let mx;function hx(e){mx=e}let gx=`overview`;function _x(e){gx=e}function vx(e){mx=e,gx=`library`}function yx(){mx=void 0}function bx(e){return mx===void 0?e:`${e}?wiki=${encodeURIComponent(mx)}`}function xx(){return{archive:S(`settings.icon.archive`),"archive-check":S(`settings.icon.archiveCheck`),"archive-off":S(`settings.icon.archiveOff`),unarchive:S(`settings.icon.unarchive`),database:S(`settings.icon.database`),data:S(`settings.icon.data`),folder:S(`settings.icon.folder`),globe:S(`settings.icon.globe`),branch:S(`settings.icon.branch`),list:S(`settings.icon.list`),checklist:S(`settings.icon.checklist`),"flat-list":S(`settings.icon.flatList`),skill:S(`settings.icon.skill`),goal:S(`settings.icon.goal`),compact:S(`settings.icon.compact`),clock:S(`settings.icon.clock`),alarm:S(`settings.icon.alarm`),pin:S(`settings.icon.pin`),shield:S(`settings.icon.shield`),api:S(`settings.icon.api`),code:S(`settings.icon.code`),users:S(`settings.icon.users`),user:S(`settings.icon.user`),plugin:S(`settings.icon.plugin`),pinwheel:S(`settings.icon.pinwheel`),gauge:S(`settings.icon.gauge`),tree:S(`settings.icon.tree`),personalization:S(`settings.icon.personalization`),link:S(`settings.icon.link`),search:S(`settings.icon.search`),settings:S(`settings.icon.settings`),sparkle:S(`settings.icon.sparkle`),think:S(`settings.icon.think`),light:S(`settings.icon.light`),dark:S(`settings.icon.dark`),refresh:S(`settings.icon.refresh`),book:S(`settings.icon.book`),briefcase:S(`settings.icon.briefcase`),home:S(`settings.icon.home`),notebook:S(`settings.icon.notebook`),flask:S(`settings.icon.flask`),star:S(`settings.icon.star`)}}const Sx=[`📚`,`💼`,`🏠`,`✍️`,`🧪`,`🌱`,`🎯`,`🗂️`];function Cx(e){let t=xx(),n=[{value:``,label:S(`settings.iconPicker.default`),kind:`default`}];for(let e of Qe)n.push({value:e,label:t[e]??e,kind:`name`});for(let e of Sx)n.push({value:e,label:e,kind:`emoji`});return e.length>0&&!n.some(t=>t.value===e)&&n.push({value:e,label:e,kind:`custom`}),n}function wx(e,t){if(e.replaceChildren(),t.length===0){e.innerHTML=Je;return}let n=Ze[t];if(n!==void 0){e.innerHTML=n;return}e.textContent=t}function Tx(e,t){let n=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn dsh-tw-settings-iconbtn`);n.type=`button`,n.setAttribute(`aria-label`,t),n.title=e.length===0?S(`settings.iconPicker.titleDefault`):S(`settings.iconPicker.titleCurrent`,{icon:e});let r=$(`span`,`dsh-tw-settings-iconbtn-face`);return wx(r,e),n.append(r,$(`span`,`dsh-tw-settings-iconbtn-label`,S(`settings.iconPicker.label`))),n}function Ex(e,t,n){document.querySelector(`.dsh-tw-iconpicker`)?.remove();let r=Cx(t),i=Math.max(1,Math.ceil(r.length/48)),a=Math.max(0,Math.floor(r.findIndex(e=>e.value===t)/48)),o=$(`div`,`dsh-tw-iconpicker`);o.setAttribute(`role`,`dialog`),o.setAttribute(`aria-label`,S(`settings.iconPicker.aria`));let s=$(`div`,`dsh-tw-iconpicker-grid`),c=$(`div`,`dsh-tw-iconpicker-pager`);o.append(s,c);let l=()=>{o.remove(),document.removeEventListener(`keydown`,u,!0),document.removeEventListener(`mousedown`,d,!0)},u=e=>{e.key===`Escape`&&(e.stopPropagation(),l())},d=t=>{let n=t.target;n instanceof Node&&!o.contains(n)&&!e.contains(n)&&l()},f=()=>{s.replaceChildren();let e=r.slice(a*48,(a+1)*48);for(let r of e){let e=$(`button`,`dsh-tw-iconpicker-cell`);e.type=`button`,e.title=r.label,e.setAttribute(`aria-label`,r.label),r.value===t&&(e.dataset.current=`true`);let i=$(`span`,`dsh-tw-iconpicker-face`);wx(i,r.value),e.append(i,$(`span`,`dsh-tw-iconpicker-name`,r.label)),e.addEventListener(`click`,()=>{l(),n(r.value)}),s.append(e)}if(c.replaceChildren(),i>1){let e=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,S(`settings.iconPicker.prev`));e.type=`button`,e.disabled=a===0,e.addEventListener(`click`,()=>{--a,f()});let t=$(`span`,`dsh-tw-settings-muted`,S(`settings.iconPicker.page`,{page:a+1,pages:i,total:r.length})),n=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,S(`settings.iconPicker.next`));n.type=`button`,n.disabled=a>=i-1,n.addEventListener(`click`,()=>{a+=1,f()}),c.append(e,t,n)}else c.append($(`span`,`dsh-tw-settings-muted`,S(`settings.iconPicker.total`,{total:r.length})))};f(),document.body.append(o);let p=e.getBoundingClientRect(),m=o.offsetHeight,h=window.innerHeight-p.bottom<m+12&&p.top>m+12?p.top-m-6:p.bottom+6;o.style.top=`${Math.max(6,Math.min(h,window.innerHeight-12))}px`,o.style.left=`${Math.max(6,Math.min(p.left,window.innerWidth-o.offsetWidth-6))}px`,document.addEventListener(`keydown`,u,!0),document.addEventListener(`mousedown`,d,!0)}function Dx(e,t,n){let r=$(`section`,`dsh-tw-settings-section`);r.append($(`h3`,`dsh-tw-settings-h`,S(`settings.wikis.title`)));let i=$(`div`,`dsh-tw-settings-muted`,S(`settings.wikis.loading`)),a=$(`div`,`dsh-tw-settings-row`),o=$(`div`),s=$(`input`,`dsh-tw-settings-input`);s.placeholder=S(`settings.wikis.rootPlaceholder`);let c=$(`input`,`dsh-tw-settings-input`);c.placeholder=S(`settings.wikis.namePlaceholder`);let l=$(`input`,`dsh-tw-settings-input`);l.placeholder=S(`settings.wikis.labelPlaceholder`);let u=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,S(`settings.wikis.add`));u.type=`button`;let d=$(`div`,`dsh-tw-settings-row dsh-tw-settings-field`);d.append(s,c,l,u);let f=$(`div`,`dsh-tw-settings-muted`,S(`settings.wikis.hint`));r.append(i,a,o,d,f),e.append(r);let p=async(e,r)=>{i.textContent=r;try{let r=await px(Ce,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),signal:AbortSignal.timeout(18e4)});if(t())return;let i=r.change?.errors??[];i.length>0&&k(S(`settings.wikis.partialFailure`,{message:i.map(e=>S(`settings.wikis.failureItem`,{id:e.id,message:e.message})).join(S(`settings.wikis.failureJoin`))})),h(r),await n()}catch(e){if(t())return;k(S(`settings.wikis.actionFailed`,{message:e instanceof Error?e.message:String(e)})),await g()}},m=async(e,r,a)=>{i.textContent=a;try{let i=await px(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(r),signal:AbortSignal.timeout(18e4)});if(t())return;i.ok!==!0&&k(S(`settings.wikis.failed`,{message:i.error??S(`settings.wikis.unknownError`)})),await g(),await n()}catch(e){if(t())return;k(S(`settings.wikis.failed`,{message:e instanceof Error?e.message:String(e)})),await g()}},h=e=>{i.textContent=e.error!==void 0&&e.error.length>0?`⚠️ ${e.error}`:``;let t=(e.wikis??[]).find(t=>t.id===e.defaultId)?.label,r=t!==void 0&&t.length>0?t:S(`settings.wikis.unknownName`);a.replaceChildren($(`span`,`dsh-tw-settings-label`,S(`settings.wikis.modeLabel`)));let c=[[`single`,S(`settings.wikis.modeSingle`,{name:r})],[`multi`,S(`settings.wikis.modeMulti`)]];for(let[t,n]of c){let i=e.mode===t,o=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn${i?` dsh-tw-settings-primary`:``}`,n);o.type=`button`,o.disabled=i,o.addEventListener(`click`,()=>{window.confirm(t===`multi`?S(`settings.wikis.switchToMulti`):S(`settings.wikis.switchToSingle`,{name:r}))&&p({action:`set-mode`,mode:t},S(`settings.wikis.switchingMode`))}),a.append(o)}o.replaceChildren();let l=e.wikis??[];for(let t of l){let r=$(`div`,`dsh-tw-settings-kbrow`),i=t.id===e.defaultId;r.append($(`div`,`dsh-tw-settings-label`,S(`settings.wikis.rowTitle`,{mark:i?`★ `:``,label:t.label,id:t.id}))),r.append($(`div`,`dsh-tw-settings-muted`,[t.running?S(`settings.wikis.running`):S(`settings.wikis.stopped`),t.agentVisible?S(`settings.wikis.agentVisible`):S(`settings.wikis.agentHidden`),t.autostart?S(`settings.wikis.autostart`):S(`settings.wikis.onDemand`),t.path].join(` · `)));let a=$(`div`,`dsh-tw-settings-row`),s=mx===t.id,c=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn${s?` dsh-tw-settings-primary`:``}`,S(s?`settings.exitConfig`:`settings.wikis.configure`));c.type=`button`,c.title=S(s?`settings.wikis.exitConfigTitle`:`settings.wikis.configureTitle`,{label:t.label}),c.addEventListener(`click`,()=>{s?yx():vx(t.id),n()});let u=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,t.running?S(`settings.wikis.stop`):S(`settings.wikis.start`));u.type=`button`,u.addEventListener(`click`,()=>{p({action:t.running?`stop`:`start`,id:t.id},t.running?S(`settings.wikis.stopping`):S(`settings.wikis.starting`))});let d=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,S(`settings.wikis.setDefault`));d.type=`button`,d.disabled=i,d.addEventListener(`click`,()=>{p({action:`set-default`,id:t.id},S(`settings.wikis.saving`))});let f=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,t.agentVisible?S(`settings.wikis.hideFromAgent`):S(`settings.wikis.showToAgent`));f.type=`button`,f.addEventListener(`click`,()=>{p({action:`update`,wiki:{...t,agentVisible:!t.agentVisible}},S(`settings.wikis.saving`))});let h=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,t.autostart?S(`settings.wikis.disableAutostart`):S(`settings.wikis.autostart`));h.type=`button`,h.addEventListener(`click`,()=>{p({action:`update`,wiki:{...t,autostart:!t.autostart}},S(`settings.wikis.saving`))});let g=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,S(`settings.wikis.removeFromList`));g.type=`button`,g.disabled=l.length<=1,g.addEventListener(`click`,()=>{window.confirm(S(`settings.wikis.removeConfirm`,{label:t.label,path:t.path}))&&p({action:`remove`,id:t.id},S(`settings.wikis.removing`))});let _=typeof t.icon==`string`?t.icon:``,v=Tx(_,S(`settings.wikis.iconAria`,{label:t.label}));if(v.addEventListener(`click`,()=>{Ex(v,_,e=>{p({action:`update`,wiki:{...t,icon:e}},S(`settings.wikis.saving`))})}),e.mode===`multi`){let e=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,S(`settings.wikis.moveDir`));e.type=`button`,e.addEventListener(`click`,()=>{let e=window.prompt(S(`settings.wikis.moveRootPrompt`,{label:t.label,root:t.root}),t.root);if(e===null)return;if(e.trim().length===0){k(S(`settings.wikis.rootRequired`));return}let n=window.prompt(S(`settings.wikis.moveNamePrompt`,{name:t.name}),t.name);if(n===null)return;let r={root:e.trim(),name:n.trim().length>0?n.trim():t.name};i?m(xe,r,S(`settings.wikis.moving`)):p({action:`update`,wiki:{...t,...r}},S(`settings.wikis.saving`))}),a.append(e)}a.append(c,u,d,f,h,v,g),r.append(a),o.append(r)}s.value.length===0&&typeof l[0]?.root==`string`&&(s.value=l[0].root)};u.addEventListener(`click`,()=>{let e=s.value.trim(),t=c.value.trim();if(e.length===0||t.length===0){k(S(`settings.wikis.needRootAndName`));return}let n={root:e,name:t},r=l.value.trim();r.length>0&&(n.label=r),p({action:`add`,wiki:n},S(`settings.wikis.adding`))});let g=async()=>{if(!t())try{let e=await px(Ce);if(t())return;h(e)}catch(e){if(t())return;i.textContent=S(`settings.wikis.listFailed`,{message:e instanceof Error?e.message:String(e)})}};g()}function Ox(e,t,n){(async()=>{try{let e=await px(Ce);if(t()||e.mode===`multi`)return}catch{}t()||kx(e,t,n)})()}function kx(e,t,n){let r=$(`section`,`dsh-tw-settings-section`);r.append($(`h3`,`dsh-tw-settings-h`,S(`settings.wikis.locationTitle`)));let i=$(`div`,`dsh-tw-settings-muted`,S(`settings.wikis.loading`)),a=$(`div`,`dsh-tw-settings-muted`),o=$(`div`,`dsh-tw-settings-muted`),s=$(`div`,`dsh-tw-settings-muted`),c=$(`input`,`dsh-tw-settings-input`),l=$(`input`,`dsh-tw-settings-input`);c.placeholder=S(`settings.wikis.rootPlaceholderSingle`),l.placeholder=S(`settings.wikis.folderPlaceholderSingle`);let u=$(`label`,`dsh-tw-settings-field`);u.append($(`span`,`dsh-tw-settings-label`,S(`settings.wikis.rootField`)),c);let d=$(`label`,`dsh-tw-settings-field`);d.append($(`span`,`dsh-tw-settings-label`,S(`settings.wikis.folderField`)),l);let f=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,S(`settings.wikis.switchHere`));f.type=`button`;let p=$(`button`,`dsh-tw-settings-btn`,S(`settings.wikis.resetToConfig`));p.type=`button`;let m=$(`div`,`dsh-tw-settings-row`);m.append(f,p);let h=$(`div`,`dsh-tw-settings-row dsh-tw-settings-candidates`),g=$(`div`,`dsh-tw-settings-muted`,S(`settings.wikis.locationHint`)),_=(e,t)=>{f.disabled=e,p.disabled=e,f.textContent=e?t:S(`settings.wikis.switchHere`)},v=async()=>{if(!t())try{let e=await px(be);if(t())return;if(e.ok!==!0)throw Error(e.error??S(`settings.wikis.locationUnavailable`));let n=e.current??{};i.textContent=S(`settings.wikis.current`,{path:n.path??S(`settings.wikis.unknownPath`)});let r=n.source===`state`?S(`settings.wikis.sourceState`):n.source===`config`?S(`settings.wikis.sourceConfig`):S(`settings.wikis.sourceDefault`);a.textContent=S(`settings.wikis.sourceLine`,{source:r,path:e.default?.path??S(`settings.wikis.unknownPath`)}),o.textContent=e.stateFile===void 0?``:S(`settings.wikis.stateFile`,{path:e.stateFile}),s.textContent=e.error===void 0?``:`⚠️ ${e.error}`,c.value.length===0&&typeof n.root==`string`&&(c.value=n.root),l.value.length===0&&typeof n.name==`string`&&(l.value=n.name),h.replaceChildren();let u=e.candidates??[];if(u.length>0){h.append($(`span`,`dsh-tw-settings-label`,S(`settings.wikis.candidatesLabel`)));for(let e of u){let t=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,e===`.`?S(`settings.wikis.rootItself`):e);t.type=`button`,t.title=S(`settings.wikis.candidateTitle`,{name:e}),t.addEventListener(`click`,()=>{l.value=e}),h.append(t)}}}catch(e){if(t())return;i.textContent=S(`settings.wikis.locationFailed`,{message:e instanceof Error?e.message:String(e)})}};f.addEventListener(`click`,()=>{let e=c.value.trim(),t=l.value.trim().length>0?l.value.trim():`main`;if(e.length===0){k(S(`settings.wikis.needRoot`));return}window.confirm(S(`settings.wikis.switchConfirm`,{path:`${e}\\${t}`}))&&(_(!0,S(`settings.wikis.switching`)),(async()=>{try{let r=await px(xe,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({root:e,name:t}),signal:AbortSignal.timeout(12e4)});r.warning===void 0?k(S(`settings.wikis.switched`,{path:r.path??``})):k(S(`settings.wikis.switchedWarn`,{path:r.path??``,warning:r.warning})),Ie(),await v(),await n()}catch(e){k(S(`settings.wikis.switchFailed`,{message:e instanceof Error?e.message:String(e)})),await v()}finally{_(!1,``)}})())}),p.addEventListener(`click`,()=>{window.confirm(S(`settings.wikis.resetConfirm`))&&(_(!0,S(`settings.wikis.switching`)),(async()=>{try{let e=await px(Se,{method:`POST`,headers:{"content-type":`application/json`},body:`{}`,signal:AbortSignal.timeout(12e4)});k(e.warning===void 0?S(`settings.wikis.resetDone`,{path:e.path??``}):S(`settings.wikis.resetWarn`,{warning:e.warning})),Ie(),await v(),await n()}catch(e){k(S(`settings.wikis.resetFailed`,{message:e instanceof Error?e.message:String(e)})),await v()}finally{_(!1,``)}})())}),r.append(i,a,o,u,d,m,h,s,g),e.append(r),v()}function Ax(e,t,n,r,i,a=()=>!1){let o=$(`section`,`dsh-tw-settings-section`);o.append($(`h3`,`dsh-tw-settings-h`,S(`config.title`)));let s=t.note??{},c=t.git??{},l=t.ui??{},u=[],d=o,f=(e,t,n)=>{let r=$(`input`,`dsh-tw-settings-input`);r.autocomplete=`off`,r.value=n;let i=$(`label`,`dsh-tw-settings-field`);i.append($(`span`,`dsh-tw-settings-label`,t),r),u.push({key:e,initial:n,read:()=>r.value.trim(),changed:()=>r.value.trim()!==n}),d.append(i)},p=(e,t,n)=>{let r=$(`input`,`dsh-tw-settings-input`);r.type=`password`,r.value=n,r.autocomplete=`off`;let i=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,`👁`);i.type=`button`,i.title=S(`config.token.showHide`),i.setAttribute(`aria-label`,S(`config.token.showHide`)),i.addEventListener(`click`,e=>{e.preventDefault();let t=r.type===`password`;r.type=t?`text`:`password`,i.textContent=t?`🙈`:`👁`});let a=$(`label`,`dsh-tw-settings-field`);a.append($(`span`,`dsh-tw-settings-label`,t),r,i),u.push({key:e,initial:n,read:()=>r.value.trim(),changed:()=>r.value.trim()!==n}),d.append(a)},m=(e,t,n)=>{let r=$(`input`,`dsh-tw-settings-check`);r.type=`checkbox`,r.checked=n;let i=$(`label`,`dsh-tw-settings-field dsh-tw-settings-field-check`);return i.append(r,$(`span`,`dsh-tw-settings-label`,t)),u.push({key:e,initial:n,read:()=>r.checked,changed:()=>r.checked!==n}),d.append(i),r},h=(e,t,n,r)=>{let i=$(`input`,`dsh-tw-settings-input`);i.type=`number`,i.value=String(n),r?.min!==void 0&&(i.min=String(r.min)),r?.max!==void 0&&(i.max=String(r.max)),r?.step!==void 0&&(i.step=String(r.step));let a=$(`div`,`dsh-tw-settings-error`);a.hidden=!0;let o=()=>{let e=i.value.trim();if(e.length===0)return S(`config.num.empty`);let t=Number(e);if(!Number.isFinite(t))return S(`config.num.nan`);if(r?.integer===!0&&!Number.isInteger(t))return S(`config.num.integer`);if(r?.min!==void 0&&t<r.min)return S(`config.num.belowMin`,{min:r.min});if(r?.max!==void 0&&t>r.max)return S(`config.num.aboveMax`,{max:r.max})},s=()=>{let e=o();a.textContent=e===void 0?``:S(`config.num.invalidHint`,{message:e}),a.hidden=e===void 0,e===void 0?i.removeAttribute(`aria-invalid`):i.setAttribute(`aria-invalid`,`true`)};i.addEventListener(`input`,s);let c=()=>{let e=i.value.trim(),t=Number(e);return e.length===0||!Number.isFinite(t)?e:t},l=$(`label`,`dsh-tw-settings-field`);l.append($(`span`,`dsh-tw-settings-label`,t),i,a),u.push({key:e,initial:n,read:c,changed:()=>c()!==n,invalid:o}),s(),d.append(l)},g=(e,t,n,r)=>{let i=$(`select`,`dsh-tw-settings-input`);for(let e of r){let t=document.createElement(`option`);t.value=e.value,t.textContent=e.label,e.value===n&&(t.selected=!0),i.append(t)}let a=$(`label`,`dsh-tw-settings-field`);return a.append($(`span`,`dsh-tw-settings-label`,t),i),u.push({key:e,initial:n,read:()=>i.value,changed:()=>i.value!==n}),d.append(a),i},_=(e,t,n,r)=>{let i=$(`textarea`,`dsh-tw-settings-input dsh-tw-settings-area`);i.rows=r,i.value=n;let a=$(`label`,`dsh-tw-settings-field dsh-tw-settings-field-area`);return a.append($(`span`,`dsh-tw-settings-label`,t),i),u.push({key:e,initial:n,read:()=>i.value.trim(),changed:()=>i.value.trim()!==n}),d.append(a),i};f(`note.tag`,S(`config.note.tag`),typeof s.tag==`string`?s.tag:`inbox`),m(`note.workspaceMark`,S(`config.note.workspaceMark`),s.workspaceMark!==!1),m(`git.autoCommit`,S(`config.git.autoCommit`),c.autoCommit!==!1),h(`git.debounceMs`,S(`config.git.debounceMs`),typeof c.debounceMs==`number`?c.debounceMs:6e4,{min:0,max:36e5,step:1e3,integer:!0}),f(`git.remote`,S(`config.git.remote`),typeof c.remote==`string`?c.remote:``),f(`git.branch`,S(`config.git.branch`),typeof c.branch==`string`?c.branch:`main`);let v=t.startup??{};h(`startup.readyTimeoutMs`,S(`config.startup.readyTimeoutMs`),typeof v.readyTimeoutMs==`number`&&v.readyTimeoutMs>0?v.readyTimeoutMs:6e4,{min:5e3,max:6e5,step:1e3}),m(`ui.showQuickNote`,S(`config.ui.showQuickNote`),l.showQuickNote!==!1),m(`ui.showQuickNoteDock`,S(`config.ui.showQuickNoteDock`),l.showQuickNoteDock!==!1),g(`ui.quickNoteMode`,S(`config.ui.quickNoteMode`),typeof l.quickNoteMode==`string`&&l.quickNoteMode===`card`?`card`:`native`,[{value:`native`,label:S(`config.ui.quickNoteModeNative`)},{value:`card`,label:S(`config.ui.quickNoteModeCard`)}]),i===`multi`?o.append($(`div`,`dsh-tw-settings-muted`,S(`config.ui.multiWikiSidebarHint`))):f(`ui.sidebarLabel`,S(`config.ui.sidebarLabel`),typeof l.sidebarLabel==`string`&&l.sidebarLabel.trim().length>0?l.sidebarLabel.trim():`TiddlyWiki`),m(`ui.showPanelStatus`,S(`config.ui.showPanelStatus`),l.showPanelStatus!==!1),m(`ui.showSyncButton`,S(`config.ui.showSyncButton`),l.showSyncButton!==!1),m(`ui.followDshTheme`,S(`config.ui.followDshTheme`),l.followDshTheme!==!1),f(`ui.darkPalette`,S(`config.ui.darkPalette`),typeof l.darkPalette==`string`&&l.darkPalette.trim().length>0?l.darkPalette.trim():`$:/palettes/CupertinoDark`),f(`ui.tabLabel`,S(`config.ui.tabLabel`),typeof l.tabLabel==`string`&&l.tabLabel.trim().length>0?l.tabLabel.trim():S(`frame.tabLabelDefault`)),m(`ui.showSessionTab`,S(`config.ui.showSessionTab`),l.showSessionTab!==!1),m(`ui.showRightbarTab`,S(`config.ui.showRightbarTab`),l.showRightbarTab!==!1);let y=l.sendToAgent??{};m(`ui.sendToAgent.enabled`,S(`config.ui.sendToAgent.enabled`),y.enabled!==!1),f(`ui.sendToAgent.endpoint`,S(`config.ui.sendToAgent.endpoint`),typeof y.endpoint==`string`?y.endpoint:``),p(`ui.sendToAgent.token`,S(`config.ui.sendToAgent.token`),typeof y.token==`string`?y.token:``);let b=l.allArticles??{};h(`ui.allArticles.pageSize`,S(`config.ui.allArticles.pageSize`),typeof b.pageSize==`number`?b.pageSize:10,{min:1,max:200,step:1,integer:!0});let x=t.prompt??{};o.append($(`h3`,`dsh-tw-settings-h`,S(`config.prompt.title`))),o.append($(`div`,`dsh-tw-settings-muted`,S(`config.prompt.hint`)));let C=m(`prompt.enabled`,S(`config.prompt.enabled`),x.enabled!==!1),w=g(`prompt.mode`,S(`config.prompt.mode`),x.mode===`full`?`full`:`slim`,[{value:`slim`,label:S(`config.prompt.modeSlim`)},{value:`full`,label:S(`config.prompt.modeFull`)}]),T=_(`prompt.extra`,S(`config.prompt.extra`),typeof x.extra==`string`?x.extra:``,5),ee=_(`prompt.override`,S(`config.prompt.override`),typeof x.override==`string`?x.override:``,8),E=()=>u.some(e=>e.key.startsWith(`prompt.`)&&e.changed()),D=$(`button`,`dsh-tw-settings-btn`,S(`config.prompt.preview`));D.type=`button`,D.title=S(`config.prompt.previewTitle`);let O=$(`pre`,`dsh-tw-settings-prompt-preview`);O.hidden=!0,D.addEventListener(`click`,()=>{if(!O.hidden){O.hidden=!0,O.textContent=``;return}D.disabled=!0,(async()=>{try{let e=await px(bx(pe),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({enabled:C.checked,mode:w.value,extra:T.value,override:ee.value})});if(e.ok!==!0)throw Error(e.error??S(`config.prompt.fetchFailed`));O.textContent=e.enabled===!1?S(`config.prompt.previewDisabled`):S(`config.prompt.previewHeader`,{mode:e.mode??``,length:e.length??0,dirty:E()?S(`config.prompt.previewDirty`):``,text:e.text??``}),O.hidden=!1}catch(e){k(S(`config.prompt.readFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{D.disabled=!1}})()}),o.append(D,O);let te=$(`div`,`dsh-tw-settings-bridge`);d=te;let ne=t.bridge??{};m(`bridge.enabled`,S(`config.bridge.enabled`),ne.enabled===!0),h(`bridge.port`,S(`config.bridge.port`),typeof ne.port==`number`&&ne.port>0?ne.port:8618,{min:1,max:65535,step:1,integer:!0}),p(`bridge.token`,S(`config.bridge.token`),typeof ne.token==`string`?ne.token:``),f(`bridge.tag`,S(`config.bridge.tag`),typeof ne.tag==`string`&&ne.tag.trim().length>0?ne.tag.trim():`clip`);let re=g(`bridge.wiki`,S(`config.bridge.wiki`),typeof ne.wiki==`string`?ne.wiki.trim():``,[{value:``,label:S(`config.clipWiki.followDefault`)}]);(async()=>{try{let e=await px(Ce);if(a())return;let t=Array.isArray(e.wikis)?e.wikis:[],n=re.value,r=t.find(t=>t.id===e.defaultId)?.label??void 0,i=re.options.item(0);i!==null&&r!==void 0&&(i.textContent=S(`config.clipWiki.defaultSuffix`,{label:r}));for(let n of t){if(n.id===e.defaultId)continue;let t=document.createElement(`option`);t.value=n.id,t.textContent=S(`config.clipWiki.option`,{label:n.label,id:n.id,suffix:n.running?``:S(`config.clipWiki.notRunning`)}),re.append(t)}if(n.length>0&&!t.some(e=>e.id===n)){let e=document.createElement(`option`);e.value=n,e.textContent=r===void 0?S(`config.clipWiki.notInList`,{current:n}):S(`config.clipWiki.notInListWithDefault`,{current:n,label:r}),re.append(e)}re.value=n}catch{}})(),d=o,i!==`multi`||mx===void 0?o.append(te):o.append($(`div`,`dsh-tw-settings-muted`,S(`config.bridge.pluginScopeOnly`)));let ie=fx(r.saveError??``);ie.hidden=r.saveError===void 0;let ae=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,S(`config.save`));ae.type=`button`,ae.addEventListener(`click`,()=>{ae.disabled=!0,(async()=>{let e=u.filter(e=>e.invalid?.()!==void 0);if(e.length>0){k(S(`config.invalidFields`,{count:e.length})),ae.disabled=!1;return}let t={};for(let e of u){if(!e.changed())continue;let n=e.key.split(`.`),r=t;for(let t=0;t<n.length;t++){let i=n[t];if(i===void 0)break;if(t===n.length-1)r[i]=e.read();else{let e=r[i]??{};r[i]=e,r=e}}}if(Object.keys(t).length===0){k(S(`config.noChanges`)),ae.disabled=!1;return}try{await px(bx(he),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),Ie(),r.saveError=void 0,ie.hidden=!0,ie.textContent=``,k(S(`config.saved`)),n()}catch(e){r.saveError=S(`config.saveFailed`,{message:e instanceof Error?e.message:String(e)}),ie.textContent=r.saveError,ie.hidden=!1,n()}finally{ae.disabled=!1}})()}),r.isDirty=()=>u.some(e=>e.changed()),o.append(ie,ae),e.append(o)}function jx(e,t,n,r,i,a){let o=n?.plugins??[],s=n?.themes??[],c=n?.languages??[],l=t?.plugins??[],u=new Set(t?.themes??[]),d=t?.languages??[],f=()=>a.plugins??new Set(l),p=()=>a.themes??new Set(u),m=()=>a.languages??new Set(d),h=new Set(r?.disabled??[]),g=new Set((r?.wikiPlugins??[]).map(e=>e.title)),_=$(`section`,`dsh-tw-settings-section`);_.append($(`h3`,`dsh-tw-settings-h`,S(`settings.plugin.title`)));let v=$(`div`,`dsh-tw-settings-muted`,S(`settings.plugin.hint`));_.append(v);let y=$(`input`,`dsh-tw-settings-input dsh-tw-settings-search`);y.placeholder=S(`settings.plugin.searchPlaceholder`);let b=$(`div`,`dsh-tw-settings-list`),x=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,S(`settings.plugin.apply`));x.type=`button`;let C=()=>{x.disabled=a.plugins===void 0},w=e=>{b.replaceChildren();let t=e.toLowerCase();for(let e of o){if(t.length>0&&!`${e.label} ${e.name} ${e.description}`.toLowerCase().includes(t))continue;let n=$(`input`,`dsh-tw-settings-check`);n.type=`checkbox`,n.checked=f().has(e.name),n.addEventListener(`change`,()=>{let t=f();n.checked?t.add(e.name):t.delete(e.name),a.plugins=t,C()});let i=$(`label`,`dsh-tw-settings-row dsh-tw-settings-plugin`),o=$(`span`,`dsh-tw-settings-name`,e.label);o.title=e.name;let s=$(`span`,`dsh-tw-settings-muted`,e.description||e.name);if(i.append(n,o),r!=null&&h.has(e.title)){let e=$(`span`,`dsh-tw-settings-chip`,S(`settings.plugin.badgeDisabled`));e.dataset.state=`disabled`,e.title=S(`settings.plugin.badgeDisabledTitle`),i.append(e)}else if(r!=null&&!l.includes(e.name)&&g.has(e.title)){let e=$(`span`,`dsh-tw-settings-chip`,S(`settings.plugin.badgeInstalled`));e.dataset.state=`update`,e.title=S(`settings.plugin.badgeInstalledTitle`),i.append(e)}i.append(s),b.append(i)}};if(y.addEventListener(`input`,()=>w(y.value)),x.addEventListener(`click`,()=>{a.plugins!==void 0&&(x.disabled=!0,(async()=>{try{await px(bx(me),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({plugins:[...f()]})}),a.plugins=void 0,k(S(`settings.plugin.applied`)),ut(),je(),i()}catch(e){k(S(`settings.catalog.applyFailed`,{message:e instanceof Error?e.message:String(e)})),C()}})())}),w(``),C(),_.append(y,b,x),e.append(_),r!=null){let t=new Set(o.map(e=>e.title)),n=(r.wikiPlugins??[]).filter(e=>!t.has(e.title));if(n.length>0){let t=$(`section`,`dsh-tw-settings-section`);t.append($(`h3`,`dsh-tw-settings-h`,S(`settings.wikiPlugins.title`))),t.append($(`div`,`dsh-tw-settings-muted`,S(`settings.wikiPlugins.hint`)));let r=$(`div`,`dsh-tw-settings-list`);for(let e of n){let t=$(`div`,`dsh-tw-settings-row dsh-tw-settings-plugin`),n=$(`span`,`dsh-tw-settings-name`,e.name||e.title);if(n.title=e.title,t.append(n),h.has(e.title)){let e=$(`span`,`dsh-tw-settings-chip`,S(`settings.wikiPlugins.disabled`));e.dataset.state=`disabled`,e.title=S(`settings.wikiPlugins.disabledTitle`),t.append(e)}else if(e.version){let n=$(`span`,`dsh-tw-settings-chip`,`v${e.version}`);n.dataset.state=`ok`,t.append(n)}let i=$(`span`,`dsh-tw-settings-muted`,e.description||e.title);i.title=e.title,t.append(i),r.append(t)}t.append(r),e.append(t)}}let T=$(`section`,`dsh-tw-settings-section`);T.append($(`h3`,`dsh-tw-settings-h`,S(`settings.themes.title`)));let ee=$(`div`,`dsh-tw-settings-muted`,S(`settings.themes.hint`)),E=$(`div`,`dsh-tw-settings-row dsh-tw-settings-head`);E.append($(`span`,`dsh-tw-settings-col`,S(`settings.themes.colLoad`)),$(`span`,`dsh-tw-settings-col`,S(`settings.themes.colActive`)),$(`span`,`dsh-tw-settings-name`,S(`settings.themes.colTheme`)));let D=t?.themes??[],O=t?.themeActive,te=D[D.length-1],ne=typeof O==`string`&&s.some(e=>e.name===O)?O:te??`tiddlywiki/vanilla`,re=()=>a.themeActive??ne,ie=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,S(`settings.themes.apply`));ie.type=`button`;let ae=()=>{ie.disabled=a.themes===void 0&&a.themeActive===void 0},oe=$(`div`,`dsh-tw-settings-list`);for(let e of s){let t=$(`input`,`dsh-tw-settings-check`);t.type=`checkbox`,t.checked=p().has(e.name),t.title=S(`settings.themes.loadTitle`),t.addEventListener(`change`,()=>{let n=p();t.checked?n.add(e.name):n.delete(e.name),a.themes=n,ae()});let n=$(`input`,`dsh-tw-settings-check`);n.type=`radio`,n.name=`dsh-tw-active-theme`,n.checked=e.name===re(),n.title=S(`settings.themes.activeTitle`),n.addEventListener(`change`,()=>{n.checked&&(a.themeActive=e.name),ae()});let r=$(`span`,`dsh-tw-settings-name`,e.label);r.title=e.name;let i=$(`span`,`dsh-tw-settings-muted`,e.description||e.name),o=$(`div`,`dsh-tw-settings-row dsh-tw-settings-plugin`);o.append(t,n,r,i),oe.append(o)}ie.addEventListener(`click`,()=>{a.themes===void 0&&a.themeActive===void 0||(ie.disabled=!0,(async()=>{try{await px(bx(me),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({themes:[...p()],themeActive:re()})}),a.themes=void 0,a.themeActive=void 0,k(S(`settings.themes.applied`)),ut(),je(),i()}catch(e){k(S(`settings.catalog.applyFailed`,{message:e instanceof Error?e.message:String(e)})),ae()}})())}),ae(),T.append(ee,E,oe,ie),e.append(T);let se=$(`section`,`dsh-tw-settings-section`);se.append($(`h3`,`dsh-tw-settings-h`,S(`settings.langs.title`)));let ce=$(`div`,`dsh-tw-settings-muted`,S(`settings.langs.hint`)),le=$(`div`,`dsh-tw-settings-list`),ue=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,S(`settings.langs.apply`));ue.type=`button`;let de=()=>{ue.disabled=a.languages===void 0};for(let e of c){let t=$(`input`,`dsh-tw-settings-check`);t.type=`checkbox`,t.checked=m().has(e.name),t.addEventListener(`change`,()=>{let n=m();t.checked?n.add(e.name):n.delete(e.name),a.languages=n,de()});let n=$(`label`,`dsh-tw-settings-row dsh-tw-settings-plugin`),r=$(`span`,`dsh-tw-settings-name`,e.label);r.title=e.name;let i=$(`span`,`dsh-tw-settings-muted`,e.description||e.name);n.append(t,r,i),le.append(n)}ue.addEventListener(`click`,()=>{a.languages!==void 0&&(ue.disabled=!0,(async()=>{try{await px(bx(me),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({languages:[...m()]})}),a.languages=void 0,k(S(`settings.langs.applied`)),ut(),je(),i()}catch(e){k(S(`settings.catalog.applyFailed`,{message:e instanceof Error?e.message:String(e)})),de()}})())}),de(),se.append(ce,le,ue),e.append(se)}function Mx(e,t){let n=$(`section`,`dsh-tw-settings-section`);n.append($(`h3`,`dsh-tw-settings-h`,S(`settings.seeds.title`)));let r=$(`div`,`dsh-tw-settings-muted`,S(`settings.seeds.hint`)),i=$(`div`,`dsh-tw-settings-list`),a=$(`div`,`dsh-tw-settings-muted`),o=async()=>{if(!t())try{let e=await px(bx(_e));if(t())return;if(e.ok!==!0||!Array.isArray(e.items))throw Error(e.error??S(`settings.seeds.fetchFailed`));i.replaceChildren();let n=0,r=0;for(let t of e.items){t.present&&(n+=1),t.removable&&(r+=1);let e=$(`span`,`dsh-tw-settings-chip`,t.present?`✓`:`✗`);e.dataset.state=t.present?`ok`:`missing`,e.title=t.present?S(`settings.seeds.present`):S(`settings.seeds.missing`);let a=$(`span`,`dsh-tw-settings-name`,t.title);a.title=t.id;let s=$(`span`,`dsh-tw-settings-muted`,t.detail??t.description),c=t.updateAvailable===!0?$(`span`,`dsh-tw-settings-chip`,S(`settings.seeds.updateChip`)):void 0;c!==void 0&&(c.dataset.state=`update`,c.title=S(`settings.seeds.updateTitle`));let l=t.userModified===!0?$(`span`,`dsh-tw-settings-chip`,S(`settings.seeds.modifiedChip`)):void 0;l!==void 0&&(l.dataset.state=`missing`,l.title=S(`settings.seeds.modifiedTitle`));let u=$(`button`,`dsh-tw-settings-btn`,t.updateAvailable===!0?S(`settings.seeds.updateToBuiltin`):S(`settings.seeds.reinit`));u.type=`button`,u.title=S(`settings.seeds.rewriteTitle`,{title:t.title}),u.addEventListener(`click`,()=>{if(t.updateAvailable===!0||t.userModified!==!1){let e=t.userModified===!0?S(`settings.seeds.overwriteModified`,{title:t.title}):t.userModified===void 0?S(`settings.seeds.overwriteUnknown`,{title:t.title}):``;if(!window.confirm(S(`settings.seeds.overwriteConfirm`,{warning:e.length>0?`${e}\n\n`:``})))return}u.disabled=!0,u.textContent=S(`settings.seeds.running`),(async()=>{try{let e=await fetch(bx(ve),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:t.id,force:!0}),signal:AbortSignal.timeout(3e4)}),n=await e.json().catch(()=>null);!e.ok||n?.ok!==!0?k(S(`settings.seeds.reinitFailed`,{message:n?.error??n?.results?.[0]?.error??`HTTP ${e.status}`})):k(S(`settings.seeds.reinitDone`,{title:t.title})),o()}catch(e){k(S(`settings.seeds.reinitFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{u.disabled=!1,u.textContent=t.updateAvailable===!0?S(`settings.seeds.updateToBuiltin`):S(`settings.seeds.reinit`)}})()});let d=$(`div`,`dsh-tw-settings-row dsh-tw-settings-plugin`);if(d.append(e,a),c!==void 0&&d.append(c),l!==void 0&&d.append(l),d.append(s,u),t.removable){let e=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-danger`,S(`settings.seeds.remove`));e.type=`button`,e.title=S(`settings.seeds.removeTitle`,{title:t.title}),e.addEventListener(`click`,()=>{window.confirm(S(`settings.seeds.removeConfirm`,{title:t.title}))&&(e.disabled=!0,e.textContent=S(`settings.seeds.removing`),(async()=>{try{let e=await fetch(bx(ye),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:t.id}),signal:AbortSignal.timeout(3e4)}),n=await e.json().catch(()=>null);!e.ok||n?.ok!==!0?k(S(`settings.seeds.removeFailed`,{message:n?.error??n?.results?.[0]?.error??`HTTP ${e.status}`})):k(S(`settings.seeds.removeDone`,{title:t.title})),o()}catch(e){k(S(`settings.seeds.removeFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{e.disabled=!1,e.textContent=S(`settings.seeds.remove`)}})())}),d.append(e)}i.append(d)}a.textContent=S(`settings.seeds.statusLine`,{total:e.items.length,present:n,removable:r})}catch(e){if(t())return;a.textContent=S(`settings.seeds.loadStatusFailed`,{message:e instanceof Error?e.message:String(e)})}},s=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,S(`settings.seeds.runAll`));s.type=`button`,s.title=S(`settings.seeds.runAllTitle`),s.addEventListener(`click`,()=>{s.disabled=!0,s.textContent=S(`settings.seeds.running`),(async()=>{try{let e=await fetch(bx(ve),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({force:!0}),signal:AbortSignal.timeout(6e4)}),t=await e.json().catch(()=>null);!e.ok||t?.ok!==!0?k(S(`settings.seeds.reinitFailed`,{message:t?.error??`HTTP ${e.status}`})):k(S(`settings.seeds.allReinitDone`)),o()}catch(e){k(S(`settings.seeds.reinitFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{s.disabled=!1,s.textContent=S(`settings.seeds.runAll`)}})()});let c=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-danger`,S(`settings.seeds.removeAll`));c.type=`button`,c.title=S(`settings.seeds.removeAllTitle`),c.addEventListener(`click`,()=>{window.confirm(S(`settings.seeds.removeAllConfirm`))&&(c.disabled=!0,c.textContent=S(`settings.seeds.removing`),(async()=>{try{let e=await fetch(bx(ye),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({}),signal:AbortSignal.timeout(6e4)}),t=await e.json().catch(()=>null);!e.ok||t?.ok!==!0?k(S(`settings.seeds.removeFailed`,{message:t?.error??`HTTP ${e.status}`})):k(S(`settings.seeds.allRemoved`)),o()}catch(e){k(S(`settings.seeds.removeFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{c.disabled=!1,c.textContent=S(`settings.seeds.removeAll`)}})())}),n.append(r,a,i,s,c),e.append(n),o()}function Nx(e){let t=!1;e.classList.add(`dsh-tw-settings`);let n=$(`div`,`dsh-tw-settings-error`);n.hidden=!0;let r=$(`div`,`dsh-tw-settings-row dsh-tw-settings-status`),i=$(`div`,`dsh-tw-settings-body`);e.append(n,r,i);let a=[],o={},s={},c,l=!1,u,d,f=async()=>{l||i.replaceChildren($(`div`,`dsh-tw-settings-muted`,S(`settings.loading`)));try{let e=px(Ce).then(e=>{u=typeof e?.mode==`string`?e.mode:void 0,d=e}).catch(()=>{u=void 0}),a=await px(bx(fe));if(await e,t)return;l=!0,n.hidden=!0,n.replaceChildren(),Px(r,a,f),Bx(i,a,f,()=>t,o,s,u,()=>{c!==mx&&(delete s.plugins,delete s.themes,delete s.languages,delete s.themeActive,c=mx)},Ix(d,mx))}catch(e){if(t)return;l||i.replaceChildren($(`div`,`dsh-tw-settings-muted`,S(`settings.notLoaded`)));let r=$(`button`,`dsh-tw-settings-btn`,S(`settings.retry`));r.type=`button`,r.addEventListener(`click`,()=>{f()}),n.replaceChildren($(`span`,void 0,`${S(`settings.loadFailed`,{message:e instanceof Error?e.message:String(e)})} `),r),n.hidden=!1}};return f(),a.push(()=>{t=!0,e.replaceChildren(),e.classList.remove(`dsh-tw-settings`)}),()=>{for(let e of a.splice(0))e()}}function Px(e,t,n){e.replaceChildren();let r=t.server??{},i=r.status??`unknown`,a=$(`span`,`dsh-tw-settings-chip`,i);a.dataset.state=i;let o=$(`span`,`dsh-tw-settings-muted`,[r.url===void 0?``:`TW ${r.url}`,t.git?.branch===void 0?``:`git ${t.git.branch}`,t.git?.lastCommit===void 0?``:t.git.lastCommit,t.git?.conflict===void 0?t.git?.dirty===!0?S(`settings.gitDirty`):``:S(`settings.gitConflict`,{count:t.git.conflict.files.length})].filter(Boolean).join(` · `)),s=$(`button`,`dsh-tw-settings-btn`,S(`settings.sync`));s.type=`button`,s.title=S(`settings.syncTitle`),s.addEventListener(`click`,()=>{s.disabled=!0,s.textContent=S(`settings.syncing`),(async()=>{try{let e=await fetch(bx(le),{method:`POST`,signal:AbortSignal.timeout(12e4)}),t=Oe(await e.json().catch(()=>null),e.status);k(t.ok?S(`settings.syncDone`,{message:t.message}):S(`settings.syncFailed`,{message:t.message}))}catch(e){k(S(`settings.syncFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{s.disabled=!1,s.textContent=S(`settings.sync`),n()}})()});let c=$(`button`,`dsh-tw-settings-btn`,S(`settings.restart`));c.type=`button`,c.addEventListener(`click`,()=>{c.disabled=!0,c.textContent=S(`settings.restarting`),(async()=>{try{await px(bx(ge),{method:`POST`,signal:AbortSignal.timeout(12e4)}),k(S(`settings.restarted`)),ut(),je()}catch(e){k(S(`settings.restartFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{c.disabled=!1,c.textContent=S(`settings.restart`),n()}})()}),e.append(a,o,s,c)}const Fx=[{id:`overview`,label:()=>S(`settings.tabOverview`)},{id:`library`,label:()=>S(`settings.tabLibrary`)},{id:`global`,label:()=>S(`settings.tabGlobal`)}];function Ix(e,t){let n=e?.wikis??[],r=t??e?.defaultId,i=r===void 0?void 0:n.find(e=>e.id===r)?.label;return i!==void 0&&i.length>0?i:t}function Lx(e,t,n,r){if(t!==`multi`)return;let i=$(`div`,`dsh-tw-settings-scopebar`),a=r===void 0||r.length===0?S(`settings.scopeFollowDefault`):S(mx===void 0?`settings.scopeEditingDefault`:`settings.scopeEditing`,{name:r});if(i.append($(`span`,`dsh-tw-settings-scopebar-label`,a)),i.append($(`span`,`dsh-tw-settings-muted`,S(mx===void 0?`settings.scopeHintPick`:`settings.scopeHintEditing`))),mx!==void 0){let e=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn dsh-tw-settings-scopebar-exit`,S(`settings.exitConfig`));e.type=`button`,e.title=S(`settings.scopeExitTitle`),e.addEventListener(`click`,()=>{hx(void 0),n()}),i.append(e)}e.append(i)}function Rx(e,t,n){if(t!==`multi`)return;let r=$(`div`,`dsh-tw-settings-tabs`);r.setAttribute(`role`,`tablist`);for(let e of Fx){let t=gx===e.id,i=$(`button`,`dsh-tw-settings-tab${t?` dsh-tw-settings-tab-active`:``}`,e.label());i.type=`button`,i.setAttribute(`role`,`tab`),i.setAttribute(`aria-selected`,t?`true`:`false`),i.addEventListener(`click`,()=>{gx!==e.id&&(_x(e.id),n())}),r.append(i)}e.append(r)}function zx(e){e.append($(`div`,`dsh-tw-settings-muted`,S(`settings.pickLibraryHint`)))}function Bx(e,t,n,r,i,a,o,s,c){e.replaceChildren(),s?.(),typeof t.configError==`string`&&t.configError.length>0&&e.append(fx(S(`settings.configInactive`,{message:t.configError})));let l=JSON.stringify(t.config??{}),u=i.wiki!==mx,d=i.host!==void 0&&(u||i.signature!==l),f=i.isDirty?.()===!0;if(d&&f&&!u&&e.append(fx(S(`settings.configStale`))),i.host===void 0||u||d&&!f){let e=$(`div`,`dsh-tw-settings-confighost`);Ax(e,t.config??{},n,i,o,r),i.host=e,i.signature=l,i.wiki=mx}Rx(e,o,n),Lx(e,o,n,c);let p=o===`multi`,m=!p||gx===`overview`,h=!p||gx===`library`,g=!p||gx===`global`,_=!p||mx!==void 0;g&&e.append(i.host),m&&(Dx(e,r,n),Ox(e,r,n)),h&&_?(jx(e,t.info,t.catalog,t.runtimePlugins,n,a),Mx(e,r)):h&&zx(e)}function Vx(){let e=c.useRef(null);return c.useEffect(()=>{let t=e.current;return t===null?void 0:Nx(t)},[]),c.createElement(`div`,{ref:e})}function Hx(e){return typeof e==`object`&&!!e&&e.kind===`tool-result`}function Ux(e){if(typeof e!=`object`||!e)return null;let t=e;if(typeof t.call==`object`&&t.call!==null){let e=t.call;if(typeof e.name==`string`&&typeof e.argsRaw==`string`)return e}let n=e;return typeof n.name==`string`&&typeof n.argsRaw==`string`?{name:n.name,argsRaw:n.argsRaw}:null}function Wx(e){try{let t=JSON.parse(e);return typeof t==`object`&&t&&!Array.isArray(t)?t:{}}catch{return{}}}function Gx(e){return Array.isArray(e)?e.filter(e=>typeof e?.text==`string`).map(e=>e.text).join(`
|
|
961
961
|
`):``}function Kx(e){return typeof e==`string`?e:``}const qx={tiddlywiki_get:()=>S(`card.toolGet`),tiddlywiki_search:()=>S(`card.toolSearch`),tiddlywiki_recent:()=>S(`card.toolRecent`),tiddlywiki_list_tags:()=>S(`card.toolListTags`),tiddlywiki_put:()=>S(`card.toolPut`),tiddlywiki_batch_put:()=>S(`card.toolBatchPut`),tiddlywiki_append:()=>S(`card.toolAppend`),tiddlywiki_replace:()=>S(`card.toolReplace`),tiddlywiki_rename:()=>S(`card.toolRename`),tiddlywiki_delete:()=>S(`card.toolDelete`),tiddlywiki_trash:()=>S(`card.toolTrash`),tiddlywiki_backlinks:()=>S(`card.toolBacklinks`),tiddlywiki_attach:()=>S(`card.toolAttach`),tiddlywiki_export:()=>S(`card.toolExport`),tiddlywiki_lint:()=>S(`card.toolLint`),tiddlywiki_git_sync:()=>S(`card.toolGitSync`),tiddlywiki_git_resolve:()=>S(`card.toolGitResolve`)};function Jx(e,t){return n=>{n.defaultPrevented||n.button!==0||n.metaKey||n.ctrlKey||n.shiftKey||n.altKey||(n.preventDefault(),n.stopPropagation(),Qt(e,t===void 0?null:t))}}function Yx(e){let t=qx[e.toolName]?.()??e.toolName,n=Zx(),r=c.createElement(`div`,{className:`dsh-tw-toolcard-head`},c.createElement(`span`,{className:`dsh-tw-toolcard-badge`},t),n===void 0?null:c.createElement(`span`,{className:`dsh-tw-toolcard-wiki`,title:S(`card.scopeBadgeTitle`,{wiki:n})},n),e.title!==void 0&&e.title.length>0?c.createElement(`span`,{className:`dsh-tw-toolcard-title`,title:e.title},e.title):null,e.onOpen===void 0?null:c.createElement(`button`,{type:`button`,className:`dsh-tw-toolcard-open`,onClick:e.onOpen},S(`card.openInTw`))),i=e.subtitle!==void 0||e.tags!==void 0&&e.tags.length>0?c.createElement(`div`,{className:`dsh-tw-toolcard-meta`},e.subtitle===void 0?null:c.createElement(`span`,{className:`dsh-tw-toolcard-sub`},e.subtitle),e.tags!==void 0&&e.tags.length>0?c.createElement(`span`,{className:`dsh-tw-toolcard-tags`},...e.tags.map((e,t)=>c.createElement(`span`,{className:`dsh-tw-toolcard-tag`,key:`${t}-${e}`},e))):null):null;return c.createElement(`div`,{className:`dsh-tw-toolcard`,"data-dsh-tw-wiki":n},r,i,c.createElement(`div`,{className:`dsh-tw-toolcard-body`},e.children),e.foot!==void 0&&e.foot!==null?c.createElement(`div`,{className:`dsh-tw-toolcard-foot`},e.foot):null)}const Xx=c.createContext(void 0);function Zx(){return c.useContext(Xx)}function Qx(e){let[t,n]=c.useState(void 0);return c.useEffect(()=>{if(n(void 0),typeof e!=`string`||e.length===0)return;let t=!0;return nx(e).then(e=>{t&&n(e)}),()=>{t=!1}},[e]),t}async function $x(e){try{let t=await fetch(e,{signal:AbortSignal.timeout(1e4)});if(t.status===404){let e=await t.json().catch(()=>null);return typeof e==`object`&&e?e:{notFound:!0}}if(!t.ok)return null;let n=await t.json();return typeof n==`object`&&n?n:null}catch{return null}}async function eS(e,t){return sx(e,1e4,t)}function tS(e,t){let[n,r]=c.useState({loading:!0,data:null});return c.useEffect(()=>{let t=!0;return r({loading:!0,data:null}),Promise.resolve(e()).then(e=>{t&&r({loading:!1,data:e})},()=>{t&&r({loading:!1,data:null})}),()=>{t=!1}},t),n}const nS=new Map;function rS(e,t){return`${e??``}\u0000${t}`}function iS(e,t){let n=rS(e,t),r=nS.get(n);if(r!==void 0){if(Date.now()-r.at>3e5){nS.delete(n);return}return nS.delete(n),nS.set(n,r),r}}function aS(e,t,n){let r=rS(e,t);for(nS.delete(r),nS.set(r,{at:Date.now(),...n});nS.size>50;){let e=nS.keys().next().value;if(e===void 0)break;nS.delete(e)}}function oS(e,t){e.length!==0&&(nS.delete(rS(t,e)),nS.delete(rS(void 0,e)))}function sS(e,t){let n=e.join(`\0`);c.useEffect(()=>{for(let e of n.split(`\0`))oS(e,t)},[n,t])}function cS(e){let{title:t,fresh:n}=e,r=Zx(),{loading:i,data:a}=tS(async()=>{n===!0&&oS(t,r);let e=iS(r,t);if(e!==void 0)return{get:e.get,html:e.html};let[i,a]=await Promise.all([$x(De(`${te}?title=${encodeURIComponent(t)}`,r)),eS(t,r)]);return typeof a==`string`&&a.length>0&&aS(r,t,{get:i,html:a}),{get:i,html:a}},[t,n,r]),o=a?.get??null,s=a?.html??null,l;l=i?c.createElement(`div`,{className:`dsh-tw-toolcard-loading`},S(`card.rendering`)):o!==null&&o.notFound===!0?c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},S(`card.tiddlerMissing`,{title:t})):typeof s==`string`&&s.length>0?c.createElement(`div`,{className:`dsh-tw-toolcard-native`,dangerouslySetInnerHTML:{__html:s}}):o!==null&&typeof o.text==`string`&&o.text.length>0?c.createElement(`pre`,{className:`dsh-tw-toolcard-fallback`},o.text):c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},S(`card.serviceUnavailable`));let u=Array.isArray(o?.tags)?o.tags.filter(e=>typeof e==`string`):[],d=typeof o?.modified==`string`?o.modified:void 0;return c.createElement(Yx,{toolName:e.toolName,title:t,subtitle:e.subtitle,tags:u,onOpen:Jx(t,r),foot:d===void 0?void 0:S(`card.modifiedAt`,{modified:d})},l)}function lS(e){let t=Zx(),n=c.createElement(`span`,{className:`dsh-tw-toolcard-row-head`},c.createElement(`span`,{className:`dsh-tw-toolcard-row-title`},e.title),e.tags!==void 0&&e.tags.length>0?c.createElement(`span`,{className:`dsh-tw-toolcard-row-tags`},e.tags.slice(0,4).join(` · `)):null,typeof e.modified==`string`&&e.modified.length>0?c.createElement(`span`,{className:`dsh-tw-toolcard-row-meta`},e.modified):null),r=typeof e.snippet==`string`&&e.snippet.trim().length>0?e.snippet:null;return c.createElement(`a`,{className:`dsh-tw-toolcard-row`,href:`${Ee(t===void 0?void 0:`multi`,t,D).relative}#${encodeURIComponent(e.title)}`,onClick:Jx(e.title,t),title:r===null?e.title:`${e.title}\n${r}`},n,r===null?null:c.createElement(`span`,{className:`dsh-tw-toolcard-row-snippet`},r))}function uS(e){let t=e.rows.slice(0,60),n;return n=t.length===0?c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},e.fallbackText):c.createElement(`div`,{className:`dsh-tw-toolcard-list`},...t.map((e,t)=>c.createElement(lS,{key:`${e.title}-${t}`,...e}))),c.createElement(Yx,{toolName:e.toolName,title:e.title,subtitle:e.subtitle},n)}function dS(e){let t=/工作区\s+(ws\/[^\s((]+)/.exec(e);if(t===null||t[1]===void 0)return null;let n=t[1].slice(3);return n.length>0?n:null}function fS(e){let t=Kx(e.args.query),n=new URLSearchParams;if(t.length>0&&n.set(`query`,t),Array.isArray(e.args.tags))for(let t of e.args.tags)typeof t==`string`&&t.length>0&&n.append(`tags`,t);typeof e.args.tag==`string`&&e.args.tag.length>0&&n.set(`tag`,e.args.tag),typeof e.args.since==`string`&&e.args.since.length>0&&n.set(`since`,e.args.since),typeof e.args.type==`string`&&e.args.type.length>0&&n.set(`type`,e.args.type),typeof e.args.field==`string`&&e.args.field.length>0&&n.set(`field`,e.args.field),typeof e.args.value==`string`&&e.args.value.length>0&&n.set(`value`,e.args.value),typeof e.args.limit==`number`&&n.set(`limit`,String(e.args.limit));let r=dS(e.text);r!==null&&n.set(`workspace`,r);let i=n.toString(),a=Zx(),o=tS(()=>$x(De(`${se}?${i}`,a)),[i,a]).data,s=(Array.isArray(o?.items)?o.items:[]).map(e=>({title:Kx(e.title),tags:Array.isArray(e.tags)?e.tags.filter(e=>typeof e==`string`):[],modified:typeof e.modified==`string`?e.modified:null,snippet:typeof e.snippet==`string`?e.snippet:``})),l=typeof o?.total==`number`?o.total:void 0,u=typeof o?.workspace==`string`&&o.workspace.length>0?o.workspace:null,d=``;u!==null&&o?.scope===`workspace`?d=S(`card.scopeNarrowed`,{prefix:`ws/`,id:u}):u!==null&&o?.fellBack===!0&&(d=S(`card.scopeWidened`,{prefix:`ws/`,id:u}));let f=`${S(`card.queryLabel`,{query:t||S(`card.allQuery`)})}${l===void 0?``:S(`card.totalHits`,{total:l})}${d}`;return c.createElement(uS,{toolName:e.toolName,title:t.length>0?t:S(`card.searchTitle`),subtitle:f,rows:s,fallbackText:S(`card.noMatches`)})}function pS(e){let t=new URLSearchParams;typeof e.args.limit==`number`&&t.set(`limit`,String(e.args.limit)),typeof e.args.since==`string`&&e.args.since.length>0&&t.set(`since`,e.args.since);let n=t.toString(),r=Zx(),i=tS(()=>$x(De(`${oe}?${n}`,r)),[n,r]).data,a=(Array.isArray(i?.items)?i.items:[]).map(e=>({title:Kx(e.title),tags:Array.isArray(e.tags)?e.tags.filter(e=>typeof e==`string`):[],modified:typeof e.modified==`string`?e.modified:null,snippet:typeof e.snippet==`string`?e.snippet:``}));return c.createElement(uS,{toolName:e.toolName,title:S(`card.recentTitle`),subtitle:a.length>0?S(`card.recentCount`,{count:a.length}):``,rows:a,fallbackText:S(`card.noNotes`)})}function mS(e){let t=(Array.isArray(e.args.items)?e.args.items:[]).map(e=>typeof e==`object`&&e&&typeof e.title==`string`?Kx(e.title):null).filter(e=>e!==null&&e.length>0).map(e=>({title:e}));return sS(t.map(e=>e.title),Zx()),c.createElement(uS,{toolName:e.toolName,title:S(`card.toolBatchPut`),subtitle:t.length>0?S(`card.batchCount`,{count:t.length}):S(`card.batchNoItems`),rows:t,fallbackText:S(`card.batchEmpty`)})}function hS(e){let t=Zx(),n=e.title.length>0?c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},S(`card.attachSavedRendered`)):c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},S(`card.attachSaved`));return c.createElement(Yx,{toolName:e.toolName,title:e.title.length>0?e.title:void 0,...e.title.length>0?{onOpen:Jx(e.title,t)}:{}},n)}function gS(e){let t=Zx(),n=tS(()=>$x(De(`${ae}?limit=60&sort=count`,t)),[t]).data,r=(Array.isArray(n?.items)?n.items:[]).map(e=>({tag:Kx(e.tag),count:typeof e.count==`number`?e.count:0})),i=r.slice(0,60),a=typeof n?.total==`number`?n.total:r.length,o;return o=r.length===0?c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},S(`card.noTags`)):c.createElement(`div`,{className:`dsh-tw-toolcard-tags-wrap`},...i.map(e=>c.createElement(`span`,{className:`dsh-tw-toolcard-tag`,key:e.tag},`${e.tag} · ${e.count}`)),...a>i.length?[c.createElement(`span`,{className:`dsh-tw-toolcard-tag-more`,key:`__more`},S(`card.tagsMore`,{count:a-i.length}))]:[]),c.createElement(Yx,{toolName:e.toolName,title:S(`card.tagsTitle`),subtitle:S(`card.tagsTotal`,{total:a})},o)}function _S(e){let t=e.text.trim().length>0?c.createElement(`pre`,{className:`dsh-tw-toolcard-fallback`},e.text):c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},S(`card.noResult`));return c.createElement(Yx,{toolName:e.toolName},t)}function vS(e){sS([e.title],Zx());let t=e.title.length>0?c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},S(`card.deletedTiddler`,{title:e.title})):c.createElement(`pre`,{className:`dsh-tw-toolcard-fallback`},e.text||S(`card.deleted`));return c.createElement(Yx,{toolName:e.toolName,title:e.title.length>0?e.title:void 0},t)}function yS(e){if(e===D)return;if(!e.startsWith(D))return null;let t=e.slice(D.length);if(!t.endsWith(`/`))return null;let n=t.slice(0,-1);if(n.length===0||n.includes(`/`))return null;try{return decodeURIComponent(n)}catch{return n}}function bS(){let e=e=>{if(e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`a`);if(n===null)return;let r=n.getAttribute(`href`)??``,i=null,a;try{let e=new URL(r,window.location.origin);if(e.origin===window.location.origin&&e.hash.length>1){let t=yS(e.pathname);t!==null&&(i=e.hash.substring(1),a=t)}}catch{}if(i!==null){e.preventDefault(),e.stopPropagation();try{i=decodeURIComponent(i)}catch{}if(a===void 0){let e=n.closest(`[data-dsh-tw-wiki]`)?.getAttribute(`data-dsh-tw-wiki`);typeof e==`string`&&e.length>0&&(a=e)}Qt(i,a)}};return document.addEventListener(`click`,e,!0),()=>document.removeEventListener(`click`,e,!0)}function xS(e,t){switch(e){case`tiddlywiki_get`:case`tiddlywiki_put`:case`tiddlywiki_append`:case`tiddlywiki_replace`:case`tiddlywiki_delete`:case`tiddlywiki_attach`:case`tiddlywiki_backlinks`:return Kx(t.title);case`tiddlywiki_rename`:return Kx(t.newTitle);case`tiddlywiki_search`:return Kx(t.query);default:return``}}function SS(e){let t=Qx(e.sessionId);return c.createElement(Xx.Provider,{value:t},c.createElement(CS,e))}function CS(e){let t=e.block,n=e.toolName,r=Hx(t),i=Ux(t),a=n!==void 0&&n.length>0?n:i?.name??``,o=Wx(i?.argsRaw??``),s=r?Gx(t.content):``;if(i===null)return c.createElement(Yx,{toolName:a},c.createElement(`pre`,{className:`dsh-tw-toolcard-fallback`},s||S(`card.noCallInfo`)));if(!r)return c.createElement(Yx,{toolName:a,title:xS(a,o)},c.createElement(`div`,{className:`dsh-tw-toolcard-pending`},S(`card.pending`)));if(t.isError===!0)return c.createElement(Yx,{toolName:a,title:xS(a,o)},c.createElement(`div`,{className:`dsh-tw-toolcard-error`},s||S(`card.callFailed`)));switch(a){case`tiddlywiki_get`:return c.createElement(cS,{toolName:a,title:Kx(o.title),subtitle:S(`card.subRead`)});case`tiddlywiki_put`:return c.createElement(cS,{toolName:a,title:Kx(o.title),subtitle:S(`card.subWritten`),fresh:!0});case`tiddlywiki_append`:return c.createElement(cS,{toolName:a,title:Kx(o.title),subtitle:S(`card.subAppended`),fresh:!0});case`tiddlywiki_replace`:return c.createElement(cS,{toolName:a,title:Kx(o.title),subtitle:S(`card.subReplaced`),fresh:!0});case`tiddlywiki_rename`:return c.createElement(cS,{toolName:a,title:Kx(o.newTitle),subtitle:S(`card.subRenamed`,{old:Kx(o.oldTitle)}),fresh:!0});case`tiddlywiki_delete`:return c.createElement(vS,{toolName:a,title:Kx(o.title),text:s});case`tiddlywiki_attach`:return c.createElement(hS,{toolName:a,title:Kx(o.title)});case`tiddlywiki_batch_put`:return c.createElement(mS,{toolName:a,args:o});case`tiddlywiki_search`:return c.createElement(fS,{toolName:a,args:o,text:s});case`tiddlywiki_recent`:return c.createElement(pS,{toolName:a,args:o});case`tiddlywiki_list_tags`:return c.createElement(gS,{toolName:a});case`tiddlywiki_git_sync`:case`tiddlywiki_git_resolve`:return c.createElement(_S,{toolName:a,text:s});default:return c.createElement(Yx,{toolName:a,title:xS(a,o)},c.createElement(`pre`,{className:`dsh-tw-toolcard-fallback`},s||S(`card.done`)))}}const wS=[`tiddlywiki_get`,`tiddlywiki_search`,`tiddlywiki_recent`,`tiddlywiki_list_tags`,`tiddlywiki_put`,`tiddlywiki_batch_put`,`tiddlywiki_append`,`tiddlywiki_replace`,`tiddlywiki_rename`,`tiddlywiki_delete`,`tiddlywiki_trash`,`tiddlywiki_backlinks`,`tiddlywiki_attach`,`tiddlywiki_lint`,`tiddlywiki_export`,`tiddlywiki_git_sync`,`tiddlywiki_git_resolve`];function TS(e){let t=[];for(let n of wS)try{let r=e.inject(`tool.call.toolview`,()=>e.register({name:`tool.call.toolview`,id:`dsh-tiddlywiki-toolview-${n}`,key:n,order:20,label:`TiddlyWiki: ${n}`},SS));r!==void 0&&t.push(r)}catch(e){console.error(`[dsh-tiddlywiki] register toolview ${n} failed:`,e)}return t}const ES=`dsh-tiddlywiki`,DS=`dsh-tiddlywiki/rightbar`;function OS(e){let{useTabInfo:t}=e,n=t().tab,r=c.useRef(null),i=c.useRef(null);c.useEffect(()=>{let e=r.current;if(e===null)return;let t=Wt(e,n.signal);return i.current=t,t.setVisible(n.visible),()=>{t.dispose(),i.current=null}},[n.id,n.signal]),c.useEffect(()=>{i.current?.setVisible(n.visible)},[n.visible]);let a=n.visible,o=n.actions.close;return c.useEffect(()=>{if(!a)return;document.dispatchEvent(new CustomEvent(ct,{detail:DS}));let e=e=>{e.detail!==DS&&o()};return document.addEventListener(ct,e),()=>document.removeEventListener(ct,e)},[a,o]),c.createElement(`div`,{ref:r,className:`dsh-tw-rightbar-tab`})}function kS(){return{id:ES,kind:`dsh-tiddlywiki`,title:()=>pt(),keepMounted:!0,guide:[{id:`dsh-tiddlywiki/guide`,order:10,title:()=>S(`frame.rightbarTitle`),description:()=>S(`frame.rightbarDescription`),icon:ht}]}}function AS(e,t){let n=[];try{n.push(e.register(kS()));let r=t.inject(`sidebar.right.pane.tab`,()=>t.register({name:`sidebar.right.pane.tab`,key:ES},OS));r!==void 0&&n.push(r)}catch(e){for(let e of n.splice(0))e();console.error(`[dsh-tiddlywiki] rightbar tab mount failed:`,e);return}return Ht(),()=>{for(let e of n.splice(0))e()}}const jS=`dsh-tiddlywiki-tid`,MS=[`tid`,`tiddler`],NS=`sidebar.right.tab.document`,PS=[`created`,`modified`,`creator`,`modifier`,`type`];function FS(e){let t=e.trim();if(!/^\d{17}$/.test(t))return t;let[n,r,i,a,o]=[t.slice(0,4),t.slice(4,6),t.slice(6,8),t.slice(8,10),t.slice(10,12)];return`${n}-${r}-${i} ${a}:${o}`}function IS(e){let t=[],n=[],r=[],i,a;for(let[o,s]of e.fields){if(o===`tags`){r=s.split(/[\s,]+/).filter(e=>e.length>0);continue}if(o===`created`&&(i=s),o===`modified`&&(a=s),PS.includes(o)){t.push([o,o===`created`||o===`modified`?FS(s):s]);continue}n.push([o,o===`created`||o===`modified`?FS(s):s])}let o=r.filter(e=>!e.startsWith(`ws/`)&&e!==`agent-written`),s=r.filter(e=>!o.includes(e));s.length>0&&n.push([`tags(hidden)`,s.join(` `)]);let c=a??i,l=c===void 0?void 0:FS(c);return{...e.title!==void 0&&e.title.length>0?{title:e.title}:{},tags:o,...l===void 0?{}:{time:l},known:t.filter(([e])=>e!==`created`&&e!==`modified`),other:n}}function LS(e){let t=String(e??``).replace(/^\uFEFF/,``).replace(/\r\n/g,`
|
|
962
962
|
`),n=t.indexOf(`
|
|
963
963
|
|