dsh-tiddlywiki 0.30.46 → 0.30.47
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/docs/CHANGELOG.md +1 -0
- package/lib/client.js +3 -3
- package/package.json +1 -1
- package/src/client/note-widget-foot.ts +73 -0
- package/src/client/note-widget.ts +12 -27
package/docs/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
> 最近几个主要版本的一句话记录(完整变更见 [Releases](https://github.com/bbqisbbq/dsh-tiddlywiki/releases) / git log)。
|
|
6
6
|
|
|
7
|
+
- **v0.30.47**(2026-09-30):`src/client/note-widget.ts` **588 → 573** —— 新模块 `note-widget-foot.ts`(73):**底栏那一组**(左组:上传按钮 / 「🕘 最近」/ `Ctrl+Enter` 提示;右组:「✏️ 在 TW 中编辑」/「保存」)。这一片是**零卡片状态**的纯布局(与 v0.30.43 的 placement 片同类):依赖面只有「一个已经建好的上传按钮」+「`recent.toggle` 的函数引用」,把 `{ foot, footLeft, footRight, saveBtn, editBtn }` 交回卡片 —— 两个按钮的 `click` 处理器**仍绑在卡片里**(紧挨着实现它们的 `note-widget-save.ts`),因为「谁实现动作」与「谁画按钮」是两件事。`footLeft`/`footRight` 两个 class 一并交回,因为 `.dsh-tw-note-foot-right` 的 flex 规则(右贴边 + 装不下时整组换行,v0.22.6 的按钮压成两行事故)是**契约**,卡片还要往里 append。
|
|
7
8
|
- **v0.30.46**(2026-09-30):`src/client/note-widget.ts` **615 → 588** —— 新模块 `note-widget-upload-ui.ts`(82):上传的**接线**那一组(「上传」按钮 + 隐藏的 file input + 拖放到编辑器上,连同它自有的 `dragDepth`)。分层刻意分成两个文件:`note-widget-upload.ts` 是**动作**(`uploadInto`:校验大小 → POST → 在光标处插入 Markdown 行 → toast),`note-widget-upload-ui.ts` 是**接线**(File 从哪来、何时给编辑器挂 `.dsh-tw-note-drop` 高亮)。分界线:整组只问卡片要两样东西 —— 编辑器(拖放目标 + 插入点)与 `wikiQuery`(附件必须落在**这张卡片的目标库**里),卡片侧不再持有任何上传状态(`footLeft.append(upload.button, …)` 一行替代原 36 行)。
|
|
8
9
|
- **v0.30.45**(2026-09-29):**`note-widget.ts` 拆分第四轮 —— 抽出「保存 / 在 TW 中编辑」整组(677 → 615 行),并在同一轮**抓出一条被注释满足的假绿守门**。① 新模块 `src/client/note-widget-save.ts`(187 行)拿走 `saveDone` · `saving`(在途互斥)· `doSave` · `doEdit` —— 这四样是 `build()` 里唯一真的"说话"的一段(发请求、读回执、弹 toast、改按钮状态与文案)。**分界线(可复用)**:先把这段代码**读写到的闭包状态**列出来,再逐样决定怎么传 —— 它自带的 `saving` **跟着函数走**(同 v0.30.44);卡片**留在原地**的四样各有理由:`close()` 是卡片自己的可见性收尾、`postEditAndOpen()` **两条路径共用**(`doEdit` 与 `openNative`)所以必须住在两者都看得见的地方、`loadedToken` 的**主人是「🕘 最近」picker**(它写、这里只读)⇒ 按 getter/setter 传、`scope` 这里只读**一个**方法(`stoppedTarget()`)⇒ 传函数而不是整个模块。② `const doSave = async (): Promise<void> => {` 这一行**逐字保留**:`verify-wiki-focus.mjs` 用 `indexOf(那句签名)` 定位函数体、再断言其后 900 字符内出现 `stoppedTarget()`(=「卡片保存同样要拒绝未运行的目标库」,v0.29.0);它是**族读**(`readFamily('src/client/note-widget')`)⇒ 搬到新文件仍命中。③ ⚠️ **本版最重要的一条:那条判据在搬迁后变成了假绿,是反向验证抓出来的。** 第一次跑两种注入(**删掉整个 `stoppedTarget()` 拒绝分支** / **把 `doSave` 改名**)——`verify-wiki-focus` **两次都照样绿**。根因:它是拿**未剥注释**的族文本做 `indexOf`,而新模块的**模块头注释**逐字引用了那句签名、还在同一段里提到 `stoppedTarget()` ⇒ `indexOf` 先命中**注释**,900 字符窗口里出现的 `stoppedTarget()` 也来自注释,**断言被自己的文档满足**(这条注释本身是为了解释"为什么这一行不许改名",属于"越写越安全"的反面)。修法:`verify-wiki-focus.mjs` 新增 `stripComments()`(**先剥行注释、再剥块注释** —— 顺序承重,v0.30.14 在 `verify-client-i18n` 里踩过反序吞代码的坑),那条测试的五条断言全部改跑在剥注释的源码上。**加固后重跑同样的两种注入 ⇒ 两次都稳定 FAIL**(删分支 ⇒「卡片保存同样要拒绝未运行的目标库」;改名 ⇒「找不到 doSave」),还原后文件哈希与注入前**逐字节一致** ⇒ 绿。⇒ 结论:`grep`/`indexOf` 型判据在**拆分**这件事上尤其脆 —— 模块头注释几乎必然会引用被搬走的那句签名,所以凡"定位函数体 + 窗口内找符号"的断言,**必须剥注释**。④ **其余守门一条都不用改**(逐个核实,不是猜):`verify-frame-guards` 按模块族读并在测试里剥注释行,`dispose()` / `open()` / `openNative()` / `installCardDrag()` / `positionCard()` 都留在卡片里;`verify-wiki-focus:770` 那条**按精确路径**读卡片、钉 `const mark = …note.defaultMark…` 的断言同样不受影响(被断言的那行没离开卡片)。⑤ 一个**诚实的差异**写进模块头(不改变可观察行为):旧代码直接闭包引用 `editor`/`titleInput`/`tagEditor`/`saveBtn`/`editBtn`,新代码经 `deps.getUi()`,于是两个函数各多一条 `ui === undefined` 早退(实践中不可达 —— 两者都由 `build()` 建出来的按钮与编辑器键位触发,写出来只为类型收窄)。**验证**:`typecheck` / `build`(client bundle 770,645 字节,仍 minify)/ 客户端五守门(`verify-frame-guards` / `verify-wiki-focus` / `verify-tw-origin` / `verify-client-i18n` / `verify-frame-surface`)/ `verify-editor-popup` / `verify:unit`(退出码 0)/ 全量 `npm run verify` 四档退出码 0(E2E / WIKI SWITCH / WIKI FARM BOOT / LARGE WIKI CHECKS 全绿)/ `verify-line-endings`(260 个文本文件全 LF)/ `verify-version-consistency` 全绿。
|
|
9
10
|
- **v0.30.44**(2026-09-29):**`note-widget.ts` 拆分第三轮 —— 抽出「草稿生命周期」整族,连同它持有的两个状态一起搬走(750 → 677 行)**。① 新模块 `src/client/note-widget-autosave.ts` 拿走 `resetTitle` / `flushDraft` / `scheduleDraft` / `hideDraftBanner` / `resetForNewNote`,**以及它们闭包里的 `draftTimer` 与 `persistedSignature`** —— 这一轮与前两轮都不同:**状态跟着函数整片搬走**,卡片只经模块返回的句柄读写(`resetTitle` / `flush` / `schedule` / `hideBanner` / `resetForNewNote` / `clearTimer` / `setPersistedSignature` / `markPersisted`)。② **为什么这次状态必须走**(而不是像 v0.30.41 的 scope 片那样只传访问器):`verify-frame-guards.mjs` 把两条不变量**按名字**钉在 `resetForNewNote` 的函数体里(`/clearTimeout\(draftTimer\)/` + `/persistedSignature\s*=/`),它们编码的正是 v0.22.8 的「幽灵草稿」事故 —— 「保存 / 丢弃后重置编辑器」必须①取消防抖定时器、②把这段空内容记成"已定型",否则 500ms 后那次防抖会把 `{text:'', title:'<时间戳>'}` 写成草稿、下次打开对着空编辑器报「已恢复未保存草稿」。把变量与函数整片搬走 ⇒ 两处字面量**逐字保留**、**一个守门都没有改**;反过来「改名成 `draft.timer` 再放宽断言」会把判据从「钉不变量」降级成「钉新名字」,那才是真正的损失。③ 卡片侧保留 `flushDraft` / `scheduleDraft` / `hideDraftBanner` / `resetTitle` 四个**局部别名**(`const { flush: flushDraft, … } = autosave`):这些名字在 `build()` / `dispose()` / `open()` 里有十几处调用,改名只放大 diff、不增加信息(v0.30.38 那条「优先抽取、少改名」)。④ 顺带删掉一处**只写不读的死状态** `autoTitle`:自 v0.29.0 起 `flushDraft` 的判据已从「正文为空 **且** 标题是自动生成的那个」升级成「正文为空」(守门还专门断言它不得再引用 `autoTitle`),于是这个变量只剩赋值 —— 把一个只写不读的变量搬进新文件等于把债务搬进新家。⑤ 两个**诚实的差异**写进了模块头,都不改变可观察行为:`getUi()` 可能返回 `undefined` ⇒ 模块里多了早退(旧代码直接闭包引用 `editor`/`titleInput`/`tagEditor`,那时卡片必然已 `build()`,真为 undefined 会抛 TypeError);`opened` / `disposed` **刻意不进**新模块,按谓词传进去(它们属于卡片的可见性生命周期,与 `note-widget-recent.ts` 同款处理)。⑥ **反向验证**:删掉模块里 `resetForNewNote` 的 `clearTimeout(draftTimer)` ⇒ `verify-frame-guards` 稳定 FAIL 在「保存/丢弃后重置必须取消防抖并记录已定型签名」;还原后文件哈希与注入前**逐字节一致** ⇒ 绿。**验证**:`typecheck` / `build`(client bundle 770,128 字节,仍 minify)/ 客户端五守门(`verify-frame-guards` / `verify-wiki-focus` / `verify-tw-origin` / `verify-client-i18n` / `verify-frame-surface`)/ `verify:unit`(42 套,退出码 0)/ 全量 `npm run verify` 四档退出码 0 / `verify-line-endings` / `verify-version-consistency` 全绿。
|
package/lib/client.js
CHANGED
|
@@ -959,9 +959,9 @@ html[data-dsh-tw-active] .dshDesktopConversationSurface > :not([data-dsh-tw-view
|
|
|
959
959
|
}`,{label:`interface`,detail:`definition`,type:`keyword`}),Rf("type ${name} = ${type}",{label:`type`,detail:`definition`,type:`keyword`}),Rf(`enum \${name} {
|
|
960
960
|
\${}
|
|
961
961
|
}`,{label:`enum`,detail:`definition`,type:`keyword`})]),ug=new _u,dg=new Set([`Script`,`Block`,`FunctionExpression`,`FunctionDeclaration`,`ArrowFunction`,`MethodDeclaration`,`ForStatement`]);function fg(e){return(t,n)=>{let r=t.node.getChild(`VariableDefinition`);return r&&n(r,e),!0}}const pg=[`FunctionDeclaration`],mg={FunctionDeclaration:fg(`function`),ClassDeclaration:fg(`class`),ClassExpression:()=>!0,EnumDeclaration:fg(`constant`),TypeAliasDeclaration:fg(`type`),NamespaceDeclaration:fg(`namespace`),VariableDefinition(e,t){e.matchContext(pg)||t(e,`variable`)},TypeDefinition(e,t){t(e,`type`)},__proto__:null};function hg(e,t){let n=ug.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=mg[t.name];if(e&&e(t,a)||dg.has(t.name))return!1}else if(t.to-t.from>8192){for(let n of hg(e,t.node))r.push(n);return!1}}),ug.set(t,r),r}const gg=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,_g=[`TemplateString`,`String`,`RegExp`,`LineComment`,`BlockComment`,`VariableDefinition`,`TypeDefinition`,`Label`,`PropertyDefinition`,`PropertyName`,`PrivatePropertyDefinition`,`PrivatePropertyName`,`JSXText`,`JSXAttributeValue`,`JSXOpenTag`,`JSXCloseTag`,`JSXSelfClosingTag`,`.`,`?.`];function vg(e){let t=Y(e.state).resolveInner(e.pos,-1);if(_g.indexOf(t.name)>-1)return null;let n=t.name==`VariableName`||t.to-t.from<20&&gg.test(e.state.sliceDoc(t.from,t.to));if(!n&&!e.explicit)return null;let r=[];for(let n=t;n;n=n.parent)dg.has(n.name)&&(r=r.concat(hg(e.state.doc,n)));return{options:r,from:n?t.from:e.pos,validFor:gg}}const yg=md.define({name:`javascript`,parser:sg.configure({props:[Md.add({IfStatement:Wd({except:/^\s*({|else\b)/}),TryStatement:Wd({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:Ud,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:Vd({closing:`}`}),ArrowFunction:e=>e.baseIndent+e.unit,"TemplateString BlockComment":()=>null,"Statement Property":Wd({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}}),Kd.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:`$`}}),bg={test:e=>/^JSX/.test(e.name),facet:ud({commentTokens:{block:{open:`{/*`,close:`*/}`}}})},xg=yg.configure({dialect:`ts`},`typescript`),Sg=yg.configure({dialect:`jsx`,props:[dd.add(e=>e.isTop?[bg]:void 0)]}),Cg=yg.configure({dialect:`jsx ts`,props:[dd.add(e=>e.isTop?[bg]:void 0)]},`typescript`);let wg=e=>({label:e,type:`keyword`});const Tg=`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(wg),Eg=Tg.concat([`declare`,`implements`,`private`,`protected`,`public`].map(wg));function Dg(e={}){let t=e.jsx?e.typescript?Cg:Sg:e.typescript?xg:yg,n=e.typescript?lg.concat(Eg):cg.concat(Tg);return new wd(t,[yg.data.of({autocomplete:yf(_g,vf(n))}),yg.data.of({autocomplete:vg}),e.jsx?jg:[]])}function Og(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 kg(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 Ag=typeof navigator==`object`&&/Android\b/.test(navigator.userAgent),jg=U.inputHandler.of((e,t,n,r,i)=>{if((Ag?e.composing:e.compositionStarted)||e.state.readOnly||t!=n||r!=`>`&&r!=`/`||!yg.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=kg(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=Og(n);if(r&&r.name==`JSXOpenTag`&&!/^\/?>|^<\//.test(o.doc.sliceString(t,t+2))&&(i=kg(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)}),Mg=[`_blank`,`_self`,`_top`,`_parent`],Ng=[`ascii`,`utf-8`,`utf-16`,`latin1`,`latin1`],Pg=[`get`,`post`,`put`,`delete`],Fg=[`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`],Ig=[`true`,`false`],Q={},Lg={a:{attrs:{href:null,ping:null,type:null,media:null,target:Mg,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:Mg}},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:Fg,formmethod:Pg,formnovalidate:[`novalidate`],formtarget:Mg,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":Ng,autocomplete:[`on`,`off`],enctype:Fg,method:Pg,novalidate:[`novalidate`],target:Mg}},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:Fg,formmethod:Pg,formnovalidate:[`novalidate`],formtarget:Mg,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:Ng,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:Ng}},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},Rg={accesskey:null,class:null,contenteditable:Ig,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:Ig,autocorrect:Ig,autocapitalize:Ig,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":Ig,"aria-autocomplete":[`inline`,`list`,`both`,`none`],"aria-busy":Ig,"aria-checked":[`true`,`false`,`mixed`,`undefined`],"aria-controls":null,"aria-describedby":null,"aria-disabled":Ig,"aria-dropeffect":null,"aria-expanded":[`true`,`false`,`undefined`],"aria-flowto":null,"aria-grabbed":[`true`,`false`,`undefined`],"aria-haspopup":Ig,"aria-hidden":Ig,"aria-invalid":[`true`,`false`,`grammar`,`spelling`],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":[`off`,`polite`,`assertive`],"aria-multiline":Ig,"aria-multiselectable":Ig,"aria-owns":null,"aria-posinset":null,"aria-pressed":[`true`,`false`,`mixed`,`undefined`],"aria-readonly":Ig,"aria-relevant":null,"aria-required":Ig,"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},zg=`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 zg)Rg[e]=null;var Bg=class{constructor(e,t){this.tags={...Lg,...e},this.globalAttrs={...Rg,...t},this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};Bg.default=new Bg;function Vg(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 Hg(e,t=!1){for(;e;e=e.parent)if(e.name==`Element`)if(t)t=!1;else return e;return null}function Ug(e,t,n){return n.tags[Vg(e,Hg(t))]?.children||n.allTags}function Wg(e,t){let n=[];for(let r=Hg(t);r&&!r.type.isTop;r=Hg(r.parent)){let i=Vg(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 Gg=/^[:\-\.\w\u00b7-\uffff]*$/;function Kg(e,t,n,r,i){let a=/\s*>/.test(e.sliceDoc(i,i+5))?``:`>`,o=Hg(n,n.name==`StartTag`||n.name==`TagName`);return{from:r,to:i,options:Ug(e.doc,o,t).map(e=>({label:e,type:`type`})).concat(Wg(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:Wg(e.doc,t).map((e,t)=>({label:e,apply:e+i,type:`type`,boost:99-t})),validFor:Gg}}function Jg(e,t,n,r){let i=[],a=0;for(let r of Ug(e.doc,n,t))i.push({label:`<`+r,type:`type`});for(let t of Wg(e.doc,n))i.push({label:`</`+t+`>`,type:`type`,boost:99-a++});return{from:r,to:r,options:i,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function Yg(e,t,n,r,i){let a=Hg(n),o=a?t.tags[Vg(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:Gg}}function Xg(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=Hg(n),i=r?t.tags[Vg(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 Zg(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):Kg(n,e,i,i.from,r):i.name==`StartTag`||i.name==`IncompleteTag`?Kg(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`?Yg(n,e,i,i.name==`AttributeName`?i.from:r,r):i.name==`Is`||i.name==`AttributeValue`||i.name==`UnquotedAttributeValue`?Xg(n,e,i,i.name==`Is`?r:i.from,r):t.explicit&&(a.name==`Element`||a.name==`Text`||a.name==`Document`)?Jg(n,e,i,r):null}function Qg(e){return Zg(Bg.default,e)}function $g(e){let{extraTags:t,extraGlobalAttributes:n}=e,r=n||t?new Bg(t,n):Bg.default;return e=>Zg(r,e)}const e_=yg.parser.configure({top:`SingleExpression`}),t_=[{tag:`script`,attrs:e=>e.type==`text/typescript`||e.lang==`ts`,parser:xg.parser},{tag:`script`,attrs:e=>e.type==`text/babel`||e.type==`text/jsx`,parser:Sg.parser},{tag:`script`,attrs:e=>e.type==`text/typescript-jsx`,parser:Cg.parser},{tag:`script`,attrs(e){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(e.type)},parser:e_},{tag:`script`,attrs(e){return!e.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(e.type)},parser:yg.parser},{tag:`style`,attrs(e){return(!e.lang||e.lang==`css`)&&(!e.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(e.type))},parser:qh.parser}],n_=[{name:`style`,parser:qh.parser.configure({top:`Styles`})}].concat(zg.map(e=>({name:e,parser:yg.parser}))),r_=md.define({name:`html`,parser:fh.configure({props:[Md.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}}),Kd.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}}}),tf.add({"OpenTag CloseTag":e=>e.getChild(`TagName`)})]}),languageData:{commentTokens:{block:{open:`<!--`,close:`-->`}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:`-_`}}),i_=r_.configure({wrap:gh(t_,n_)});function a_(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=gh((e.nestedLanguages||[]).concat(t_),(e.nestedAttributes||[]).concat(n_))),new wd(n?r_.configure({wrap:n,dialect:t}):t?i_.configure({dialect:t}):i_,[i_.data.of({autocomplete:$g(e)}),e.autoCloseTags===!1?[]:c_,Dg().support,Jh().support])}const o_=new Set(`area base br col command embed frame hr img input keygen link meta param source track wbr menuitem`.split(` `));function s_(e,t,n){for(;;){if(t.lastChild?.name!=`CloseTag`)return!1;let r=t.parent;if(!r||Vg(e,r)!=n)return!0;t=r}}const c_=U.inputHandler.of((e,t,n,r,i)=>{if(e.composing||e.state.readOnly||t!=n||r!=`>`&&r!=`/`||!i_.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=Vg(o.doc,t.parent,n))&&!o_.has(a)&&!s_(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=Vg(o.doc,e,n))&&!o_.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)}),l_=ud({commentTokens:{block:{open:`<!--`,close:`-->`}}}),u_=new W,d_=Gp.configure({props:[Kd.add(e=>!e.is(`Block`)||e.is(`Document`)||f_(e)!=null||p_(e)?void 0:(e,t)=>({from:t.doc.lineAt(e.from).to,to:e.to})),u_.add(f_),Md.add({Document:()=>null}),ld.add({Document:l_})]});function f_(e){let t=/^(?:ATX|Setext)Heading(\d)$/.exec(e.name);return t?+t[1]:void 0}function p_(e){return e.name==`OrderedList`||e.name==`BulletList`}function m_(e,t){let n=e;for(;;){let e=n.nextSibling,r;if(!e||(r=f_(e.type))!=null&&r<=t)break;n=e}return n.to}const h_=Gd.of((e,t,n)=>{for(let r=Y(e).resolveInner(n,-1);r&&!(r.from<t);r=r.parent){let e=r.type.prop(u_);if(e==null)continue;let t=m_(r,e);if(t>n)return{from:n,to:t}}return null});function g_(e){return new fd(l_,e,[],`markdown`)}const __=g_(d_),v_=g_(d_.configure([dm,mm,pm,hm,{props:[Kd.add({Table:(e,t)=>({from:t.doc.lineAt(e.from).to,to:e.to})})]}]));function y_(e,t){return n=>{if(n&&e){let t=null;if(n=/\S*/.exec(n)[0],t=typeof e==`function`?e(n):Td.matchLanguageName(e,n,!0),t instanceof Td)return t.support?t.support.language.parser:_d.getSkippingParser(t.load());if(t)return t.parser}return t?t.parser:null}}var b_=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(+S_(this.item,e)[2]+t):``;return this.spaceBefore+n+this.type+this.spaceAfter}};function x_(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 b_(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 b_(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 b_(i.parent,s,s+t,a[1],e,n,i))}}return r}function S_(e,t){return/^(\s*)(\d+)(?=[.)])/.exec(t.sliceString(e.from,e.from+10))}function C_(e,t,n,r=0){for(let i=-1,a=e;;){if(a.name==`ListItem`){let e=S_(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 w_(e,t){let n=/^[ \t]*/.exec(e)[0].length;if(!n||t.facet(Dd)!=` `)return e;let r=ri(e,4,n),i=``;for(let e=r;e>0;)e>=4?(i+=` `,e-=4):(i+=` `,e--);return i+e.slice(n)}const T_=((e={})=>({state:t,dispatch:n})=>{let r=Y(t),{doc:i}=t,a=null,o=t.changeByRange(n=>{if(!n.empty||!v_.isActiveAt(t,n.from,-1)&&!v_.isActiveAt(t,n.from,1))return a={range:n};let o=n.from,s=i.lineAt(o),c=x_(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`&&C_(l.item,i,r,-2),e&&e.node.name==`OrderedList`&&C_(e.item,i,r),{range:M.cursor(t+n.length),changes:r}}else{let e=O_(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`&&C_(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?ri(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=w_(p,t),D_(l.node,t.doc)&&(p=O_(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 E_(e){return e.name==`QuoteMark`||e.name==`ListMark`}function D_(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 O_(e,t,n){let r=``;for(let t=0,i=e.length-2;t<=i;t++)r+=e[t].blank(t<i?ri(n.text,4,e[t+1].from)-r.length:null,t<i);return w_(r,t)}function k_(e,t){let n=e.resolveInner(t,-1),r=t;E_(n)&&(r=n.from,n=n.parent);for(let e;e=n.childBefore(r);)if(E_(e))r=e.from;else if(e.name==`OrderedList`||e.name==`BulletList`)n=e.lastChild,r=n.to;else break;return n}const A_=[{key:`Enter`,run:T_},{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&&v_.isActiveAt(e,t.from)){let t=a.lineAt(i),r=x_(k_(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(ri(t.text,4,n.to)-ri(t.text,4,n.from));return r==t.from&&(i=w_(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)}}],j_=a_({matchClosingTags:!1});function M_(e={}){let{codeLanguages:t,defaultCodeLanguage:n,addKeymap:r=!0,base:{parser:i}=__,completeHTMLTags:a=!0,pasteURLAsLink:o=!0,htmlTagLanguage:s=j_}=e;if(!(i instanceof yp))throw RangeError("Base parser provided to `markdown` should be a Markdown parser");let c=e.extensions?[e.extensions]:[],l=[s.support,h_],u;o&&l.push(L_),n instanceof wd?(l.push(n.support),u=n.language):n&&(u=n);let d=t||u?y_(t,u):void 0;c.push(qp({codeParser:d,htmlParser:s.language.parser})),r&&l.push(or.high(_l.of(A_)));let f=g_(i.configure(c));return a&&l.push(f.data.of({autocomplete:N_})),new wd(f,l)}function N_(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:F_(),validFor:/^<[:\-\.\w\u00b7-\uffff]*$/}}let P_=null;function F_(){if(P_)return P_;let e=Qg(new hf(F.create({extensions:j_}),0,!0));return P_=e?e.options:[]}const I_=/code|horizontalrule|html|link|comment|processing|escape|entity|image|mark|url/i,L_=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),!v_.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||I_.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)}}),R_=e=>{let{state:t}=e,n=t.doc.lineAt(t.selection.main.from),r=U_(e.state,n.from);return r.line?B_(e):r.block?H_(e):!1};function z_(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 B_=z_(q_,0),V_=z_(K_,0),H_=z_((e,t)=>K_(e,t,G_(t)),0);function U_(e,t){let n=e.languageDataAt(`commentTokens`,t,1);return n.length?n[0]:{}}function W_(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 G_(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 K_(e,t,n=t.selection.ranges){let r=n.map(e=>U_(t,e.from).block);if(!r.every(e=>e))return null;let i=n.map((e,n)=>W_(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=U_(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 J_=xr.define(),Y_=xr.define(),X_=N.define(),Z_=N.define({combine(e){return Rr(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)})}}),Q_=rr.define({create(){return gv.empty},update(e,t){let n=t.state.facet(Z_),r=t.annotation(J_);if(r){let i=av.fromTransaction(t,r.selection),a=r.side,o=a==0?e.undone:e.done;return o=i?ov(o,o.length,n.minDepth,i):dv(o,t.startState.selection),new gv(a==0?r.rest:o,a==0?o:r.rest)}let i=t.annotation(Y_);if((i==`full`||i==`before`)&&(e=e.isolate()),t.annotation(wr.addToHistory)===!1)return t.changes.empty?e:e.addMapping(t.changes.desc);let a=av.fromTransaction(t),o=t.annotation(wr.time),s=t.annotation(wr.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 gv(e.done.map(av.fromJSON),e.undone.map(av.fromJSON))}});function $_(e={}){return[Q_,Z_.of(e),U.domEventHandlers({beforeinput(e,t){let n=e.inputType==`historyUndo`?tv:e.inputType==`historyRedo`?nv:null;return n?(e.preventDefault(),n(t)):!1}})]}function ev(e,t){return function({state:n,dispatch:r}){if(!t&&n.readOnly)return!1;let i=n.field(Q_,!1);if(!i)return!1;let a=i.pop(e,n,t);return a?(r(a),!0):!1}}const tv=ev(0,!1),nv=ev(1,!1),rv=ev(0,!0),iv=ev(1,!0);var av=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&&Vn.fromJSON(t.changes),[],t.mapped&&Bn.fromJSON(t.mapped),t.startSelection&&M.fromJSON(t.startSelection),t.selectionsAfter.map(M.fromJSON))}static fromTransaction(t,n){let r=uv;for(let e of t.startState.facet(X_)){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,uv)}static selection(t){return new e(void 0,uv,void 0,void 0,t)}};function ov(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 sv(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 cv(e,t){return e.ranges.length==t.ranges.length&&e.ranges.filter((e,n)=>e.empty!=t.ranges[n].empty).length===0}function lv(e,t){return e.length?t.length?e.concat(t):e:t}const uv=[];function dv(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),ov(e,e.length-1,1e9,n.setSelAfter(r)))}else return[av.selection([t])]}function fv(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 pv(e,t){if(!e.length)return e;let n=e.length,r=uv;for(;n;){let i=mv(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?[av.selection(r)]:uv}function mv(e,t,n){let r=lv(e.selectionsAfter.length?e.selectionsAfter.map(e=>e.map(t)):uv,n);if(!e.changes)return av.selection(r);let i=e.changes.map(t),a=t.mapDesc(e.changes,!0),o=e.mapped?e.mapped.composeDesc(a):a;return new av(i,P.mapEffects(e.effects,t),o,e.startSelection.map(a),r)}const hv=/^(input\.type|delete)($|\.)/;var gv=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||hv.test(r))&&(!s.selectionsAfter.length&&n-this.prevTime<i.newGroupDelay&&i.joinToEvent(a,sv(s.changes,t.changes))||r==`input.type.compose`)?ov(o,o.length-1,i.minDepth,new av(t.changes.compose(s.changes),lv(P.mapEffects(t.effects,s.changes),s.effects),s.mapped,s.startSelection,uv)):ov(o,o.length,i.minDepth,t),new e(o,uv,n,r)}addSelection(t,n,r,i){let a=this.done.length?this.done[this.done.length-1].selectionsAfter:uv;return a.length>0&&n-this.prevTime<i&&r==this.prevUserEvent&&r&&/^select($|\.)/.test(r)&&cv(a[a.length-1],t)?this:new e(dv(this.done,t),this.undone,n,r)}addMapping(t){return new e(pv(this.done,t),pv(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:J_.of({side:e,rest:fv(r),selection:a}),userEvent:e==0?`select.undo`:`select.redo`,scrollIntoView:!0});if(i.changes){let n=r.length==1?uv:r.slice(0,r.length-1);return i.mapped&&(n=pv(n,i.mapped)),t.update({changes:i.changes,selection:i.startSelection,effects:i.effects,annotations:J_.of({side:e,rest:n,selection:a}),filter:!1,userEvent:e==0?`undo`:`redo`,scrollIntoView:!0})}else return null}};gv.empty=new gv(uv,uv);const _v=[{key:`Mod-z`,run:tv,preventDefault:!0},{key:`Mod-y`,mac:`Mod-Shift-z`,run:nv,preventDefault:!0},{linux:`Ctrl-Shift-z`,run:nv,preventDefault:!0},{key:`Mod-u`,run:rv,preventDefault:!0},{key:`Alt-u`,mac:`Mod-Shift-u`,run:iv,preventDefault:!0}];function vv(e,t){return M.create(e.ranges.map(t),e.mainIndex)}function yv(e,t){return e.update({selection:t,scrollIntoView:!0,userEvent:`select`})}function bv({state:e,dispatch:t},n){let r=vv(e.selection,n);return r.eq(e.selection,!0)?!1:(t(yv(e,r)),!0)}function xv(e,t){return M.cursor(t?e.to:e.from)}function Sv(e,t){return bv(e,n=>n.empty?e.moveByChar(n,t):xv(n,t))}function Cv(e){return e.textDirectionAt(e.state.selection.main.head)==z.LTR}const wv=e=>Sv(e,!Cv(e)),Tv=e=>Sv(e,Cv(e));function Ev(e,t){return bv(e,n=>n.empty?e.moveByGroup(n,t):xv(n,t))}const Dv=e=>Ev(e,!Cv(e)),Ov=e=>Ev(e,Cv(e));typeof Intl<`u`&&Intl.Segmenter;function kv(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 Av(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;kv(e,t,i)?r=t:a=n?t.to:t.from}let a=r.type.prop(i),o,s;return s=a&&(o=n?af(e,r.from,1):af(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 jv=e=>bv(e,t=>Av(e.state,t,!Cv(e))),Mv=e=>bv(e,t=>Av(e.state,t,Cv(e)));function Nv(e,t){return bv(e,n=>{if(!n.empty)return xv(n,t);let r=e.moveVertically(n,t);return r.head==n.head?e.moveToLineBoundary(n,t):r})}const Pv=e=>Nv(e,!1),Fv=e=>Nv(e,!0);function Iv(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 Lv(e,t){let n=Iv(e),{state:r}=e,i=vv(r.selection,r=>r.empty?e.moveVertically(r,t,n.height):xv(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(yv(r,i),{effects:a}),!0}const Rv=e=>Lv(e,!1),zv=e=>Lv(e,!0);function Bv(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 Vv=e=>bv(e,t=>Bv(e,t,!0)),Hv=e=>bv(e,t=>Bv(e,t,!1)),Uv=e=>bv(e,t=>Bv(e,t,!Cv(e))),Wv=e=>bv(e,t=>Bv(e,t,Cv(e))),Gv=e=>bv(e,t=>M.cursor(e.lineBlockAt(t.head).from,1)),Kv=e=>bv(e,t=>M.cursor(e.lineBlockAt(t.head).to,-1));function qv(e,t,n){let r=!1,i=vv(e.selection,t=>{let i=af(e,t.head,-1)||af(e,t.head,1)||t.head>0&&af(e,t.head-1,1)||t.head<e.doc.length&&af(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(yv(e,i)),!0):!1}const Jv=({state:e,dispatch:t})=>qv(e,t,!1);function Yv(e,t,n){let r=vv(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(yv(e.state,r)),!0)}function Xv(e,t){return Yv(e,t,n=>e.moveByChar(n,t))}const Zv=e=>Xv(e,!Cv(e)),Qv=e=>Xv(e,Cv(e));function $v(e,t){return Yv(e,t,n=>e.moveByGroup(n,t))}const ey=e=>$v(e,!Cv(e)),ty=e=>$v(e,Cv(e)),ny=e=>{let t=!Cv(e);return Yv(e,t,n=>Av(e.state,n,t))},ry=e=>{let t=Cv(e);return Yv(e,t,n=>Av(e.state,n,t))};function iy(e,t){return Yv(e,t,n=>e.moveVertically(n,t))}const ay=e=>iy(e,!1),oy=e=>iy(e,!0);function sy(e,t){return Yv(e,t,n=>e.moveVertically(n,t,Iv(e).height))}const cy=e=>sy(e,!1),ly=e=>sy(e,!0),uy=e=>Yv(e,!0,t=>Bv(e,t,!0)),dy=e=>Yv(e,!1,t=>Bv(e,t,!1)),fy=e=>{let t=!Cv(e);return Yv(e,t,n=>Bv(e,n,t))},py=e=>{let t=Cv(e);return Yv(e,t,n=>Bv(e,n,t))},my=e=>Yv(e,!1,t=>M.cursor(e.lineBlockAt(t.head).from)),hy=e=>Yv(e,!0,t=>M.cursor(e.lineBlockAt(t.head).to)),gy=({state:e,dispatch:t})=>(t(yv(e,{anchor:0})),!0),_y=({state:e,dispatch:t})=>(t(yv(e,{anchor:e.doc.length})),!0),vy=({state:e,dispatch:t})=>(t(yv(e,{anchor:e.selection.main.anchor,head:0})),!0),yy=({state:e,dispatch:t})=>(t(yv(e,{anchor:e.selection.main.anchor,head:e.doc.length})),!0),by=({state:e,dispatch:t})=>(t(e.update({selection:{anchor:0,head:e.doc.length},userEvent:`select`})),!0),xy=({state:e,dispatch:t})=>{let n=By(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},Sy=({state:e,dispatch:t})=>{let n=vv(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(yv(e,n)),!0)};function Cy(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(yv(n,M.create(i,i.length-1))),!0)}const wy=e=>Cy(e,!1),Ty=e=>Cy(e,!0),Ey=({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(yv(e,r)),!0):!1};function Dy(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=Oy(e,o,!1)):o>i&&(n=`delete.forward`,o=Oy(e,o,!0)),i=Math.min(i,o),a=Math.max(a,o)}else i=Oy(e,i,!1),a=Oy(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 Oy(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 ky=(e,t,n)=>Dy(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=ri(s,a.tabSize)%Od(a)||Od(a);for(let t=0;t<e&&s[s.length-1-t]==` `;t++)i--;c=i}else c=Nn(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=Nn(o.text,c-o.from,!1,!1)+o.from);return c}),Ay=e=>ky(e,!1,!0),jy=e=>ky(e,!0,!1),My=(e,t)=>Dy(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=Nn(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}),Ny=e=>My(e,!1),Py=e=>My(e,!0),Fy=e=>Dy(e,t=>{let n=e.lineBlockAt(t.head).to;return t.head<n?n:Math.min(e.state.doc.length,t.head+1)}),Iy=e=>Dy(e,t=>{let n=e.moveToLineBoundary(t,!1).head;return t.head>n?n:Math.max(0,t.head-1)}),Ly=e=>Dy(e,t=>{let n=e.moveToLineBoundary(t,!0).head;return t.head<n?n:Math.min(e.state.doc.length,t.head+1)}),Ry=({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},zy=({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:Nn(r.text,n-r.from,!1)+r.from,a=n==r.to?n+1:Nn(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 By(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 Vy(e,t,n){if(e.readOnly)return!1;let r=[],i=[];for(let t of By(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 Hy=({state:e,dispatch:t})=>Vy(e,t,!1),Uy=({state:e,dispatch:t})=>Vy(e,t,!0);function Wy(e,t,n){if(e.readOnly)return!1;let r=[];for(let t of By(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 Gy=({state:e,dispatch:t})=>Wy(e,t,!1),Ky=({state:e,dispatch:t})=>Wy(e,t,!0),qy=e=>{if(e.state.readOnly)return!1;let{state:t}=e,n=t.changes(By(t).map(({from:e,to:n})=>(e>0?e--:n<t.doc.length&&n++,{from:e,to:n}))),r=vv(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 Jy(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 Yy=Zy(!1),Xy=Zy(!0);function Zy(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&&Jy(t,r);e&&(r=i=(i<=a.to?a:t.doc.lineAt(i)).to);let s=new jd(t,{simulateBreak:r,simulateDoubleBreak:!!o}),c=Ad(s,r);for(c??=ri(/^\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=[``,kd(t,c)];return o&&l.push(kd(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 Qy(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 $y=({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=Object.create(null),r=new jd(e,{overrideIndentation:e=>n[e]??-1}),i=Qy(e,(t,i,a)=>{let o=Ad(r,t.from);if(o==null)return;/\S/.test(t.text)||(o=0);let s=/^\s*/.exec(t.text)[0],c=kd(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},eb=({state:e,dispatch:t})=>e.readOnly?!1:(t(e.update(Qy(e,(t,n)=>{n.push({from:t.from,insert:e.facet(Dd)})}),{userEvent:`input.indent`})),!0),tb=({state:e,dispatch:t})=>e.readOnly?!1:(t(e.update(Qy(e,(t,n)=>{let r=/^\s*/.exec(t.text)[0];if(!r)return;let i=ri(r,e.tabSize),a=0,o=kd(e,Math.max(0,i-Od(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),nb=e=>(e.setTabFocusMode(),!0),rb=[{key:`Ctrl-b`,run:wv,shift:Zv,preventDefault:!0},{key:`Ctrl-f`,run:Tv,shift:Qv},{key:`Ctrl-p`,run:Pv,shift:ay},{key:`Ctrl-n`,run:Fv,shift:oy},{key:`Ctrl-a`,run:Gv,shift:my},{key:`Ctrl-e`,run:Kv,shift:hy},{key:`Ctrl-d`,run:jy},{key:`Ctrl-h`,run:Ay},{key:`Ctrl-k`,run:Fy},{key:`Ctrl-Alt-h`,run:Ny},{key:`Ctrl-o`,run:Ry},{key:`Ctrl-t`,run:zy},{key:`Ctrl-v`,run:zv}],ib=[{key:`ArrowLeft`,run:wv,shift:Zv,preventDefault:!0},{key:`Mod-ArrowLeft`,mac:`Alt-ArrowLeft`,run:Dv,shift:ey,preventDefault:!0},{mac:`Cmd-ArrowLeft`,run:Uv,shift:fy,preventDefault:!0},{key:`ArrowRight`,run:Tv,shift:Qv,preventDefault:!0},{key:`Mod-ArrowRight`,mac:`Alt-ArrowRight`,run:Ov,shift:ty,preventDefault:!0},{mac:`Cmd-ArrowRight`,run:Wv,shift:py,preventDefault:!0},{key:`ArrowUp`,run:Pv,shift:ay,preventDefault:!0},{mac:`Cmd-ArrowUp`,run:gy,shift:vy},{mac:`Ctrl-ArrowUp`,run:Rv,shift:cy},{key:`ArrowDown`,run:Fv,shift:oy,preventDefault:!0},{mac:`Cmd-ArrowDown`,run:_y,shift:yy},{mac:`Ctrl-ArrowDown`,run:zv,shift:ly},{key:`PageUp`,run:Rv,shift:cy},{key:`PageDown`,run:zv,shift:ly},{key:`Home`,run:Hv,shift:dy,preventDefault:!0},{key:`Mod-Home`,run:gy,shift:vy},{key:`End`,run:Vv,shift:uy,preventDefault:!0},{key:`Mod-End`,run:_y,shift:yy},{key:`Enter`,run:Yy,shift:Yy},{key:`Mod-a`,run:by},{key:`Backspace`,run:Ay,shift:Ay,preventDefault:!0},{key:`Delete`,run:jy,preventDefault:!0},{key:`Mod-Backspace`,mac:`Alt-Backspace`,run:Ny,preventDefault:!0},{key:`Mod-Delete`,mac:`Alt-Delete`,run:Py,preventDefault:!0},{mac:`Mod-Backspace`,run:Iy,preventDefault:!0},{mac:`Mod-Delete`,run:Ly,preventDefault:!0}].concat(rb.map(e=>({mac:e.key,run:e.run,shift:e.shift}))),ab=[{key:`Alt-ArrowLeft`,mac:`Ctrl-ArrowLeft`,run:jv,shift:ny},{key:`Alt-ArrowRight`,mac:`Ctrl-ArrowRight`,run:Mv,shift:ry},{key:`Alt-ArrowUp`,run:Hy},{key:`Shift-Alt-ArrowUp`,run:Gy},{key:`Alt-ArrowDown`,run:Uy},{key:`Shift-Alt-ArrowDown`,run:Ky},{key:`Mod-Alt-ArrowUp`,run:wy},{key:`Mod-Alt-ArrowDown`,run:Ty},{key:`Escape`,run:Ey},{key:`Mod-Enter`,run:Xy},{key:`Alt-l`,mac:`Ctrl-l`,run:xy},{key:`Mod-i`,run:Sy,preventDefault:!0},{key:`Mod-[`,run:tb},{key:`Mod-]`,run:eb},{key:`Mod-Alt-\\`,run:$y},{key:`Shift-Mod-k`,run:qy},{key:`Shift-Mod-\\`,run:Jv},{key:`Mod-/`,run:R_},{key:`Alt-A`,mac:`Ctrl-A`,run:V_},{key:`Ctrl-m`,mac:`Shift-Alt-m`,run:nb}].concat(ib),ob=`var(--dsw-alias-brand-primary, #3e63dd)`,sb=`color-mix(in srgb, var(--dsw-alias-brand-primary, #3e63dd) 55%, transparent)`,cb=`var(--dsw-alias-label-dimmed, #999)`,lb=`ui-monospace, "Cascadia Mono", Consolas, "SF Mono", Menlo, monospace`,ub=Jd.define([{tag:[J.heading1,J.heading2,J.heading3,J.heading4,J.heading5,J.heading6],color:ob,fontWeight:`700`},{tag:J.processingInstruction,color:sb},{tag:J.monospace,fontFamily:lb,backgroundColor:`color-mix(in srgb, var(--dsw-alias-label-secondary, #888) 12%, transparent)`,borderRadius:`4px`,padding:`0 3px`},{tag:J.content,fontFamily:lb,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:ob,textDecoration:`underline`},{tag:J.url,color:sb,textDecoration:`underline dotted`},{tag:J.quote,fontStyle:`italic`,color:`var(--dsw-alias-label-secondary, #888)`},{tag:J.contentSeparator,color:cb,textDecoration:`line-through`},{tag:J.comment,color:cb}]);function db(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,$_(),M_({base:v_}),Qd(ub),Nl(),Vl(e.placeholder??``),_l.of([...ab,..._v,{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?``:`
|
|
962
|
-
`}${e}\n`;n.dispatch({changes:{from:t,insert:r},selection:{anchor:t+r.length},scrollIntoView:!0}),n.focus()},focus:()=>n.focus()}}function fb(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=_(`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=`t('note.removeTag', { tag })`,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?.(O)??O;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=>{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`,`t('note.addTag', { tag })`),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 pb(e,t,n=e=>e){if(e.size>67108864){k(_(`note.uploadTooLarge`,{mb:64}));return}try{let r=await fetch(n(`${re}?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(_(`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(_(`note.uploaded`,{name:a}))}catch(e){k(_(`note.uploadFailed`,{message:e instanceof Error?e.message:String(e)}))}}function mb(e){let{editor:t,wikiQuery:n}=e,r=document.createElement(`button`);r.type=`button`,r.className=`dsh-tw-note-upload`,r.title=_(`note.uploadTitle`),r.textContent=_(`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??[]))pb(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))pb(e,t,n)}),{button:r}}function hb(e){return e<10?`0${e}`:String(e)}const gb=`dsh-tw-note-draft-v1`,_b=`dsh-tw-note-window-id`,vb=(()=>{try{let e=sessionStorage.getItem(_b);if(e!==null&&e.length>0)return e;let t=Math.random().toString(36).slice(2,10);return sessionStorage.setItem(_b,t),t}catch{return Math.random().toString(36).slice(2,10)}})();function yb(){return`dsh-tw-note-draft-v1:${vb}`}function bb(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 xb(e){try{return bb(localStorage.getItem(e))}catch{return null}}function Sb(){let e=xb(yb());if(e!==null)return{draft:e,foreign:e.windowId!==void 0&&e.windowId!==vb};let t=xb(gb);if(t===null)return null;let n={...t,windowId:vb};wb(n);try{localStorage.removeItem(gb)}catch{}return{draft:n,foreign:!0}}function Cb(e){wb({...e,windowId:vb})}function wb(e){try{localStorage.setItem(yb(),JSON.stringify({...e,windowId:vb}))}catch{}}function Tb(){try{localStorage.removeItem(yb())}catch{}}function Eb(e,t,n){return`${e}\u0000${t}\u0000${n.join(``)}`}function Db(e=new Date){return`${e.getFullYear()}-${hb(e.getMonth()+1)}-${hb(e.getDate())} ${hb(e.getHours())}:${hb(e.getMinutes())}`}function Ob(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 _(`note.relJustNow`);if(r<60)return _(`note.relMinutes`,{n:r});let i=Math.floor(r/60);if(i<24)return _(`note.relHours`,{n:i});let a=Math.floor(i/24);return a<30?_(`note.relDays`,{n:a}):new Date(t).toLocaleDateString(h()===`zh`?`zh-CN`:`en-US`)}async function kb(){let e=await Te();return typeof e?.note?.tag==`string`&&e.note.tag.length>0?e.note.tag:`inbox`}function Ab(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(`${T}?title=${encodeURIComponent(e)}`),{signal:AbortSignal.timeout(1e4)}),c=await o.json().catch(()=>null);if(!o.ok||c?.ok!==!0||typeof c.title!=`string`){k(_(`note.loadFailed`,{message:c?.notFound===!0?_(`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(Eb(c.title,c.text??``,c.tags??[])),r(),s(),k(_(`note.loaded`,{title:c.title})),l.editor.focus()}catch(e){k(_(`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=_(`note.loading`),e.recentWrap.append(r),(async()=>{try{let e=await(await fetch(n(`${te}?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?_(`note.noNotes`):_(`note.listFailed`,{message:e?.error??_(`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`,_(`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=[Ob(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=_(`note.listFailed`,{message:e instanceof Error?e.message:String(e)}),n.recentWrap.append(r)}})()},close:s}}function jb(e){let{isDisposed:t}=e,n,r=!1,i=`single`,a=[],o,s,c,l=()=>{};return{wikiQuery:e=>Se(e,n),ensureTarget:()=>(c??=Te().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 u=()=>{r||(n=Be(a,o))};u(),s??=ze(()=>{u(),l()}),l()}),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=>{l=e},syncDom:()=>{l()},dispose:()=>{s?.(),s=void 0}}}function Mb(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 Nb(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 Pb(e){let t,n=null,r=()=>{let t=e.getUi();t!==void 0&&(t.titleInput.value=Db())},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){Tb();return}let a=Eb(i,r,t.tagEditor.peekTags());n!==null&&a===n||wb({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=Db(),r.tagEditor.setTags([]),n=Eb(r.titleInput.value.trim(),``,[]))},clearTimer:()=>{t!==void 0&&(clearTimeout(t),t=void 0)},setPersistedSignature:e=>{n=e},markPersisted:(e,t,r)=>{n=Eb(e,t,r)}}}function Fb(e){let t=!1,n=t=>{Tb(),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(_(`note.saveEmpty`));return}let a=e.stoppedTarget();if(a!==void 0){k(_(`note.saveTargetStopped`,{label:a.label}));return}t=!0,r.saveBtn.disabled=!0,r.saveBtn.textContent=_(`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(E),{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(_(`note.saveConflict`));return}k(_(`note.saveFailed`,{message:c?.error??`HTTP ${s.status}`}));return}n(r),k(_(`note.saved`,{title:c.title??r.titleInput.value}))}catch(e){k(_(`note.saveFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{t=!1,r.saveBtn.disabled=!1,r.saveBtn.textContent=_(`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():Db(),r=t.editor.getValue(),i=t.tagEditor.getTags();t.editBtn.disabled=!0,t.editBtn.textContent=_(`note.opening`);try{await e.postEditAndOpen(n,r,i)}finally{t.editBtn.disabled=!1,t.editBtn.textContent=_(`note.editInTw`)}}}}const Ib=`dsh-tw-note-state`;function Lb(){let e,t=!1,n=!1,r=!1,i,a=`inbox`,o=jb({isDisposed:()=>t}),s=o.wikiQuery,c=Pb({getUi:()=>e,isOpened:()=>n,isDisposed:()=>t}),{flush:l,schedule:u,hideBanner:d,resetTitle:f}=c,p=null,m=e=>{try{window.dispatchEvent(new CustomEvent(Ib,{detail:{open:e}}))}catch{}},h=async(e,t,n)=>{try{let r=await fetch(s(D),{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(_(`note.openFailed`,{message:i?.error??`HTTP ${r.status}`})),!1;if(typeof i.twUrl!=`string`||typeof i.draftTitle!=`string`)return k(_(`note.openNoEditorUrl`)),!1;Tb(),d(),c.markPersisted(e,t,n),p=null;let a=xe(o.getMode(),o.getTargetWiki(),i.twUrl,i.twUrlAbsolute);return rn(`${be(a.relative,a.absolute)}#${encodeURIComponent(i.draftTitle)}`,i.title??e),k(_(`note.openedInPopup`,{title:i.title??e})),!0}catch(e){return k(_(`note.openFailed`,{message:e instanceof Error?e.message:String(e)})),!1}},g=Ab({getUi:()=>e,wikiQuery:s,hideDraftBanner:d,setLoadedToken:e=>{p=e},setPersistedSignature:c.setPersistedSignature}),v=()=>{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=_(`note.cardLabel`);let v=document.createElement(`button`);v.type=`button`,v.className=`dsh-tw-note-close`,v.title=_(`note.close`),v.textContent=`✕`,a.append(f,v);let y=document.createElement(`div`);y.className=`dsh-tw-note-draft`,y.hidden=!0;let b=document.createElement(`span`);b.className=`dsh-tw-note-draft-text`,b.textContent=_(`note.draftRestored`);let x=document.createElement(`button`);x.type=`button`,x.className=`dsh-tw-note-draft-discard`,x.textContent=_(`note.discard`),y.append(b,x);let S=document.createElement(`div`);S.className=`dsh-tw-note-fields`;let C=document.createElement(`input`);C.className=`dsh-tw-note-title`,C.placeholder=_(`note.titlePlaceholder`),C.setAttribute(`aria-label`,_(`note.titleAriaLabel`));let w=fb({onChange:u,wikiQuery:s});S.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=_(`note.writeTo`);let E=document.createElement(`select`);E.className=`dsh-tw-note-wiki-select`,E.setAttribute(`aria-label`,_(`note.writeToAriaLabel`)),T.append(ee,E);let D=document.createElement(`span`);D.className=`dsh-tw-note-wiki-hint`,D.hidden=!0,S.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?_(`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()?_(`note.defaultMark`):``;return t.textContent=e.running?`${e.label}${n}`:`${e.label}${n}${_(`note.notRunningSuffix`)}`,t})),E.value=o.getTargetWiki()??``,T.hidden=!1,O()}),o.ensureTarget().then(()=>o.syncDom()),C.addEventListener(`input`,u);let te,ne=db({placeholder:_(`note.editorPlaceholder`),onSave:()=>{te?.()},onChange:u}),re=mb({editor:ne,wikiQuery:s}),ie=document.createElement(`div`);ie.className=`dsh-tw-note-foot`;let ae=document.createElement(`div`);ae.className=`dsh-tw-note-foot-left`;let oe=document.createElement(`span`);oe.className=`dsh-tw-note-hint`,oe.textContent=`Ctrl+Enter`;let se=document.createElement(`button`);se.type=`button`,se.className=`dsh-tw-note-recent-btn`,se.title=_(`note.recentTitle`),se.textContent=_(`note.recent`),se.addEventListener(`click`,()=>{g.toggle()}),ae.append(re.button,se,oe);let ce=document.createElement(`div`);ce.className=`dsh-tw-note-foot-right`;let le=document.createElement(`button`);le.type=`button`,le.className=`dsh-tw-note-edit`,le.title=_(`note.editTitle`),le.textContent=_(`note.editInTw`);let ue=document.createElement(`button`);ue.type=`button`,ue.className=`dsh-tw-note-save`,ue.textContent=_(`note.save`),ce.append(le,ue),ie.append(ae,ce);let de=document.createElement(`div`);de.className=`dsh-tw-note-recent`,de.hidden=!0,r.append(a,y,S,ne.el,ie),t.append(r,de),document.body.append(t),e={root:t,card:r,editor:ne,titleInput:C,tagEditor:w,saveBtn:ue,editBtn:le,draftBanner:y,bannerText:b,recentWrap:de};let fe=()=>{n=!1,t.hidden=!0,g.close(),m(!1)},pe=Fb({getUi:()=>e,autosave:c,stoppedTarget:o.stoppedTarget,getLoadedToken:()=>p,clearLoadedToken:()=>{p=null},wikiQuery:s,postEditAndOpen:h,close:fe});te=pe.doSave,ue.addEventListener(`click`,()=>{pe.doSave()}),le.addEventListener(`click`,()=>{pe.doEdit()}),v.addEventListener(`click`,fe),Nb({root:t,card:r,head:a,closeBtn:v}),x.addEventListener(`click`,()=>{Tb(),d(),c.resetForNewNote(),k(_(`note.draftDiscarded`))}),i=()=>{l()},window.addEventListener(`pagehide`,i)};return{async open(r){if(t||(v(),e===void 0||n))return;n=!0,e.root.hidden=!1,Mb(e.root,e.card,r),m(!0);let i=Sb(),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?_(`note.draftRestoredForeign`):_(`note.draftRestored`),e.draftBanner.hidden=!1,i?.foreign===!0&&(k(_(`note.draftRestoredForeignToast`)),Cb(o));else{if(f(),a=await kb(),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)&&!(an()&&!on())){r=!0;try{if(await o.ensureTarget(),t)return;let e=o.stoppedTarget();if(e!==void 0){k(_(`note.nativeTargetStopped`,{label:e.label}));return}let n=Sb(),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():Db(),s=r?n.draft.text:``,c=[];if(r)c=n.draft.tags;else{if(a=await kb(),t)return;c=[a]}n!==null&&n.foreign&&(n.draft.text.trim().length>0||n.draft.title.trim().length>0)&&(k(_(`note.draftRestoredForeignToast`)),Cb(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 Rb(e){return`${hb(e.getHours())}:${hb(e.getMinutes())}`}function zb(e,t){let n=e?.git,r=[_(`frame.syncTooltip`)],i=`offline`;if(n==null||n.exists!==!0)r.push(_(`frame.gitUnavailable`));else{r.push(_(`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(_(`frame.ahead`,{n:t})),e>0&&r.push(_(`frame.behind`,{n:e})),n.dirty===!0?(i=`dirty`,r.push(_(`frame.dirty`,{n:n.dirtyFiles?.length??0}))):i=e>0?`behind`:`clean`}return t!==void 0&&r.push(_(`frame.lastSync`,{time:Rb(t)})),{state:i,tooltip:r.join(` · `)}}function Bb(){let e={state:`offline`,tooltip:_(`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=zb(n,t);(i.state!==e.state||i.tooltip!==e.tooltip)&&(e=i,o())},c=async()=>{if(i)return;let e=await Te();i||s(e)};return c(),n=window.setInterval(()=>{c()},3e4),{getState:()=>e,trigger:async()=>{if(i)return e;if(r)return k(_(`frame.syncing`)),e;r=!0,e={...e,state:`syncing`},o();try{let e=await fetch(ie,{method:`POST`,signal:AbortSignal.timeout(12e4)}),n=Ce(await e.json().catch(()=>null),e.status);n.ok?(t=new Date,k(_(`frame.syncDone`,{message:n.message}))):k(_(`frame.syncFailed`,{message:n.message}))}catch(e){k(_(`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 Vb(){let e=await Te(),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 Hb(){let e=await Me();return{showQuickNote:e.showQuickNote,showPanelStatus:e.showPanelStatus,showSyncButton:e.showSyncButton}}async function Ub(){let e=await Te();if(e===null)return{state:`failed`,text:_(`chrome.fabStatusUnreachable`),logs:[]};let t=Array.isArray(e.logs)?e.logs.filter(e=>typeof e==`string`):[];return e.status===`running`?{state:`running`,text:_(`chrome.fabTwOnline`,{url:e.url??``}),logs:t}:e.status===`starting`?{state:`starting`,text:_(`chrome.fabTwStarting`),logs:t}:{state:`failed`,text:e.error??_(`chrome.fabTwStatus`,{status:e.status??`?`}),logs:t}}function Wb(e,t,n){let r=!1,i,a,o,s,c,l,u,d,f=!1,p,m,h={state:`unknown`,text:_(`chrome.fabServiceUnknown`),logs:[]},g=()=>{f=!1,s!==void 0&&(s.hidden=!0),u!==void 0&&(u.hidden=!0)},v=e=>{if(!f)return;let t=e.target;i!==void 0&&i.contains(t)||g()},y=()=>{if(u===void 0)return;let e=[_(`chrome.fabTipTitle`,{text:h.text})];e.push(_(`chrome.fabTipSync`,{text:n.getState().tooltip})),h.logs.length>0&&(e.push(_(`chrome.fabTipLogs`)),e.push(...h.logs.slice(-3))),u.textContent=e.join(`
|
|
963
|
-
`)},b=()=>{let e=n.getState();o!==void 0&&(o.dataset.state=e.state),a!==void 0&&(a.title=_(`chrome.fabTitle`,{text:e.tooltip})),y()},x=async()=>{h=await Ub(),!r&&(c!==void 0&&(c.textContent=h.text),l!==void 0&&(l.dataset.state=h.state),y())},C,w,T=(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}),ee=()=>{s!==void 0&&(f=!0,s.hidden=!1,m?.(),b(),x())},E=(h,D)=>{if(r)return;if(C=h,w=D,document.removeEventListener(`click`,v,!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=_(`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`,()=>{y(),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=_(`chrome.fabQuickNote`),e.title=_(`chrome.fabQuickNoteTip`),e.addEventListener(`click`,()=>{g(),Me().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=_(`chrome.scopeSlotLabel`),s.append(t);let n=new Map,r=()=>{let e=Be(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?``:_(`chrome.fabWikiNotRunning`)}`,r.addEventListener(`click`,()=>{g(),Re(t.id),t.running||fetch(`${S}/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?.(),p=ze(()=>{r()}),m=r}d=document.createElement(`span`),d.textContent=_(`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=_(`chrome.fabReload`),n.addEventListener(`click`,()=>{g(),at(),x()}),s.append(n)}if(h.showSyncButton){let e=document.createElement(`button`);e.type=`button`,e.className=`dsh-tw-fab-item`,e.textContent=_(`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`,_(`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 Vb().catch(()=>void 0);if(!r){if(e!==void 0&&w!==void 0&&C!==void 0&&T(w,e)){E(C,e),ee();return}ee()}})()}),i.append(s,a),document.body.append(i),b(),document.addEventListener(`click`,v,!0)},D=e.subscribe(()=>{d!==void 0&&(d.textContent=e.isOpen()?_(`chrome.fabClosePanel`):_(`chrome.fabOpenPanel`))}),O=n.subscribe(b);return(async()=>{let[e,t]=await Promise.all([Hb(),Vb()]);r||!e.showQuickNote&&!e.showPanelStatus&&!e.showSyncButton||E(e,t)})(),()=>{r=!0,p?.(),p=void 0,document.removeEventListener(`click`,v,!0),D(),O(),i?.remove()}}function Gb(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 Kb(e,t){return function(n){let[r,i]=c.useState(!1),[a,o]=c.useState(null),s=c.useRef(null),l=c.useRef(null);c.useEffect(()=>{let e=!0,t=e=>{let t=e.detail;i(t?.open===!0)};return window.addEventListener(Ib,t),Me().then(t=>{e&&o(t.quickNoteMode)}),()=>{e=!1,window.removeEventListener(Ib,t)}},[]),c.useLayoutEffect(()=>{let e=s.current;if(e!==null)return Gb(e)},[]);let u=a===`native`,d=_(u||!r?`chrome.dockQuickNote`:`chrome.quickNoteOpenLabel`),f=_(u?`chrome.quickNoteTipNative`:r?`chrome.quickNoteTipOpen`:`chrome.quickNoteTipClosed`);return c.createElement(`div`,{ref:s,className:`dsh-tw-dock-note`},t?.({...n.sessionId===void 0?{}:{sessionId:n.sessionId},...n.useSessions===void 0?{}:{useSessions:n.useSessions}})??null,c.createElement(`button`,{ref:l,type:`button`,className:r?`dsh-tw-dock-note-btn dsh-tw-dock-note-btn-active`:`dsh-tw-dock-note-btn`,title:f,onClick:()=>{Me().then(t=>{t.quickNoteMode===`native`?an()&&!on()?cn():e.openNative():e.isOpen()?e.close():e.open(l.current??void 0)})}},c.createElement(`span`,{className:`dsh-tw-dock-note-icon`,"aria-hidden":`true`},`📝`),c.createElement(`span`,{className:`dsh-tw-dock-note-label`},d)))}}const qb=new Map,Jb=new Map,Yb=new Set;async function Xb(e){if(typeof e!=`string`||e.length===0)return;let t=qb.get(e);if(t!==void 0&&Date.now()-t.at<=15e3)return t.wikiId;let n=Jb.get(e);if(n!==void 0)return n;let r=(async()=>{try{let t=await fetch(`${ye}?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{Jb.delete(e)}})();Jb.set(e,r);let i=await r;return qb.set(e,{wikiId:i,at:Date.now()}),i}function Zb(e){typeof e==`string`&&e.length>0?qb.delete(e):qb.clear();let t=typeof e==`string`&&e.length>0?e:void 0;for(let e of[...Yb])e(t)}function Qb(e){return Yb.add(e),()=>{Yb.delete(e)}}const $b=`conversation.input.selector.context`;let ex=!1;const tx=new Set;function nx(){return ex}function rx(e){return tx.add(e),()=>{tx.delete(e)}}function ix(e){if(e!==ex){ex=e;for(let e of[...tx])e()}}function ax(e,t){let n=!1,r=e.inject($b,()=>{if(n)return()=>{};ix(!0);try{return e.register({name:$b,id:`wiki-scope`,order:9,label:_(`chrome.scopeSlotLabel`)},t)}catch{return ix(!1),()=>{}}});return()=>{n=!0,ix(!1),r!==void 0&&r()}}function ox(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 sx(e){let t=e.sessionId;if(typeof t!=`string`||t.length===0||typeof e.useSessions!=`function`)return!1;try{return e.useSessions(e=>(e?.byId)?.[t]?.blank===!0)===!0}catch{return!1}}function cx(){let[e,t]=c.useState(()=>nx());return c.useEffect(()=>rx(()=>{t(nx())}),[]),e}function lx(e={}){let t=e.blankOnly===!0;return function(e){let n=typeof e.sessionId==`string`&&e.sessionId.length>0?e.sessionId:void 0,r=sx(e),i=cx(),[a,o]=c.useState([]),[s,l]=c.useState(``),[u,d]=c.useState(void 0),[f,p]=c.useState(void 0),[m,h]=c.useState(!1),g=c.useRef(null);if(c.useEffect(()=>{if(n===void 0)return;let e=!0;return(async()=>{let[t,r]=await Promise.all([Te(),fetch(`${ye}?session=${encodeURIComponent(n)}`,{signal:AbortSignal.timeout(8e3)}).then(e=>e.ok?e.json():null).catch(()=>null)]);if(!e)return;let i=(t?.wikis??[]).filter(e=>e.agentVisible);o(i.map(e=>({id:e.id,label:e.label,running:e.running}))),l(typeof r?.scope==`string`?r.scope:``),d(ox(r?.resolved)),p(typeof r?.reason==`string`?r.reason:void 0)})(),()=>{e=!1}},[n]),n===void 0||a.length<=1||t&&!r||!t&&r&&i)return null;let v=u?.id??``,y=e=>a.some(t=>t.id===e),b=s.length>0&&y(s)?s:v,x=[...a];v.length>0&&!y(v)&&x.push({id:v,label:u?.label??v,running:!0});let S=v.length>0&&y(v)?[...x.filter(e=>e.id===v),...x.filter(e=>e.id!==v)]:x,C=e=>{let t=e===v?``:e;h(!0),(async()=>{try{let e=await fetch(ye,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({session:n,wiki:t.length>0?t:null}),signal:AbortSignal.timeout(12e4)}),r=await e.json().catch(()=>({}));if(!e.ok||r.ok!==!0){p(r.error??_(`chrome.scopeSwitchFailed`,{status:e.status}));return}l(typeof r.scope==`string`?r.scope:t),d(ox(r.resolved)??u),p(typeof r.reason==`string`?r.reason:void 0),Zb(n)}catch(e){p(e instanceof Error?e.message:String(e))}finally{h(!1)}})()};return c.createElement(`div`,{ref:g,className:`dsh-tw-scope-dock`},c.createElement(`span`,{className:`dsh-tw-scope-label`},_(`chrome.scopeSlotLabel`)),c.createElement(`select`,{className:`dsh-tw-scope-select`,value:b,disabled:m,"aria-label":_(`chrome.scopeAriaLabel`),title:_(`chrome.scopeTitle`),onChange:e=>{C(e.target.value)}},...S.map(e=>c.createElement(`option`,{key:e.id,value:e.id},`${e.label}${e.id===v?_(`chrome.scopeDefaultMark`):``}${e.running?``:_(`chrome.scopeNotRunning`)}`))),f===void 0?null:c.createElement(`span`,{className:`dsh-tw-scope-note`},f))}}async function ux(e,t=15e3,n){try{let r=await fetch(Se(ee,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 dx(){return ct()}async function fx(e,t){try{let n=await fetch(Se(`${T}?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 px(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),v=c.useRef(void 0);v.current=h;let y=c.useRef(0),b=c.useRef(!0),x=c.useRef(0),S=c.useRef(0),C=c.useCallback(async e=>{let n=++y.current;if(!b.current)return;let r=e?.silent===!0;r||a(`loading`);let i=e=>{if(x.current++,r){m(!0);return}a(`error`),f(e)};if(typeof t!=`string`||t.length===0){a(`error`),f(_(`chrome.summaryMissingSession`));return}if(x.current>=3){if(r){m(!0);return}a(`error`),f(_(`chrome.summaryRetriesExhausted`,{n:3}));return}try{let e=await Xb(t);if(!b.current||n!==y.current)return;g(e);let o=await fetch(Se(oe,e),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({session:t}),signal:AbortSignal.timeout(25e3)}),c=await o.json().catch(()=>null);if(!b.current||n!==y.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(_(`chrome.summaryNoTitle`));return}u(c.title);let l=await ux(c.title,15e3,e);if(!b.current||n!==y.current)return;if(l===null){let t=await fx(c.title,e);if(!b.current||n!==y.current)return;if(t===`no`){if(x.current++,x.current<3){C();return}a(`error`),f(_(`chrome.summaryRebuildFailed`));return}if(t===`unknown`){if(r){m(!0);return}a(`error`),f(_(`chrome.summaryRenderUnknown`));return}i(_(`chrome.summaryRenderUnavailable`));return}x.current=0,S.current=Date.now(),m(!1),s(l),a(`ready`)}catch(e){if(!b.current||n!==y.current)return;i(e instanceof Error?e.message:String(e))}},[t]);c.useEffect(()=>(b.current=!0,x.current=0,S.current=Date.now(),m(!1),C(),()=>{b.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 fx(l,v.current);if(e){if(t===`unknown`){m(!0);return}if(t===`no`){if(x.current++,x.current<3){C();return}a(`error`),f(_(`chrome.summaryExpired`));return}if(Date.now()-S.current>18e4){C({silent:!0});return}x.current=0,m(!1)}})()},3e4);return()=>{e=!1,window.clearInterval(t)}},[l,C]),c.useEffect(()=>Qb(e=>{typeof t!=`string`||t.length===0||e!==void 0&&e!==t||(x.current=0,S.current=0,C())}),[t,C]),c.useEffect(()=>{n!=null&&r?.()},[n,r]);let w=()=>{x.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,_(`chrome.summaryGenerating`))):i===`error`?c.createElement(`div`,{className:`dsh-tw-summary-state`},c.createElement(`div`,{className:`dsh-tw-summary-state-title`},_(`chrome.summaryUnavailable`)),c.createElement(`div`,{className:`dsh-tw-summary-state-detail`},d),c.createElement(`button`,{type:`button`,className:`dsh-tw-summary-btn`,onClick:w},_(`chrome.summaryRetry`))):c.createElement(`div`,{className:`dsh-tw-summary-native dsh-tw-toolcard-native`},p?c.createElement(`div`,{className:`dsh-tw-summary-state-detail`},_(`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`},_(`chrome.summaryBarTitle`)),c.createElement(`span`,{className:`dsh-tw-summary-bar-hint`},_(`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:_(`chrome.summaryRefreshTitle`)},_(`chrome.summaryRefresh`))),T)}function mx(e,t){if(!(e===void 0||t.showSessionTab===!1))return st(t.tabLabel),e.inject(`conversation.view`,()=>e.register({name:`conversation.view`,id:`dsh-tiddlywiki-summary`,order:20,label:dx},px))}function $(e,t,n){let r=document.createElement(e);return t!==void 0&&(r.className=t),n!==void 0&&(r.textContent=n),r}function hx(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 gx(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 _x;function vx(e){_x=e}let yx=`overview`;function bx(e){yx=e}function xx(e,t){_x=e,t||(yx=`library`)}function Sx(){_x=void 0}function Cx(e){return _x===void 0?e:`${e}?wiki=${encodeURIComponent(_x)}`}function wx(){return{archive:_(`settings.icon.archive`),"archive-check":_(`settings.icon.archiveCheck`),"archive-off":_(`settings.icon.archiveOff`),unarchive:_(`settings.icon.unarchive`),database:_(`settings.icon.database`),data:_(`settings.icon.data`),folder:_(`settings.icon.folder`),globe:_(`settings.icon.globe`),branch:_(`settings.icon.branch`),list:_(`settings.icon.list`),checklist:_(`settings.icon.checklist`),"flat-list":_(`settings.icon.flatList`),skill:_(`settings.icon.skill`),goal:_(`settings.icon.goal`),compact:_(`settings.icon.compact`),clock:_(`settings.icon.clock`),alarm:_(`settings.icon.alarm`),pin:_(`settings.icon.pin`),shield:_(`settings.icon.shield`),api:_(`settings.icon.api`),code:_(`settings.icon.code`),users:_(`settings.icon.users`),user:_(`settings.icon.user`),plugin:_(`settings.icon.plugin`),pinwheel:_(`settings.icon.pinwheel`),gauge:_(`settings.icon.gauge`),tree:_(`settings.icon.tree`),personalization:_(`settings.icon.personalization`),link:_(`settings.icon.link`),search:_(`settings.icon.search`),settings:_(`settings.icon.settings`),sparkle:_(`settings.icon.sparkle`),think:_(`settings.icon.think`),light:_(`settings.icon.light`),dark:_(`settings.icon.dark`),refresh:_(`settings.icon.refresh`),book:_(`settings.icon.book`),briefcase:_(`settings.icon.briefcase`),home:_(`settings.icon.home`),notebook:_(`settings.icon.notebook`),flask:_(`settings.icon.flask`),star:_(`settings.icon.star`)}}const Tx=[`📚`,`💼`,`🏠`,`✍️`,`🧪`,`🌱`,`🎯`,`🗂️`];function Ex(e){let t=wx(),n=[{value:``,label:_(`settings.iconPicker.default`),kind:`default`}];for(let e of qe)n.push({value:e,label:t[e]??e,kind:`name`});for(let e of Tx)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 Dx(e,t){if(e.replaceChildren(),t.length===0){e.innerHTML=Ue;return}let n=Ke[t];if(n!==void 0){e.innerHTML=n;return}e.textContent=t}function Ox(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?_(`settings.iconPicker.titleDefault`):_(`settings.iconPicker.titleCurrent`,{icon:e});let r=$(`span`,`dsh-tw-settings-iconbtn-face`);return Dx(r,e),n.append(r,$(`span`,`dsh-tw-settings-iconbtn-label`,_(`settings.iconPicker.label`))),n}function kx(e,t,n){document.querySelector(`.dsh-tw-iconpicker`)?.remove();let r=Ex(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`,_(`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`);Dx(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`,_(`settings.iconPicker.prev`));e.type=`button`,e.disabled=a===0,e.addEventListener(`click`,()=>{--a,f()});let t=$(`span`,`dsh-tw-settings-muted`,_(`settings.iconPicker.page`,{page:a+1,pages:i,total:r.length})),n=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,_(`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`,_(`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 Ax(e,t,n){let r=$(`section`,`dsh-tw-settings-section`);r.append($(`h3`,`dsh-tw-settings-h`,_(`settings.wikis.title`)));let i=$(`div`,`dsh-tw-settings-muted`,_(`settings.wikis.loading`)),a=$(`div`,`dsh-tw-settings-row`),o=$(`div`),s=$(`input`,`dsh-tw-settings-input`);s.placeholder=_(`settings.wikis.rootPlaceholder`);let c=$(`input`,`dsh-tw-settings-input`);c.placeholder=_(`settings.wikis.namePlaceholder`);let l=$(`input`,`dsh-tw-settings-input`);l.placeholder=_(`settings.wikis.labelPlaceholder`);let u=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,_(`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`,_(`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 gx(ve,{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(_(`settings.wikis.partialFailure`,{message:i.map(e=>_(`settings.wikis.failureItem`,{id:e.id,message:e.message})).join(_(`settings.wikis.failureJoin`))})),h(r),await n()}catch(e){if(t())return;k(_(`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 gx(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(r),signal:AbortSignal.timeout(18e4)});if(t())return;i.ok!==!0&&k(_(`settings.wikis.failed`,{message:i.error??_(`settings.wikis.unknownError`)})),await g(),await n()}catch(e){if(t())return;k(_(`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:_(`settings.wikis.unknownName`);a.replaceChildren($(`span`,`dsh-tw-settings-label`,_(`settings.wikis.modeLabel`)));let c=[[`single`,_(`settings.wikis.modeSingle`,{name:r})],[`multi`,_(`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`?_(`settings.wikis.switchToMulti`):_(`settings.wikis.switchToSingle`,{name:r}))&&p({action:`set-mode`,mode:t},_(`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`,_(`settings.wikis.rowTitle`,{mark:i?`★ `:``,label:t.label,id:t.id}))),r.append($(`div`,`dsh-tw-settings-muted`,[t.running?_(`settings.wikis.running`):_(`settings.wikis.stopped`),t.agentVisible?_(`settings.wikis.agentVisible`):_(`settings.wikis.agentHidden`),t.autostart?_(`settings.wikis.autostart`):_(`settings.wikis.onDemand`),t.path].join(` · `)));let a=$(`div`,`dsh-tw-settings-row`),s=_x===t.id,c=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn${s?` dsh-tw-settings-primary`:``}`,_(s?`settings.exitConfig`:`settings.wikis.configure`));c.type=`button`,c.title=_(s?`settings.wikis.exitConfigTitle`:`settings.wikis.configureTitle`,{label:t.label}),c.addEventListener(`click`,()=>{s?Sx():xx(t.id,s),n()});let u=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,t.running?_(`settings.wikis.stop`):_(`settings.wikis.start`));u.type=`button`,u.addEventListener(`click`,()=>{p({action:t.running?`stop`:`start`,id:t.id},t.running?_(`settings.wikis.stopping`):_(`settings.wikis.starting`))});let d=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,_(`settings.wikis.setDefault`));d.type=`button`,d.disabled=i,d.addEventListener(`click`,()=>{p({action:`set-default`,id:t.id},_(`settings.wikis.saving`))});let f=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,t.agentVisible?_(`settings.wikis.hideFromAgent`):_(`settings.wikis.showToAgent`));f.type=`button`,f.addEventListener(`click`,()=>{p({action:`update`,wiki:{...t,agentVisible:!t.agentVisible}},_(`settings.wikis.saving`))});let h=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,t.autostart?_(`settings.wikis.disableAutostart`):_(`settings.wikis.autostart`));h.type=`button`,h.addEventListener(`click`,()=>{p({action:`update`,wiki:{...t,autostart:!t.autostart}},_(`settings.wikis.saving`))});let g=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,_(`settings.wikis.removeFromList`));g.type=`button`,g.disabled=l.length<=1,g.addEventListener(`click`,()=>{window.confirm(_(`settings.wikis.removeConfirm`,{label:t.label,path:t.path}))&&p({action:`remove`,id:t.id},_(`settings.wikis.removing`))});let v=typeof t.icon==`string`?t.icon:``,y=Ox(v,_(`settings.wikis.iconAria`,{label:t.label}));if(y.addEventListener(`click`,()=>{kx(y,v,e=>{p(e.length>0?{action:`update`,wiki:{...t,icon:e}}:{action:`update`,wiki:{...t,icon:``}},_(`settings.wikis.saving`))})}),e.mode===`multi`){let e=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,_(`settings.wikis.moveDir`));e.type=`button`,e.addEventListener(`click`,()=>{let e=window.prompt(_(`settings.wikis.moveRootPrompt`,{label:t.label,root:t.root}),t.root);if(e===null)return;if(e.trim().length===0){k(_(`settings.wikis.rootRequired`));return}let n=window.prompt(_(`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(ge,r,_(`settings.wikis.moving`)):p({action:`update`,wiki:{...t,...r}},_(`settings.wikis.saving`))}),a.append(e)}a.append(c,u,d,f,h,y,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(_(`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},_(`settings.wikis.adding`))});let g=async()=>{if(!t())try{let e=await gx(ve);if(t())return;h(e)}catch(e){if(t())return;i.textContent=_(`settings.wikis.listFailed`,{message:e instanceof Error?e.message:String(e)})}};g()}function jx(e,t,n){(async()=>{try{let e=await gx(ve);if(t()||e.mode===`multi`)return}catch{}t()||Mx(e,t,n)})()}function Mx(e,t,n){let r=$(`section`,`dsh-tw-settings-section`);r.append($(`h3`,`dsh-tw-settings-h`,_(`settings.wikis.locationTitle`)));let i=$(`div`,`dsh-tw-settings-muted`,_(`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=_(`settings.wikis.rootPlaceholderSingle`),l.placeholder=_(`settings.wikis.folderPlaceholderSingle`);let u=$(`label`,`dsh-tw-settings-field`);u.append($(`span`,`dsh-tw-settings-label`,_(`settings.wikis.rootField`)),c);let d=$(`label`,`dsh-tw-settings-field`);d.append($(`span`,`dsh-tw-settings-label`,_(`settings.wikis.folderField`)),l);let f=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,_(`settings.wikis.switchHere`));f.type=`button`;let p=$(`button`,`dsh-tw-settings-btn`,_(`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`,_(`settings.wikis.locationHint`)),v=(e,t)=>{f.disabled=e,p.disabled=e,f.textContent=e?t:_(`settings.wikis.switchHere`)},y=async()=>{if(!t())try{let e=await gx(he);if(t())return;if(e.ok!==!0)throw Error(e.error??_(`settings.wikis.locationUnavailable`));let n=e.current??{};i.textContent=_(`settings.wikis.current`,{path:n.path??_(`settings.wikis.unknownPath`)});let r=n.source===`state`?_(`settings.wikis.sourceState`):n.source===`config`?_(`settings.wikis.sourceConfig`):_(`settings.wikis.sourceDefault`);a.textContent=_(`settings.wikis.sourceLine`,{source:r,path:e.default?.path??_(`settings.wikis.unknownPath`)}),o.textContent=e.stateFile===void 0?``:_(`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`,_(`settings.wikis.candidatesLabel`)));for(let e of u){let t=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,e===`.`?_(`settings.wikis.rootItself`):e);t.type=`button`,t.title=_(`settings.wikis.candidateTitle`,{name:e}),t.addEventListener(`click`,()=>{l.value=e}),h.append(t)}}}catch(e){if(t())return;i.textContent=_(`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(_(`settings.wikis.needRoot`));return}window.confirm(_(`settings.wikis.switchConfirm`,{path:`${e}\\${t}`}))&&(v(!0,_(`settings.wikis.switching`)),(async()=>{try{let r=await gx(ge,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({root:e,name:t}),signal:AbortSignal.timeout(12e4)});r.warning===void 0?k(_(`settings.wikis.switched`,{path:r.path??``})):k(_(`settings.wikis.switchedWarn`,{path:r.path??``,warning:r.warning})),je(),await y(),await n()}catch(e){k(_(`settings.wikis.switchFailed`,{message:e instanceof Error?e.message:String(e)})),await y()}finally{v(!1,``)}})())}),p.addEventListener(`click`,()=>{window.confirm(_(`settings.wikis.resetConfirm`))&&(v(!0,_(`settings.wikis.switching`)),(async()=>{try{let e=await gx(_e,{method:`POST`,headers:{"content-type":`application/json`},body:`{}`,signal:AbortSignal.timeout(12e4)});k(e.warning===void 0?_(`settings.wikis.resetDone`,{path:e.path??``}):_(`settings.wikis.resetWarn`,{warning:e.warning})),je(),await y(),await n()}catch(e){k(_(`settings.wikis.resetFailed`,{message:e instanceof Error?e.message:String(e)})),await y()}finally{v(!1,``)}})())}),r.append(i,a,o,u,d,m,h,s,g),e.append(r),y()}function Nx(e,t,n,r,i,a=()=>!1){let o=$(`section`,`dsh-tw-settings-section`);o.append($(`h3`,`dsh-tw-settings-h`,_(`config.title`)));let s=t.note??{},c=t.git??{},l=t.ui??{},u=[],d=(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}),o.append(i)},f=(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=_(`config.token.showHide`),i.setAttribute(`aria-label`,_(`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}),o.append(a)},p=(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}),o.append(i),r},m=(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 s=()=>{let e=i.value.trim();if(e.length===0)return _(`config.num.empty`);let t=Number(e);if(!Number.isFinite(t))return _(`config.num.nan`);if(r?.integer===!0&&!Number.isInteger(t))return _(`config.num.integer`);if(r?.min!==void 0&&t<r.min)return _(`config.num.belowMin`,{min:r.min});if(r?.max!==void 0&&t>r.max)return _(`config.num.aboveMax`,{max:r.max})},c=()=>{let e=s();a.textContent=e===void 0?``:_(`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`,c);let l=()=>{let e=i.value.trim(),t=Number(e);return e.length===0||!Number.isFinite(t)?e:t},d=$(`label`,`dsh-tw-settings-field`);d.append($(`span`,`dsh-tw-settings-label`,t),i,a),u.push({key:e,initial:n,read:l,changed:()=>l()!==n,invalid:s}),c(),o.append(d)},h=(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}),o.append(a),i},g=(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}),o.append(a),i};d(`note.tag`,_(`config.note.tag`),typeof s.tag==`string`?s.tag:`inbox`),p(`note.workspaceMark`,_(`config.note.workspaceMark`),s.workspaceMark!==!1),p(`git.autoCommit`,_(`config.git.autoCommit`),c.autoCommit!==!1),m(`git.debounceMs`,_(`config.git.debounceMs`),typeof c.debounceMs==`number`?c.debounceMs:6e4,{min:0,max:36e5,step:1e3,integer:!0}),d(`git.remote`,_(`config.git.remote`),typeof c.remote==`string`?c.remote:``),d(`git.branch`,_(`config.git.branch`),typeof c.branch==`string`?c.branch:`main`);let v=t.startup??{};m(`startup.readyTimeoutMs`,_(`config.startup.readyTimeoutMs`),typeof v.readyTimeoutMs==`number`&&v.readyTimeoutMs>0?v.readyTimeoutMs:6e4,{min:5e3,max:6e5,step:1e3}),p(`ui.showQuickNote`,_(`config.ui.showQuickNote`),l.showQuickNote!==!1),p(`ui.showQuickNoteDock`,_(`config.ui.showQuickNoteDock`),l.showQuickNoteDock!==!1),h(`ui.quickNoteMode`,_(`config.ui.quickNoteMode`),typeof l.quickNoteMode==`string`&&l.quickNoteMode===`card`?`card`:`native`,[{value:`native`,label:_(`config.ui.quickNoteModeNative`)},{value:`card`,label:_(`config.ui.quickNoteModeCard`)}]),i===`multi`?o.append($(`div`,`dsh-tw-settings-muted`,_(`config.ui.multiWikiSidebarHint`))):d(`ui.sidebarLabel`,_(`config.ui.sidebarLabel`),typeof l.sidebarLabel==`string`&&l.sidebarLabel.trim().length>0?l.sidebarLabel.trim():`TiddlyWiki`),p(`ui.showPanelStatus`,_(`config.ui.showPanelStatus`),l.showPanelStatus!==!1),p(`ui.showSyncButton`,_(`config.ui.showSyncButton`),l.showSyncButton!==!1),p(`ui.followDshTheme`,_(`config.ui.followDshTheme`),l.followDshTheme!==!1),d(`ui.darkPalette`,_(`config.ui.darkPalette`),typeof l.darkPalette==`string`&&l.darkPalette.trim().length>0?l.darkPalette.trim():`$:/palettes/CupertinoDark`),d(`ui.tabLabel`,_(`config.ui.tabLabel`),typeof l.tabLabel==`string`&&l.tabLabel.trim().length>0?l.tabLabel.trim():_(`frame.tabLabelDefault`)),p(`ui.showSessionTab`,_(`config.ui.showSessionTab`),l.showSessionTab!==!1),p(`ui.showRightbarTab`,_(`config.ui.showRightbarTab`),l.showRightbarTab!==!1);let y=l.sendToAgent??{};p(`ui.sendToAgent.enabled`,_(`config.ui.sendToAgent.enabled`),y.enabled!==!1),d(`ui.sendToAgent.endpoint`,_(`config.ui.sendToAgent.endpoint`),typeof y.endpoint==`string`?y.endpoint:``),f(`ui.sendToAgent.token`,_(`config.ui.sendToAgent.token`),typeof y.token==`string`?y.token:``);let b=l.allArticles??{};m(`ui.allArticles.pageSize`,_(`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`,_(`config.wechat.title`))),o.append($(`div`,`dsh-tw-settings-muted`,_(`config.wechat.hint`)));let x=t.wechat??{},S=p(`wechat.enabled`,_(`config.wechat.enabled`),x.enabled===!0);d(`wechat.command`,_(`config.wechat.command`),typeof x.command==`string`&&x.command.trim().length>0?x.command.trim():`opencli`),h(`wechat.adapter`,_(`config.wechat.adapter`),x.adapter===`publish-note-imgs`?`publish-note-imgs`:`publish-note`,[{value:`publish-note`,label:_(`config.wechat.adapterDefault`)},{value:`publish-note-imgs`,label:_(`config.wechat.adapterImgs`)}]),f(`wechat.token`,_(`config.wechat.token`),typeof x.token==`string`?x.token:``),d(`wechat.dsn`,_(`config.wechat.dsn`),typeof x.dsn==`string`?x.dsn:``);let C=t.prompt??{};o.append($(`h3`,`dsh-tw-settings-h`,_(`config.prompt.title`))),o.append($(`div`,`dsh-tw-settings-muted`,_(`config.prompt.hint`)));let w=p(`prompt.enabled`,_(`config.prompt.enabled`),C.enabled!==!1),T=h(`prompt.mode`,_(`config.prompt.mode`),C.mode===`full`?`full`:`slim`,[{value:`slim`,label:_(`config.prompt.modeSlim`)},{value:`full`,label:_(`config.prompt.modeFull`)}]),ee=g(`prompt.extra`,_(`config.prompt.extra`),typeof C.extra==`string`?C.extra:``,5),E=g(`prompt.override`,_(`config.prompt.override`),typeof C.override==`string`?C.override:``,8),D=()=>u.some(e=>(e.key.startsWith(`prompt.`)||e.key===`wechat.enabled`)&&e.changed()),O=$(`button`,`dsh-tw-settings-btn`,_(`config.prompt.preview`));O.type=`button`,O.title=_(`config.prompt.previewTitle`);let te=$(`pre`,`dsh-tw-settings-prompt-preview`);te.hidden=!0,O.addEventListener(`click`,()=>{if(!te.hidden){te.hidden=!0,te.textContent=``;return}O.disabled=!0,(async()=>{try{let e=await gx(Cx(ce),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({enabled:w.checked,mode:T.value,extra:ee.value,override:E.value,wechat:S.checked})});if(e.ok!==!0)throw Error(e.error??_(`config.prompt.fetchFailed`));te.textContent=e.enabled===!1?_(`config.prompt.previewDisabled`):_(`config.prompt.previewHeader`,{mode:e.mode??``,length:e.length??0,dirty:D()?_(`config.prompt.previewDirty`):``,text:e.text??``}),te.hidden=!1}catch(e){k(_(`config.prompt.readFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{O.disabled=!1}})()}),o.append(O,te);let ne=t.bridge??{};p(`bridge.enabled`,_(`config.bridge.enabled`),ne.enabled===!0),m(`bridge.port`,_(`config.bridge.port`),typeof ne.port==`number`&&ne.port>0?ne.port:8618,{min:1,max:65535,step:1,integer:!0}),f(`bridge.token`,_(`config.bridge.token`),typeof ne.token==`string`?ne.token:``),d(`bridge.tag`,_(`config.bridge.tag`),typeof ne.tag==`string`&&ne.tag.trim().length>0?ne.tag.trim():`clip`);let re=h(`bridge.wiki`,_(`config.bridge.wiki`),typeof ne.wiki==`string`?ne.wiki.trim():``,[{value:``,label:_(`config.clipWiki.followDefault`)}]);(async()=>{try{let e=await gx(ve);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=_(`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=_(`config.clipWiki.option`,{label:n.label,id:n.id,suffix:n.running?``:_(`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?_(`config.clipWiki.notInList`,{current:n}):_(`config.clipWiki.notInListWithDefault`,{current:n,label:r}),re.append(e)}re.value=n}catch{}})();let ie=hx(r.saveError??``);ie.hidden=r.saveError===void 0;let ae=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,_(`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(_(`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(_(`config.noChanges`)),ae.disabled=!1;return}try{await gx(Cx(ue),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),je(),r.saveError=void 0,ie.hidden=!0,ie.textContent=``,k(_(`config.saved`)),n()}catch(e){r.saveError=_(`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 Px(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)),v=$(`section`,`dsh-tw-settings-section`);v.append($(`h3`,`dsh-tw-settings-h`,_(`settings.plugin.title`)));let y=$(`div`,`dsh-tw-settings-muted`,_(`settings.plugin.hint`));v.append(y);let b=$(`input`,`dsh-tw-settings-input dsh-tw-settings-search`);b.placeholder=_(`settings.plugin.searchPlaceholder`);let x=$(`div`,`dsh-tw-settings-list`),S=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,_(`settings.plugin.apply`));S.type=`button`;let C=()=>{S.disabled=a.plugins===void 0},w=e=>{x.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`,_(`settings.plugin.badgeDisabled`));e.dataset.state=`disabled`,e.title=_(`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`,_(`settings.plugin.badgeInstalled`));e.dataset.state=`update`,e.title=_(`settings.plugin.badgeInstalledTitle`),i.append(e)}i.append(s),x.append(i)}};if(b.addEventListener(`input`,()=>w(b.value)),S.addEventListener(`click`,()=>{a.plugins!==void 0&&(S.disabled=!0,(async()=>{try{await gx(Cx(le),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({plugins:[...f()]})}),a.plugins=void 0,k(_(`settings.plugin.applied`)),at(),Ee(),i()}catch(e){k(_(`settings.catalog.applyFailed`,{message:e instanceof Error?e.message:String(e)})),C()}})())}),w(``),C(),v.append(b,x,S),e.append(v),r!=null){let t=new Set(o.map(e=>e.title)),n=(r.wikiPlugins??[]).filter(e=>!t.has(e.title)||h.has(e.title));if(n.length>0){let t=$(`section`,`dsh-tw-settings-section`);t.append($(`h3`,`dsh-tw-settings-h`,_(`settings.wikiPlugins.title`))),t.append($(`div`,`dsh-tw-settings-muted`,_(`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`,_(`settings.wikiPlugins.disabled`));e.dataset.state=`disabled`,e.title=_(`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`,_(`settings.themes.title`)));let ee=$(`div`,`dsh-tw-settings-muted`,_(`settings.themes.hint`)),E=$(`div`,`dsh-tw-settings-row dsh-tw-settings-head`);E.append($(`span`,`dsh-tw-settings-col`,_(`settings.themes.colLoad`)),$(`span`,`dsh-tw-settings-col`,_(`settings.themes.colActive`)),$(`span`,`dsh-tw-settings-name`,_(`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`,_(`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=_(`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=_(`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 gx(Cx(le),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({themes:[...p()],themeActive:re()})}),a.themes=void 0,a.themeActive=void 0,k(_(`settings.themes.applied`)),at(),Ee(),i()}catch(e){k(_(`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`,_(`settings.langs.title`)));let ce=$(`div`,`dsh-tw-settings-muted`,_(`settings.langs.hint`)),ue=$(`div`,`dsh-tw-settings-list`),de=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,_(`settings.langs.apply`));de.type=`button`;let fe=()=>{de.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,fe()});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),ue.append(n)}de.addEventListener(`click`,()=>{a.languages!==void 0&&(de.disabled=!0,(async()=>{try{await gx(Cx(le),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({languages:[...m()]})}),a.languages=void 0,k(_(`settings.langs.applied`)),at(),Ee(),i()}catch(e){k(_(`settings.catalog.applyFailed`,{message:e instanceof Error?e.message:String(e)})),fe()}})())}),fe(),se.append(ce,ue,de),e.append(se)}function Fx(e,t){let n=$(`section`,`dsh-tw-settings-section`);n.append($(`h3`,`dsh-tw-settings-h`,_(`settings.seeds.title`)));let r=$(`div`,`dsh-tw-settings-muted`,_(`settings.seeds.hint`)),i=$(`div`,`dsh-tw-settings-list`),a=$(`div`,`dsh-tw-settings-muted`),o=async()=>{if(!t())try{let e=await gx(Cx(fe));if(t())return;if(e.ok!==!0||!Array.isArray(e.items))throw Error(e.error??_(`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?_(`settings.seeds.present`):_(`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`,_(`settings.seeds.updateChip`)):void 0;c!==void 0&&(c.dataset.state=`update`,c.title=_(`settings.seeds.updateTitle`));let l=t.userModified===!0?$(`span`,`dsh-tw-settings-chip`,_(`settings.seeds.modifiedChip`)):void 0;l!==void 0&&(l.dataset.state=`missing`,l.title=_(`settings.seeds.modifiedTitle`));let u=$(`button`,`dsh-tw-settings-btn`,t.updateAvailable===!0?_(`settings.seeds.updateToBuiltin`):_(`settings.seeds.reinit`));u.type=`button`,u.title=_(`settings.seeds.rewriteTitle`,{title:t.title}),u.addEventListener(`click`,()=>{if(t.updateAvailable===!0){let e=t.userModified===!0?_(`settings.seeds.overwriteModified`,{title:t.title}):t.userModified===void 0?_(`settings.seeds.overwriteUnknown`,{title:t.title}):``;if(!window.confirm(_(`settings.seeds.overwriteConfirm`,{warning:e.length>0?`${e}\n\n`:``})))return}u.disabled=!0,u.textContent=_(`settings.seeds.running`),(async()=>{try{let e=await fetch(Cx(pe),{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(_(`settings.seeds.reinitFailed`,{message:n?.error??n?.results?.[0]?.error??`HTTP ${e.status}`})):k(_(`settings.seeds.reinitDone`,{title:t.title})),o()}catch(e){k(_(`settings.seeds.reinitFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{u.disabled=!1,u.textContent=t.updateAvailable===!0?_(`settings.seeds.updateToBuiltin`):_(`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`,_(`settings.seeds.remove`));e.type=`button`,e.title=_(`settings.seeds.removeTitle`,{title:t.title}),e.addEventListener(`click`,()=>{window.confirm(_(`settings.seeds.removeConfirm`,{title:t.title}))&&(e.disabled=!0,e.textContent=_(`settings.seeds.removing`),(async()=>{try{let e=await fetch(Cx(me),{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(_(`settings.seeds.removeFailed`,{message:n?.error??n?.results?.[0]?.error??`HTTP ${e.status}`})):k(_(`settings.seeds.removeDone`,{title:t.title})),o()}catch(e){k(_(`settings.seeds.removeFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{e.disabled=!1,e.textContent=_(`settings.seeds.remove`)}})())}),d.append(e)}i.append(d)}a.textContent=_(`settings.seeds.statusLine`,{total:e.items.length,present:n,removable:r})}catch(e){if(t())return;a.textContent=_(`settings.seeds.loadStatusFailed`,{message:e instanceof Error?e.message:String(e)})}},s=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,_(`settings.seeds.runAll`));s.type=`button`,s.title=_(`settings.seeds.runAllTitle`),s.addEventListener(`click`,()=>{s.disabled=!0,s.textContent=_(`settings.seeds.running`),(async()=>{try{let e=await fetch(Cx(pe),{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(_(`settings.seeds.reinitFailed`,{message:t?.error??`HTTP ${e.status}`})):k(_(`settings.seeds.allReinitDone`)),o()}catch(e){k(_(`settings.seeds.reinitFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{s.disabled=!1,s.textContent=_(`settings.seeds.runAll`)}})()});let c=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-danger`,_(`settings.seeds.removeAll`));c.type=`button`,c.title=_(`settings.seeds.removeAllTitle`),c.addEventListener(`click`,()=>{window.confirm(_(`settings.seeds.removeAllConfirm`))&&(c.disabled=!0,c.textContent=_(`settings.seeds.removing`),(async()=>{try{let e=await fetch(Cx(me),{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(_(`settings.seeds.removeFailed`,{message:t?.error??`HTTP ${e.status}`})):k(_(`settings.seeds.allRemoved`)),o()}catch(e){k(_(`settings.seeds.removeFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{c.disabled=!1,c.textContent=_(`settings.seeds.removeAll`)}})())}),n.append(r,a,i,s,c),e.append(n),o()}function Ix(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`,_(`settings.loading`)));try{let e=gx(ve).then(e=>{u=typeof e?.mode==`string`?e.mode:void 0,d=e}).catch(()=>{u=void 0}),a=await gx(Cx(se));if(await e,t)return;l=!0,n.hidden=!0,n.replaceChildren(),Lx(r,a,f),Ux(i,a,f,()=>t,o,s,u,()=>{c!==_x&&(delete s.plugins,delete s.themes,delete s.languages,delete s.themeActive,c=_x)},zx(d,_x))}catch(e){if(t)return;l||i.replaceChildren($(`div`,`dsh-tw-settings-muted`,_(`settings.notLoaded`)));let r=$(`button`,`dsh-tw-settings-btn`,_(`settings.retry`));r.type=`button`,r.addEventListener(`click`,()=>{f()}),n.replaceChildren($(`span`,void 0,`${_(`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 Lx(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?_(`settings.gitDirty`):``:_(`settings.gitConflict`,{count:t.git.conflict.files.length})].filter(Boolean).join(` · `)),s=$(`button`,`dsh-tw-settings-btn`,_(`settings.sync`));s.type=`button`,s.title=_(`settings.syncTitle`),s.addEventListener(`click`,()=>{s.disabled=!0,s.textContent=_(`settings.syncing`),(async()=>{try{let e=await fetch(Cx(ie),{method:`POST`,signal:AbortSignal.timeout(12e4)}),t=Ce(await e.json().catch(()=>null),e.status);k(t.ok?_(`settings.syncDone`,{message:t.message}):_(`settings.syncFailed`,{message:t.message}))}catch(e){k(_(`settings.syncFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{s.disabled=!1,s.textContent=_(`settings.sync`),n()}})()});let c=$(`button`,`dsh-tw-settings-btn`,_(`settings.restart`));c.type=`button`,c.addEventListener(`click`,()=>{c.disabled=!0,c.textContent=_(`settings.restarting`),(async()=>{try{await gx(Cx(de),{method:`POST`,signal:AbortSignal.timeout(12e4)}),k(_(`settings.restarted`)),at(),Ee()}catch(e){k(_(`settings.restartFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{c.disabled=!1,c.textContent=_(`settings.restart`),n()}})()}),e.append(a,o,s,c)}const Rx=[{id:`overview`,label:()=>_(`settings.tabOverview`)},{id:`library`,label:()=>_(`settings.tabLibrary`)},{id:`global`,label:()=>_(`settings.tabGlobal`)}];function zx(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 Bx(e,t,n,r){if(t!==`multi`)return;let i=$(`div`,`dsh-tw-settings-scopebar`),a=r===void 0||r.length===0?_(`settings.scopeFollowDefault`):_(_x===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`,_(_x===void 0?`settings.scopeHintPick`:`settings.scopeHintEditing`))),_x!==void 0){let e=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn dsh-tw-settings-scopebar-exit`,_(`settings.exitConfig`));e.type=`button`,e.title=_(`settings.scopeExitTitle`),e.addEventListener(`click`,()=>{vx(void 0),n()}),i.append(e)}e.append(i)}function Vx(e,t,n){if(t!==`multi`)return;let r=$(`div`,`dsh-tw-settings-tabs`);r.setAttribute(`role`,`tablist`);for(let e of Rx){let t=yx===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`,()=>{yx!==e.id&&(bx(e.id),n())}),r.append(i)}e.append(r)}function Hx(e){e.append($(`div`,`dsh-tw-settings-muted`,_(`settings.pickLibraryHint`)))}function Ux(e,t,n,r,i,a,o,s,c){e.replaceChildren(),s?.(),typeof t.configError==`string`&&t.configError.length>0&&e.append(hx(_(`settings.configInactive`,{message:t.configError})));let l=JSON.stringify(t.config??{}),u=i.wiki!==_x,d=i.host!==void 0&&(u||i.signature!==l),f=i.isDirty?.()===!0;if(d&&f&&!u&&e.append(hx(_(`settings.configStale`))),i.host===void 0||u||d&&!f){let e=$(`div`,`dsh-tw-settings-confighost`);Nx(e,t.config??{},n,i,o,r),i.host=e,i.signature=l,i.wiki=_x}Vx(e,o,n),Bx(e,o,n,c);let p=o===`multi`,m=!p||yx===`overview`,h=!p||yx===`library`,g=!p||yx===`global`,v=!p||_x!==void 0;g&&e.append(i.host),m&&(Ax(e,r,n),jx(e,r,n)),h&&v?(Px(e,t.info,t.catalog,t.runtimePlugins,n,a),Fx(e,r)):h&&Hx(e)}function Wx(){let e=c.useRef(null);return c.useEffect(()=>{let t=e.current;return t===null?void 0:Ix(t)},[]),c.createElement(`div`,{ref:e})}function Gx(e){return typeof e==`object`&&!!e&&e.kind===`tool-result`}function Kx(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 qx(e){try{let t=JSON.parse(e);return typeof t==`object`&&t&&!Array.isArray(t)?t:{}}catch{return{}}}function Jx(e){return Array.isArray(e)?e.filter(e=>typeof e?.text==`string`).map(e=>e.text).join(`
|
|
964
|
-
`):``}function Yx(e){return typeof e==`string`?e:``}const Xx={tiddlywiki_get:()=>_(`card.toolGet`),tiddlywiki_search:()=>_(`card.toolSearch`),tiddlywiki_recent:()=>_(`card.toolRecent`),tiddlywiki_list_tags:()=>_(`card.toolListTags`),tiddlywiki_put:()=>_(`card.toolPut`),tiddlywiki_batch_put:()=>_(`card.toolBatchPut`),tiddlywiki_append:()=>_(`card.toolAppend`),tiddlywiki_rename:()=>_(`card.toolRename`),tiddlywiki_delete:()=>_(`card.toolDelete`),tiddlywiki_trash:()=>_(`card.toolTrash`),tiddlywiki_backlinks:()=>_(`card.toolBacklinks`),tiddlywiki_attach:()=>_(`card.toolAttach`),tiddlywiki_lint:()=>_(`card.toolLint`),tiddlywiki_git_sync:()=>_(`card.toolGitSync`),tiddlywiki_git_resolve:()=>_(`card.toolGitResolve`)};function Zx(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 Qx(e){let t=Xx[e.toolName]?.()??e.toolName,n=eS(),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:_(`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},_(`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 $x=c.createContext(void 0);function eS(){return c.useContext($x)}function tS(e){let[t,n]=c.useState(void 0);return c.useEffect(()=>{if(typeof e!=`string`||e.length===0){n(void 0);return}let t=!0;return Xb(e).then(e=>{t&&n(e)}),()=>{t=!1}},[e]),t}async function nS(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 rS(e,t){return ux(e,1e4,t)}function iS(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 aS=new Map;function oS(e,t){return`${e??``}\u0000${t}`}function sS(e,t){let n=oS(e,t),r=aS.get(n);if(r!==void 0){if(Date.now()-r.at>3e5){aS.delete(n);return}return aS.delete(n),aS.set(n,r),r}}function cS(e,t,n){let r=oS(e,t);for(aS.delete(r),aS.set(r,{at:Date.now(),...n});aS.size>50;){let e=aS.keys().next().value;if(e===void 0)break;aS.delete(e)}}function lS(e,t){e.length!==0&&(aS.delete(oS(t,e)),aS.delete(oS(void 0,e)))}function uS(e,t){let n=e.join(`\0`);c.useEffect(()=>{for(let e of n.split(`\0`))lS(e,t)},[n,t])}function dS(e){let{title:t,fresh:n}=e,r=eS(),{loading:i,data:a}=iS(async()=>{n===!0&&lS(t,r);let e=sS(r,t);if(e!==void 0)return{get:e.get,html:e.html};let[i,a]=await Promise.all([nS(Se(`${T}?title=${encodeURIComponent(t)}`,r)),rS(t,r)]);return typeof a==`string`&&a.length>0&&cS(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`},_(`card.rendering`)):o!==null&&o.notFound===!0?c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},_(`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`},_(`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(Qx,{toolName:e.toolName,title:t,subtitle:e.subtitle,tags:u,onOpen:Zx(t,r),foot:d===void 0?void 0:_(`card.modifiedAt`,{modified:d})},l)}function fS(e){let t=eS(),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:`${xe(t===void 0?void 0:`multi`,t,C).relative}#${encodeURIComponent(e.title)}`,onClick:Zx(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 pS(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(fS,{key:`${e.title}-${t}`,...e}))),c.createElement(Qx,{toolName:e.toolName,title:e.title,subtitle:e.subtitle},n)}function mS(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 hS(e){let t=Yx(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=mS(e.text);r!==null&&n.set(`workspace`,r);let i=n.toString(),a=eS(),o=iS(()=>nS(Se(`${ne}?${i}`,a)),[i,a]).data,s=(Array.isArray(o?.items)?o.items:[]).map(e=>({title:Yx(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=_(`card.scopeNarrowed`,{prefix:`ws/`,id:u}):u!==null&&o?.fellBack===!0&&(d=_(`card.scopeWidened`,{prefix:`ws/`,id:u}));let f=`${_(`card.queryLabel`,{query:t||_(`card.allQuery`)})}${l===void 0?``:_(`card.totalHits`,{total:l})}${d}`;return c.createElement(pS,{toolName:e.toolName,title:t.length>0?t:_(`card.searchTitle`),subtitle:f,rows:s,fallbackText:_(`card.noMatches`)})}function gS(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=eS(),i=iS(()=>nS(Se(`${te}?${n}`,r)),[n,r]).data,a=(Array.isArray(i?.items)?i.items:[]).map(e=>({title:Yx(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(pS,{toolName:e.toolName,title:_(`card.recentTitle`),subtitle:a.length>0?_(`card.recentCount`,{count:a.length}):``,rows:a,fallbackText:_(`card.noNotes`)})}function _S(e){let t=(Array.isArray(e.args.items)?e.args.items:[]).map(e=>typeof e==`object`&&e&&typeof e.title==`string`?Yx(e.title):null).filter(e=>e!==null&&e.length>0).map(e=>({title:e}));return uS(t.map(e=>e.title),eS()),c.createElement(pS,{toolName:e.toolName,title:_(`card.toolBatchPut`),subtitle:t.length>0?_(`card.batchCount`,{count:t.length}):_(`card.batchNoItems`),rows:t,fallbackText:_(`card.batchEmpty`)})}function vS(e){let t=eS(),n=e.title.length>0?c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},_(`card.attachSavedRendered`)):c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},_(`card.attachSaved`));return c.createElement(Qx,{toolName:e.toolName,title:e.title.length>0?e.title:void 0,...e.title.length>0?{onOpen:Zx(e.title,t)}:{}},n)}function yS(e){let t=eS(),n=iS(()=>nS(Se(`${O}?limit=60&sort=count`,t)),[t]).data,r=(Array.isArray(n?.items)?n.items:[]).map(e=>({tag:Yx(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`},_(`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`},_(`card.tagsMore`,{count:a-i.length}))]:[]),c.createElement(Qx,{toolName:e.toolName,title:_(`card.tagsTitle`),subtitle:_(`card.tagsTotal`,{total:a})},o)}function bS(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`},_(`card.noResult`));return c.createElement(Qx,{toolName:e.toolName},t)}function xS(e){uS([e.title],eS());let t=e.title.length>0?c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},_(`card.deletedTiddler`,{title:e.title})):c.createElement(`pre`,{className:`dsh-tw-toolcard-fallback`},e.text||_(`card.deleted`));return c.createElement(Qx,{toolName:e.toolName,title:e.title.length>0?e.title:void 0},t)}function SS(e){if(e===C)return;if(!e.startsWith(C))return null;let t=e.slice(C.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 CS(){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=SS(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 wS(e,t){switch(e){case`tiddlywiki_get`:case`tiddlywiki_put`:case`tiddlywiki_append`:case`tiddlywiki_delete`:case`tiddlywiki_attach`:case`tiddlywiki_backlinks`:return Yx(t.title);case`tiddlywiki_rename`:return Yx(t.newTitle);case`tiddlywiki_search`:return Yx(t.query);default:return``}}function TS(e){let t=tS(e.sessionId);return c.createElement($x.Provider,{value:t},c.createElement(ES,e))}function ES(e){let t=e.block,n=e.toolName,r=Gx(t),i=Kx(t),a=n!==void 0&&n.length>0?n:i?.name??``,o=qx(i?.argsRaw??``),s=r?Jx(t.content):``;if(i===null)return c.createElement(Qx,{toolName:a},c.createElement(`pre`,{className:`dsh-tw-toolcard-fallback`},s||_(`card.noCallInfo`)));if(!r)return c.createElement(Qx,{toolName:a,title:wS(a,o)},c.createElement(`div`,{className:`dsh-tw-toolcard-pending`},_(`card.pending`)));if(t.isError===!0)return c.createElement(Qx,{toolName:a,title:wS(a,o)},c.createElement(`div`,{className:`dsh-tw-toolcard-error`},s||_(`card.callFailed`)));switch(a){case`tiddlywiki_get`:return c.createElement(dS,{toolName:a,title:Yx(o.title),subtitle:_(`card.subRead`)});case`tiddlywiki_put`:return c.createElement(dS,{toolName:a,title:Yx(o.title),subtitle:_(`card.subWritten`),fresh:!0});case`tiddlywiki_append`:return c.createElement(dS,{toolName:a,title:Yx(o.title),subtitle:_(`card.subAppended`),fresh:!0});case`tiddlywiki_rename`:return c.createElement(dS,{toolName:a,title:Yx(o.newTitle),subtitle:_(`card.subRenamed`,{old:Yx(o.oldTitle)}),fresh:!0});case`tiddlywiki_delete`:return c.createElement(xS,{toolName:a,title:Yx(o.title),text:s});case`tiddlywiki_attach`:return c.createElement(vS,{toolName:a,title:Yx(o.title)});case`tiddlywiki_batch_put`:return c.createElement(_S,{toolName:a,args:o});case`tiddlywiki_search`:return c.createElement(hS,{toolName:a,args:o,text:s});case`tiddlywiki_recent`:return c.createElement(gS,{toolName:a,args:o});case`tiddlywiki_list_tags`:return c.createElement(yS,{toolName:a});case`tiddlywiki_git_sync`:case`tiddlywiki_git_resolve`:return c.createElement(bS,{toolName:a,text:s});default:return c.createElement(Qx,{toolName:a,title:wS(a,o)},c.createElement(`pre`,{className:`dsh-tw-toolcard-fallback`},s||_(`card.done`)))}}const DS=[`tiddlywiki_get`,`tiddlywiki_search`,`tiddlywiki_recent`,`tiddlywiki_list_tags`,`tiddlywiki_put`,`tiddlywiki_batch_put`,`tiddlywiki_append`,`tiddlywiki_rename`,`tiddlywiki_delete`,`tiddlywiki_trash`,`tiddlywiki_backlinks`,`tiddlywiki_attach`,`tiddlywiki_lint`,`tiddlywiki_git_sync`,`tiddlywiki_git_resolve`];function OS(e){let t=[];for(let n of DS)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}`},TS));r!==void 0&&t.push(r)}catch(e){console.error(`[dsh-tiddlywiki] register toolview ${n} failed:`,e)}return t}const kS=`dsh-tiddlywiki`,AS=`dsh-tiddlywiki/rightbar`;function jS(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=zt(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(rt,{detail:AS}));let e=e=>{e.detail!==AS&&o()};return document.addEventListener(rt,e),()=>document.removeEventListener(rt,e)},[a,o]),c.createElement(`div`,{ref:r,className:`dsh-tw-rightbar-tab`})}function MS(){return{id:kS,kind:`dsh-tiddlywiki`,title:()=>ct(),guide:[{order:10,title:()=>_(`frame.rightbarTitle`),description:()=>_(`frame.rightbarDescription`),icon:ut}]}}function NS(e,t){let n=[];try{n.push(e.register(MS()));let r=t.inject(`sidebar.right.pane.tab`,()=>t.register({name:`sidebar.right.pane.tab`,key:kS},jS));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 Lt(),()=>{for(let e of n.splice(0))e()}}const PS=[`slots`];function FS(e){try{let t=[],n=!1,r=()=>{n=!0;for(let e of t.splice(0))e()},i=(e,t)=>{try{t()}catch(t){console.error(`[dsh-tiddlywiki] ${e} failed:`,t)}};i(`styles`,()=>t.push(b()));let a=new x,o,s;if(i(`quick-note widget`,()=>{o=Lb(),t.push(()=>o?.dispose())}),i(`sync controller`,()=>{s=Bb(),t.push(()=>s?.dispose())}),i(`sidebar entry`,()=>t.push(nt(a))),i(`center panel`,()=>t.push(Xt(a))),o!==void 0&&s!==void 0){let e=o,n=s;i(`knowledge FAB`,()=>t.push(Wb(a,e,n)))}i(`editor popup`,()=>t.push(ln)),e.slots!==void 0&&Me().then(r=>{if(n)return;let a=o;r.showQuickNoteDock&&a!==void 0&&i(`quick-note dock`,()=>{let n=e.slots?.inject(`conversation.input.dock`,()=>e.slots?.register({name:`conversation.input.dock`,id:`quick-note`,order:8,label:_(`chrome.dockQuickNote`)},Kb(a,lx())));n!==void 0&&t.push(n)}),i(`wiki scope seat`,()=>t.push(ax(e.slots,lx({blankOnly:!0})))),i(`session summary tab`,()=>{let n=mx(e.slots,r);n!==void 0&&t.push(n)})}).catch(e=>{console.error(`[dsh-tiddlywiki] ui config load failed:`,e)}),i(`rightbar mount`,()=>{let r,i=a=>{let o=e.get?.(`sidebarRightTabs`);if(o===void 0){a<6&&!n&&(r=window.setTimeout(()=>i(a+1),500*(a+1)));return}Me().then(r=>{if(n||!r.showRightbarTab)return;let i=NS(o,e.slots);i!==void 0&&t.push(i)}).catch(e=>{console.error(`[dsh-tiddlywiki] rightbar config load failed:`,e)})};t.push(()=>{r!==void 0&&window.clearTimeout(r)}),i(0)}),i(`tool views`,()=>{e.slots!==void 0&&t.push(...OS(e.slots))}),i(`wiki link interceptor`,()=>t.push(CS())),i(`settings section`,()=>{let n=e.slots?.inject(`settings.section`,()=>e.slots?.register({name:`settings.section`,id:`dsh-tiddlywiki`,order:50,label:_(`frame.settingsSection`)},Wx));n!==void 0&&t.push(n)}),e.effect===void 0?window.addEventListener(`pagehide`,r,{once:!0}):e.effect(()=>r,`dsh-tiddlywiki: client mount`)}catch(e){console.error(`[dsh-tiddlywiki] client half failed to start:`,e)}}exports.apply=FS,exports.inject=PS,exports.name=`dsh-tiddlywiki/client`;
|
|
962
|
+
`}${e}\n`;n.dispatch({changes:{from:t,insert:r},selection:{anchor:t+r.length},scrollIntoView:!0}),n.focus()},focus:()=>n.focus()}}function fb(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=_(`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=`t('note.removeTag', { tag })`,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?.(O)??O;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=>{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`,`t('note.addTag', { tag })`),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 pb(e,t,n=e=>e){if(e.size>67108864){k(_(`note.uploadTooLarge`,{mb:64}));return}try{let r=await fetch(n(`${re}?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(_(`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(_(`note.uploaded`,{name:a}))}catch(e){k(_(`note.uploadFailed`,{message:e instanceof Error?e.message:String(e)}))}}function mb(e){let{editor:t,wikiQuery:n}=e,r=document.createElement(`button`);r.type=`button`,r.className=`dsh-tw-note-upload`,r.title=_(`note.uploadTitle`),r.textContent=_(`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??[]))pb(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))pb(e,t,n)}),{button:r}}function hb(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=_(`note.recentTitle`),o.textContent=_(`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=_(`note.editTitle`),c.textContent=_(`note.editInTw`);let l=document.createElement(`button`);return l.type=`button`,l.className=`dsh-tw-note-save`,l.textContent=_(`note.save`),s.append(c,l),r.append(i,s),{foot:r,footLeft:i,footRight:s,saveBtn:l,editBtn:c}}function gb(e){return e<10?`0${e}`:String(e)}const _b=`dsh-tw-note-draft-v1`,vb=`dsh-tw-note-window-id`,yb=(()=>{try{let e=sessionStorage.getItem(vb);if(e!==null&&e.length>0)return e;let t=Math.random().toString(36).slice(2,10);return sessionStorage.setItem(vb,t),t}catch{return Math.random().toString(36).slice(2,10)}})();function bb(){return`dsh-tw-note-draft-v1:${yb}`}function xb(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 Sb(e){try{return xb(localStorage.getItem(e))}catch{return null}}function Cb(){let e=Sb(bb());if(e!==null)return{draft:e,foreign:e.windowId!==void 0&&e.windowId!==yb};let t=Sb(_b);if(t===null)return null;let n={...t,windowId:yb};Tb(n);try{localStorage.removeItem(_b)}catch{}return{draft:n,foreign:!0}}function wb(e){Tb({...e,windowId:yb})}function Tb(e){try{localStorage.setItem(bb(),JSON.stringify({...e,windowId:yb}))}catch{}}function Eb(){try{localStorage.removeItem(bb())}catch{}}function Db(e,t,n){return`${e}\u0000${t}\u0000${n.join(``)}`}function Ob(e=new Date){return`${e.getFullYear()}-${gb(e.getMonth()+1)}-${gb(e.getDate())} ${gb(e.getHours())}:${gb(e.getMinutes())}`}function kb(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 _(`note.relJustNow`);if(r<60)return _(`note.relMinutes`,{n:r});let i=Math.floor(r/60);if(i<24)return _(`note.relHours`,{n:i});let a=Math.floor(i/24);return a<30?_(`note.relDays`,{n:a}):new Date(t).toLocaleDateString(h()===`zh`?`zh-CN`:`en-US`)}async function Ab(){let e=await Te();return typeof e?.note?.tag==`string`&&e.note.tag.length>0?e.note.tag:`inbox`}function jb(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(`${T}?title=${encodeURIComponent(e)}`),{signal:AbortSignal.timeout(1e4)}),c=await o.json().catch(()=>null);if(!o.ok||c?.ok!==!0||typeof c.title!=`string`){k(_(`note.loadFailed`,{message:c?.notFound===!0?_(`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(Db(c.title,c.text??``,c.tags??[])),r(),s(),k(_(`note.loaded`,{title:c.title})),l.editor.focus()}catch(e){k(_(`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=_(`note.loading`),e.recentWrap.append(r),(async()=>{try{let e=await(await fetch(n(`${te}?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?_(`note.noNotes`):_(`note.listFailed`,{message:e?.error??_(`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`,_(`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=[kb(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=_(`note.listFailed`,{message:e instanceof Error?e.message:String(e)}),n.recentWrap.append(r)}})()},close:s}}function Mb(e){let{isDisposed:t}=e,n,r=!1,i=`single`,a=[],o,s,c,l=()=>{};return{wikiQuery:e=>Se(e,n),ensureTarget:()=>(c??=Te().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 u=()=>{r||(n=Be(a,o))};u(),s??=ze(()=>{u(),l()}),l()}),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=>{l=e},syncDom:()=>{l()},dispose:()=>{s?.(),s=void 0}}}function Nb(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 Pb(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 Fb(e){let t,n=null,r=()=>{let t=e.getUi();t!==void 0&&(t.titleInput.value=Ob())},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){Eb();return}let a=Db(i,r,t.tagEditor.peekTags());n!==null&&a===n||Tb({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=Ob(),r.tagEditor.setTags([]),n=Db(r.titleInput.value.trim(),``,[]))},clearTimer:()=>{t!==void 0&&(clearTimeout(t),t=void 0)},setPersistedSignature:e=>{n=e},markPersisted:(e,t,r)=>{n=Db(e,t,r)}}}function Ib(e){let t=!1,n=t=>{Eb(),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(_(`note.saveEmpty`));return}let a=e.stoppedTarget();if(a!==void 0){k(_(`note.saveTargetStopped`,{label:a.label}));return}t=!0,r.saveBtn.disabled=!0,r.saveBtn.textContent=_(`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(E),{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(_(`note.saveConflict`));return}k(_(`note.saveFailed`,{message:c?.error??`HTTP ${s.status}`}));return}n(r),k(_(`note.saved`,{title:c.title??r.titleInput.value}))}catch(e){k(_(`note.saveFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{t=!1,r.saveBtn.disabled=!1,r.saveBtn.textContent=_(`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():Ob(),r=t.editor.getValue(),i=t.tagEditor.getTags();t.editBtn.disabled=!0,t.editBtn.textContent=_(`note.opening`);try{await e.postEditAndOpen(n,r,i)}finally{t.editBtn.disabled=!1,t.editBtn.textContent=_(`note.editInTw`)}}}}const Lb=`dsh-tw-note-state`;function Rb(){let e,t=!1,n=!1,r=!1,i,a=`inbox`,o=Mb({isDisposed:()=>t}),s=o.wikiQuery,c=Fb({getUi:()=>e,isOpened:()=>n,isDisposed:()=>t}),{flush:l,schedule:u,hideBanner:d,resetTitle:f}=c,p=null,m=e=>{try{window.dispatchEvent(new CustomEvent(Lb,{detail:{open:e}}))}catch{}},h=async(e,t,n)=>{try{let r=await fetch(s(D),{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(_(`note.openFailed`,{message:i?.error??`HTTP ${r.status}`})),!1;if(typeof i.twUrl!=`string`||typeof i.draftTitle!=`string`)return k(_(`note.openNoEditorUrl`)),!1;Eb(),d(),c.markPersisted(e,t,n),p=null;let a=xe(o.getMode(),o.getTargetWiki(),i.twUrl,i.twUrlAbsolute);return rn(`${be(a.relative,a.absolute)}#${encodeURIComponent(i.draftTitle)}`,i.title??e),k(_(`note.openedInPopup`,{title:i.title??e})),!0}catch(e){return k(_(`note.openFailed`,{message:e instanceof Error?e.message:String(e)})),!1}},g=jb({getUi:()=>e,wikiQuery:s,hideDraftBanner:d,setLoadedToken:e=>{p=e},setPersistedSignature:c.setPersistedSignature}),v=()=>{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=_(`note.cardLabel`);let v=document.createElement(`button`);v.type=`button`,v.className=`dsh-tw-note-close`,v.title=_(`note.close`),v.textContent=`✕`,a.append(f,v);let y=document.createElement(`div`);y.className=`dsh-tw-note-draft`,y.hidden=!0;let b=document.createElement(`span`);b.className=`dsh-tw-note-draft-text`,b.textContent=_(`note.draftRestored`);let x=document.createElement(`button`);x.type=`button`,x.className=`dsh-tw-note-draft-discard`,x.textContent=_(`note.discard`),y.append(b,x);let S=document.createElement(`div`);S.className=`dsh-tw-note-fields`;let C=document.createElement(`input`);C.className=`dsh-tw-note-title`,C.placeholder=_(`note.titlePlaceholder`),C.setAttribute(`aria-label`,_(`note.titleAriaLabel`));let w=fb({onChange:u,wikiQuery:s});S.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=_(`note.writeTo`);let E=document.createElement(`select`);E.className=`dsh-tw-note-wiki-select`,E.setAttribute(`aria-label`,_(`note.writeToAriaLabel`)),T.append(ee,E);let D=document.createElement(`span`);D.className=`dsh-tw-note-wiki-hint`,D.hidden=!0,S.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?_(`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()?_(`note.defaultMark`):``;return t.textContent=e.running?`${e.label}${n}`:`${e.label}${n}${_(`note.notRunningSuffix`)}`,t})),E.value=o.getTargetWiki()??``,T.hidden=!1,O()}),o.ensureTarget().then(()=>o.syncDom()),C.addEventListener(`input`,u);let te,ne=db({placeholder:_(`note.editorPlaceholder`),onSave:()=>{te?.()},onChange:u}),{foot:re,saveBtn:ie,editBtn:ae}=hb({uploadButton:mb({editor:ne,wikiQuery:s}).button,onRecent:()=>{g.toggle()}}),oe=document.createElement(`div`);oe.className=`dsh-tw-note-recent`,oe.hidden=!0,r.append(a,y,S,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:y,bannerText:b,recentWrap:oe};let se=()=>{n=!1,t.hidden=!0,g.close(),m(!1)},ce=Ib({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()}),v.addEventListener(`click`,se),Pb({root:t,card:r,head:a,closeBtn:v}),x.addEventListener(`click`,()=>{Eb(),d(),c.resetForNewNote(),k(_(`note.draftDiscarded`))}),i=()=>{l()},window.addEventListener(`pagehide`,i)};return{async open(r){if(t||(v(),e===void 0||n))return;n=!0,e.root.hidden=!1,Nb(e.root,e.card,r),m(!0);let i=Cb(),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?_(`note.draftRestoredForeign`):_(`note.draftRestored`),e.draftBanner.hidden=!1,i?.foreign===!0&&(k(_(`note.draftRestoredForeignToast`)),wb(o));else{if(f(),a=await Ab(),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)&&!(an()&&!on())){r=!0;try{if(await o.ensureTarget(),t)return;let e=o.stoppedTarget();if(e!==void 0){k(_(`note.nativeTargetStopped`,{label:e.label}));return}let n=Cb(),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():Ob(),s=r?n.draft.text:``,c=[];if(r)c=n.draft.tags;else{if(a=await Ab(),t)return;c=[a]}n!==null&&n.foreign&&(n.draft.text.trim().length>0||n.draft.title.trim().length>0)&&(k(_(`note.draftRestoredForeignToast`)),wb(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 zb(e){return`${gb(e.getHours())}:${gb(e.getMinutes())}`}function Bb(e,t){let n=e?.git,r=[_(`frame.syncTooltip`)],i=`offline`;if(n==null||n.exists!==!0)r.push(_(`frame.gitUnavailable`));else{r.push(_(`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(_(`frame.ahead`,{n:t})),e>0&&r.push(_(`frame.behind`,{n:e})),n.dirty===!0?(i=`dirty`,r.push(_(`frame.dirty`,{n:n.dirtyFiles?.length??0}))):i=e>0?`behind`:`clean`}return t!==void 0&&r.push(_(`frame.lastSync`,{time:zb(t)})),{state:i,tooltip:r.join(` · `)}}function Vb(){let e={state:`offline`,tooltip:_(`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=Bb(n,t);(i.state!==e.state||i.tooltip!==e.tooltip)&&(e=i,o())},c=async()=>{if(i)return;let e=await Te();i||s(e)};return c(),n=window.setInterval(()=>{c()},3e4),{getState:()=>e,trigger:async()=>{if(i)return e;if(r)return k(_(`frame.syncing`)),e;r=!0,e={...e,state:`syncing`},o();try{let e=await fetch(ie,{method:`POST`,signal:AbortSignal.timeout(12e4)}),n=Ce(await e.json().catch(()=>null),e.status);n.ok?(t=new Date,k(_(`frame.syncDone`,{message:n.message}))):k(_(`frame.syncFailed`,{message:n.message}))}catch(e){k(_(`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 Hb(){let e=await Te(),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 Ub(){let e=await Me();return{showQuickNote:e.showQuickNote,showPanelStatus:e.showPanelStatus,showSyncButton:e.showSyncButton}}async function Wb(){let e=await Te();if(e===null)return{state:`failed`,text:_(`chrome.fabStatusUnreachable`),logs:[]};let t=Array.isArray(e.logs)?e.logs.filter(e=>typeof e==`string`):[];return e.status===`running`?{state:`running`,text:_(`chrome.fabTwOnline`,{url:e.url??``}),logs:t}:e.status===`starting`?{state:`starting`,text:_(`chrome.fabTwStarting`),logs:t}:{state:`failed`,text:e.error??_(`chrome.fabTwStatus`,{status:e.status??`?`}),logs:t}}function Gb(e,t,n){let r=!1,i,a,o,s,c,l,u,d,f=!1,p,m,h={state:`unknown`,text:_(`chrome.fabServiceUnknown`),logs:[]},g=()=>{f=!1,s!==void 0&&(s.hidden=!0),u!==void 0&&(u.hidden=!0)},v=e=>{if(!f)return;let t=e.target;i!==void 0&&i.contains(t)||g()},y=()=>{if(u===void 0)return;let e=[_(`chrome.fabTipTitle`,{text:h.text})];e.push(_(`chrome.fabTipSync`,{text:n.getState().tooltip})),h.logs.length>0&&(e.push(_(`chrome.fabTipLogs`)),e.push(...h.logs.slice(-3))),u.textContent=e.join(`
|
|
963
|
+
`)},b=()=>{let e=n.getState();o!==void 0&&(o.dataset.state=e.state),a!==void 0&&(a.title=_(`chrome.fabTitle`,{text:e.tooltip})),y()},x=async()=>{h=await Wb(),!r&&(c!==void 0&&(c.textContent=h.text),l!==void 0&&(l.dataset.state=h.state),y())},C,w,T=(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}),ee=()=>{s!==void 0&&(f=!0,s.hidden=!1,m?.(),b(),x())},E=(h,D)=>{if(r)return;if(C=h,w=D,document.removeEventListener(`click`,v,!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=_(`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`,()=>{y(),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=_(`chrome.fabQuickNote`),e.title=_(`chrome.fabQuickNoteTip`),e.addEventListener(`click`,()=>{g(),Me().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=_(`chrome.scopeSlotLabel`),s.append(t);let n=new Map,r=()=>{let e=Be(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?``:_(`chrome.fabWikiNotRunning`)}`,r.addEventListener(`click`,()=>{g(),Re(t.id),t.running||fetch(`${S}/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?.(),p=ze(()=>{r()}),m=r}d=document.createElement(`span`),d.textContent=_(`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=_(`chrome.fabReload`),n.addEventListener(`click`,()=>{g(),at(),x()}),s.append(n)}if(h.showSyncButton){let e=document.createElement(`button`);e.type=`button`,e.className=`dsh-tw-fab-item`,e.textContent=_(`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`,_(`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 Hb().catch(()=>void 0);if(!r){if(e!==void 0&&w!==void 0&&C!==void 0&&T(w,e)){E(C,e),ee();return}ee()}})()}),i.append(s,a),document.body.append(i),b(),document.addEventListener(`click`,v,!0)},D=e.subscribe(()=>{d!==void 0&&(d.textContent=e.isOpen()?_(`chrome.fabClosePanel`):_(`chrome.fabOpenPanel`))}),O=n.subscribe(b);return(async()=>{let[e,t]=await Promise.all([Ub(),Hb()]);r||!e.showQuickNote&&!e.showPanelStatus&&!e.showSyncButton||E(e,t)})(),()=>{r=!0,p?.(),p=void 0,document.removeEventListener(`click`,v,!0),D(),O(),i?.remove()}}function Kb(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,t){return function(n){let[r,i]=c.useState(!1),[a,o]=c.useState(null),s=c.useRef(null),l=c.useRef(null);c.useEffect(()=>{let e=!0,t=e=>{let t=e.detail;i(t?.open===!0)};return window.addEventListener(Lb,t),Me().then(t=>{e&&o(t.quickNoteMode)}),()=>{e=!1,window.removeEventListener(Lb,t)}},[]),c.useLayoutEffect(()=>{let e=s.current;if(e!==null)return Kb(e)},[]);let u=a===`native`,d=_(u||!r?`chrome.dockQuickNote`:`chrome.quickNoteOpenLabel`),f=_(u?`chrome.quickNoteTipNative`:r?`chrome.quickNoteTipOpen`:`chrome.quickNoteTipClosed`);return c.createElement(`div`,{ref:s,className:`dsh-tw-dock-note`},t?.({...n.sessionId===void 0?{}:{sessionId:n.sessionId},...n.useSessions===void 0?{}:{useSessions:n.useSessions}})??null,c.createElement(`button`,{ref:l,type:`button`,className:r?`dsh-tw-dock-note-btn dsh-tw-dock-note-btn-active`:`dsh-tw-dock-note-btn`,title:f,onClick:()=>{Me().then(t=>{t.quickNoteMode===`native`?an()&&!on()?cn():e.openNative():e.isOpen()?e.close():e.open(l.current??void 0)})}},c.createElement(`span`,{className:`dsh-tw-dock-note-icon`,"aria-hidden":`true`},`📝`),c.createElement(`span`,{className:`dsh-tw-dock-note-label`},d)))}}const Jb=new Map,Yb=new Map,Xb=new Set;async function Zb(e){if(typeof e!=`string`||e.length===0)return;let t=Jb.get(e);if(t!==void 0&&Date.now()-t.at<=15e3)return t.wikiId;let n=Yb.get(e);if(n!==void 0)return n;let r=(async()=>{try{let t=await fetch(`${ye}?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{Yb.delete(e)}})();Yb.set(e,r);let i=await r;return Jb.set(e,{wikiId:i,at:Date.now()}),i}function Qb(e){typeof e==`string`&&e.length>0?Jb.delete(e):Jb.clear();let t=typeof e==`string`&&e.length>0?e:void 0;for(let e of[...Xb])e(t)}function $b(e){return Xb.add(e),()=>{Xb.delete(e)}}const ex=`conversation.input.selector.context`;let tx=!1;const nx=new Set;function rx(){return tx}function ix(e){return nx.add(e),()=>{nx.delete(e)}}function ax(e){if(e!==tx){tx=e;for(let e of[...nx])e()}}function ox(e,t){let n=!1,r=e.inject(ex,()=>{if(n)return()=>{};ax(!0);try{return e.register({name:ex,id:`wiki-scope`,order:9,label:_(`chrome.scopeSlotLabel`)},t)}catch{return ax(!1),()=>{}}});return()=>{n=!0,ax(!1),r!==void 0&&r()}}function sx(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 cx(e){let t=e.sessionId;if(typeof t!=`string`||t.length===0||typeof e.useSessions!=`function`)return!1;try{return e.useSessions(e=>(e?.byId)?.[t]?.blank===!0)===!0}catch{return!1}}function lx(){let[e,t]=c.useState(()=>rx());return c.useEffect(()=>ix(()=>{t(rx())}),[]),e}function ux(e={}){let t=e.blankOnly===!0;return function(e){let n=typeof e.sessionId==`string`&&e.sessionId.length>0?e.sessionId:void 0,r=cx(e),i=lx(),[a,o]=c.useState([]),[s,l]=c.useState(``),[u,d]=c.useState(void 0),[f,p]=c.useState(void 0),[m,h]=c.useState(!1),g=c.useRef(null);if(c.useEffect(()=>{if(n===void 0)return;let e=!0;return(async()=>{let[t,r]=await Promise.all([Te(),fetch(`${ye}?session=${encodeURIComponent(n)}`,{signal:AbortSignal.timeout(8e3)}).then(e=>e.ok?e.json():null).catch(()=>null)]);if(!e)return;let i=(t?.wikis??[]).filter(e=>e.agentVisible);o(i.map(e=>({id:e.id,label:e.label,running:e.running}))),l(typeof r?.scope==`string`?r.scope:``),d(sx(r?.resolved)),p(typeof r?.reason==`string`?r.reason:void 0)})(),()=>{e=!1}},[n]),n===void 0||a.length<=1||t&&!r||!t&&r&&i)return null;let v=u?.id??``,y=e=>a.some(t=>t.id===e),b=s.length>0&&y(s)?s:v,x=[...a];v.length>0&&!y(v)&&x.push({id:v,label:u?.label??v,running:!0});let S=v.length>0&&y(v)?[...x.filter(e=>e.id===v),...x.filter(e=>e.id!==v)]:x,C=e=>{let t=e===v?``:e;h(!0),(async()=>{try{let e=await fetch(ye,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({session:n,wiki:t.length>0?t:null}),signal:AbortSignal.timeout(12e4)}),r=await e.json().catch(()=>({}));if(!e.ok||r.ok!==!0){p(r.error??_(`chrome.scopeSwitchFailed`,{status:e.status}));return}l(typeof r.scope==`string`?r.scope:t),d(sx(r.resolved)??u),p(typeof r.reason==`string`?r.reason:void 0),Qb(n)}catch(e){p(e instanceof Error?e.message:String(e))}finally{h(!1)}})()};return c.createElement(`div`,{ref:g,className:`dsh-tw-scope-dock`},c.createElement(`span`,{className:`dsh-tw-scope-label`},_(`chrome.scopeSlotLabel`)),c.createElement(`select`,{className:`dsh-tw-scope-select`,value:b,disabled:m,"aria-label":_(`chrome.scopeAriaLabel`),title:_(`chrome.scopeTitle`),onChange:e=>{C(e.target.value)}},...S.map(e=>c.createElement(`option`,{key:e.id,value:e.id},`${e.label}${e.id===v?_(`chrome.scopeDefaultMark`):``}${e.running?``:_(`chrome.scopeNotRunning`)}`))),f===void 0?null:c.createElement(`span`,{className:`dsh-tw-scope-note`},f))}}async function dx(e,t=15e3,n){try{let r=await fetch(Se(ee,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 fx(){return ct()}async function px(e,t){try{let n=await fetch(Se(`${T}?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 mx(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),v=c.useRef(void 0);v.current=h;let y=c.useRef(0),b=c.useRef(!0),x=c.useRef(0),S=c.useRef(0),C=c.useCallback(async e=>{let n=++y.current;if(!b.current)return;let r=e?.silent===!0;r||a(`loading`);let i=e=>{if(x.current++,r){m(!0);return}a(`error`),f(e)};if(typeof t!=`string`||t.length===0){a(`error`),f(_(`chrome.summaryMissingSession`));return}if(x.current>=3){if(r){m(!0);return}a(`error`),f(_(`chrome.summaryRetriesExhausted`,{n:3}));return}try{let e=await Zb(t);if(!b.current||n!==y.current)return;g(e);let o=await fetch(Se(oe,e),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({session:t}),signal:AbortSignal.timeout(25e3)}),c=await o.json().catch(()=>null);if(!b.current||n!==y.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(_(`chrome.summaryNoTitle`));return}u(c.title);let l=await dx(c.title,15e3,e);if(!b.current||n!==y.current)return;if(l===null){let t=await px(c.title,e);if(!b.current||n!==y.current)return;if(t===`no`){if(x.current++,x.current<3){C();return}a(`error`),f(_(`chrome.summaryRebuildFailed`));return}if(t===`unknown`){if(r){m(!0);return}a(`error`),f(_(`chrome.summaryRenderUnknown`));return}i(_(`chrome.summaryRenderUnavailable`));return}x.current=0,S.current=Date.now(),m(!1),s(l),a(`ready`)}catch(e){if(!b.current||n!==y.current)return;i(e instanceof Error?e.message:String(e))}},[t]);c.useEffect(()=>(b.current=!0,x.current=0,S.current=Date.now(),m(!1),C(),()=>{b.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 px(l,v.current);if(e){if(t===`unknown`){m(!0);return}if(t===`no`){if(x.current++,x.current<3){C();return}a(`error`),f(_(`chrome.summaryExpired`));return}if(Date.now()-S.current>18e4){C({silent:!0});return}x.current=0,m(!1)}})()},3e4);return()=>{e=!1,window.clearInterval(t)}},[l,C]),c.useEffect(()=>$b(e=>{typeof t!=`string`||t.length===0||e!==void 0&&e!==t||(x.current=0,S.current=0,C())}),[t,C]),c.useEffect(()=>{n!=null&&r?.()},[n,r]);let w=()=>{x.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,_(`chrome.summaryGenerating`))):i===`error`?c.createElement(`div`,{className:`dsh-tw-summary-state`},c.createElement(`div`,{className:`dsh-tw-summary-state-title`},_(`chrome.summaryUnavailable`)),c.createElement(`div`,{className:`dsh-tw-summary-state-detail`},d),c.createElement(`button`,{type:`button`,className:`dsh-tw-summary-btn`,onClick:w},_(`chrome.summaryRetry`))):c.createElement(`div`,{className:`dsh-tw-summary-native dsh-tw-toolcard-native`},p?c.createElement(`div`,{className:`dsh-tw-summary-state-detail`},_(`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`},_(`chrome.summaryBarTitle`)),c.createElement(`span`,{className:`dsh-tw-summary-bar-hint`},_(`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:_(`chrome.summaryRefreshTitle`)},_(`chrome.summaryRefresh`))),T)}function hx(e,t){if(!(e===void 0||t.showSessionTab===!1))return st(t.tabLabel),e.inject(`conversation.view`,()=>e.register({name:`conversation.view`,id:`dsh-tiddlywiki-summary`,order:20,label:fx},mx))}function $(e,t,n){let r=document.createElement(e);return t!==void 0&&(r.className=t),n!==void 0&&(r.textContent=n),r}function gx(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 _x(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 vx;function yx(e){vx=e}let bx=`overview`;function xx(e){bx=e}function Sx(e,t){vx=e,t||(bx=`library`)}function Cx(){vx=void 0}function wx(e){return vx===void 0?e:`${e}?wiki=${encodeURIComponent(vx)}`}function Tx(){return{archive:_(`settings.icon.archive`),"archive-check":_(`settings.icon.archiveCheck`),"archive-off":_(`settings.icon.archiveOff`),unarchive:_(`settings.icon.unarchive`),database:_(`settings.icon.database`),data:_(`settings.icon.data`),folder:_(`settings.icon.folder`),globe:_(`settings.icon.globe`),branch:_(`settings.icon.branch`),list:_(`settings.icon.list`),checklist:_(`settings.icon.checklist`),"flat-list":_(`settings.icon.flatList`),skill:_(`settings.icon.skill`),goal:_(`settings.icon.goal`),compact:_(`settings.icon.compact`),clock:_(`settings.icon.clock`),alarm:_(`settings.icon.alarm`),pin:_(`settings.icon.pin`),shield:_(`settings.icon.shield`),api:_(`settings.icon.api`),code:_(`settings.icon.code`),users:_(`settings.icon.users`),user:_(`settings.icon.user`),plugin:_(`settings.icon.plugin`),pinwheel:_(`settings.icon.pinwheel`),gauge:_(`settings.icon.gauge`),tree:_(`settings.icon.tree`),personalization:_(`settings.icon.personalization`),link:_(`settings.icon.link`),search:_(`settings.icon.search`),settings:_(`settings.icon.settings`),sparkle:_(`settings.icon.sparkle`),think:_(`settings.icon.think`),light:_(`settings.icon.light`),dark:_(`settings.icon.dark`),refresh:_(`settings.icon.refresh`),book:_(`settings.icon.book`),briefcase:_(`settings.icon.briefcase`),home:_(`settings.icon.home`),notebook:_(`settings.icon.notebook`),flask:_(`settings.icon.flask`),star:_(`settings.icon.star`)}}const Ex=[`📚`,`💼`,`🏠`,`✍️`,`🧪`,`🌱`,`🎯`,`🗂️`];function Dx(e){let t=Tx(),n=[{value:``,label:_(`settings.iconPicker.default`),kind:`default`}];for(let e of qe)n.push({value:e,label:t[e]??e,kind:`name`});for(let e of Ex)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 Ox(e,t){if(e.replaceChildren(),t.length===0){e.innerHTML=Ue;return}let n=Ke[t];if(n!==void 0){e.innerHTML=n;return}e.textContent=t}function kx(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?_(`settings.iconPicker.titleDefault`):_(`settings.iconPicker.titleCurrent`,{icon:e});let r=$(`span`,`dsh-tw-settings-iconbtn-face`);return Ox(r,e),n.append(r,$(`span`,`dsh-tw-settings-iconbtn-label`,_(`settings.iconPicker.label`))),n}function Ax(e,t,n){document.querySelector(`.dsh-tw-iconpicker`)?.remove();let r=Dx(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`,_(`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`);Ox(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`,_(`settings.iconPicker.prev`));e.type=`button`,e.disabled=a===0,e.addEventListener(`click`,()=>{--a,f()});let t=$(`span`,`dsh-tw-settings-muted`,_(`settings.iconPicker.page`,{page:a+1,pages:i,total:r.length})),n=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,_(`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`,_(`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 jx(e,t,n){let r=$(`section`,`dsh-tw-settings-section`);r.append($(`h3`,`dsh-tw-settings-h`,_(`settings.wikis.title`)));let i=$(`div`,`dsh-tw-settings-muted`,_(`settings.wikis.loading`)),a=$(`div`,`dsh-tw-settings-row`),o=$(`div`),s=$(`input`,`dsh-tw-settings-input`);s.placeholder=_(`settings.wikis.rootPlaceholder`);let c=$(`input`,`dsh-tw-settings-input`);c.placeholder=_(`settings.wikis.namePlaceholder`);let l=$(`input`,`dsh-tw-settings-input`);l.placeholder=_(`settings.wikis.labelPlaceholder`);let u=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,_(`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`,_(`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 _x(ve,{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(_(`settings.wikis.partialFailure`,{message:i.map(e=>_(`settings.wikis.failureItem`,{id:e.id,message:e.message})).join(_(`settings.wikis.failureJoin`))})),h(r),await n()}catch(e){if(t())return;k(_(`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 _x(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(r),signal:AbortSignal.timeout(18e4)});if(t())return;i.ok!==!0&&k(_(`settings.wikis.failed`,{message:i.error??_(`settings.wikis.unknownError`)})),await g(),await n()}catch(e){if(t())return;k(_(`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:_(`settings.wikis.unknownName`);a.replaceChildren($(`span`,`dsh-tw-settings-label`,_(`settings.wikis.modeLabel`)));let c=[[`single`,_(`settings.wikis.modeSingle`,{name:r})],[`multi`,_(`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`?_(`settings.wikis.switchToMulti`):_(`settings.wikis.switchToSingle`,{name:r}))&&p({action:`set-mode`,mode:t},_(`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`,_(`settings.wikis.rowTitle`,{mark:i?`★ `:``,label:t.label,id:t.id}))),r.append($(`div`,`dsh-tw-settings-muted`,[t.running?_(`settings.wikis.running`):_(`settings.wikis.stopped`),t.agentVisible?_(`settings.wikis.agentVisible`):_(`settings.wikis.agentHidden`),t.autostart?_(`settings.wikis.autostart`):_(`settings.wikis.onDemand`),t.path].join(` · `)));let a=$(`div`,`dsh-tw-settings-row`),s=vx===t.id,c=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn${s?` dsh-tw-settings-primary`:``}`,_(s?`settings.exitConfig`:`settings.wikis.configure`));c.type=`button`,c.title=_(s?`settings.wikis.exitConfigTitle`:`settings.wikis.configureTitle`,{label:t.label}),c.addEventListener(`click`,()=>{s?Cx():Sx(t.id,s),n()});let u=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,t.running?_(`settings.wikis.stop`):_(`settings.wikis.start`));u.type=`button`,u.addEventListener(`click`,()=>{p({action:t.running?`stop`:`start`,id:t.id},t.running?_(`settings.wikis.stopping`):_(`settings.wikis.starting`))});let d=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,_(`settings.wikis.setDefault`));d.type=`button`,d.disabled=i,d.addEventListener(`click`,()=>{p({action:`set-default`,id:t.id},_(`settings.wikis.saving`))});let f=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,t.agentVisible?_(`settings.wikis.hideFromAgent`):_(`settings.wikis.showToAgent`));f.type=`button`,f.addEventListener(`click`,()=>{p({action:`update`,wiki:{...t,agentVisible:!t.agentVisible}},_(`settings.wikis.saving`))});let h=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,t.autostart?_(`settings.wikis.disableAutostart`):_(`settings.wikis.autostart`));h.type=`button`,h.addEventListener(`click`,()=>{p({action:`update`,wiki:{...t,autostart:!t.autostart}},_(`settings.wikis.saving`))});let g=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,_(`settings.wikis.removeFromList`));g.type=`button`,g.disabled=l.length<=1,g.addEventListener(`click`,()=>{window.confirm(_(`settings.wikis.removeConfirm`,{label:t.label,path:t.path}))&&p({action:`remove`,id:t.id},_(`settings.wikis.removing`))});let v=typeof t.icon==`string`?t.icon:``,y=kx(v,_(`settings.wikis.iconAria`,{label:t.label}));if(y.addEventListener(`click`,()=>{Ax(y,v,e=>{p(e.length>0?{action:`update`,wiki:{...t,icon:e}}:{action:`update`,wiki:{...t,icon:``}},_(`settings.wikis.saving`))})}),e.mode===`multi`){let e=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,_(`settings.wikis.moveDir`));e.type=`button`,e.addEventListener(`click`,()=>{let e=window.prompt(_(`settings.wikis.moveRootPrompt`,{label:t.label,root:t.root}),t.root);if(e===null)return;if(e.trim().length===0){k(_(`settings.wikis.rootRequired`));return}let n=window.prompt(_(`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(ge,r,_(`settings.wikis.moving`)):p({action:`update`,wiki:{...t,...r}},_(`settings.wikis.saving`))}),a.append(e)}a.append(c,u,d,f,h,y,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(_(`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},_(`settings.wikis.adding`))});let g=async()=>{if(!t())try{let e=await _x(ve);if(t())return;h(e)}catch(e){if(t())return;i.textContent=_(`settings.wikis.listFailed`,{message:e instanceof Error?e.message:String(e)})}};g()}function Mx(e,t,n){(async()=>{try{let e=await _x(ve);if(t()||e.mode===`multi`)return}catch{}t()||Nx(e,t,n)})()}function Nx(e,t,n){let r=$(`section`,`dsh-tw-settings-section`);r.append($(`h3`,`dsh-tw-settings-h`,_(`settings.wikis.locationTitle`)));let i=$(`div`,`dsh-tw-settings-muted`,_(`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=_(`settings.wikis.rootPlaceholderSingle`),l.placeholder=_(`settings.wikis.folderPlaceholderSingle`);let u=$(`label`,`dsh-tw-settings-field`);u.append($(`span`,`dsh-tw-settings-label`,_(`settings.wikis.rootField`)),c);let d=$(`label`,`dsh-tw-settings-field`);d.append($(`span`,`dsh-tw-settings-label`,_(`settings.wikis.folderField`)),l);let f=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,_(`settings.wikis.switchHere`));f.type=`button`;let p=$(`button`,`dsh-tw-settings-btn`,_(`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`,_(`settings.wikis.locationHint`)),v=(e,t)=>{f.disabled=e,p.disabled=e,f.textContent=e?t:_(`settings.wikis.switchHere`)},y=async()=>{if(!t())try{let e=await _x(he);if(t())return;if(e.ok!==!0)throw Error(e.error??_(`settings.wikis.locationUnavailable`));let n=e.current??{};i.textContent=_(`settings.wikis.current`,{path:n.path??_(`settings.wikis.unknownPath`)});let r=n.source===`state`?_(`settings.wikis.sourceState`):n.source===`config`?_(`settings.wikis.sourceConfig`):_(`settings.wikis.sourceDefault`);a.textContent=_(`settings.wikis.sourceLine`,{source:r,path:e.default?.path??_(`settings.wikis.unknownPath`)}),o.textContent=e.stateFile===void 0?``:_(`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`,_(`settings.wikis.candidatesLabel`)));for(let e of u){let t=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn`,e===`.`?_(`settings.wikis.rootItself`):e);t.type=`button`,t.title=_(`settings.wikis.candidateTitle`,{name:e}),t.addEventListener(`click`,()=>{l.value=e}),h.append(t)}}}catch(e){if(t())return;i.textContent=_(`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(_(`settings.wikis.needRoot`));return}window.confirm(_(`settings.wikis.switchConfirm`,{path:`${e}\\${t}`}))&&(v(!0,_(`settings.wikis.switching`)),(async()=>{try{let r=await _x(ge,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({root:e,name:t}),signal:AbortSignal.timeout(12e4)});r.warning===void 0?k(_(`settings.wikis.switched`,{path:r.path??``})):k(_(`settings.wikis.switchedWarn`,{path:r.path??``,warning:r.warning})),je(),await y(),await n()}catch(e){k(_(`settings.wikis.switchFailed`,{message:e instanceof Error?e.message:String(e)})),await y()}finally{v(!1,``)}})())}),p.addEventListener(`click`,()=>{window.confirm(_(`settings.wikis.resetConfirm`))&&(v(!0,_(`settings.wikis.switching`)),(async()=>{try{let e=await _x(_e,{method:`POST`,headers:{"content-type":`application/json`},body:`{}`,signal:AbortSignal.timeout(12e4)});k(e.warning===void 0?_(`settings.wikis.resetDone`,{path:e.path??``}):_(`settings.wikis.resetWarn`,{warning:e.warning})),je(),await y(),await n()}catch(e){k(_(`settings.wikis.resetFailed`,{message:e instanceof Error?e.message:String(e)})),await y()}finally{v(!1,``)}})())}),r.append(i,a,o,u,d,m,h,s,g),e.append(r),y()}function Px(e,t,n,r,i,a=()=>!1){let o=$(`section`,`dsh-tw-settings-section`);o.append($(`h3`,`dsh-tw-settings-h`,_(`config.title`)));let s=t.note??{},c=t.git??{},l=t.ui??{},u=[],d=(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}),o.append(i)},f=(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=_(`config.token.showHide`),i.setAttribute(`aria-label`,_(`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}),o.append(a)},p=(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}),o.append(i),r},m=(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 s=()=>{let e=i.value.trim();if(e.length===0)return _(`config.num.empty`);let t=Number(e);if(!Number.isFinite(t))return _(`config.num.nan`);if(r?.integer===!0&&!Number.isInteger(t))return _(`config.num.integer`);if(r?.min!==void 0&&t<r.min)return _(`config.num.belowMin`,{min:r.min});if(r?.max!==void 0&&t>r.max)return _(`config.num.aboveMax`,{max:r.max})},c=()=>{let e=s();a.textContent=e===void 0?``:_(`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`,c);let l=()=>{let e=i.value.trim(),t=Number(e);return e.length===0||!Number.isFinite(t)?e:t},d=$(`label`,`dsh-tw-settings-field`);d.append($(`span`,`dsh-tw-settings-label`,t),i,a),u.push({key:e,initial:n,read:l,changed:()=>l()!==n,invalid:s}),c(),o.append(d)},h=(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}),o.append(a),i},g=(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}),o.append(a),i};d(`note.tag`,_(`config.note.tag`),typeof s.tag==`string`?s.tag:`inbox`),p(`note.workspaceMark`,_(`config.note.workspaceMark`),s.workspaceMark!==!1),p(`git.autoCommit`,_(`config.git.autoCommit`),c.autoCommit!==!1),m(`git.debounceMs`,_(`config.git.debounceMs`),typeof c.debounceMs==`number`?c.debounceMs:6e4,{min:0,max:36e5,step:1e3,integer:!0}),d(`git.remote`,_(`config.git.remote`),typeof c.remote==`string`?c.remote:``),d(`git.branch`,_(`config.git.branch`),typeof c.branch==`string`?c.branch:`main`);let v=t.startup??{};m(`startup.readyTimeoutMs`,_(`config.startup.readyTimeoutMs`),typeof v.readyTimeoutMs==`number`&&v.readyTimeoutMs>0?v.readyTimeoutMs:6e4,{min:5e3,max:6e5,step:1e3}),p(`ui.showQuickNote`,_(`config.ui.showQuickNote`),l.showQuickNote!==!1),p(`ui.showQuickNoteDock`,_(`config.ui.showQuickNoteDock`),l.showQuickNoteDock!==!1),h(`ui.quickNoteMode`,_(`config.ui.quickNoteMode`),typeof l.quickNoteMode==`string`&&l.quickNoteMode===`card`?`card`:`native`,[{value:`native`,label:_(`config.ui.quickNoteModeNative`)},{value:`card`,label:_(`config.ui.quickNoteModeCard`)}]),i===`multi`?o.append($(`div`,`dsh-tw-settings-muted`,_(`config.ui.multiWikiSidebarHint`))):d(`ui.sidebarLabel`,_(`config.ui.sidebarLabel`),typeof l.sidebarLabel==`string`&&l.sidebarLabel.trim().length>0?l.sidebarLabel.trim():`TiddlyWiki`),p(`ui.showPanelStatus`,_(`config.ui.showPanelStatus`),l.showPanelStatus!==!1),p(`ui.showSyncButton`,_(`config.ui.showSyncButton`),l.showSyncButton!==!1),p(`ui.followDshTheme`,_(`config.ui.followDshTheme`),l.followDshTheme!==!1),d(`ui.darkPalette`,_(`config.ui.darkPalette`),typeof l.darkPalette==`string`&&l.darkPalette.trim().length>0?l.darkPalette.trim():`$:/palettes/CupertinoDark`),d(`ui.tabLabel`,_(`config.ui.tabLabel`),typeof l.tabLabel==`string`&&l.tabLabel.trim().length>0?l.tabLabel.trim():_(`frame.tabLabelDefault`)),p(`ui.showSessionTab`,_(`config.ui.showSessionTab`),l.showSessionTab!==!1),p(`ui.showRightbarTab`,_(`config.ui.showRightbarTab`),l.showRightbarTab!==!1);let y=l.sendToAgent??{};p(`ui.sendToAgent.enabled`,_(`config.ui.sendToAgent.enabled`),y.enabled!==!1),d(`ui.sendToAgent.endpoint`,_(`config.ui.sendToAgent.endpoint`),typeof y.endpoint==`string`?y.endpoint:``),f(`ui.sendToAgent.token`,_(`config.ui.sendToAgent.token`),typeof y.token==`string`?y.token:``);let b=l.allArticles??{};m(`ui.allArticles.pageSize`,_(`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`,_(`config.wechat.title`))),o.append($(`div`,`dsh-tw-settings-muted`,_(`config.wechat.hint`)));let x=t.wechat??{},S=p(`wechat.enabled`,_(`config.wechat.enabled`),x.enabled===!0);d(`wechat.command`,_(`config.wechat.command`),typeof x.command==`string`&&x.command.trim().length>0?x.command.trim():`opencli`),h(`wechat.adapter`,_(`config.wechat.adapter`),x.adapter===`publish-note-imgs`?`publish-note-imgs`:`publish-note`,[{value:`publish-note`,label:_(`config.wechat.adapterDefault`)},{value:`publish-note-imgs`,label:_(`config.wechat.adapterImgs`)}]),f(`wechat.token`,_(`config.wechat.token`),typeof x.token==`string`?x.token:``),d(`wechat.dsn`,_(`config.wechat.dsn`),typeof x.dsn==`string`?x.dsn:``);let C=t.prompt??{};o.append($(`h3`,`dsh-tw-settings-h`,_(`config.prompt.title`))),o.append($(`div`,`dsh-tw-settings-muted`,_(`config.prompt.hint`)));let w=p(`prompt.enabled`,_(`config.prompt.enabled`),C.enabled!==!1),T=h(`prompt.mode`,_(`config.prompt.mode`),C.mode===`full`?`full`:`slim`,[{value:`slim`,label:_(`config.prompt.modeSlim`)},{value:`full`,label:_(`config.prompt.modeFull`)}]),ee=g(`prompt.extra`,_(`config.prompt.extra`),typeof C.extra==`string`?C.extra:``,5),E=g(`prompt.override`,_(`config.prompt.override`),typeof C.override==`string`?C.override:``,8),D=()=>u.some(e=>(e.key.startsWith(`prompt.`)||e.key===`wechat.enabled`)&&e.changed()),O=$(`button`,`dsh-tw-settings-btn`,_(`config.prompt.preview`));O.type=`button`,O.title=_(`config.prompt.previewTitle`);let te=$(`pre`,`dsh-tw-settings-prompt-preview`);te.hidden=!0,O.addEventListener(`click`,()=>{if(!te.hidden){te.hidden=!0,te.textContent=``;return}O.disabled=!0,(async()=>{try{let e=await _x(wx(ce),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({enabled:w.checked,mode:T.value,extra:ee.value,override:E.value,wechat:S.checked})});if(e.ok!==!0)throw Error(e.error??_(`config.prompt.fetchFailed`));te.textContent=e.enabled===!1?_(`config.prompt.previewDisabled`):_(`config.prompt.previewHeader`,{mode:e.mode??``,length:e.length??0,dirty:D()?_(`config.prompt.previewDirty`):``,text:e.text??``}),te.hidden=!1}catch(e){k(_(`config.prompt.readFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{O.disabled=!1}})()}),o.append(O,te);let ne=t.bridge??{};p(`bridge.enabled`,_(`config.bridge.enabled`),ne.enabled===!0),m(`bridge.port`,_(`config.bridge.port`),typeof ne.port==`number`&&ne.port>0?ne.port:8618,{min:1,max:65535,step:1,integer:!0}),f(`bridge.token`,_(`config.bridge.token`),typeof ne.token==`string`?ne.token:``),d(`bridge.tag`,_(`config.bridge.tag`),typeof ne.tag==`string`&&ne.tag.trim().length>0?ne.tag.trim():`clip`);let re=h(`bridge.wiki`,_(`config.bridge.wiki`),typeof ne.wiki==`string`?ne.wiki.trim():``,[{value:``,label:_(`config.clipWiki.followDefault`)}]);(async()=>{try{let e=await _x(ve);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=_(`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=_(`config.clipWiki.option`,{label:n.label,id:n.id,suffix:n.running?``:_(`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?_(`config.clipWiki.notInList`,{current:n}):_(`config.clipWiki.notInListWithDefault`,{current:n,label:r}),re.append(e)}re.value=n}catch{}})();let ie=gx(r.saveError??``);ie.hidden=r.saveError===void 0;let ae=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,_(`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(_(`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(_(`config.noChanges`)),ae.disabled=!1;return}try{await _x(wx(ue),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),je(),r.saveError=void 0,ie.hidden=!0,ie.textContent=``,k(_(`config.saved`)),n()}catch(e){r.saveError=_(`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 Fx(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)),v=$(`section`,`dsh-tw-settings-section`);v.append($(`h3`,`dsh-tw-settings-h`,_(`settings.plugin.title`)));let y=$(`div`,`dsh-tw-settings-muted`,_(`settings.plugin.hint`));v.append(y);let b=$(`input`,`dsh-tw-settings-input dsh-tw-settings-search`);b.placeholder=_(`settings.plugin.searchPlaceholder`);let x=$(`div`,`dsh-tw-settings-list`),S=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,_(`settings.plugin.apply`));S.type=`button`;let C=()=>{S.disabled=a.plugins===void 0},w=e=>{x.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`,_(`settings.plugin.badgeDisabled`));e.dataset.state=`disabled`,e.title=_(`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`,_(`settings.plugin.badgeInstalled`));e.dataset.state=`update`,e.title=_(`settings.plugin.badgeInstalledTitle`),i.append(e)}i.append(s),x.append(i)}};if(b.addEventListener(`input`,()=>w(b.value)),S.addEventListener(`click`,()=>{a.plugins!==void 0&&(S.disabled=!0,(async()=>{try{await _x(wx(le),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({plugins:[...f()]})}),a.plugins=void 0,k(_(`settings.plugin.applied`)),at(),Ee(),i()}catch(e){k(_(`settings.catalog.applyFailed`,{message:e instanceof Error?e.message:String(e)})),C()}})())}),w(``),C(),v.append(b,x,S),e.append(v),r!=null){let t=new Set(o.map(e=>e.title)),n=(r.wikiPlugins??[]).filter(e=>!t.has(e.title)||h.has(e.title));if(n.length>0){let t=$(`section`,`dsh-tw-settings-section`);t.append($(`h3`,`dsh-tw-settings-h`,_(`settings.wikiPlugins.title`))),t.append($(`div`,`dsh-tw-settings-muted`,_(`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`,_(`settings.wikiPlugins.disabled`));e.dataset.state=`disabled`,e.title=_(`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`,_(`settings.themes.title`)));let ee=$(`div`,`dsh-tw-settings-muted`,_(`settings.themes.hint`)),E=$(`div`,`dsh-tw-settings-row dsh-tw-settings-head`);E.append($(`span`,`dsh-tw-settings-col`,_(`settings.themes.colLoad`)),$(`span`,`dsh-tw-settings-col`,_(`settings.themes.colActive`)),$(`span`,`dsh-tw-settings-name`,_(`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`,_(`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=_(`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=_(`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 _x(wx(le),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({themes:[...p()],themeActive:re()})}),a.themes=void 0,a.themeActive=void 0,k(_(`settings.themes.applied`)),at(),Ee(),i()}catch(e){k(_(`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`,_(`settings.langs.title`)));let ce=$(`div`,`dsh-tw-settings-muted`,_(`settings.langs.hint`)),ue=$(`div`,`dsh-tw-settings-list`),de=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,_(`settings.langs.apply`));de.type=`button`;let fe=()=>{de.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,fe()});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),ue.append(n)}de.addEventListener(`click`,()=>{a.languages!==void 0&&(de.disabled=!0,(async()=>{try{await _x(wx(le),{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({languages:[...m()]})}),a.languages=void 0,k(_(`settings.langs.applied`)),at(),Ee(),i()}catch(e){k(_(`settings.catalog.applyFailed`,{message:e instanceof Error?e.message:String(e)})),fe()}})())}),fe(),se.append(ce,ue,de),e.append(se)}function Ix(e,t){let n=$(`section`,`dsh-tw-settings-section`);n.append($(`h3`,`dsh-tw-settings-h`,_(`settings.seeds.title`)));let r=$(`div`,`dsh-tw-settings-muted`,_(`settings.seeds.hint`)),i=$(`div`,`dsh-tw-settings-list`),a=$(`div`,`dsh-tw-settings-muted`),o=async()=>{if(!t())try{let e=await _x(wx(fe));if(t())return;if(e.ok!==!0||!Array.isArray(e.items))throw Error(e.error??_(`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?_(`settings.seeds.present`):_(`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`,_(`settings.seeds.updateChip`)):void 0;c!==void 0&&(c.dataset.state=`update`,c.title=_(`settings.seeds.updateTitle`));let l=t.userModified===!0?$(`span`,`dsh-tw-settings-chip`,_(`settings.seeds.modifiedChip`)):void 0;l!==void 0&&(l.dataset.state=`missing`,l.title=_(`settings.seeds.modifiedTitle`));let u=$(`button`,`dsh-tw-settings-btn`,t.updateAvailable===!0?_(`settings.seeds.updateToBuiltin`):_(`settings.seeds.reinit`));u.type=`button`,u.title=_(`settings.seeds.rewriteTitle`,{title:t.title}),u.addEventListener(`click`,()=>{if(t.updateAvailable===!0){let e=t.userModified===!0?_(`settings.seeds.overwriteModified`,{title:t.title}):t.userModified===void 0?_(`settings.seeds.overwriteUnknown`,{title:t.title}):``;if(!window.confirm(_(`settings.seeds.overwriteConfirm`,{warning:e.length>0?`${e}\n\n`:``})))return}u.disabled=!0,u.textContent=_(`settings.seeds.running`),(async()=>{try{let e=await fetch(wx(pe),{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(_(`settings.seeds.reinitFailed`,{message:n?.error??n?.results?.[0]?.error??`HTTP ${e.status}`})):k(_(`settings.seeds.reinitDone`,{title:t.title})),o()}catch(e){k(_(`settings.seeds.reinitFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{u.disabled=!1,u.textContent=t.updateAvailable===!0?_(`settings.seeds.updateToBuiltin`):_(`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`,_(`settings.seeds.remove`));e.type=`button`,e.title=_(`settings.seeds.removeTitle`,{title:t.title}),e.addEventListener(`click`,()=>{window.confirm(_(`settings.seeds.removeConfirm`,{title:t.title}))&&(e.disabled=!0,e.textContent=_(`settings.seeds.removing`),(async()=>{try{let e=await fetch(wx(me),{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(_(`settings.seeds.removeFailed`,{message:n?.error??n?.results?.[0]?.error??`HTTP ${e.status}`})):k(_(`settings.seeds.removeDone`,{title:t.title})),o()}catch(e){k(_(`settings.seeds.removeFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{e.disabled=!1,e.textContent=_(`settings.seeds.remove`)}})())}),d.append(e)}i.append(d)}a.textContent=_(`settings.seeds.statusLine`,{total:e.items.length,present:n,removable:r})}catch(e){if(t())return;a.textContent=_(`settings.seeds.loadStatusFailed`,{message:e instanceof Error?e.message:String(e)})}},s=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-primary`,_(`settings.seeds.runAll`));s.type=`button`,s.title=_(`settings.seeds.runAllTitle`),s.addEventListener(`click`,()=>{s.disabled=!0,s.textContent=_(`settings.seeds.running`),(async()=>{try{let e=await fetch(wx(pe),{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(_(`settings.seeds.reinitFailed`,{message:t?.error??`HTTP ${e.status}`})):k(_(`settings.seeds.allReinitDone`)),o()}catch(e){k(_(`settings.seeds.reinitFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{s.disabled=!1,s.textContent=_(`settings.seeds.runAll`)}})()});let c=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-danger`,_(`settings.seeds.removeAll`));c.type=`button`,c.title=_(`settings.seeds.removeAllTitle`),c.addEventListener(`click`,()=>{window.confirm(_(`settings.seeds.removeAllConfirm`))&&(c.disabled=!0,c.textContent=_(`settings.seeds.removing`),(async()=>{try{let e=await fetch(wx(me),{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(_(`settings.seeds.removeFailed`,{message:t?.error??`HTTP ${e.status}`})):k(_(`settings.seeds.allRemoved`)),o()}catch(e){k(_(`settings.seeds.removeFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{c.disabled=!1,c.textContent=_(`settings.seeds.removeAll`)}})())}),n.append(r,a,i,s,c),e.append(n),o()}function Lx(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`,_(`settings.loading`)));try{let e=_x(ve).then(e=>{u=typeof e?.mode==`string`?e.mode:void 0,d=e}).catch(()=>{u=void 0}),a=await _x(wx(se));if(await e,t)return;l=!0,n.hidden=!0,n.replaceChildren(),Rx(r,a,f),Wx(i,a,f,()=>t,o,s,u,()=>{c!==vx&&(delete s.plugins,delete s.themes,delete s.languages,delete s.themeActive,c=vx)},Bx(d,vx))}catch(e){if(t)return;l||i.replaceChildren($(`div`,`dsh-tw-settings-muted`,_(`settings.notLoaded`)));let r=$(`button`,`dsh-tw-settings-btn`,_(`settings.retry`));r.type=`button`,r.addEventListener(`click`,()=>{f()}),n.replaceChildren($(`span`,void 0,`${_(`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 Rx(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?_(`settings.gitDirty`):``:_(`settings.gitConflict`,{count:t.git.conflict.files.length})].filter(Boolean).join(` · `)),s=$(`button`,`dsh-tw-settings-btn`,_(`settings.sync`));s.type=`button`,s.title=_(`settings.syncTitle`),s.addEventListener(`click`,()=>{s.disabled=!0,s.textContent=_(`settings.syncing`),(async()=>{try{let e=await fetch(wx(ie),{method:`POST`,signal:AbortSignal.timeout(12e4)}),t=Ce(await e.json().catch(()=>null),e.status);k(t.ok?_(`settings.syncDone`,{message:t.message}):_(`settings.syncFailed`,{message:t.message}))}catch(e){k(_(`settings.syncFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{s.disabled=!1,s.textContent=_(`settings.sync`),n()}})()});let c=$(`button`,`dsh-tw-settings-btn`,_(`settings.restart`));c.type=`button`,c.addEventListener(`click`,()=>{c.disabled=!0,c.textContent=_(`settings.restarting`),(async()=>{try{await _x(wx(de),{method:`POST`,signal:AbortSignal.timeout(12e4)}),k(_(`settings.restarted`)),at(),Ee()}catch(e){k(_(`settings.restartFailed`,{message:e instanceof Error?e.message:String(e)}))}finally{c.disabled=!1,c.textContent=_(`settings.restart`),n()}})()}),e.append(a,o,s,c)}const zx=[{id:`overview`,label:()=>_(`settings.tabOverview`)},{id:`library`,label:()=>_(`settings.tabLibrary`)},{id:`global`,label:()=>_(`settings.tabGlobal`)}];function Bx(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 Vx(e,t,n,r){if(t!==`multi`)return;let i=$(`div`,`dsh-tw-settings-scopebar`),a=r===void 0||r.length===0?_(`settings.scopeFollowDefault`):_(vx===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`,_(vx===void 0?`settings.scopeHintPick`:`settings.scopeHintEditing`))),vx!==void 0){let e=$(`button`,`dsh-tw-settings-btn dsh-tw-settings-chipbtn dsh-tw-settings-scopebar-exit`,_(`settings.exitConfig`));e.type=`button`,e.title=_(`settings.scopeExitTitle`),e.addEventListener(`click`,()=>{yx(void 0),n()}),i.append(e)}e.append(i)}function Hx(e,t,n){if(t!==`multi`)return;let r=$(`div`,`dsh-tw-settings-tabs`);r.setAttribute(`role`,`tablist`);for(let e of zx){let t=bx===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`,()=>{bx!==e.id&&(xx(e.id),n())}),r.append(i)}e.append(r)}function Ux(e){e.append($(`div`,`dsh-tw-settings-muted`,_(`settings.pickLibraryHint`)))}function Wx(e,t,n,r,i,a,o,s,c){e.replaceChildren(),s?.(),typeof t.configError==`string`&&t.configError.length>0&&e.append(gx(_(`settings.configInactive`,{message:t.configError})));let l=JSON.stringify(t.config??{}),u=i.wiki!==vx,d=i.host!==void 0&&(u||i.signature!==l),f=i.isDirty?.()===!0;if(d&&f&&!u&&e.append(gx(_(`settings.configStale`))),i.host===void 0||u||d&&!f){let e=$(`div`,`dsh-tw-settings-confighost`);Px(e,t.config??{},n,i,o,r),i.host=e,i.signature=l,i.wiki=vx}Hx(e,o,n),Vx(e,o,n,c);let p=o===`multi`,m=!p||bx===`overview`,h=!p||bx===`library`,g=!p||bx===`global`,v=!p||vx!==void 0;g&&e.append(i.host),m&&(jx(e,r,n),Mx(e,r,n)),h&&v?(Fx(e,t.info,t.catalog,t.runtimePlugins,n,a),Ix(e,r)):h&&Ux(e)}function Gx(){let e=c.useRef(null);return c.useEffect(()=>{let t=e.current;return t===null?void 0:Lx(t)},[]),c.createElement(`div`,{ref:e})}function Kx(e){return typeof e==`object`&&!!e&&e.kind===`tool-result`}function qx(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 Jx(e){try{let t=JSON.parse(e);return typeof t==`object`&&t&&!Array.isArray(t)?t:{}}catch{return{}}}function Yx(e){return Array.isArray(e)?e.filter(e=>typeof e?.text==`string`).map(e=>e.text).join(`
|
|
964
|
+
`):``}function Xx(e){return typeof e==`string`?e:``}const Zx={tiddlywiki_get:()=>_(`card.toolGet`),tiddlywiki_search:()=>_(`card.toolSearch`),tiddlywiki_recent:()=>_(`card.toolRecent`),tiddlywiki_list_tags:()=>_(`card.toolListTags`),tiddlywiki_put:()=>_(`card.toolPut`),tiddlywiki_batch_put:()=>_(`card.toolBatchPut`),tiddlywiki_append:()=>_(`card.toolAppend`),tiddlywiki_rename:()=>_(`card.toolRename`),tiddlywiki_delete:()=>_(`card.toolDelete`),tiddlywiki_trash:()=>_(`card.toolTrash`),tiddlywiki_backlinks:()=>_(`card.toolBacklinks`),tiddlywiki_attach:()=>_(`card.toolAttach`),tiddlywiki_lint:()=>_(`card.toolLint`),tiddlywiki_git_sync:()=>_(`card.toolGitSync`),tiddlywiki_git_resolve:()=>_(`card.toolGitResolve`)};function Qx(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 $x(e){let t=Zx[e.toolName]?.()??e.toolName,n=tS(),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:_(`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},_(`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 eS=c.createContext(void 0);function tS(){return c.useContext(eS)}function nS(e){let[t,n]=c.useState(void 0);return c.useEffect(()=>{if(typeof e!=`string`||e.length===0){n(void 0);return}let t=!0;return Zb(e).then(e=>{t&&n(e)}),()=>{t=!1}},[e]),t}async function rS(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 iS(e,t){return dx(e,1e4,t)}function aS(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 oS=new Map;function sS(e,t){return`${e??``}\u0000${t}`}function cS(e,t){let n=sS(e,t),r=oS.get(n);if(r!==void 0){if(Date.now()-r.at>3e5){oS.delete(n);return}return oS.delete(n),oS.set(n,r),r}}function lS(e,t,n){let r=sS(e,t);for(oS.delete(r),oS.set(r,{at:Date.now(),...n});oS.size>50;){let e=oS.keys().next().value;if(e===void 0)break;oS.delete(e)}}function uS(e,t){e.length!==0&&(oS.delete(sS(t,e)),oS.delete(sS(void 0,e)))}function dS(e,t){let n=e.join(`\0`);c.useEffect(()=>{for(let e of n.split(`\0`))uS(e,t)},[n,t])}function fS(e){let{title:t,fresh:n}=e,r=tS(),{loading:i,data:a}=aS(async()=>{n===!0&&uS(t,r);let e=cS(r,t);if(e!==void 0)return{get:e.get,html:e.html};let[i,a]=await Promise.all([rS(Se(`${T}?title=${encodeURIComponent(t)}`,r)),iS(t,r)]);return typeof a==`string`&&a.length>0&&lS(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`},_(`card.rendering`)):o!==null&&o.notFound===!0?c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},_(`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`},_(`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($x,{toolName:e.toolName,title:t,subtitle:e.subtitle,tags:u,onOpen:Qx(t,r),foot:d===void 0?void 0:_(`card.modifiedAt`,{modified:d})},l)}function pS(e){let t=tS(),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:`${xe(t===void 0?void 0:`multi`,t,C).relative}#${encodeURIComponent(e.title)}`,onClick:Qx(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 mS(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(pS,{key:`${e.title}-${t}`,...e}))),c.createElement($x,{toolName:e.toolName,title:e.title,subtitle:e.subtitle},n)}function hS(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 gS(e){let t=Xx(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=hS(e.text);r!==null&&n.set(`workspace`,r);let i=n.toString(),a=tS(),o=aS(()=>rS(Se(`${ne}?${i}`,a)),[i,a]).data,s=(Array.isArray(o?.items)?o.items:[]).map(e=>({title:Xx(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=_(`card.scopeNarrowed`,{prefix:`ws/`,id:u}):u!==null&&o?.fellBack===!0&&(d=_(`card.scopeWidened`,{prefix:`ws/`,id:u}));let f=`${_(`card.queryLabel`,{query:t||_(`card.allQuery`)})}${l===void 0?``:_(`card.totalHits`,{total:l})}${d}`;return c.createElement(mS,{toolName:e.toolName,title:t.length>0?t:_(`card.searchTitle`),subtitle:f,rows:s,fallbackText:_(`card.noMatches`)})}function _S(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=tS(),i=aS(()=>rS(Se(`${te}?${n}`,r)),[n,r]).data,a=(Array.isArray(i?.items)?i.items:[]).map(e=>({title:Xx(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(mS,{toolName:e.toolName,title:_(`card.recentTitle`),subtitle:a.length>0?_(`card.recentCount`,{count:a.length}):``,rows:a,fallbackText:_(`card.noNotes`)})}function vS(e){let t=(Array.isArray(e.args.items)?e.args.items:[]).map(e=>typeof e==`object`&&e&&typeof e.title==`string`?Xx(e.title):null).filter(e=>e!==null&&e.length>0).map(e=>({title:e}));return dS(t.map(e=>e.title),tS()),c.createElement(mS,{toolName:e.toolName,title:_(`card.toolBatchPut`),subtitle:t.length>0?_(`card.batchCount`,{count:t.length}):_(`card.batchNoItems`),rows:t,fallbackText:_(`card.batchEmpty`)})}function yS(e){let t=tS(),n=e.title.length>0?c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},_(`card.attachSavedRendered`)):c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},_(`card.attachSaved`));return c.createElement($x,{toolName:e.toolName,title:e.title.length>0?e.title:void 0,...e.title.length>0?{onOpen:Qx(e.title,t)}:{}},n)}function bS(e){let t=tS(),n=aS(()=>rS(Se(`${O}?limit=60&sort=count`,t)),[t]).data,r=(Array.isArray(n?.items)?n.items:[]).map(e=>({tag:Xx(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`},_(`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`},_(`card.tagsMore`,{count:a-i.length}))]:[]),c.createElement($x,{toolName:e.toolName,title:_(`card.tagsTitle`),subtitle:_(`card.tagsTotal`,{total:a})},o)}function xS(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`},_(`card.noResult`));return c.createElement($x,{toolName:e.toolName},t)}function SS(e){dS([e.title],tS());let t=e.title.length>0?c.createElement(`div`,{className:`dsh-tw-toolcard-empty`},_(`card.deletedTiddler`,{title:e.title})):c.createElement(`pre`,{className:`dsh-tw-toolcard-fallback`},e.text||_(`card.deleted`));return c.createElement($x,{toolName:e.toolName,title:e.title.length>0?e.title:void 0},t)}function CS(e){if(e===C)return;if(!e.startsWith(C))return null;let t=e.slice(C.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 wS(){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=CS(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 TS(e,t){switch(e){case`tiddlywiki_get`:case`tiddlywiki_put`:case`tiddlywiki_append`:case`tiddlywiki_delete`:case`tiddlywiki_attach`:case`tiddlywiki_backlinks`:return Xx(t.title);case`tiddlywiki_rename`:return Xx(t.newTitle);case`tiddlywiki_search`:return Xx(t.query);default:return``}}function ES(e){let t=nS(e.sessionId);return c.createElement(eS.Provider,{value:t},c.createElement(DS,e))}function DS(e){let t=e.block,n=e.toolName,r=Kx(t),i=qx(t),a=n!==void 0&&n.length>0?n:i?.name??``,o=Jx(i?.argsRaw??``),s=r?Yx(t.content):``;if(i===null)return c.createElement($x,{toolName:a},c.createElement(`pre`,{className:`dsh-tw-toolcard-fallback`},s||_(`card.noCallInfo`)));if(!r)return c.createElement($x,{toolName:a,title:TS(a,o)},c.createElement(`div`,{className:`dsh-tw-toolcard-pending`},_(`card.pending`)));if(t.isError===!0)return c.createElement($x,{toolName:a,title:TS(a,o)},c.createElement(`div`,{className:`dsh-tw-toolcard-error`},s||_(`card.callFailed`)));switch(a){case`tiddlywiki_get`:return c.createElement(fS,{toolName:a,title:Xx(o.title),subtitle:_(`card.subRead`)});case`tiddlywiki_put`:return c.createElement(fS,{toolName:a,title:Xx(o.title),subtitle:_(`card.subWritten`),fresh:!0});case`tiddlywiki_append`:return c.createElement(fS,{toolName:a,title:Xx(o.title),subtitle:_(`card.subAppended`),fresh:!0});case`tiddlywiki_rename`:return c.createElement(fS,{toolName:a,title:Xx(o.newTitle),subtitle:_(`card.subRenamed`,{old:Xx(o.oldTitle)}),fresh:!0});case`tiddlywiki_delete`:return c.createElement(SS,{toolName:a,title:Xx(o.title),text:s});case`tiddlywiki_attach`:return c.createElement(yS,{toolName:a,title:Xx(o.title)});case`tiddlywiki_batch_put`:return c.createElement(vS,{toolName:a,args:o});case`tiddlywiki_search`:return c.createElement(gS,{toolName:a,args:o,text:s});case`tiddlywiki_recent`:return c.createElement(_S,{toolName:a,args:o});case`tiddlywiki_list_tags`:return c.createElement(bS,{toolName:a});case`tiddlywiki_git_sync`:case`tiddlywiki_git_resolve`:return c.createElement(xS,{toolName:a,text:s});default:return c.createElement($x,{toolName:a,title:TS(a,o)},c.createElement(`pre`,{className:`dsh-tw-toolcard-fallback`},s||_(`card.done`)))}}const OS=[`tiddlywiki_get`,`tiddlywiki_search`,`tiddlywiki_recent`,`tiddlywiki_list_tags`,`tiddlywiki_put`,`tiddlywiki_batch_put`,`tiddlywiki_append`,`tiddlywiki_rename`,`tiddlywiki_delete`,`tiddlywiki_trash`,`tiddlywiki_backlinks`,`tiddlywiki_attach`,`tiddlywiki_lint`,`tiddlywiki_git_sync`,`tiddlywiki_git_resolve`];function kS(e){let t=[];for(let n of OS)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}`},ES));r!==void 0&&t.push(r)}catch(e){console.error(`[dsh-tiddlywiki] register toolview ${n} failed:`,e)}return t}const AS=`dsh-tiddlywiki`,jS=`dsh-tiddlywiki/rightbar`;function MS(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=zt(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(rt,{detail:jS}));let e=e=>{e.detail!==jS&&o()};return document.addEventListener(rt,e),()=>document.removeEventListener(rt,e)},[a,o]),c.createElement(`div`,{ref:r,className:`dsh-tw-rightbar-tab`})}function NS(){return{id:AS,kind:`dsh-tiddlywiki`,title:()=>ct(),guide:[{order:10,title:()=>_(`frame.rightbarTitle`),description:()=>_(`frame.rightbarDescription`),icon:ut}]}}function PS(e,t){let n=[];try{n.push(e.register(NS()));let r=t.inject(`sidebar.right.pane.tab`,()=>t.register({name:`sidebar.right.pane.tab`,key:AS},MS));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 Lt(),()=>{for(let e of n.splice(0))e()}}const FS=[`slots`];function IS(e){try{let t=[],n=!1,r=()=>{n=!0;for(let e of t.splice(0))e()},i=(e,t)=>{try{t()}catch(t){console.error(`[dsh-tiddlywiki] ${e} failed:`,t)}};i(`styles`,()=>t.push(b()));let a=new x,o,s;if(i(`quick-note widget`,()=>{o=Rb(),t.push(()=>o?.dispose())}),i(`sync controller`,()=>{s=Vb(),t.push(()=>s?.dispose())}),i(`sidebar entry`,()=>t.push(nt(a))),i(`center panel`,()=>t.push(Xt(a))),o!==void 0&&s!==void 0){let e=o,n=s;i(`knowledge FAB`,()=>t.push(Gb(a,e,n)))}i(`editor popup`,()=>t.push(ln)),e.slots!==void 0&&Me().then(r=>{if(n)return;let a=o;r.showQuickNoteDock&&a!==void 0&&i(`quick-note dock`,()=>{let n=e.slots?.inject(`conversation.input.dock`,()=>e.slots?.register({name:`conversation.input.dock`,id:`quick-note`,order:8,label:_(`chrome.dockQuickNote`)},qb(a,ux())));n!==void 0&&t.push(n)}),i(`wiki scope seat`,()=>t.push(ox(e.slots,ux({blankOnly:!0})))),i(`session summary tab`,()=>{let n=hx(e.slots,r);n!==void 0&&t.push(n)})}).catch(e=>{console.error(`[dsh-tiddlywiki] ui config load failed:`,e)}),i(`rightbar mount`,()=>{let r,i=a=>{let o=e.get?.(`sidebarRightTabs`);if(o===void 0){a<6&&!n&&(r=window.setTimeout(()=>i(a+1),500*(a+1)));return}Me().then(r=>{if(n||!r.showRightbarTab)return;let i=PS(o,e.slots);i!==void 0&&t.push(i)}).catch(e=>{console.error(`[dsh-tiddlywiki] rightbar config load failed:`,e)})};t.push(()=>{r!==void 0&&window.clearTimeout(r)}),i(0)}),i(`tool views`,()=>{e.slots!==void 0&&t.push(...kS(e.slots))}),i(`wiki link interceptor`,()=>t.push(wS())),i(`settings section`,()=>{let n=e.slots?.inject(`settings.section`,()=>e.slots?.register({name:`settings.section`,id:`dsh-tiddlywiki`,order:50,label:_(`frame.settingsSection`)},Gx));n!==void 0&&t.push(n)}),e.effect===void 0?window.addEventListener(`pagehide`,r,{once:!0}):e.effect(()=>r,`dsh-tiddlywiki: client mount`)}catch(e){console.error(`[dsh-tiddlywiki] client half failed to start:`,e)}}exports.apply=IS,exports.inject=FS,exports.name=`dsh-tiddlywiki/client`;
|
|
965
965
|
return module.exports;
|
|
966
966
|
}
|
|
967
967
|
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-tiddlywiki",
|
|
3
3
|
"description": "把 TiddlyWiki 5 变成你和 Agent 共用的本地文档中心(纯文本 + git):你在 DSH 界面里阅读、写作、记日记,Agent 用 15 个 tiddlywiki_* 工具读写同一批笔记;每条笔记都是你能读、能改、能审计、能随时带走的文件——不是自动记忆插件,不做后台抓取。可选一键发布到微信公众号草稿箱。 Turn TiddlyWiki 5 into a document center you and your agent share, in plain text under git — a knowledge base you can read, edit, audit and take with you, not an auto-memory plugin. Mounts via the official dsh plugin system; no DSH source changes.",
|
|
4
|
-
"version": "0.30.
|
|
4
|
+
"version": "0.30.47",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"dsh",
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bottom action bar of the quick-note card (v0.30.47 slice).
|
|
3
|
+
*
|
|
4
|
+
* Layout only: the left group (upload button → recent button → the Ctrl+Enter
|
|
5
|
+
* hint) and the right group (「✏️ 在 TW 中编辑」 / 「保存」). It owns NO card
|
|
6
|
+
* state — it asks for two function references and the already-built upload
|
|
7
|
+
* button, and hands back the elements the card wires the real actions onto
|
|
8
|
+
* (`saveBtn` / `editBtn` click handlers are bound in the card, next to the save
|
|
9
|
+
* module that implements them).
|
|
10
|
+
*
|
|
11
|
+
* Why the two groups are returned as well: `.dsh-tw-note-foot-left/right` carry
|
|
12
|
+
* the flex rules that keep the right group pinned right and let it wrap instead
|
|
13
|
+
* of squeezing the button labels onto two lines (v0.22.6) — the card appends
|
|
14
|
+
* into them, so their class names are contract, not implementation detail.
|
|
15
|
+
*
|
|
16
|
+
* @module dsh-tiddlywiki/client/note-widget-foot
|
|
17
|
+
*/
|
|
18
|
+
import { t } from './i18n.ts'
|
|
19
|
+
|
|
20
|
+
export interface NoteFooterDeps {
|
|
21
|
+
/** The upload button from `createNoteUploadUi` (v0.30.46) — appended, not created here. */
|
|
22
|
+
uploadButton: HTMLButtonElement
|
|
23
|
+
/** Opens/closes the 「🕘 最近」 dropdown (owned by `note-widget-recent.ts`). */
|
|
24
|
+
onRecent: () => void
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface NoteFooterUi {
|
|
28
|
+
/** The bar itself — the card appends it to the card element. */
|
|
29
|
+
foot: HTMLDivElement
|
|
30
|
+
/** Left group: upload button + recent button (the recent one is wired here). */
|
|
31
|
+
footLeft: HTMLDivElement
|
|
32
|
+
/** Right group: 「编辑」 / 「保存」 (their click handlers are bound in the card). */
|
|
33
|
+
footRight: HTMLDivElement
|
|
34
|
+
saveBtn: HTMLButtonElement
|
|
35
|
+
editBtn: HTMLButtonElement
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** The footer's left/right groups and their two buttons (no card state). */
|
|
39
|
+
export function createNoteFooter(deps: NoteFooterDeps): NoteFooterUi {
|
|
40
|
+
const { uploadButton, onRecent } = deps
|
|
41
|
+
|
|
42
|
+
const foot = document.createElement('div')
|
|
43
|
+
foot.className = 'dsh-tw-note-foot'
|
|
44
|
+
const footLeft = document.createElement('div')
|
|
45
|
+
footLeft.className = 'dsh-tw-note-foot-left'
|
|
46
|
+
const hint = document.createElement('span')
|
|
47
|
+
hint.className = 'dsh-tw-note-hint'
|
|
48
|
+
// The Mod-Enter shortcut itself is bound in the editor keymap; this is its label.
|
|
49
|
+
hint.textContent = 'Ctrl+Enter'
|
|
50
|
+
const recentBtn = document.createElement('button')
|
|
51
|
+
recentBtn.type = 'button'
|
|
52
|
+
recentBtn.className = 'dsh-tw-note-recent-btn'
|
|
53
|
+
recentBtn.title = t('note.recentTitle')
|
|
54
|
+
recentBtn.textContent = t('note.recent')
|
|
55
|
+
recentBtn.addEventListener('click', () => { onRecent() })
|
|
56
|
+
footLeft.append(uploadButton, recentBtn, hint)
|
|
57
|
+
|
|
58
|
+
const footRight = document.createElement('div')
|
|
59
|
+
footRight.className = 'dsh-tw-note-foot-right'
|
|
60
|
+
const editBtn = document.createElement('button')
|
|
61
|
+
editBtn.type = 'button'
|
|
62
|
+
editBtn.className = 'dsh-tw-note-edit'
|
|
63
|
+
editBtn.title = t('note.editTitle')
|
|
64
|
+
editBtn.textContent = t('note.editInTw')
|
|
65
|
+
const saveBtn = document.createElement('button')
|
|
66
|
+
saveBtn.type = 'button'
|
|
67
|
+
saveBtn.className = 'dsh-tw-note-save'
|
|
68
|
+
saveBtn.textContent = t('note.save')
|
|
69
|
+
footRight.append(editBtn, saveBtn)
|
|
70
|
+
|
|
71
|
+
foot.append(footLeft, footRight)
|
|
72
|
+
return { foot, footLeft, footRight, saveBtn, editBtn }
|
|
73
|
+
}
|
|
@@ -50,6 +50,9 @@
|
|
|
50
50
|
* hidden input + drop-onto-the-editor. Its own
|
|
51
51
|
* `dragDepth` travels with it; it asks the card for
|
|
52
52
|
* exactly two things — the editor and `wikiQuery`.
|
|
53
|
+
* - note-widget-foot.ts the bottom action bar (v0.30.47): left group
|
|
54
|
+
* (upload / 「最近」 / Ctrl+Enter hint) + right group
|
|
55
|
+
* (「编辑」 / 「保存」). Layout only — zero card state.
|
|
53
56
|
*
|
|
54
57
|
* @module dsh-tiddlywiki/client/note-widget
|
|
55
58
|
*/
|
|
@@ -60,6 +63,7 @@ import { buildMarkdownEditor, type MarkdownEditor } from './markdown-editor.ts'
|
|
|
60
63
|
import { EDIT_ENDPOINT, resolveTwUrl, twProxyFor } from './endpoints.ts'
|
|
61
64
|
import { buildTagEditor } from './note-widget-tags.ts'
|
|
62
65
|
import { createNoteUploadUi } from './note-widget-upload-ui.ts'
|
|
66
|
+
import { createNoteFooter } from './note-widget-foot.ts'
|
|
63
67
|
import { createRecentPicker } from './note-widget-recent.ts'
|
|
64
68
|
import { createNoteScope } from './note-widget-scope.ts'
|
|
65
69
|
import { installCardDrag, positionCard } from './note-widget-placement.ts'
|
|
@@ -365,33 +369,14 @@ export function createNoteWidget(): NoteWidgetHandle {
|
|
|
365
369
|
// `wikiQuery`(附件必须落在**这张卡片的目标库**里)。
|
|
366
370
|
const upload = createNoteUploadUi({ editor, wikiQuery })
|
|
367
371
|
|
|
368
|
-
|
|
369
|
-
foot.
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
const
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
recentBtn.type = 'button'
|
|
377
|
-
recentBtn.className = 'dsh-tw-note-recent-btn'
|
|
378
|
-
recentBtn.title = t('note.recentTitle')
|
|
379
|
-
recentBtn.textContent = t('note.recent')
|
|
380
|
-
recentBtn.addEventListener('click', () => { recent.toggle() })
|
|
381
|
-
footLeft.append(upload.button, recentBtn, hint)
|
|
382
|
-
const footRight = document.createElement('div')
|
|
383
|
-
footRight.className = 'dsh-tw-note-foot-right'
|
|
384
|
-
const editBtn = document.createElement('button')
|
|
385
|
-
editBtn.type = 'button'
|
|
386
|
-
editBtn.className = 'dsh-tw-note-edit'
|
|
387
|
-
editBtn.title = t('note.editTitle')
|
|
388
|
-
editBtn.textContent = t('note.editInTw')
|
|
389
|
-
const saveBtn = document.createElement('button')
|
|
390
|
-
saveBtn.type = 'button'
|
|
391
|
-
saveBtn.className = 'dsh-tw-note-save'
|
|
392
|
-
saveBtn.textContent = t('note.save')
|
|
393
|
-
footRight.append(editBtn, saveBtn)
|
|
394
|
-
foot.append(footLeft, footRight)
|
|
372
|
+
// 底栏(左组:上传 / 最近 / Ctrl+Enter 提示;右组:编辑 / 保存)整段住在
|
|
373
|
+
// note-widget-foot.ts(v0.30.47)—— 它只建 DOM、不留任何卡片状态:接一个
|
|
374
|
+
// 已经建好的上传按钮 + `recent.toggle` 的函数引用,把两个按钮交回来由卡片
|
|
375
|
+
// 接线(保存那一组的实现在 note-widget-save.ts)。
|
|
376
|
+
const { foot, saveBtn, editBtn } = createNoteFooter({
|
|
377
|
+
uploadButton: upload.button,
|
|
378
|
+
onRecent: () => { recent.toggle() },
|
|
379
|
+
})
|
|
395
380
|
|
|
396
381
|
// Recent dropdown — absolute, pops above the card.
|
|
397
382
|
const recentWrap = document.createElement('div')
|