Files
2026-11-05 14:35:04 +08:00

76 lines
169 KiB
JavaScript

/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
"use strict";var Ee=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var pt=Object.getOwnPropertyNames;var gt=Object.prototype.hasOwnProperty;var mt=(l,i)=>{for(var e in i)Ee(l,e,{get:i[e],enumerable:!0})},ft=(l,i,e,t)=>{if(i&&typeof i=="object"||typeof i=="function")for(let r of pt(i))!gt.call(l,r)&&r!==e&&Ee(l,r,{get:()=>i[r],enumerable:!(t=ht(i,r))||t.enumerable});return l};var _t=l=>ft(Ee({},"__esModule",{value:!0}),l);var Pt={};mt(Pt,{default:()=>Te});module.exports=_t(Pt);var ut=require("obsidian");var Fe={vocabularyBooks:[],showDefinitionOnHover:!0,enableAutoHighlight:!0,highlightStyle:"underline",enableMasteredFeature:!0,showMasteredInSidebar:!0,blurDefinitions:!1,ttsTemplate:"https://dict.youdao.com/dictvoice?audio={{word}}&type=2",aiDictionary:{apiUrl:"",apiKey:"",model:"",prompt:`Please provide a concise definition for the word "{{word}}" based on this context:
Sentence: {{sentence}}
Format:
1) Part of speech
2) English definition
3) Chinese translation
4) Example sentence (use the original sentence if appropriate)`,extraParams:"{}"},autoLayoutEnabled:!0,cardWidth:260,cardHeight:120,highlightMode:"all",highlightPaths:"",fileNodeParseMode:"filename-with-alias",enableSectionTabs:!0,enableSelectionTranslate:!1,translateTargetLang:"zh-CN",translatePrompt:`Translate the following text to {{to}}. Only return the translation, no explanation.
Text: {{text}}`};var U=class{constructor(){this.root=new te}addWord(i,e){let t=this.root,r=i.toLowerCase();for(let a of r)t.children.has(a)||t.children.set(a,new te),t=t.children.get(a);t.isEndOfWord=!0,t.payload=e,t.word=i}findAllMatches(i){let e=[],t=i.toLowerCase();for(let r=0;r<t.length;r++){let a=this.root,s=r;for(;s<t.length&&a.children.has(t[s]);)if(a=a.children.get(t[s]),s++,a.isEndOfWord){let o=t[r],n=t[s-1],c=ze(o)||r===0||!Ve(t[r-1]),u=ze(n)||s===t.length||!Ve(t[s]);c&&u&&e.push({word:a.word||t.substring(r,s),from:r,to:s,payload:a.payload})}}return e}clear(){this.root=new te}},te=class{constructor(){this.children=new Map,this.isEndOfWord=!1,this.payload=null,this.word=null}};function Ve(l){return/[a-z0-9\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]/iu.test(l)}function ze(l){return/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]/u.test(l)}function R(l,i="var(--color-accent)"){return l?{1:"var(--color-red)",2:"var(--color-orange)",3:"var(--color-yellow)",4:"var(--color-green)",5:"var(--color-cyan)",6:"var(--color-purple)",red:"var(--color-red)",orange:"var(--color-orange)",yellow:"var(--color-yellow)",green:"var(--color-green)",cyan:"var(--color-cyan)",blue:"var(--color-blue)",purple:"var(--color-purple)",pink:"var(--color-pink)",gray:"var(--color-base-60)",grey:"var(--color-base-60)",white:"var(--color-base-00)",black:"var(--color-base-100)"}[l.toLowerCase()]||l:i}function Be(l,i=.1){return l.startsWith("var(--color-")?`color-mix(in srgb, ${l} ${i*100}%, transparent)`:l.startsWith("#")||l.startsWith("rgb")||l.startsWith("hsl")?`color-mix(in srgb, ${l} ${i*100}%, transparent)`:l}var Ce=null;function vt(l,i){if(!l||!i)return null;let e=encodeURIComponent(i.trim());return l.split("{{word}}").join(e)}async function he(l,i){let e=vt(l.settings.ttsTemplate,i);if(e)try{Ce||(Ce=new Audio);let t=Ce;t.src=e,await t.play()}catch(t){console.warn("HiWords TTS play failed:",t)}}function Re(l){let i=l.trim();return i.includes("...")?{isPattern:!0,parts:i.split("...").map(t=>t.trim()).filter(t=>t.length>0),original:i}:{isPattern:!1,parts:[i],original:i}}function bt(l){return l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function pe(l,i,e=0){let t=[];if(i.length===0)return t;if(i.length===1){let o=new RegExp(`\\b${bt(i[0])}\\b`,"gi"),n;for(;(n=o.exec(l))!==null;)t.push({from:e+n.index,to:e+n.index+n[0].length,matchedText:n[0],segments:[{from:e+n.index,to:e+n.index+n[0].length}]});return t}let r=l.toLowerCase(),a=i.map(o=>o.toLowerCase()),s=0;for(;s<l.length;){let o=r.indexOf(a[0],s);if(o===-1)break;if(!Oe(l,o,o+i[0].length)){s=o+1;continue}let n=[];n.push({from:e+o,to:e+o+i[0].length});let c=o+i[0].length,u=!0;for(let h=1;h<i.length;h++){let p=wt(l,c),m=l.substring(c,p).toLowerCase().indexOf(a[h]);if(m===-1){u=!1;break}let v=c+m;if(!Oe(l,v,v+i[h].length)){u=!1;break}n.push({from:e+v,to:e+v+i[h].length}),c=v+i[h].length}if(u){let h=o,p=c;t.push({from:e+h,to:e+p,matchedText:l.substring(h,p),segments:n})}s=o+1}return t}function wt(l,i){let e=[".",",","!","?",";",":",`
`],t=l.length;for(let r of e){let a=l.indexOf(r,i);a!==-1&&a<t&&(t=a)}return t}function Oe(l,i,e){let t=i>0?l[i-1]:" ",r=e<l.length?l[e]:" ",a=h=>/[a-z0-9\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]/iu.test(h),s=h=>/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]/u.test(h),o=l[i],n=l[e-1],c=s(o)||!a(t),u=s(n)||!a(r);return c&&u}function Se(l,i){let e=i.highlightMode||"all";if(e==="all")return!0;let r=(i.highlightPaths||"").split(",").map(o=>o.trim()).filter(o=>o.length>0);if(r.length===0)return e==="exclude";let a=l.replace(/^\/+|\/+$/g,""),s=r.some(o=>{let n=o.replace(/^\/+|\/+$/g,"");return a===n||a.startsWith(n+"/")});return e==="exclude"?!s:e==="include"?s:!0}function ge(l){let i=l.getBoundingClientRect(),e=window.innerHeight||document.documentElement.clientHeight,t=window.innerWidth||document.documentElement.clientWidth;return i.bottom>0&&i.right>0&&i.top<e&&i.left<t}function xe(l){return!l.closest('.workspace-leaf-content[data-type="hover-editor"]')&&!l.closest('.workspace-leaf-content[data-type="file-explorer"]')&&!l.closest('.workspace-leaf-content[data-type="outline"]')&&!l.closest('.workspace-leaf-content[data-type="backlink"]')&&!l.closest('.workspace-leaf-content[data-type="tag"]')&&!l.closest('.workspace-leaf-content[data-type="search"]')&&!l.closest(".hover-popover")&&!l.closest(".popover")&&!l.closest(".suggestion-container")&&!l.closest(".modal")&&!l.closest(".workspace-split.mod-right-split")&&!l.closest(".workspace-split.mod-left-split")}function qe(l){l.querySelectorAll(".hi-words-highlight").forEach(e=>{var r;let t=document.createTextNode(e.textContent||"");(r=e.parentNode)==null||r.replaceChild(t,e)}),l.normalize()}function j(l){let i=new U,e=l.getAllWordsForHighlight();for(let t of e){let r=l.getDefinition(t);r&&i.addWord(t,r)}return i}function Ge(l){let i=null,e=["pre","code","a","button","input","textarea","select",".math",".cm-inline-code",".internal-embed",".file-embed",".hi-words-tooltip"].join(","),t=(r,a)=>{let s=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,{acceptNode:u=>{let h=u.parentElement,p=h!=null?h:null;return!p||p.closest(e)||p.closest(".hi-words-highlight")||!u.nodeValue||!u.nodeValue.trim()?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),o=l.settings.highlightStyle||"underline",n=[],c=s.nextNode();for(;c;)n.push(c),c=s.nextNode();for(let u of n){let h=u.nodeValue||"";if(!h)continue;let p=a.findAllMatches(h);if(!p||p.length===0)continue;p.sort((_,b)=>_.from-b.from||b.to-b.from-(_.to-_.from));let g=[],f=0;for(let _ of p)_.from>=f&&(g.push(_),f=_.to);if(g.length===0)continue;let m=document.createDocumentFragment(),v=0;for(let _ of g){_.from>v&&m.appendChild(document.createTextNode(h.slice(v,_.from)));let b=_.payload,y=R(b==null?void 0:b.color,"var(--color-base-60)"),T=document.createElement("span");T.className="hi-words-highlight",T.setAttribute("data-word",_.word),b!=null&&b.definition&&T.setAttribute("data-definition",b.definition),y&&T.setAttribute("data-color",y),T.setAttribute("data-style",o),y&&T.setAttribute("style",`--word-highlight-color: ${y}`),T.textContent=h.slice(_.from,_.to),m.appendChild(T),v=_.to}v<h.length&&m.appendChild(document.createTextNode(h.slice(v))),u.parentNode&&u.parentNode.replaceChild(m,u)}};l.registerMarkdownPostProcessor((r,a)=>{try{if(!l.settings.enableAutoHighlight)return;let s=a==null?void 0:a.sourcePath;if(s&&!l.shouldHighlightFile(s)||!xe(r))return;let o=j(l.vocabularyManager);i=t,t(r,o)}catch(s){console.error("\u9605\u8BFB\u6A21\u5F0F\u9AD8\u4EAE\u5904\u7406\u5931\u8D25:",s)}}),l._refreshReadingModeHighlighter=()=>{yt(l,i)}}function yt(l,i){if(!(!l.settings.enableAutoHighlight||!i))try{let e=j(l.vocabularyManager);document.querySelectorAll(".markdown-preview-view .markdown-preview-sizer").forEach(r=>{let a=r;xe(a)&&ge(a)&&(qe(a),i(a,e))})}catch(e){console.error("\u5237\u65B0\u9605\u8BFB\u6A21\u5F0F\u9AD8\u4EAE\u5931\u8D25:",e)}}function Ue(l){let i=new WeakSet,e=null,t=(n,c)=>{if(!i.has(n)){i.add(n);try{$e(n,c,l.settings.highlightStyle||"underline")}catch(u){console.error("PDF \u6587\u672C\u5C42\u9AD8\u4EAE\u5904\u7406\u5931\u8D25:",u)}}},r=()=>{e&&window.clearTimeout(e),e=window.setTimeout(()=>{if(!l.settings.enableAutoHighlight)return;let n=l.app.workspace.getActiveFile();if(n&&!l.shouldHighlightFile(n.path))return;let c=j(l.vocabularyManager);document.querySelectorAll(".textLayer").forEach(h=>{h.closest(".pdf-container, .mod-pdf")&&t(h,c)}),e=null},300)},a=()=>{let n=new MutationObserver(c=>{let u=!1;c.forEach(h=>{h.addedNodes.forEach(p=>{if(p.nodeType===Node.ELEMENT_NODE){let g=p;(g.classList.contains("textLayer")||g.querySelector(".textLayer"))&&(u=!0),g.classList.contains("page")&&g.closest(".pdf-container, .mod-pdf")&&(u=!0)}})}),u&&r()});return n.observe(document.body,{childList:!0,subtree:!0,attributes:!1,characterData:!1}),n};l.registerEvent(l.app.workspace.on("layout-change",()=>{setTimeout(()=>{r()},500)})),l.registerEvent(l.app.workspace.on("active-leaf-change",n=>{var c;((c=n==null?void 0:n.view)==null?void 0:c.getViewType())==="pdf"&&setTimeout(()=>{r()},1e3)})),l.registerEvent(l.app.workspace.on("file-open",n=>{(n==null?void 0:n.extension)==="pdf"&&setTimeout(()=>{r()},1500)}));let s=a();setTimeout(()=>{r()},1e3);let o=()=>{e&&window.clearTimeout(e),s.disconnect()};l._pdfHighlighterCleanup=o,l._refreshPDFHighlighter=()=>{Et(l,i)}}function Tt(l){l.querySelectorAll('span[role="presentation"]').forEach(e=>{if(e.querySelectorAll(".hi-words-highlight").length===0)return;let r="";e.childNodes.forEach(a=>{(a.nodeType===Node.TEXT_NODE||a.nodeType===Node.ELEMENT_NODE)&&(r+=a.textContent)}),e.innerHTML="",e.textContent=r})}function $e(l,i,e){l.querySelectorAll('span[role="presentation"]').forEach(r=>{if(r.closest(".hi-words-highlight")||r.closest(".hi-words-tooltip"))return;let a=r.textContent||"";if(!a.trim())return;let s=i.findAllMatches(a);if(!s||s.length===0)return;s.sort((h,p)=>h.from-p.from||p.to-p.from-(h.to-h.from));let o=[],n=0;for(let h of s)h.from>=n&&(o.push(h),n=h.to);if(o.length===0)return;let c=document.createDocumentFragment(),u=0;for(let h of o){h.from>u&&c.appendChild(document.createTextNode(a.slice(u,h.from)));let p=h.payload,g=R(p==null?void 0:p.color,"var(--color-base-60)"),f=document.createElement("span");f.className="hi-words-highlight hi-words-pdf-highlight",f.setAttribute("data-word",h.word),p!=null&&p.definition&&f.setAttribute("data-definition",p.definition),g&&f.setAttribute("data-color",g),f.setAttribute("data-style",e);let m=`${g?`--word-highlight-color: ${g};`:""} padding:0; margin:0; border:none;`;f.setAttribute("style",m),f.textContent=a.slice(h.from,h.to),c.appendChild(f),u=h.to}u<a.length&&c.appendChild(document.createTextNode(a.slice(u))),r.innerHTML="",r.appendChild(c)})}function Et(l,i){if(l.settings.enableAutoHighlight)try{let e=j(l.vocabularyManager);document.querySelectorAll(".textLayer").forEach(r=>{let a=r;a.closest(".pdf-container, .mod-pdf")&&ge(a)&&(i.delete(a),Tt(a),$e(a,e,l.settings.highlightStyle||"underline"),i.add(a))})}catch(e){console.error("\u5237\u65B0 PDF \u9AD8\u4EAE\u5931\u8D25:",e)}}function je(l){l._pdfHighlighterCleanup&&(l._pdfHighlighterCleanup(),delete l._pdfHighlighterCleanup)}var Me=require("obsidian");var re=require("obsidian");var Ke=require("obsidian");var k=class{constructor(i,e){this.app=i,this.settings=e}updateSettings(i){this.settings=i}removeMarkdownFormatting(i){return i&&(i=i.replace(/\*\*(.*?)\*\*/g,"$1").replace(/__(.*?)__/g,"$1"),i=i.replace(/\*(.*?)\*/g,"$1").replace(/_(.*?)_/g,"$1"),i=i.replace(/`(.*?)`/g,"$1"),i=i.replace(/~~(.*?)~~/g,"$1"),i=i.replace(/==(.*?)==/g,"$1"),i=i.replace(/\[(.*?)\]\(.*?\)/g,"$1"),i.trim())}removeFrontmatter(i){if(!i)return i;if(i.charCodeAt(0)===65279&&(i=i.slice(1)),i.startsWith("---")){let e=i.indexOf(`
---`);if(e!==-1)return i.slice(e+4).replace(/^\r?\n/,"")}return i}parseSections(i){if(!i)return[];let e=i.split(/\n\s*---\s*\n/),t=[];for(let r of e){let a=r.trim();if(!a)continue;let s=a.split(`
`),n=s[0].trim().match(/^\*\*(.+?)\*\*$/);if(n){t.push({title:n[1].trim(),content:s.slice(1).join(`
`).trim()});continue}t.push({title:t.length===0?"\u91CA\u4E49":`\u5185\u5BB9 ${t.length+1}`,content:a})}return t}async parseCanvasFile(i){var e,t;try{let r=await this.app.vault.cachedRead(i),a=JSON.parse(r),s=(t=(e=this.settings)==null?void 0:e.masteredDetection)!=null?t:"group",o=s==="group"?a.nodes.find(c=>c.type==="group"&&(c.label==="Mastered"||c.label==="\u5DF2\u638C\u63E1")):void 0,n=[];for(let c of a.nodes)if(c.type==="text"&&c.text){let u=this.parseTextNode(c,i.path);u&&(s==="group"?o&&this.isNodeInGroup(c,o)&&(u.mastered=!0):s==="color"&&c.color==="4"&&(u.mastered=!0),n.push(u))}else if(c.type==="file"&&c.file){let u=await this.parseFileNode(c,i.path);u&&(s==="group"?o&&this.isNodeInGroup(c,o)&&(u.mastered=!0):s==="color"&&c.color==="4"&&(u.mastered=!0),n.push(u))}return n}catch(r){return console.error(`Failed to parse canvas file ${i.path}:`,r),[]}}parseFromText(i,e,t){if(!i)return null;i=this.removeFrontmatter(i).trim();let r="",a=[],s="";try{let o=i.split(`
`);if(o.length===0||(r=o[0].replace(/^#+\s*/,"").trim(),r=this.removeMarkdownFormatting(r),!r))return null;if(o.length>1){let p=-1,g=-1;for(let f=1;f<o.length;f++){let m=o[f].trim();if(m.startsWith("*")&&m.endsWith("*")&&m.length>2&&!m.startsWith("**")&&!m.endsWith("**")){let _=m.slice(1,-1).split(",").map(b=>b.trim()).filter(b=>b);a.push(..._),p=f}else if(m!==""){g=f;break}}if(g>0&&g<o.length){for(;g<o.length&&o[g].trim()==="";)g++;g<o.length&&(s=o.slice(g).join(`
`).trim())}else p===-1&&(s=o.slice(1).join(`
`).trim())}if(!r)return null;let n=Re(r),c=s,u;return s&&s.includes(`
---
`)&&(u=this.parseSections(s),u.length>0&&(s=u[0].content)),{word:n.isPattern?n.original:r.toLowerCase(),aliases:a.length>0?a:void 0,definition:s,rawDefinition:c||s,sections:u,source:t,nodeId:e.id,color:e.color,isPattern:n.isPattern,patternParts:n.isPattern?n.parts:void 0}}catch(o){return console.error(`\u89E3\u6790\u8282\u70B9\u6587\u672C\u65F6\u51FA\u9519: ${o}`),null}}parseTextNode(i,e){return i.text?this.parseFromText(i.text,i,e):null}async parseFileNode(i,e){var t;try{let r=i.file;if(!r)return null;let a=this.app.vault.getAbstractFileByPath(r);if(!(a instanceof Ke.TFile)||a.extension!=="md")return null;let s=((t=this.settings)==null?void 0:t.fileNodeParseMode)||"filename-with-alias",o=a.basename;if(s==="filename")return{word:o,aliases:[],definition:"",source:e,nodeId:i.id,color:i.color,mastered:!1};let n=await this.app.vault.cachedRead(a);if(s==="content")return this.parseFromText(n,i,e);if(s==="filename-with-alias"){let c=this.parseFromText(n,i,e);if(c&&c.word){let u=c.word,h=c.aliases||[],p=u!==o?[u,...h]:h;return{...c,word:o,aliases:p}}return{word:o,aliases:[],definition:"",source:e,nodeId:i.id,color:i.color,mastered:!1}}return null}catch(r){return console.error("\u89E3\u6790\u6587\u4EF6\u8282\u70B9\u5931\u8D25:",r),null}}static isCanvasFile(i){return i.extension==="canvas"}async validateCanvasFile(i){var e;try{let t=await this.app.vault.cachedRead(i),r=(e=t==null?void 0:t.trim())!=null?e:"";if(r==="")return!0;let a=JSON.parse(r),s=!("nodes"in a)||Array.isArray(a.nodes),o=!("edges"in a)||Array.isArray(a.edges);return s&&o}catch(t){return!0}}isNodeInGroup(i,e){let t=typeof i.x=="number"?i.x:0,r=typeof i.y=="number"?i.y:0,a=typeof i.width=="number"?i.width:200,s=typeof i.height=="number"?i.height:60,o=typeof e.x=="number"?e.x:0,n=typeof e.y=="number"?e.y:0,c=typeof e.width=="number"?e.width:300,u=typeof e.height=="number"?e.height:150,h=t,p=t+a,g=r,f=r+s,m=o,v=o+c,_=n,b=n+u;if(!(h>=m&&p<=v&&g>=_&&f<=b)){if(h<v&&p>m&&g<b&&f>_){let P=Math.max(h,m),F=Math.min(p,v),V=Math.max(g,_),E=Math.min(f,b),M=(F-P)*(E-V),W=a*s;return M>=W*.5}return!1}return!0}};var Ct=50,St=50,Ye=260,Qe=120,Je=20,Xe=3,me=24,fe=12,ie=2;function q(l,i,e){var o,n;if(!i.autoLayoutEnabled)return;let t=(o=i.cardWidth)!=null?o:Ye,r=(n=i.cardHeight)!=null?n:Qe,a=l.nodes.find(c=>c.type==="group"&&c.label==="Mastered"),s=l.nodes.filter(c=>!(c.type==="group"||a&&e.isNodeInGroup(c,a)));if(s.length!==0)for(let c=0;c<s.length;c++){let u=s[c],h=c%Xe,p=Math.floor(c/Xe);u.x=Ct+h*(t+Je),u.y=St+p*(r+Je),u.width=t,u.height=r}}function ke(l,i,e,t){var u,h;let r=(u=e.cardWidth)!=null?u:Ye,a=(h=e.cardHeight)!=null?h:Qe,s=l.nodes.filter(p=>p.type!=="group"&&t.isNodeInGroup(p,i));if(s.length===0)return;for(let p=0;p<s.length;p++){let g=s[p],f=p%ie,m=Math.floor(p/ie);g.x=i.x+me+f*(r+fe),g.y=i.y+me+m*(a+fe),g.width=r,g.height=a}let o=Math.ceil(s.length/ie),n=me*2+ie*r+(ie-1)*fe,c=me*2+o*a+(o-1)*fe;i.width=Math.max(i.width,n),i.height=Math.max(i.height,c)}var ae=class{constructor(i,e){this.app=i,this.settings=e}updateSettings(i){this.settings=i}genHex16(){let i=new Uint8Array(8);return(window.crypto||window.msCrypto).getRandomValues(i),Array.from(i,e=>e.toString(16).padStart(2,"0")).join("")}async addWordToCanvas(i,e,t,r,a){try{let s=this.app.vault.getAbstractFileByPath(i);if(!s||!(s instanceof re.TFile)||!k.isCanvasFile(s))return console.error(`\u65E0\u6548\u7684 Canvas \u6587\u4EF6: ${i}`),null;a&&(a=a.filter(c=>c&&c.trim().length>0),a.length===0&&(a=void 0));let o=new k(this.app,this.settings),n="";return await this.app.vault.process(s,c=>{var M,W;let u=JSON.parse(c||'{"nodes":[],"edges":[]}');Array.isArray(u.nodes)||(u.nodes=[]);let h=this.genHex16();n=h;let p=(M=this.settings.cardWidth)!=null?M:260,g=(W=this.settings.cardHeight)!=null?W:120,f=20,m=24,v=(C,x)=>typeof C=="number"?C:x,_=C=>({x:v(C.x,0),y:v(C.y,0),w:v(C.width,200),h:v(C.height,60)}),b=(C,x,A,O)=>C<A+O&&C+x>A,y=u.nodes.find(C=>C.type==="group"&&C.label&&(C.label==="Mastered"||C.label==="\u5DF2\u638C\u63E1")),T=y?_(y):void 0,P=0,F=0;if(u.nodes.length>0){let C;for(let x=u.nodes.length-1;x>=0;x--){let A=u.nodes[x];if(A.type!=="group"){if(T){let O=_(A),L=b(O.x,O.w,T.x,T.w),ee=b(O.y,O.h,T.y,T.h);if(L&&ee)continue}C=A;break}}if(C){let x=_(C);P=x.x,F=x.y+x.h+f}}T&&b(P,p,T.x,T.w)&&(P=T.x+T.w+m);let V=e;a&&a.length>0&&(V=`${e}
*${a.join(", ")}*`),t&&(V=`${V}
${t}`);let E={id:h,type:"text",x:P,y:F,width:p,height:g,text:V,color:r!==void 0?r.toString():void 0};return u.nodes.push(E),q(u,this.settings,o),JSON.stringify(u)}),n}catch(s){return console.error(`\u6DFB\u52A0\u8BCD\u6C47\u5230 Canvas \u5931\u8D25: ${s}`),null}}async updateWordInCanvas(i,e,t,r,a,s){try{let o=this.app.vault.getAbstractFileByPath(i);if(!o||!(o instanceof re.TFile)||!k.isCanvasFile(o))return console.error(`\u65E0\u6548\u7684 Canvas \u6587\u4EF6: ${i}`),!1;s&&(s=s.filter(u=>u&&u.trim().length>0),s.length===0&&(s=void 0));let n=!1,c=new k(this.app);return await this.app.vault.process(o,u=>{let h=JSON.parse(u||'{"nodes":[],"edges":[]}');Array.isArray(h.nodes)||(h.nodes=[]);let p=h.nodes.findIndex(f=>f.id===e);if(p===-1)return console.error(`\u672A\u627E\u5230\u8282\u70B9: ${e}`),JSON.stringify(h);let g=t;return s&&s.length>0&&(g=`${t}
*${s.join(", ")}*`),r&&(g=`${g}
${r}`),h.nodes[p].text=g,a!==void 0&&(h.nodes[p].color=a.toString()),q(h,this.settings,c),n=!0,JSON.stringify(h)}),n}catch(o){return console.error(`\u66F4\u65B0 Canvas \u4E2D\u7684\u8BCD\u6C47\u5931\u8D25: ${o}`),!1}}async deleteWordFromCanvas(i,e){try{let t=this.app.vault.getAbstractFileByPath(i);if(!t||!(t instanceof re.TFile)||!k.isCanvasFile(t))return console.error(`\u65E0\u6548\u7684 Canvas \u6587\u4EF6: ${i}`),!1;let r=!1,a=new k(this.app);return await this.app.vault.process(t,s=>{let o=JSON.parse(s||'{"nodes":[],"edges":[]}');Array.isArray(o.nodes)||(o.nodes=[]);let n=o.nodes.findIndex(c=>c.id===e);return n===-1?(console.warn(`\u672A\u627E\u5230\u8981\u5220\u9664\u7684\u8282\u70B9: ${e}`),JSON.stringify(o)):(o.nodes.splice(n,1),q(o,this.settings,a),r=!0,JSON.stringify(o))}),r}catch(t){return console.error(`\u4ECE Canvas \u4E2D\u5220\u9664\u8BCD\u6C47\u5931\u8D25: ${t}`),!1}}async setNodeColor(i,e,t){try{let r=this.app.vault.getAbstractFileByPath(i);if(!r||!(r instanceof re.TFile)||!k.isCanvasFile(r))return console.error(`\u65E0\u6548\u7684 Canvas \u6587\u4EF6: ${i}`),!1;let a=!1,s=new k(this.app,this.settings);return await this.app.vault.process(r,o=>{let n=JSON.parse(o||'{"nodes":[],"edges":[]}');Array.isArray(n.nodes)||(n.nodes=[]);let c=n.nodes.findIndex(u=>u.id===e);return c===-1?(console.error(`\u672A\u627E\u5230\u8282\u70B9: ${e}`),JSON.stringify(n)):(t!==void 0?n.nodes[c].color=t.toString():delete n.nodes[c].color,q(n,this.settings,s),a=!0,JSON.stringify(n))}),a}catch(r){return console.error(`\u8BBE\u7F6E\u8282\u70B9\u989C\u8272\u5931\u8D25: ${r}`),!1}}};var Ae=require("obsidian");var se=class{constructor(i,e){this.MASTERED_GROUP_LABEL="Mastered";this.MASTERED_GROUP_COLOR="4";this.app=i,this.canvasParser=new k(i),this.settings=e}updateSettings(i){this.settings=i}genHex16(){let i=new Uint8Array(8);return(window.crypto||window.msCrypto).getRandomValues(i),Array.from(i,e=>e.toString(16).padStart(2,"0")).join("")}async ensureMasteredGroup(i){try{let e=await this.loadCanvas(i);if(!e)return null;let t=e.nodes.find(r=>r.type==="group"&&r.label===this.MASTERED_GROUP_LABEL);if(!t){let r=this.genHex16();return await this.modifyCanvas(i,a=>{let s=this.createMasteredGroup(a);s.id=r,a.nodes.push(s)}),r}return t.id}catch(e){return null}}async moveToMasteredGroup(i,e){try{let t=await this.ensureMasteredGroup(i);return t?await this.modifyCanvas(i,r=>{let a=r.nodes.find(n=>n.id===e),s=r.nodes.find(n=>n.id===t);if(!(!a||!s||!this.moveNodeToGroupOptimizedSync(a,s,r)))try{this.settings&&(ke(r,s,this.settings,this.canvasParser),q(r,this.settings,this.canvasParser))}catch(n){}}):!1}catch(t){return!1}}async removeFromMasteredGroup(i,e){try{return await this.modifyCanvas(i,t=>{let r=t.nodes.find(s=>s.id===e);if(!(!r||!t.nodes.find(s=>s.type==="group"&&s.label===this.MASTERED_GROUP_LABEL))){this.moveNodeOutOfGroupSync(r,t);try{this.settings&&q(t,this.settings,this.canvasParser)}catch(s){}}})}catch(t){return!1}}async isNodeInMasteredGroup(i,e){try{let t=await this.loadCanvas(i);if(!t)return!1;let r=t.nodes.find(s=>s.id===e);if(!r)return!1;let a=t.nodes.find(s=>s.type==="group"&&s.label===this.MASTERED_GROUP_LABEL);return a?this.canvasParser.isNodeInGroup(r,a):!1}catch(t){return!1}}createMasteredGroup(i){let e=this.genHex16(),{x:t,y:r}=this.calculateMasteredGroupPosition(i);return{id:e,type:"group",x:t,y:r,width:400,height:200,color:this.MASTERED_GROUP_COLOR,label:this.MASTERED_GROUP_LABEL}}calculateMasteredGroupPosition(i){let e=i.nodes.filter(p=>p.type==="text"||p.type==="group");if(e.length===0)return{x:50,y:50};let t=Math.min(...e.map(p=>p.x)),r=Math.max(...e.map(p=>p.x+(p.width||200))),a=Math.min(...e.map(p=>p.y)),s=Math.max(...e.map(p=>p.y+(p.height||100))),o=800,n=600,c=50,u=r+c,h=a;return u+o>3e3&&(u=t,h=s+c),{x:u,y:h}}moveNodeToGroupOptimizedSync(i,e,t){try{return i.width=i.width||260,i.height=i.height||120,i.x=Math.max(e.x+24,e.x),i.y=Math.max(e.y+24,e.y),!0}catch(r){return!1}}moveNodeOutOfGroupSync(i,e){let t=e.nodes.find(h=>h.type==="group"&&h.label===this.MASTERED_GROUP_LABEL),r=e.nodes.filter(h=>h.type!=="text"||h.id===i.id?!1:t?!this.canvasParser.isNodeInGroup(h,t):!0),a=50,s=20,o=i.width||260,n=i.height||120;if(r.length===0){i.x=a,i.y=s;return}let c=Math.min(...r.map(h=>h.x),a),u=Math.max(...r.map(h=>h.y+(h.height||n)),0);if(i.x=c,i.y=u+s,t){let h=t.y+t.height;i.y<h+s&&(i.y=h+s)}}getGroupMembers(i,e,t){return e.nodes.filter(r=>r.id!==i.id&&r.id!==t&&r.type!=="group"&&this.canvasParser.isNodeInGroup(r,i))}async loadCanvas(i){try{let e=this.app.vault.getAbstractFileByPath(i);if(!(e instanceof Ae.TFile))return null;let t=await this.app.vault.cachedRead(e);return JSON.parse(t)}catch(e){return null}}async modifyCanvas(i,e){try{let t=this.app.vault.getAbstractFileByPath(i);return t instanceof Ae.TFile?(await this.app.vault.process(t,r=>{let a=JSON.parse(r);return e(a),JSON.stringify(a)}),!0):!1}catch(t){return!1}}};var oe=class{constructor(i,e){this.definitions=new Map;this.wordDefinitionCache=new Map;this.allWordsCache=[];this.bookWordsCache=new Map;this.cacheValid=!1;this.memoryOnlyWords=new Map;this.pendingSyncWords=new Map;this.syncTimeouts=new Map;this.tempNodeIdCounter=0;this.app=i,this.canvasParser=new k(i,e),this.canvasEditor=new ae(i,e),this.settings=e}async loadAllVocabularyBooks(){this.definitions.clear(),this.invalidateCache();let i=this.settings.vocabularyBooks.filter(e=>e.enabled).map(e=>this.loadVocabularyBook(e));await Promise.all(i),this.rebuildCache()}async loadVocabularyBook(i){let e=this.app.vault.getAbstractFileByPath(i.path);if(!e||!(e instanceof Me.TFile)){console.warn(`Canvas file not found: ${i.path}`);return}if(!k.isCanvasFile(e)){console.warn(`File is not a canvas: ${i.path}`);return}try{let t=await this.canvasParser.parseCanvasFile(e);this.definitions.set(i.path,t),this.updateCacheForBook(i.path,t)}catch(t){console.error(`Failed to load vocabulary book ${i.name}:`,t),this.definitions.delete(i.path),this.updateCacheForBook(i.path,[])}}getDefinition(i,e=new Set){let t=i.toLowerCase().trim();if(e.has(t))return null;if(e.add(t),this.cacheValid&&this.wordDefinitionCache.has(t))return this.wordDefinitionCache.get(t)||null;if(!this.cacheValid&&(this.rebuildCache(),this.wordDefinitionCache.has(t)))return this.wordDefinitionCache.get(t)||null;for(let r of this.definitions.values()){let a=r.find(o=>o.word===t);if(a)return this.wordDefinitionCache.set(t,a),a;let s=r.find(o=>o.aliases&&o.aliases.includes(t));if(s)return this.wordDefinitionCache.set(t,s),s}return null}getAllWords(){return this.cacheValid?[...this.allWordsCache]:(this.rebuildCache(),[...this.allWordsCache])}getAllWordsForHighlight(){if(!this.settings.enableMasteredFeature)return this.getAllWords();if(this.cacheValid){let e=[];for(let t of this.allWordsCache){let r=this.wordDefinitionCache.get(t);r&&!r.mastered&&e.push(t)}return e}this.rebuildCache();let i=[];for(let e of this.allWordsCache){let t=this.wordDefinitionCache.get(e);t&&!t.mastered&&i.push(e)}return i}getWordsFromBook(i){if(this.cacheValid&&this.bookWordsCache.has(i))return[...this.bookWordsCache.get(i)];let e=this.definitions.get(i);if(!e)return[];let t=[];t.push(...e.map(a=>a.word)),e.forEach(a=>{a.aliases&&a.aliases.length>0&&t.push(...a.aliases)});let r=[...new Set(t)];return this.bookWordsCache.set(i,r),r}async reloadVocabularyBook(i){let e=this.settings.vocabularyBooks.find(t=>t.path===i);e&&e.enabled&&(await this.loadVocabularyBook(e),this.invalidateCache())}removeBookData(i){this.definitions.delete(i),this.invalidateCache()}updateSettings(i){let e=this.settings;this.settings=i,(e.masteredDetection!==i.masteredDetection||e.fileNodeParseMode!==i.fileNodeParseMode||this.hasVocabularyBooksChanged(e.vocabularyBooks,i.vocabularyBooks))&&this.invalidateCache(),this.canvasEditor.updateSettings(i),this.canvasParser.updateSettings(i)}hasVocabularyBooksChanged(i,e){if(i.length!==e.length)return!0;for(let t=0;t<i.length;t++){let r=i[t],a=e[t];if(r.path!==a.path||r.enabled!==a.enabled||r.name!==a.name)return!0}return!1}getSettings(){return this.settings}getStats(){let i=this.settings.vocabularyBooks.length,e=this.settings.vocabularyBooks.filter(r=>r.enabled).length,t=0;for(let r of this.definitions.values())t+=r.length;return{totalBooks:i,enabledBooks:e,totalWords:t}}hasWord(i){let e=i.toLowerCase().trim();return this.cacheValid?this.wordDefinitionCache.has(e):this.getDefinition(i)!==null}clear(){this.definitions.clear(),this.invalidateCache()}async addWordToCanvas(i,e,t,r,a){try{let s={word:e,definition:t,source:i,nodeId:this.generateTempNodeId(),color:r?this.getColorString(r):void 0,aliases:a==null?void 0:a.filter(o=>o&&o.trim().length>0)};return this.addWordToMemoryCache(i,s),this.rebuildCache(),this.scheduleCanvasSync(i,s),!0}catch(s){return console.error("Failed to add word to canvas:",s),!1}}async setNodeColor(i,e,t){try{if(!await this.canvasEditor.setNodeColor(i,e,t))return!1;let a=this.definitions.get(i);if(a){let s=a.findIndex(o=>o.nodeId===e);if(s>=0){let o=a[s];o.color=t!==void 0?this.getColorString(t):void 0,this.wordDefinitionCache.set(o.word,o),o.aliases&&o.aliases.forEach(n=>this.wordDefinitionCache.set(n,o)),this.cacheValid=!1}}return!0}catch(r){return console.error("\u8BBE\u7F6E\u8282\u70B9\u989C\u8272\u5931\u8D25:",r),!1}}invalidateCache(){this.cacheValid=!1,this.wordDefinitionCache.clear(),this.allWordsCache=[],this.bookWordsCache.clear()}rebuildCache(){this.wordDefinitionCache.clear(),this.allWordsCache=[],this.bookWordsCache.clear();let i=new Set;for(let[e,t]of this.definitions.entries()){let r=new Set;for(let a of t){let s=a.word.toLowerCase().trim();if(this.wordDefinitionCache.set(s,a),i.add(s),r.add(s),a.aliases&&a.aliases.length>0)for(let o of a.aliases){let n=o.toLowerCase().trim();this.wordDefinitionCache.set(n,a),i.add(n),r.add(n)}}this.bookWordsCache.set(e,[...r])}this.allWordsCache=[...i],this.cacheValid=!0}updateCacheForBook(i,e){if(!this.cacheValid){this.rebuildCache();return}let t=this.bookWordsCache.get(i)||[],r=new Set(t);t.forEach(o=>{this.wordDefinitionCache.delete(o)}),this.allWordsCache=this.allWordsCache.filter(o=>!r.has(o));let a=new Set,s=new Set(this.allWordsCache);for(let o of e){let n=o.word.toLowerCase().trim();if(this.wordDefinitionCache.set(n,o),s.add(n),a.add(n),o.aliases&&o.aliases.length>0)for(let c of o.aliases){let u=c.toLowerCase().trim();this.wordDefinitionCache.set(u,o),s.add(u),a.add(u)}}this.allWordsCache=[...s],this.bookWordsCache.set(i,[...a])}async updateWordInCanvas(i,e,t,r,a,s){try{if(await this.canvasEditor.updateWordInCanvas(i,e,t,r,a,s)){let n={word:t,definition:r,source:i,nodeId:e,color:a?this.getColorString(a):void 0,aliases:s==null?void 0:s.filter(c=>c&&c.trim().length>0)};return this.updateWordInMemoryCache(i,e,n),this.rebuildCache(),!0}return!1}catch(o){return console.error("Failed to update word in canvas:",o),!1}}generateTempNodeId(){return`temp_${Date.now()}_${++this.tempNodeIdCounter}`}getColorString(i){return i>=1&&i<=6?i.toString():void 0}addWordToMemoryCache(i,e){let t=this.definitions.get(i);t||(t=[],this.definitions.set(i,t));let r=t.findIndex(a=>a.word===e.word);r>=0?t[r]=e:t.push(e),this.wordDefinitionCache.set(e.word,e),e.aliases&&e.aliases.forEach(a=>{this.wordDefinitionCache.set(a,e)}),this.cacheValid=!1}updateWordInMemoryCache(i,e,t){let r=this.definitions.get(i);if(!r){console.warn(`\u672A\u627E\u5230\u4E66\u672C: ${i}`);return}let a=r.findIndex(s=>s.nodeId===e);if(a>=0){let s=r[a];this.wordDefinitionCache.delete(s.word),s.aliases&&s.aliases.forEach(o=>{this.wordDefinitionCache.delete(o)}),r[a]=t,this.wordDefinitionCache.set(t.word,t),t.aliases&&t.aliases.forEach(o=>{this.wordDefinitionCache.set(o,t)}),this.cacheValid=!1}else console.warn(`\u672A\u627E\u5230\u8282\u70B9ID: ${e}`)}scheduleCanvasSync(i,e){let t=this.syncTimeouts.get(i);t&&window.clearTimeout(t),this.pendingSyncWords.has(i)||this.pendingSyncWords.set(i,[]),this.pendingSyncWords.get(i).push(e);let r=window.setTimeout(()=>{this.syncPendingWords(i)},1e3);this.syncTimeouts.set(i,r)}async syncPendingWords(i){let e=this.pendingSyncWords.get(i);if(!(!e||e.length===0))try{for(let t of e){let r=await this.canvasEditor.addWordToCanvas(i,t.word,t.definition,t.color?this.getColorNumber(t.color):void 0,t.aliases);r&&(t.nodeId=r)}this.pendingSyncWords.delete(i),this.syncTimeouts.delete(i)}catch(t){console.error("Failed to sync words to canvas:",t)}}getColorNumber(i){let e=parseInt(i,10);return e>=1&&e<=6?e:0}async deleteWordFromCanvas(i,e){try{return await this.canvasEditor.deleteWordFromCanvas(i,e)?(this.deleteWordFromMemoryCache(i,e),this.rebuildCache(),!0):!1}catch(t){return console.error("Failed to delete word from canvas:",t),!1}}deleteWordFromMemoryCache(i,e){let t=this.definitions.get(i);if(!t){console.warn(`\u672A\u627E\u5230\u4E66\u672C: ${i}`);return}let r=t.findIndex(a=>a.nodeId===e);if(r>=0){let a=t[r];this.wordDefinitionCache.delete(a.word),a.aliases&&a.aliases.forEach(o=>{this.wordDefinitionCache.delete(o)}),t.splice(r,1);let s=this.memoryOnlyWords.get(i);if(s){let o=s.findIndex(n=>n.nodeId===e);o>=0&&(s.splice(o,1),s.length===0&&this.memoryOnlyWords.delete(i))}this.cacheValid=!1}else console.warn(`\u672A\u627E\u5230\u8282\u70B9ID: ${e}`)}destroy(){this.syncTimeouts.forEach(i=>window.clearTimeout(i)),this.syncTimeouts.clear(),this.definitions.clear(),this.wordDefinitionCache.clear(),this.allWordsCache=[],this.bookWordsCache.clear(),this.memoryOnlyWords.clear(),this.pendingSyncWords.clear()}async getWordDefinitionByNodeId(i,e){let t=this.definitions.get(i);return t&&t.find(a=>a.nodeId===e)||null}async updateWordDefinition(i,e,t){let r=this.definitions.get(i);if(!r)return!1;let a=r.findIndex(o=>o.nodeId===e);if(a===-1)return!1;let s=r[a];r[a]=t,this.wordDefinitionCache.delete(s.word),s.aliases&&s.aliases.forEach(o=>this.wordDefinitionCache.delete(o)),this.wordDefinitionCache.set(t.word,t),t.aliases&&t.aliases.forEach(o=>this.wordDefinitionCache.set(o,t)),this.cacheValid=!1;try{await this.saveWordDefinitionToCanvas(i,e,t)}catch(o){console.error("\u4FDD\u5B58\u5355\u8BCD\u5B9A\u4E49\u5230 Canvas \u5931\u8D25:",o)}return!0}async saveWordDefinitionToCanvas(i,e,t){let r=this.app.vault.getAbstractFileByPath(i);if(!(r instanceof Me.TFile))throw new Error(`Canvas \u6587\u4EF6\u4E0D\u5B58\u5728: ${i}`);try{await this.app.vault.process(r,a=>{let s=JSON.parse(a),o=s.nodes.find(c=>c.id===t.nodeId);if(!o)throw new Error(`\u627E\u4E0D\u5230\u8282\u70B9 ID: ${t.nodeId}`);let n=t.word;return t.aliases&&t.aliases.length>0&&(n+=`
*${t.aliases.join(", ")}*`),t.definition&&(n+=`
`+t.definition),o.text=n,JSON.stringify(s)})}catch(a){throw console.error("\u4FDD\u5B58 Canvas \u6587\u4EF6\u5931\u8D25:",a),a}}async getAllWordDefinitions(){let i=[];for(let e of this.definitions.values())i.push(...e);for(let e of this.memoryOnlyWords.values())i.push(...e);return i}async getWordDefinitionsByBook(i){let e=this.definitions.get(i)||[],t=this.memoryOnlyWords.get(i)||[];return[...e,...t]}async getUnmasteredWords(){this.cacheValid||this.rebuildCache();let i=[];for(let e of this.allWordsCache){let t=this.wordDefinitionCache.get(e);t&&!t.mastered&&i.push(e)}return i}async getMasteredWords(){this.cacheValid||this.rebuildCache();let i=[];for(let e of this.allWordsCache){let t=this.wordDefinitionCache.get(e);t&&t.mastered&&i.push(e)}return i}isWordMastered(i){let e=this.wordDefinitionCache.get(i.toLowerCase());return(e==null?void 0:e.mastered)===!0}};var D=require("obsidian");var st=require("obsidian");var Ze={plugin_name:"HiWords",settings:{vocabulary_books:"Word books",add_vocabulary_book:"Add word book",remove_vocabulary_book:"Remove",show_definition_on_hover:"Show definition on hover",show_definition_on_hover_desc:"Show word definition when hovering over highlighted words",enable_auto_highlight:"Enable auto highlight",enable_auto_highlight_desc:"Automatically highlight words from vocabulary books while reading",highlight_style:"Highlight style",highlight_style_desc:"Choose how words are highlighted in text",enable_section_tabs:"Enable section tabs",enable_section_tabs_desc:"Render multi-section definitions as tabs in the sidebar card and hover popover",style_underline:"Underline",style_background:"Background",style_bold:"Bold",style_dotted:"Dotted underline",style_wavy:"Wavy underline",save_settings:"Save settings",no_vocabulary_books:"No vocabulary books yet. Please add a Canvas file as a vocabulary book.",path:"Path",reload_book:"Reload this word book",statistics:"Statistics",total_books:"Total word books: {0}",enabled_books:"Enabled word books: {0}",total_words:"Total words: {0}",enable_mastered_feature:"Enable mastered feature",enable_mastered_feature_desc:"Mark mastered words to stop highlighting them. Sidebar shows grouped words",mastered_detection:"Mastered detection mode",mastered_detection_desc:"Choose how to detect 'mastered': by group or by color (green = 4)",mode_group:"Group mode",mode_color:"Color mode (green = 4)",blur_definitions:"Blur content",blur_definitions_desc:"Blur content by default, reveal on hover. Great for learning\u2014recall before seeing the answer",tts_template:"TTS template",tts_template_desc:"Use {{word}} as placeholder, e.g. https://dict.youdao.com/dictvoice?audio={{word}}&type=2",ai_dictionary:"AI Assistant",ai_api_url:"API URL",ai_api_url_desc:"Full API endpoint (e.g., .../v1/chat/completions)",ai_api_key:"API Key",ai_api_key_desc:"Your AI API key",ai_model:"Model ID",ai_model_desc:"AI model identifier (e.g., gpt-4o-mini, deepseek-chat)",ai_prompt:"Custom Prompt",ai_prompt_desc:"Use {{word}} and {{sentence}} as placeholders. The AI will use this prompt to generate definitions",ai_test_connection:"Test AI connection",ai_test_connection_desc:"Send a small test request to verify your API URL, key, and model",ai_extra_params:"Extra Request Parameters",ai_extra_params_desc:"Add custom JSON parameters to AI request body (Advanced)",ai_extra_params_placeholder:`{
"temperature": 0.7,
"top_p": 0.9
}`,auto_layout:"Canvas auto layout",enable_auto_layout:"Enable auto layout",enable_auto_layout_desc:"Automatically normalize layout after add/update/delete and group changes",card_size:"Card size",card_size_desc:"Default card size (Width \xD7 Height, default: 260 \xD7 120)",grid_gaps:"Grid gaps",grid_gaps_desc:"Horizontal/vertical gaps for the left grid",left_padding:"Left padding & min X",left_padding_desc:"Left padding from Mastered group and minimum X for the left area",columns_auto:"Auto columns",columns_auto_desc:"Auto determine columns (bounded by max columns)",columns:"Fixed columns / Max columns",columns_desc:"Specify fixed columns and max columns (effective when auto columns off)",group_inner_layout:"Group inner layout",group_inner_layout_desc:"Inner padding, gaps and columns for nodes inside groups",highlight_scope:"Highlight scope",highlight_mode:"Highlight mode",highlight_mode_desc:"Choose the scope mode for word highlighting",mode_all:"All files",mode_exclude:"Exclude specified paths",mode_include:"Only specified paths",highlight_paths:"File paths",highlight_paths_desc:"Separate multiple paths with commas, supports folder paths (including subfolders)",highlight_paths_placeholder:"e.g.: Archive, Templates, Private/Diary",file_node_parse_mode:"File node parse mode",file_node_parse_mode_desc:"Choose how to parse file cards in Canvas",mode_filename:"Filename only",mode_content:"File content only",mode_filename_with_alias:"Filename as word, content as alias",selection_translate:"Selection Translate",enable_selection_translate:"Enable selection translate",enable_selection_translate_desc:"Show translation popup when text is selected",translate_target_lang:"Target language",translate_target_lang_desc:"Target language code (e.g. zh-CN, en, ja)",translate_prompt:"Translation prompt",translate_prompt_desc:"AI translation prompt template. Use {{text}} and {{to}} as placeholders"},sidebar:{title:"HiWords",empty_state:"No words found. Add words to your vocabulary books to see them here.",source_prefix:"From: ",found:"Found",words:"words",no_definition:"No definition available.",vocabulary_book:"Words",mastered:"Mastered",no_learning_words:"No words to learn",no_mastered_words:"No mastered words"},commands:{refresh_vocabulary:"Refresh vocabulary",add_word:"HiWords: Add word",edit_word:"HiWords: Edit word",show_sidebar:"Show HiWords sidebar",add_selected_word:"Add word"},notices:{enter_word_first:"Please enter a word first",definition_fetched:"Definition fetched successfully",definition_fetch_failed:"Failed to fetch definition. Please check your network or try another word",vocabulary_refreshed:"Vocabulary books refreshed",word_added:"Word added to vocabulary book",word_exists:"Word already exists in vocabulary book",error_adding_word:"Error adding word to vocabulary book",select_book_required:"Please select a vocabulary book",adding_word:"Adding word to vocabulary book...",updating_word:"Updating word...",word_added_success:'Word "{0}" successfully added to vocabulary book',word_updated_success:'Word "{0}" successfully updated',add_word_failed:"Failed to add word, please check the vocabulary book file",update_word_failed:"Failed to update word, please check the vocabulary book file",error_processing_word:"Error processing word",no_canvas_files:"No Canvas files found",book_already_exists:"This vocabulary book already exists",invalid_canvas_file:"Invalid Canvas file",book_added:"Added vocabulary book: {0}",book_reloaded:"Reloaded vocabulary book: {0}",book_removed:"Removed vocabulary book: {0}",testing_ai_connection:"Testing AI connection...",ai_connection_success:"AI connection successful",ai_connection_failed:"AI connection test failed",deleting_word:"Deleting word...",word_deleted:"Word deleted",delete_word_failed:"Failed to delete word, please check the vocabulary book file",error_deleting_word:"Error occurred while deleting word",mastered_feature_disabled:"Mastered feature is not enabled",update_word_status_failed:"Failed to update word status",move_to_mastered_group_failed:"Failed to move to mastered group",word_marked_as_mastered:'"{0}" marked as mastered',mark_mastered_failed:"Failed to mark as mastered, please try again",remove_from_mastered_group_failed:"Failed to remove from mastered group",word_unmarked_as_mastered:'"{0}" unmarked as mastered',no_text_selected:"Please select text to add as a word",word_required:"Please enter a word",unmark_mastered_failed:"Failed to unmark as mastered, please try again",batch_marked_success:"Successfully marked {0} words as mastered",book_path_updated:"Vocabulary book path updated: {0}"},modals:{auto_fill_definition:"AI Define",word_label:"Word",word_placeholder:"Enter word to add...",definition_label:"Definition",book_label:"Vocabulary book",select_book:"Select a vocabulary book",color_label:"Card color",color_gray:"Gray",color_red:"Red",color_orange:"Orange",color_yellow:"Yellow",color_green:"Green",color_blue:"Blue",color_purple:"Purple",aliases_label:"Aliases (optional, comma separated)",aliases_placeholder:"e.g.: doing, done, did",definition_placeholder:"Enter word definition...",add_button:"Add",save_button:"Save",cancel_button:"Cancel",select_canvas_file:"Select vocabulary book file",delete_confirmation:`Are you sure you want to delete the word "{0}"?
This action cannot be undone.`},actions:{expand:"Expand",collapse:"Collapse",mark_mastered:"Mark mastered",unmark_mastered:"Unmark mastered"},translate:{text_empty:"Translation text cannot be empty",translating:"Translating...",failed:"Translation failed, please try again",ai_not_configured:"AI translation not configured. Please set up API in settings",invalid_response:"Translation service returned an invalid response"},ai_errors:{word_empty:"Word cannot be empty",api_key_not_configured:"API Key is not configured. Please set it in the plugin settings",api_url_required:"API URL is required. Please set it in the plugin settings",model_required:"Model ID is required. Please set it in the plugin settings",prompt_required:"Custom prompt is required. Please set it in the plugin settings",invalid_api_url:"Invalid API URL format. Please check the URL in plugin settings",prompt_missing_word_placeholder:"Prompt must contain {{word}} placeholder",invalid_response:"API returned an invalid response format",api_key_invalid:"\u274C API Key is invalid or expired. Please check plugin settings",rate_limit:"\u23F1\uFE0F API rate limit exceeded. Please try again later",server_error:"\u{1F527} API service is temporarily unavailable. Please try again later",network_error:"\u{1F310} Network connection failed. Please check your network settings",request_failed:"AI dictionary request failed",invalid_json_format:"Invalid JSON format, please check syntax"}};var et={plugin_name:"HiWords",settings:{vocabulary_books:"\u5355\u8BCD\u672C",add_vocabulary_book:"\u6DFB\u52A0\u5355\u8BCD\u672C",remove_vocabulary_book:"\u79FB\u9664",show_definition_on_hover:"\u60AC\u505C\u663E\u793A\u91CA\u4E49",show_definition_on_hover_desc:"\u9F20\u6807\u60AC\u505C\u5728\u9AD8\u4EAE\u8BCD\u6C47\u4E0A\u65F6\u663E\u793A\u5B9A\u4E49",enable_auto_highlight:"\u542F\u7528\u81EA\u52A8\u9AD8\u4EAE",enable_auto_highlight_desc:"\u5728\u9605\u8BFB\u65F6\u81EA\u52A8\u9AD8\u4EAE\u751F\u8BCD\u672C\u4E2D\u7684\u8BCD\u6C47",highlight_style:"\u9AD8\u4EAE\u6837\u5F0F",highlight_style_desc:"\u9009\u62E9\u5355\u8BCD\u5728\u6587\u672C\u4E2D\u7684\u9AD8\u4EAE\u663E\u793A\u65B9\u5F0F",enable_section_tabs:"\u542F\u7528\u5206\u533A Tab \u663E\u793A",enable_section_tabs_desc:"\u5C06\u4F7F\u7528 --- \u5206\u9694\u3001**\u6807\u9898** \u6807\u8BB0\u7684\u591A\u6BB5\u91CA\u4E49\u6E32\u67D3\u4E3A\u4FA7\u8FB9\u680F\u548C\u60AC\u505C\u5F39\u7A97\u4E2D\u7684\u6807\u7B7E\u9875",style_underline:"\u4E0B\u5212\u7EBF",style_background:"\u80CC\u666F\u9AD8\u4EAE",style_bold:"\u7C97\u4F53",style_dotted:"\u70B9\u72B6\u4E0B\u5212\u7EBF",style_wavy:"\u6CE2\u6D6A\u7EBF",save_settings:"\u4FDD\u5B58\u8BBE\u7F6E",no_vocabulary_books:"\u6682\u65E0\u5355\u8BCD\u672C\uFF0C\u8BF7\u6DFB\u52A0 Canvas \u6587\u4EF6\u4F5C\u4E3A\u5355\u8BCD\u672C",path:"\u8DEF\u5F84",reload_book:"\u91CD\u65B0\u89E3\u6790\u8BE5\u5355\u8BCD\u672C",statistics:"\u7EDF\u8BA1\u4FE1\u606F",total_books:"\u603B\u5355\u8BCD\u672C\u6570\u91CF: {0}",enabled_books:"\u5DF2\u542F\u7528\u5355\u8BCD\u672C: {0}",total_words:"\u603B\u8BCD\u6C47\u6570\u91CF: {0}",enable_mastered_feature:"\u542F\u7528\u5DF2\u638C\u63E1\u529F\u80FD",enable_mastered_feature_desc:"\u6807\u8BB0\u5DF2\u638C\u63E1\u5355\u8BCD\u4EE5\u505C\u6B62\u9AD8\u4EAE\u663E\u793A\u3002\u4FA7\u8FB9\u680F\u663E\u793A\u5206\u7EC4\u5355\u8BCD",mastered_detection:"\u5DF2\u638C\u63E1\u5224\u5B9A\u6A21\u5F0F",mastered_detection_desc:"\u9009\u62E9\u7528\u4E8E\u5224\u5B9A\u201C\u5DF2\u638C\u63E1\u201D\u7684\u65B9\u5F0F\uFF1A\u5206\u7EC4\u6216\u989C\u8272\uFF08\u7EFF\u8272=4\uFF09",mode_group:"\u5206\u7EC4\u6A21\u5F0F",mode_color:"\u989C\u8272\u6A21\u5F0F\uFF08\u7EFF\u8272=4\uFF09",blur_definitions:"\u6A21\u7CCA\u5185\u5BB9",blur_definitions_desc:"\u9ED8\u8BA4\u6A21\u7CCA\u663E\u793A\u5185\u5BB9\uFF0C\u9F20\u6807\u60AC\u505C\u65F6\u663E\u793A\u6E05\u6670\u5185\u5BB9\u3002\u9002\u5408\u5B66\u4E60\u65F6\u5148\u56DE\u5FC6\u518D\u67E5\u770B\u7B54\u6848",tts_template:"\u53D1\u97F3\u5730\u5740\u6A21\u677F",tts_template_desc:"\u4F7F\u7528 {{word}} \u4F5C\u4E3A\u5360\u4F4D\u7B26\uFF0C\u4F8B\u5982\uFF1Ahttps://dict.youdao.com/dictvoice?audio={{word}}&type=2",ai_dictionary:"AI \u52A9\u624B",ai_api_url:"API \u5730\u5740",ai_api_url_desc:"\u5B8C\u6574\u7684 API \u7AEF\u70B9\u5730\u5740\uFF08\u5982\uFF1A.../v1/chat/completions\uFF09",ai_api_key:"API Key",ai_api_key_desc:"\u4F60\u7684 AI API \u5BC6\u94A5",ai_model:"\u6A21\u578B ID",ai_model_desc:"AI \u6A21\u578B\u6807\u8BC6\u7B26 (\u4F8B\u5982: gpt-4o-mini, deepseek-chat)",ai_prompt:"\u81EA\u5B9A\u4E49\u63D0\u793A\u8BCD",ai_prompt_desc:"\u4F7F\u7528 {{word}} \u548C {{sentence}} \u4F5C\u4E3A\u5360\u4F4D\u7B26\u3002AI \u5C06\u4F7F\u7528\u6B64\u63D0\u793A\u8BCD\u751F\u6210\u91CA\u4E49",ai_test_connection:"\u6D4B\u8BD5 AI \u8FDE\u63A5",ai_test_connection_desc:"\u53D1\u9001\u4E00\u4E2A\u8F7B\u91CF\u6D4B\u8BD5\u8BF7\u6C42\uFF0C\u9A8C\u8BC1 API \u5730\u5740\u3001Key \u548C\u6A21\u578B\u662F\u5426\u53EF\u7528",ai_extra_params:"\u989D\u5916\u8BF7\u6C42\u53C2\u6570",ai_extra_params_desc:"\u6DFB\u52A0\u81EA\u5B9A\u4E49 JSON \u53C2\u6570\u5230 AI \u8BF7\u6C42\u4F53\u4E2D\uFF08\u9AD8\u7EA7\u7528\u6237\uFF09",ai_extra_params_placeholder:`{
"temperature": 0.7,
"top_p": 0.9
}`,auto_layout:"\u767D\u677F\u81EA\u52A8\u5E03\u5C40",enable_auto_layout:"\u542F\u7528\u81EA\u52A8\u5E03\u5C40",enable_auto_layout_desc:"\u5728\u6DFB\u52A0/\u66F4\u65B0/\u5220\u9664\u8282\u70B9\u548C\u5206\u7EC4\u53D8\u66F4\u540E\u81EA\u52A8\u89C4\u8303\u5316\u5E03\u5C40",card_size:"\u5361\u7247\u5C3A\u5BF8",card_size_desc:"\u9ED8\u8BA4\u5361\u7247\u5C3A\u5BF8\uFF08\u5BBD \xD7 \u9AD8\uFF0C\u9ED8\u8BA4\uFF1A260 \xD7 120\uFF09",grid_gaps:"\u7F51\u683C\u95F4\u8DDD",grid_gaps_desc:"\u5DE6\u4FA7\u533A\u57DF\u7F51\u683C\u7684\u6C34\u5E73/\u5782\u76F4\u95F4\u8DDD",left_padding:"\u5DE6\u4FA7\u7559\u767D\u4E0E\u6700\u5C0FX",left_padding_desc:"Mastered \u5206\u7EC4\u5DE6\u4FA7\u7684\u7559\u767D\u4E0E\u5DE6\u4FA7\u533A\u57DF\u7684\u6700\u5C0F X \u4F4D\u7F6E",columns_auto:"\u81EA\u52A8\u5217\u6570",columns_auto_desc:"\u6839\u636E\u5185\u5BB9\u81EA\u9002\u5E94\u5217\u6570\uFF08\u53D7\u6700\u5927\u5217\u6570\u9650\u5236\uFF09",columns:"\u56FA\u5B9A\u5217\u6570/\u6700\u5927\u5217\u6570",columns_desc:"\u6307\u5B9A\u56FA\u5B9A\u5217\u6570\u4E0E\u6700\u5927\u5217\u6570\uFF08\u5F53\u5173\u95ED\u81EA\u52A8\u5217\u6570\u65F6\u751F\u6548\uFF09",group_inner_layout:"\u5206\u7EC4\u5185\u5E03\u5C40",group_inner_layout_desc:"\u5206\u7EC4\u5185\u90E8\u7684\u5185\u8FB9\u8DDD\u3001\u95F4\u8DDD\u4E0E\u5217\u6570\u8BBE\u7F6E",highlight_scope:"\u9AD8\u4EAE\u8303\u56F4",highlight_mode:"\u9AD8\u4EAE\u6A21\u5F0F",highlight_mode_desc:"\u9009\u62E9\u9AD8\u4EAE\u5355\u8BCD\u7684\u8303\u56F4\u6A21\u5F0F",mode_all:"\u5168\u90E8\u6587\u4EF6\u9AD8\u4EAE",mode_exclude:"\u6392\u9664\u6307\u5B9A\u8DEF\u5F84",mode_include:"\u4EC5\u6307\u5B9A\u8DEF\u5F84\u9AD8\u4EAE",highlight_paths:"\u6587\u4EF6\u8DEF\u5F84",highlight_paths_desc:"\u591A\u4E2A\u8DEF\u5F84\u7528\u9017\u53F7\u5206\u9694\uFF0C\u652F\u6301\u6587\u4EF6\u5939\u8DEF\u5F84\uFF08\u5305\u62EC\u5B50\u6587\u4EF6\u5939\uFF09",highlight_paths_placeholder:"\u4F8B\u5982\uFF1AArchive, Templates, Private/Diary",file_node_parse_mode:"\u6587\u4EF6\u8282\u70B9\u89E3\u6790\u6A21\u5F0F",file_node_parse_mode_desc:"\u9009\u62E9\u5982\u4F55\u89E3\u6790 Canvas \u4E2D\u7684\u6587\u4EF6\u5361\u7247",mode_filename:"\u4EC5\u6587\u4EF6\u540D",mode_content:"\u4EC5\u6587\u4EF6\u5185\u5BB9",mode_filename_with_alias:"\u6587\u4EF6\u540D\u4F5C\u4E3A\u4E3B\u8BCD\uFF0C\u5185\u5BB9\u4F5C\u4E3A\u522B\u540D",selection_translate:"\u5212\u8BCD\u7FFB\u8BD1",enable_selection_translate:"\u542F\u7528\u5212\u8BCD\u7FFB\u8BD1",enable_selection_translate_desc:"\u9009\u4E2D\u6587\u672C\u540E\u81EA\u52A8\u5F39\u51FA\u7FFB\u8BD1\u6D6E\u7A97",translate_target_lang:"\u76EE\u6807\u8BED\u8A00",translate_target_lang_desc:"\u7FFB\u8BD1\u7684\u76EE\u6807\u8BED\u8A00\u4EE3\u7801\uFF08\u5982 zh-CN\u3001en\u3001ja\uFF09",translate_prompt:"\u7FFB\u8BD1\u63D0\u793A\u8BCD",translate_prompt_desc:"AI \u7FFB\u8BD1\u7684\u63D0\u793A\u8BCD\u6A21\u677F\uFF0C\u4F7F\u7528 {{text}} \u548C {{to}} \u4F5C\u4E3A\u5360\u4F4D\u7B26"},sidebar:{title:"HiWords",empty_state:"\u672A\u627E\u5230\u5355\u8BCD\u3002\u6DFB\u52A0\u5355\u8BCD\u5230\u60A8\u7684\u751F\u8BCD\u672C\u4EE5\u5728\u6B64\u5904\u67E5\u770B\u3002",source_prefix:"\u6765\u81EA: ",found:"\u53D1\u73B0",words:"\u4E2A\u751F\u8BCD",no_definition:"\u6682\u65E0\u5B9A\u4E49",vocabulary_book:"\u8BCD\u6C47",mastered:"\u5DF2\u638C\u63E1",no_learning_words:"\u6CA1\u6709\u5F85\u5B66\u4E60\u7684\u5355\u8BCD",no_mastered_words:"\u6CA1\u6709\u5DF2\u638C\u63E1\u7684\u5355\u8BCD"},commands:{refresh_vocabulary:"\u5237\u65B0\u751F\u8BCD\u672C",add_word:"HiWords: \u6DFB\u52A0\u5355\u8BCD",edit_word:"HiWords: \u7F16\u8F91\u5355\u8BCD",show_sidebar:"\u663E\u793A HiWords \u4FA7\u8FB9\u680F",add_selected_word:"\u6DFB\u52A0\u5355\u8BCD"},notices:{enter_word_first:"\u8BF7\u5148\u8F93\u5165\u5355\u8BCD",definition_fetched:"\u91CA\u4E49\u83B7\u53D6\u6210\u529F",definition_fetch_failed:"\u83B7\u53D6\u91CA\u4E49\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u6216\u5C1D\u8BD5\u5176\u4ED6\u5355\u8BCD",vocabulary_refreshed:"\u751F\u8BCD\u672C\u5DF2\u5237\u65B0",word_added:"\u5355\u8BCD\u5DF2\u6DFB\u52A0\u5230\u751F\u8BCD\u672C",word_exists:"\u5355\u8BCD\u5DF2\u5B58\u5728\u4E8E\u751F\u8BCD\u672C\u4E2D",error_adding_word:"\u6DFB\u52A0\u5355\u8BCD\u5230\u751F\u8BCD\u672C\u65F6\u51FA\u9519",select_book_required:"\u8BF7\u9009\u62E9\u751F\u8BCD\u672C",adding_word:"\u6B63\u5728\u6DFB\u52A0\u8BCD\u6C47\u5230\u751F\u8BCD\u672C...",updating_word:"\u6B63\u5728\u66F4\u65B0\u8BCD\u6C47...",word_added_success:'\u8BCD\u6C47 "{0}" \u5DF2\u6210\u529F\u6DFB\u52A0\u5230\u751F\u8BCD\u672C',word_updated_success:'\u8BCD\u6C47 "{0}" \u5DF2\u6210\u529F\u66F4\u65B0',add_word_failed:"\u6DFB\u52A0\u8BCD\u6C47\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u751F\u8BCD\u672C\u6587\u4EF6",update_word_failed:"\u66F4\u65B0\u8BCD\u6C47\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u751F\u8BCD\u672C\u6587\u4EF6",error_processing_word:"\u5904\u7406\u8BCD\u6C47\u65F6\u51FA\u9519",no_canvas_files:"\u672A\u627E\u5230 Canvas \u6587\u4EF6",book_already_exists:"\u8BE5\u751F\u8BCD\u672C\u5DF2\u5B58\u5728",invalid_canvas_file:"\u65E0\u6548\u7684 Canvas \u6587\u4EF6",book_added:"\u5DF2\u6DFB\u52A0\u751F\u8BCD\u672C: {0}",book_reloaded:"\u5DF2\u91CD\u65B0\u52A0\u8F7D: {0}",book_removed:"\u5DF2\u5220\u9664\u751F\u8BCD\u672C: {0}",testing_ai_connection:"\u6B63\u5728\u6D4B\u8BD5 AI \u8FDE\u63A5...",ai_connection_success:"AI \u8FDE\u63A5\u6210\u529F",ai_connection_failed:"AI \u8FDE\u63A5\u6D4B\u8BD5\u5931\u8D25",deleting_word:"\u6B63\u5728\u5220\u9664\u8BCD\u6C47...",word_deleted:"\u8BCD\u6C47\u5DF2\u5220\u9664",delete_word_failed:"\u5220\u9664\u8BCD\u6C47\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u751F\u8BCD\u672C\u6587\u4EF6",error_deleting_word:"\u5220\u9664\u8BCD\u6C47\u65F6\u53D1\u751F\u9519\u8BEF",mastered_feature_disabled:"\u5DF2\u638C\u63E1\u529F\u80FD\u672A\u542F\u7528",update_word_status_failed:"\u66F4\u65B0\u5355\u8BCD\u72B6\u6001\u5931\u8D25",move_to_mastered_group_failed:"\u79FB\u52A8\u5230\u5DF2\u638C\u63E1\u5206\u7EC4\u5931\u8D25",word_marked_as_mastered:'"{0}"\u5DF2\u6807\u8BB0\u4E3A\u5DF2\u638C\u63E1',mark_mastered_failed:"\u6807\u8BB0\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",remove_from_mastered_group_failed:"\u4ECE\u5DF2\u638C\u63E1\u5206\u7EC4\u79FB\u9664\u5931\u8D25",word_unmarked_as_mastered:'"{0}"\u5DF2\u53D6\u6D88\u5DF2\u638C\u63E1\u6807\u8BB0',no_text_selected:"\u8BF7\u5148\u9009\u4E2D\u8981\u6DFB\u52A0\u7684\u5355\u8BCD",word_required:"\u8BF7\u8F93\u5165\u5355\u8BCD",unmark_mastered_failed:"\u53D6\u6D88\u6807\u8BB0\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",batch_marked_success:"\u6210\u529F\u6807\u8BB0 {0} \u4E2A\u5355\u8BCD\u4E3A\u5DF2\u638C\u63E1",book_path_updated:"\u5355\u8BCD\u672C\u8DEF\u5F84\u5DF2\u66F4\u65B0: {0}"},modals:{auto_fill_definition:"AI \u91CA\u4E49",word_label:"\u5355\u8BCD",word_placeholder:"\u8F93\u5165\u8981\u6DFB\u52A0\u7684\u5355\u8BCD...",definition_label:"\u91CA\u4E49",book_label:"\u5355\u8BCD\u672C",select_book:"\u9009\u62E9\u5355\u8BCD\u672C",color_label:"\u5361\u7247\u989C\u8272",color_gray:"\u7070\u8272",color_red:"\u7EA2\u8272",color_orange:"\u6A59\u8272",color_yellow:"\u9EC4\u8272",color_green:"\u7EFF\u8272",color_blue:"\u84DD\u8272",color_purple:"\u7D2B\u8272",aliases_label:"\u522B\u540D\uFF08\u53EF\u9009\uFF0C\u7528\u9017\u53F7\u5206\u9694\uFF09",aliases_placeholder:"\u4F8B\u5982\uFF1Adoing, done, did",definition_placeholder:"\u8F93\u5165\u8BCD\u6C47\u91CA\u4E49...",add_button:"\u6DFB\u52A0",save_button:"\u4FDD\u5B58",cancel_button:"\u53D6\u6D88",select_canvas_file:"\u9009\u62E9 Canvas \u6587\u4EF6",delete_confirmation:`\u786E\u5B9A\u8981\u5220\u9664\u8BCD\u6C47 "{0}" \u5417\uFF1F
\u6B64\u64CD\u4F5C\u4E0D\u53EF\u64A4\u9500\u3002`},actions:{expand:"\u5C55\u5F00",collapse:"\u6536\u8D77",mark_mastered:"\u5DF2\u638C\u63E1",unmark_mastered:"\u5FD8\u8BB0\u4E86"},translate:{text_empty:"\u7FFB\u8BD1\u6587\u672C\u4E0D\u80FD\u4E3A\u7A7A",translating:"\u7FFB\u8BD1\u4E2D...",failed:"\u7FFB\u8BD1\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",ai_not_configured:"AI \u7FFB\u8BD1\u672A\u914D\u7F6E\uFF0C\u8BF7\u5728\u8BBE\u7F6E\u4E2D\u586B\u5199 API \u4FE1\u606F",invalid_response:"\u7FFB\u8BD1\u670D\u52A1\u8FD4\u56DE\u4E86\u65E0\u6548\u7684\u54CD\u5E94"},ai_errors:{word_empty:"\u5355\u8BCD\u4E0D\u80FD\u4E3A\u7A7A",api_key_not_configured:"API Key \u672A\u914D\u7F6E,\u8BF7\u5728\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u586B\u5199",api_url_required:"API \u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A,\u8BF7\u5728\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u586B\u5199",model_required:"\u6A21\u578B ID \u4E0D\u80FD\u4E3A\u7A7A,\u8BF7\u5728\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u586B\u5199",prompt_required:"\u81EA\u5B9A\u4E49\u63D0\u793A\u8BCD\u4E0D\u80FD\u4E3A\u7A7A,\u8BF7\u5728\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u586B\u5199",invalid_api_url:"API \u5730\u5740\u683C\u5F0F\u65E0\u6548,\u8BF7\u68C0\u67E5\u63D2\u4EF6\u8BBE\u7F6E\u4E2D\u7684 URL",prompt_missing_word_placeholder:"\u63D0\u793A\u8BCD\u5FC5\u987B\u5305\u542B {{word}} \u5360\u4F4D\u7B26",invalid_response:"API \u8FD4\u56DE\u4E86\u65E0\u6548\u7684\u54CD\u5E94\u683C\u5F0F",api_key_invalid:"\u274C API Key \u65E0\u6548\u6216\u5DF2\u8FC7\u671F,\u8BF7\u68C0\u67E5\u63D2\u4EF6\u8BBE\u7F6E",rate_limit:"\u23F1\uFE0F API \u8BF7\u6C42\u9891\u7387\u8D85\u9650,\u8BF7\u7A0D\u540E\u518D\u8BD5",server_error:"\u{1F527} API \u670D\u52A1\u6682\u65F6\u4E0D\u53EF\u7528,\u8BF7\u7A0D\u540E\u518D\u8BD5",network_error:"\u{1F310} \u7F51\u7EDC\u8FDE\u63A5\u5931\u8D25,\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8BBE\u7F6E",request_failed:"AI \u8BCD\u5178\u8BF7\u6C42\u5931\u8D25",invalid_json_format:"JSON \u683C\u5F0F\u65E0\u6548\uFF0C\u8BF7\u68C0\u67E5\u8BED\u6CD5"}};var tt={plugin_name:"HiWords",settings:{vocabulary_books:"Libros de palabras",add_vocabulary_book:"Agregar libro de palabras",remove_vocabulary_book:"Eliminar",show_definition_on_hover:"Mostrar definici\xF3n al pasar el cursor",show_definition_on_hover_desc:"Mostrar la definici\xF3n al pasar el cursor sobre palabras resaltadas",enable_auto_highlight:"Habilitar resaltado autom\xE1tico",enable_auto_highlight_desc:"Resaltar autom\xE1ticamente palabras de los libros mientras lees",highlight_style:"Estilo de resaltado",highlight_style_desc:"Elige c\xF3mo se resaltan las palabras en el texto",enable_section_tabs:"Activar pesta\xF1as de secciones",enable_section_tabs_desc:"Renderiza definiciones con varias secciones como pesta\xF1as en la barra lateral y en la vista emergente",style_underline:"Subrayado",style_background:"Fondo",style_bold:"Negrita",style_dotted:"Subrayado punteado",style_wavy:"Subrayado ondulado",save_settings:"Guardar ajustes",no_vocabulary_books:"A\xFAn no hay libros. Agrega un archivo Canvas como libro de palabras.",path:"Ruta",reload_book:"Recargar este libro",statistics:"Estad\xEDsticas",total_books:"Libros totales: {0}",enabled_books:"Libros habilitados: {0}",total_words:"Palabras totales: {0}",enable_mastered_feature:"Habilitar funci\xF3n de dominadas",enable_mastered_feature_desc:"Marca palabras dominadas para dejar de resaltarlas. La barra lateral muestra grupos",blur_definitions:"Difuminar contenido",blur_definitions_desc:"Difuminar por defecto, mostrar al pasar el cursor. Ideal para recordar antes de ver la respuesta",tts_template:"Plantilla TTS",tts_template_desc:"Usar {{word}} como marcador de posici\xF3n, ej. https://dict.youdao.com/dictvoice?audio={{word}}&type=2",ai_dictionary:"Asistente AI",ai_api_url:"URL de API",ai_api_url_desc:"Punto final de API (detecta autom\xE1ticamente: OpenAI, Claude, Gemini)",ai_api_key:"Clave API",ai_api_key_desc:"Tu clave de API de AI",ai_model:"Modelo",ai_model_desc:"Nombre del modelo de AI (ej., gpt-4o-mini, deepseek-chat)",ai_prompt:"Prompt personalizado",ai_prompt_desc:"Usar {{word}} y {{sentence}} como marcadores de posici\xF3n. La AI usar\xE1 este prompt para generar definiciones",ai_extra_params:"Par\xE1metros extra de la solicitud",ai_extra_params_desc:"A\xF1ade par\xE1metros JSON personalizados al cuerpo de la solicitud de IA (avanzado)",ai_extra_params_placeholder:`{
"temperature": 0.7,
"top_p": 0.9
}`,auto_layout:"Dise\xF1o autom\xE1tico del lienzo",enable_auto_layout:"Habilitar dise\xF1o autom\xE1tico",enable_auto_layout_desc:"Normalizar autom\xE1ticamente el dise\xF1o despu\xE9s de agregar/actualizar/eliminar y cambios de grupo",card_size:"Tama\xF1o de tarjeta",card_size_desc:"Tama\xF1o de tarjeta predeterminado (Ancho \xD7 Alto, predeterminado: 260 \xD7 120)",grid_gaps:"Espacios de la cuadr\xEDcula",grid_gaps_desc:"Espacios horizontal/vertical para la cuadr\xEDcula izquierda",left_padding:"Relleno izquierdo y X m\xEDnima",left_padding_desc:"Relleno izquierdo desde el grupo Mastered y X m\xEDnima para el \xE1rea izquierda",columns_auto:"Columnas autom\xE1ticas",columns_auto_desc:"Determinar columnas autom\xE1ticamente (limitado por columnas m\xE1ximas)",columns:"Columnas fijas / M\xE1ximo de columnas",columns_desc:"Especificar columnas fijas y m\xE1ximo de columnas (efectivo cuando auto est\xE1 desactivado)",group_inner_layout:"Dise\xF1o interno del grupo",group_inner_layout_desc:"Relleno interno, espacios y columnas para nodos dentro de grupos",highlight_scope:"\xC1mbito de resaltado",highlight_mode:"Modo de resaltado",highlight_mode_desc:"Elegir el modo de \xE1mbito para el resaltado de palabras",mode_all:"Todos los archivos",mode_exclude:"Excluir rutas especificadas",mode_include:"Solo rutas especificadas",highlight_paths:"Rutas de archivo",highlight_paths_desc:"Separar m\xFAltiples rutas con comas, admite rutas de carpetas (incluidas subcarpetas)",highlight_paths_placeholder:"ej.: Archive, Templates, Private/Diary",file_node_parse_mode:"Modo de an\xE1lisis de nodo de archivo",file_node_parse_mode_desc:"Elegir c\xF3mo analizar tarjetas de archivo en Canvas",mode_filename:"Solo nombre de archivo",mode_content:"Solo contenido de archivo",mode_filename_with_alias:"Nombre de archivo como palabra, contenido como alias",selection_translate:"Traducci\xF3n por selecci\xF3n",enable_selection_translate:"Activar traducci\xF3n por selecci\xF3n",enable_selection_translate_desc:"Mostrar ventana emergente de traducci\xF3n al seleccionar texto",translate_target_lang:"Idioma de destino",translate_target_lang_desc:"C\xF3digo del idioma de destino (ej. zh-CN, en, ja)",translate_prompt:"Prompt de traducci\xF3n",translate_prompt_desc:"Plantilla de prompt para traducci\xF3n IA. Use {{text}} y {{to}} como marcadores"},sidebar:{title:"HiWords",empty_state:"No se encontraron palabras. Agrega palabras a tus libros para verlas aqu\xED.",source_prefix:"De: ",found:"Encontradas",words:"palabras",no_definition:"Sin definici\xF3n disponible.",vocabulary_book:"Palabras",mastered:"Dominadas",no_learning_words:"No hay palabras para aprender",no_mastered_words:"No hay palabras dominadas"},commands:{refresh_vocabulary:"Actualizar vocabulario",add_word:"HiWords: Agregar palabra",edit_word:"HiWords: Editar palabra",show_sidebar:"Mostrar barra lateral de HiWords",add_selected_word:"Agregar palabra"},notices:{vocabulary_refreshed:"Libros actualizados",word_added:"Palabra agregada al libro",word_exists:"La palabra ya existe en el libro",error_adding_word:"Error al agregar palabra al libro",select_book_required:"Selecciona un libro de palabras",adding_word:"Agregando palabra al libro...",updating_word:"Actualizando palabra...",word_added_success:'La palabra "{0}" se agreg\xF3 correctamente',word_updated_success:'La palabra "{0}" se actualiz\xF3 correctamente',add_word_failed:"No se pudo agregar la palabra, revisa el archivo del libro",update_word_failed:"No se pudo actualizar la palabra, revisa el archivo del libro",error_processing_word:"Error al procesar la palabra",no_canvas_files:"No se encontraron archivos Canvas",book_already_exists:"Este libro ya existe",invalid_canvas_file:"Archivo Canvas no v\xE1lido",book_added:"Libro agregado: {0}",book_reloaded:"Libro recargado: {0}",book_removed:"Libro eliminado: {0}",deleting_word:"Eliminando palabra...",word_deleted:"Palabra eliminada",delete_word_failed:"No se pudo eliminar la palabra, revisa el archivo del libro",error_deleting_word:"Ocurri\xF3 un error al eliminar la palabra",mastered_feature_disabled:"La funci\xF3n de dominadas no est\xE1 habilitada",update_word_status_failed:"No se pudo actualizar el estado de la palabra",move_to_mastered_group_failed:"No se pudo mover al grupo de dominadas",word_marked_as_mastered:'"{0}" marcada como dominada',mark_mastered_failed:"No se pudo marcar como dominada, int\xE9ntalo de nuevo",remove_from_mastered_group_failed:"No se pudo quitar del grupo de dominadas",word_unmarked_as_mastered:'"{0}" ya no est\xE1 marcada como dominada',no_text_selected:"Por favor, selecciona primero una palabra para agregar",word_required:"Por favor, ingresa una palabra",unmark_mastered_failed:"No se pudo desmarcar, int\xE9ntalo de nuevo",batch_marked_success:"Se marcaron correctamente {0} palabras como dominadas",book_path_updated:"Ruta del libro actualizada: {0}",new_notice:"Nuevo aviso"},modals:{auto_fill_definition:"Definir con AI",word_label:"Palabra",word_placeholder:"Ingresa la palabra a agregar...",definition_label:"Definici\xF3n",book_label:"Libro de palabras",select_book:"Selecciona un libro",color_label:"Color de tarjeta",color_gray:"Gris",color_red:"Rojo",color_orange:"Naranja",color_yellow:"Amarillo",color_green:"Verde",color_blue:"Azul",color_purple:"P\xFArpura",aliases_label:"Alias (opcional, separados por comas)",aliases_placeholder:"p. ej.: doing, done, did",definition_placeholder:"Introduce la definici\xF3n...",add_button:"Agregar",save_button:"Guardar",cancel_button:"Cancelar",select_canvas_file:"Seleccionar archivo del libro",delete_confirmation:`\xBFSeguro que deseas eliminar la palabra "{0}"?
Esta acci\xF3n no se puede deshacer.`},actions:{expand:"Expandir",collapse:"Contraer",mark_mastered:"Marcar como dominado",unmark_mastered:"Desmarcar dominado"},translate:{text_empty:"El texto de traducci\xF3n no puede estar vac\xEDo",translating:"Traduciendo...",failed:"La traducci\xF3n fall\xF3, int\xE9ntelo de nuevo",ai_not_configured:"Traducci\xF3n IA no configurada. Configure la API en los ajustes",invalid_response:"El servicio de traducci\xF3n devolvi\xF3 una respuesta no v\xE1lida"},ai_errors:{word_empty:"La palabra no puede estar vac\xEDa",api_key_not_configured:"La clave API no est\xE1 configurada. Por favor, config\xFArela en los ajustes del plugin",invalid_response:"La API devolvi\xF3 un formato de respuesta no v\xE1lido",api_key_invalid:"\u274C La clave API no es v\xE1lida o ha caducado. Por favor, verifique la configuraci\xF3n del plugin",rate_limit:"\u23F1\uFE0F L\xEDmite de tasa de API excedido. Por favor, int\xE9ntelo de nuevo m\xE1s tarde",server_error:"\u{1F527} El servicio API no est\xE1 disponible temporalmente. Por favor, int\xE9ntelo de nuevo m\xE1s tarde",network_error:"\u{1F310} Fallo en la conexi\xF3n de red. Por favor, verifique su configuraci\xF3n de red",request_failed:"Solicitud al diccionario AI fall\xF3",invalid_json_format:"Formato JSON no v\xE1lido, por favor revise la sintaxis"}};var it={plugin_name:"HiWords",settings:{vocabulary_books:"Livres de mots",add_vocabulary_book:"Ajouter un livre",remove_vocabulary_book:"Supprimer",show_definition_on_hover:"Afficher la d\xE9finition au survol",show_definition_on_hover_desc:"Afficher la d\xE9finition en survolant les mots surlign\xE9s",enable_auto_highlight:"Activer le surlignage auto",enable_auto_highlight_desc:"Surligner automatiquement les mots des livres pendant la lecture",highlight_style:"Style de surlignage",highlight_style_desc:"Choisissez la fa\xE7on dont les mots sont surlign\xE9s",enable_section_tabs:"Activer les onglets de section",enable_section_tabs_desc:"Affiche les d\xE9finitions multi-sections sous forme d'onglets dans la barre lat\xE9rale et l'infobulle",style_underline:"Soulign\xE9",style_background:"Fond",style_bold:"Gras",style_dotted:"Soulign\xE9 en pointill\xE9s",style_wavy:"Soulign\xE9 ondul\xE9",save_settings:"Enregistrer les r\xE9glages",no_vocabulary_books:"Aucun livre pour l'instant. Ajoutez un fichier Canvas comme livre de mots.",path:"Chemin",reload_book:"Recharger ce livre",statistics:"Statistiques",total_books:"Livres au total : {0}",enabled_books:"Livres activ\xE9s : {0}",total_words:"Mots au total : {0}",enable_mastered_feature:"Activer la fonction ma\xEEtris\xE9",enable_mastered_feature_desc:"Marquer les mots ma\xEEtris\xE9s pour arr\xEAter de les surligner. La barre lat\xE9rale affiche les groupes",blur_definitions:"Flouter le contenu",blur_definitions_desc:"Flouter par d\xE9faut, r\xE9v\xE9ler au survol. Id\xE9al pour m\xE9moriser avant de voir la r\xE9ponse",tts_template:"Mod\xE8le TTS",tts_template_desc:"Utiliser {{word}} comme espace r\xE9serv\xE9, ex. https://dict.youdao.com/dictvoice?audio={{word}}&type=2",ai_dictionary:"Assistant IA",ai_api_url:"URL de l'API",ai_api_url_desc:"Point de terminaison de l'API (d\xE9tecte automatiquement : OpenAI, Claude, Gemini)",ai_api_key:"Cl\xE9 API",ai_api_key_desc:"Votre cl\xE9 API IA",ai_model:"Mod\xE8le",ai_model_desc:"Nom du mod\xE8le IA (ex., gpt-4o-mini, deepseek-chat)",ai_prompt:"Prompt personnalis\xE9",ai_prompt_desc:"Utiliser {{word}} et {{sentence}} comme espaces r\xE9serv\xE9s. L'IA utilisera ce prompt pour g\xE9n\xE9rer des d\xE9finitions",ai_extra_params:"Param\xE8tres suppl\xE9mentaires de la requ\xEAte",ai_extra_params_desc:"Ajouter des param\xE8tres JSON personnalis\xE9s au corps de la requ\xEAte IA (avanc\xE9)",ai_extra_params_placeholder:`{
"temperature": 0.7,
"top_p": 0.9
}`,auto_layout:"Disposition auto du canevas",enable_auto_layout:"Activer la disposition automatique",enable_auto_layout_desc:"Normaliser automatiquement la disposition apr\xE8s ajout/mise \xE0 jour/suppression et changements de groupe",card_size:"Taille de carte",card_size_desc:"Taille de carte par d\xE9faut (Largeur \xD7 Hauteur, par d\xE9faut : 260 \xD7 120)",grid_gaps:"Espacement de la grille",grid_gaps_desc:"Espacement horizontal/vertical pour la grille de gauche",left_padding:"Marge gauche et X min",left_padding_desc:"Marge gauche depuis le groupe Mastered et X minimale pour la zone gauche",columns_auto:"Colonnes auto",columns_auto_desc:"D\xE9terminer automatiquement les colonnes (limit\xE9 par le max)",columns:"Colonnes fixes / Colonnes max",columns_desc:"Sp\xE9cifier colonnes fixes et max (quand auto est d\xE9sactiv\xE9)",group_inner_layout:"Disposition interne du groupe",group_inner_layout_desc:"Marge interne, espacements et colonnes pour les n\u0153uds dans les groupes",highlight_scope:"Port\xE9e de surbrillance",highlight_mode:"Mode de surbrillance",highlight_mode_desc:"Choisir le mode de port\xE9e pour la surbrillance des mots",mode_all:"Tous les fichiers",mode_exclude:"Exclure les chemins sp\xE9cifi\xE9s",mode_include:"Uniquement les chemins sp\xE9cifi\xE9s",highlight_paths:"Chemins de fichiers",highlight_paths_desc:"S\xE9parer plusieurs chemins par des virgules, prend en charge les chemins de dossiers (y compris les sous-dossiers)",highlight_paths_placeholder:"ex : Archive, Templates, Private/Diary",file_node_parse_mode:"Mode d'analyse de noeud de fichier",file_node_parse_mode_desc:"Choisir comment analyser les cartes de fichiers dans Canvas",mode_filename:"Nom de fichier uniquement",mode_content:"Contenu de fichier uniquement",mode_filename_with_alias:"Nom de fichier comme mot, contenu comme alias",selection_translate:"Traduction par s\xE9lection",enable_selection_translate:"Activer la traduction par s\xE9lection",enable_selection_translate_desc:"Afficher une fen\xEAtre de traduction lors de la s\xE9lection de texte",translate_target_lang:"Langue cible",translate_target_lang_desc:"Code de la langue cible (ex. zh-CN, en, ja)",translate_prompt:"Prompt de traduction",translate_prompt_desc:"Mod\xE8le de prompt pour la traduction IA. Utilisez {{text}} et {{to}} comme marqueurs"},sidebar:{title:"HiWords",empty_state:"Aucun mot trouv\xE9. Ajoutez des mots \xE0 vos livres pour les voir ici.",source_prefix:"De : ",found:"Trouv\xE9s",words:"mots",no_definition:"Aucune d\xE9finition disponible.",vocabulary_book:"Mots",mastered:"Ma\xEEtris\xE9s",no_learning_words:"Aucun mot \xE0 apprendre",no_mastered_words:"Aucun mot ma\xEEtris\xE9"},commands:{refresh_vocabulary:"Actualiser le vocabulaire",add_word:"HiWords : Ajouter un mot",edit_word:"HiWords : \xC9diter un mot",show_sidebar:"Afficher la barre lat\xE9rale HiWords",add_selected_word:"Ajouter un mot"},notices:{vocabulary_refreshed:"Livres actualis\xE9s",word_added:"Mot ajout\xE9 au livre",word_exists:"Le mot existe d\xE9j\xE0 dans le livre",error_adding_word:"Erreur lors de l'ajout du mot au livre",select_book_required:"Veuillez s\xE9lectionner un livre de mots",adding_word:"Ajout du mot au livre...",updating_word:"Mise \xE0 jour du mot...",word_added_success:'Le mot "{0}" a \xE9t\xE9 ajout\xE9 avec succ\xE8s',word_updated_success:'Le mot "{0}" a \xE9t\xE9 mis \xE0 jour avec succ\xE8s',add_word_failed:"\xC9chec de l'ajout du mot, v\xE9rifiez le fichier du livre",update_word_failed:"\xC9chec de la mise \xE0 jour, v\xE9rifiez le fichier du livre",error_processing_word:"Erreur lors du traitement du mot",no_canvas_files:"Aucun fichier Canvas trouv\xE9",book_already_exists:"Ce livre existe d\xE9j\xE0",invalid_canvas_file:"Fichier Canvas invalide",book_added:"Livre ajout\xE9 : {0}",book_reloaded:"Livre recharg\xE9 : {0}",book_removed:"Livre supprim\xE9 : {0}",deleting_word:"Suppression du mot...",word_deleted:"Mot supprim\xE9",delete_word_failed:"\xC9chec de la suppression du mot, v\xE9rifiez le fichier du livre",error_deleting_word:"Une erreur est survenue lors de la suppression du mot",mastered_feature_disabled:"La fonction ma\xEEtris\xE9 n'est pas activ\xE9e",update_word_status_failed:"\xC9chec de la mise \xE0 jour du statut du mot",move_to_mastered_group_failed:"\xC9chec du d\xE9placement vers le groupe ma\xEEtris\xE9",word_marked_as_mastered:'"{0}" marqu\xE9 comme ma\xEEtris\xE9',mark_mastered_failed:"\xC9chec du marquage, veuillez r\xE9essayer",remove_from_mastered_group_failed:"\xC9chec du retrait du groupe ma\xEEtris\xE9",word_unmarked_as_mastered:'"{0}" retir\xE9 du statut ma\xEEtris\xE9',no_text_selected:"Veuillez d'abord s\xE9lectionner un mot \xE0 ajouter",word_required:"Veuillez entrer un mot",unmark_mastered_failed:"\xC9chec de la suppression de la marque, veuillez r\xE9essayer",batch_marked_success:"{0} mots marqu\xE9s comme ma\xEEtris\xE9s avec succ\xE8s",book_path_updated:"Chemin du livre mis \xE0 jour : {0}",new_notice:"Nouvelle notification"},modals:{auto_fill_definition:"D\xE9finir avec IA",word_label:"Mot",word_placeholder:"Entrez le mot \xE0 ajouter...",definition_label:"D\xE9finition",book_label:"Livre de mots",select_book:"S\xE9lectionnez un livre",color_label:"Couleur de la carte",color_gray:"Gris",color_red:"Rouge",color_orange:"Orange",color_yellow:"Jaune",color_green:"Vert",color_blue:"Bleu",color_purple:"Violet",aliases_label:"Alias (facultatif, s\xE9par\xE9s par des virgules)",aliases_placeholder:"ex. : doing, done, did",definition_placeholder:"Saisissez la d\xE9finition...",add_button:"Ajouter",save_button:"Enregistrer",cancel_button:"Annuler",select_canvas_file:"S\xE9lectionner le fichier du livre",delete_confirmation:`\xCAtes-vous s\xFBr de vouloir supprimer le mot "{0}" ?
Cette action est irr\xE9versible.`},actions:{expand:"D\xE9ployer",collapse:"Replier",mark_mastered:"Marquer comme ma\xEEtris\xE9",unmark_mastered:"Retirer le statut ma\xEEtris\xE9"},translate:{text_empty:"Le texte de traduction ne peut pas \xEAtre vide",translating:"Traduction en cours...",failed:"La traduction a \xE9chou\xE9, veuillez r\xE9essayer",ai_not_configured:"Traduction IA non configur\xE9e. Configurez l'API dans les param\xE8tres",invalid_response:"Le service de traduction a renvoy\xE9 une r\xE9ponse non valide"},ai_errors:{word_empty:"Le mot ne peut pas \xEAtre vide",api_key_not_configured:"La cl\xE9 API n'est pas configur\xE9e. Veuillez la d\xE9finir dans les param\xE8tres du plugin",invalid_response:"L'API a renvoy\xE9 un format de r\xE9ponse invalide",api_key_invalid:"\u274C La cl\xE9 API est invalide ou expir\xE9e. Veuillez v\xE9rifier les param\xE8tres du plugin",rate_limit:"\u23F1\uFE0F Limite de d\xE9bit de l'API d\xE9pass\xE9e. Veuillez r\xE9essayer plus tard",server_error:"\u{1F527} Le service API est temporairement indisponible. Veuillez r\xE9essayer plus tard",network_error:"\u{1F310} \xC9chec de la connexion r\xE9seau. Veuillez v\xE9rifier vos param\xE8tres r\xE9seau",request_failed:"La requ\xEAte au dictionnaire IA a \xE9chou\xE9",invalid_json_format:"Format JSON invalide, veuillez v\xE9rifier la syntaxe"}};var rt={plugin_name:"HiWords",settings:{vocabulary_books:"W\xF6rterb\xFCcher",add_vocabulary_book:"W\xF6rterbuch hinzuf\xFCgen",remove_vocabulary_book:"Entfernen",show_definition_on_hover:"Definition beim Hover anzeigen",show_definition_on_hover_desc:"Definition anzeigen, wenn der Mauszeiger \xFCber hervorgehobene W\xF6rter f\xE4hrt",enable_auto_highlight:"Automatisches Hervorheben aktivieren",enable_auto_highlight_desc:"W\xF6rter aus den W\xF6rterb\xFCchern beim Lesen automatisch hervorheben",highlight_style:"Hervorhebungsstil",highlight_style_desc:"W\xE4hlen Sie, wie W\xF6rter im Text hervorgehoben werden",enable_section_tabs:"Abschnitt-Tabs aktivieren",enable_section_tabs_desc:"Mehrteilige Definitionen als Tabs in der Seitenleiste und im Hover-Popup anzeigen",style_underline:"Unterstreichen",style_background:"Hintergrund",style_bold:"Fett",style_dotted:"Gepunktete Unterstreichung",style_wavy:"Wellenf\xF6rmige Unterstreichung",save_settings:"Einstellungen speichern",no_vocabulary_books:"Noch keine W\xF6rterb\xFCcher. F\xFCgen Sie eine Canvas-Datei als W\xF6rterbuch hinzu.",path:"Pfad",reload_book:"Dieses W\xF6rterbuch neu laden",statistics:"Statistiken",total_books:"Gesamtzahl der W\xF6rterb\xFCcher: {0}",enabled_books:"Aktivierte W\xF6rterb\xFCcher: {0}",total_words:"Gesamtzahl der W\xF6rter: {0}",enable_mastered_feature:"Funktion 'Gemeistert' aktivieren",enable_mastered_feature_desc:"Gemeisterte W\xF6rter markieren, um sie nicht mehr hervorzuheben. Seitenleiste zeigt Gruppen",blur_definitions:"Inhalt verwischen",blur_definitions_desc:"Standardm\xE4\xDFig verwischen, beim Hover anzeigen. Ideal zum Erinnern vor dem Anzeigen der Antwort",tts_template:"TTS-Vorlage",tts_template_desc:"{{word}} als Platzhalter verwenden, z.B. https://dict.youdao.com/dictvoice?audio={{word}}&type=2",ai_dictionary:"KI-Assistent",ai_api_url:"API-URL",ai_api_url_desc:"API-Endpunkt (erkennt automatisch: OpenAI, Claude, Gemini)",ai_api_key:"API-Schl\xFCssel",ai_api_key_desc:"Ihr KI-API-Schl\xFCssel",ai_model:"Modell",ai_model_desc:"KI-Modellname (z.B. gpt-4o-mini, deepseek-chat)",ai_prompt:"Benutzerdefinierter Prompt",ai_prompt_desc:"{{word}} und {{sentence}} als Platzhalter verwenden. Die KI wird diesen Prompt verwenden, um Definitionen zu generieren",ai_extra_params:"Zus\xE4tzliche Anfrageparameter",ai_extra_params_desc:"Benutzerdefinierte JSON-Parameter zum Anfrage-Body der KI hinzuf\xFCgen (fortgeschritten)",ai_extra_params_placeholder:`{
"temperature": 0.7,
"top_p": 0.9
}`,auto_layout:"Automatisches Canvas-Layout",enable_auto_layout:"Automatisches Layout aktivieren",enable_auto_layout_desc:"Layout nach Hinzuf\xFCgen/Aktualisieren/L\xF6schen und Gruppen\xE4nderungen automatisch normalisieren",card_size:"Kartengr\xF6\xDFe",card_size_desc:"Standard-Kartengr\xF6\xDFe (Breite \xD7 H\xF6he, Standard: 260 \xD7 120)",grid_gaps:"Gitterabst\xE4nde",grid_gaps_desc:"Horizontale/vertikale Abst\xE4nde f\xFCr das linke Gitter",left_padding:"Linker Innenabstand & min. X",left_padding_desc:"Linker Abstand zur Gruppe 'Mastered' und minimale X-Position f\xFCr den linken Bereich",columns_auto:"Automatische Spalten",columns_auto_desc:"Spalten automatisch bestimmen (begrenzt durch maximale Spalten)",columns:"Feste Spalten / Maximale Spalten",columns_desc:"Feste Spalten und Maximalspalten angeben (wirksam, wenn auto aus)",group_inner_layout:"Inneres Gruppenlayout",group_inner_layout_desc:"Innenabstand, Abst\xE4nde und Spalten f\xFCr Knoten in Gruppen",highlight_scope:"Hervorhebungsbereich",highlight_mode:"Hervorhebungsmodus",highlight_mode_desc:"W\xE4hlen Sie den Bereichsmodus f\xFCr die Wort-Hervorhebung",mode_all:"Alle Dateien",mode_exclude:"Angegebene Pfade ausschlie\xDFen",mode_include:"Nur angegebene Pfade",highlight_paths:"Dateipfade",highlight_paths_desc:"Mehrere Pfade durch Kommas trennen, unterst\xFCtzt Ordnerpfade (einschlie\xDFlich Unterordner)",highlight_paths_placeholder:"z.B.: Archive, Templates, Private/Diary",file_node_parse_mode:"Dateiknoten-Analysemodus",file_node_parse_mode_desc:"W\xE4hlen Sie, wie Dateikarten in Canvas analysiert werden",mode_filename:"Nur Dateiname",mode_content:"Nur Dateiinhalt",mode_filename_with_alias:"Dateiname als Wort, Inhalt als Alias",selection_translate:"Auswahl\xFCbersetzung",enable_selection_translate:"Auswahl\xFCbersetzung aktivieren",enable_selection_translate_desc:"\xDCbersetzungs-Popup anzeigen, wenn Text ausgew\xE4hlt wird",translate_target_lang:"Zielsprache",translate_target_lang_desc:"Zielsprachcode (z.B. zh-CN, en, ja)",translate_prompt:"\xDCbersetzungs-Prompt",translate_prompt_desc:"KI-\xDCbersetzungs-Prompt-Vorlage. Verwenden Sie {{text}} und {{to}} als Platzhalter"},sidebar:{title:"HiWords",empty_state:"Keine W\xF6rter gefunden. F\xFCgen Sie W\xF6rter zu Ihren W\xF6rterb\xFCchern hinzu, um sie hier zu sehen.",source_prefix:"Von: ",found:"Gefunden",words:"W\xF6rter",no_definition:"Keine Definition verf\xFCgbar.",vocabulary_book:"W\xF6rter",mastered:"Gemeistert",no_learning_words:"Keine zu lernenden W\xF6rter",no_mastered_words:"Keine gemeisterten W\xF6rter"},commands:{refresh_vocabulary:"Vokabular aktualisieren",add_word:"HiWords: Wort hinzuf\xFCgen",edit_word:"HiWords: Wort bearbeiten",show_sidebar:"HiWords-Seitenleiste anzeigen",add_selected_word:"Wort hinzuf\xFCgen"},notices:{vocabulary_refreshed:"W\xF6rterb\xFCcher aktualisiert",word_added:"Wort zum W\xF6rterbuch hinzugef\xFCgt",word_exists:"Wort existiert bereits im W\xF6rterbuch",error_adding_word:"Fehler beim Hinzuf\xFCgen des Wortes zum W\xF6rterbuch",select_book_required:"Bitte w\xE4hlen Sie ein W\xF6rterbuch aus",adding_word:"Wort wird zum W\xF6rterbuch hinzugef\xFCgt...",updating_word:"Wort wird aktualisiert...",word_added_success:'Wort "{0}" erfolgreich hinzugef\xFCgt',word_updated_success:'Wort "{0}" erfolgreich aktualisiert',add_word_failed:"Hinzuf\xFCgen des Wortes fehlgeschlagen, pr\xFCfen Sie die Datei",update_word_failed:"Aktualisieren des Wortes fehlgeschlagen, pr\xFCfen Sie die Datei",error_processing_word:"Fehler bei der Verarbeitung des Wortes",no_canvas_files:"Keine Canvas-Dateien gefunden",book_already_exists:"Dieses W\xF6rterbuch existiert bereits",invalid_canvas_file:"Ung\xFCltige Canvas-Datei",book_added:"W\xF6rterbuch hinzugef\xFCgt: {0}",book_reloaded:"W\xF6rterbuch neu geladen: {0}",book_removed:"W\xF6rterbuch entfernt: {0}",deleting_word:"Wort wird gel\xF6scht...",word_deleted:"Wort gel\xF6scht",delete_word_failed:"L\xF6schen des Wortes fehlgeschlagen, pr\xFCfen Sie die Datei",error_deleting_word:"Beim L\xF6schen des Wortes ist ein Fehler aufgetreten",mastered_feature_disabled:"Funktion 'Gemeistert' ist nicht aktiviert",update_word_status_failed:"Aktualisieren des Wortstatus fehlgeschlagen",move_to_mastered_group_failed:"Verschieben in die Gruppe 'Gemeistert' fehlgeschlagen",word_marked_as_mastered:'"{0}" als gemeistert markiert',mark_mastered_failed:"Als gemeistert markieren fehlgeschlagen, bitte erneut versuchen",remove_from_mastered_group_failed:"Entfernen aus der Gruppe 'Gemeistert' fehlgeschlagen",word_unmarked_as_mastered:'"{0}" nicht mehr als gemeistert markiert',no_text_selected:"Bitte w\xE4hlen Sie zuerst ein Wort aus",word_required:"Bitte geben Sie ein Wort ein",unmark_mastered_failed:"Markierung konnte nicht entfernt werden, bitte erneut versuchen",batch_marked_success:"{0} W\xF6rter erfolgreich als gemeistert markiert",book_path_updated:"W\xF6rterbuchpfad aktualisiert: {0}",new_notice:"Neue Benachrichtigung"},modals:{auto_fill_definition:"KI-Definition",word_label:"Wort",word_placeholder:"Wort eingeben...",definition_label:"Definition",book_label:"W\xF6rterbuch",select_book:"W\xF6rterbuch ausw\xE4hlen",color_label:"Kartenfarbe",color_gray:"Grau",color_red:"Rot",color_orange:"Orange",color_yellow:"Gelb",color_green:"Gr\xFCn",color_blue:"Blau",color_purple:"Lila",aliases_label:"Aliasse (optional, durch Kommas getrennt)",aliases_placeholder:"z. B.: doing, done, did",definition_placeholder:"Definition eingeben...",add_button:"Hinzuf\xFCgen",save_button:"Speichern",cancel_button:"Abbrechen",select_canvas_file:"Datei des W\xF6rterbuchs ausw\xE4hlen",delete_confirmation:`M\xF6chten Sie das Wort "{0}" wirklich l\xF6schen?
Diese Aktion kann nicht r\xFCckg\xE4ngig gemacht werden.`},actions:{expand:"Erweitern",collapse:"Einklappen",mark_mastered:"Als beherrscht markieren",unmark_mastered:"Beherrschung aufheben"},translate:{text_empty:"Der \xDCbersetzungstext darf nicht leer sein",translating:"\xDCbersetzen...",failed:"\xDCbersetzung fehlgeschlagen, bitte erneut versuchen",ai_not_configured:"KI-\xDCbersetzung nicht konfiguriert. Bitte API in den Einstellungen einrichten",invalid_response:"Der \xDCbersetzungsdienst hat eine ung\xFCltige Antwort zur\xFCckgegeben"},ai_errors:{word_empty:"Das Wort darf nicht leer sein",api_key_not_configured:"API-Schl\xFCssel ist nicht konfiguriert. Bitte in den Plugin-Einstellungen festlegen",invalid_response:"Die API hat ein ung\xFCltiges Antwortformat zur\xFCckgegeben",api_key_invalid:"\u274C API-Schl\xFCssel ist ung\xFCltig oder abgelaufen. Bitte \xFCberpr\xFCfen Sie die Plugin-Einstellungen",rate_limit:"\u23F1\uFE0F API-Ratenlimit \xFCberschritten. Bitte versuchen Sie es sp\xE4ter erneut",server_error:"\u{1F527} API-Dienst ist vor\xFCbergehend nicht verf\xFCgbar. Bitte versuchen Sie es sp\xE4ter erneut",network_error:"\u{1F310} Netzwerkverbindung fehlgeschlagen. Bitte \xFCberpr\xFCfen Sie Ihre Netzwerkeinstellungen",request_failed:"KI-W\xF6rterbuch-Anfrage fehlgeschlagen",invalid_json_format:"Ung\xFCltiges JSON-Format, bitte pr\xFCfen Sie die Syntax"}};var at={plugin_name:"HiWords",settings:{vocabulary_books:"\u5358\u8A9E\u5E33",add_vocabulary_book:"\u5358\u8A9E\u5E33\u3092\u8FFD\u52A0",remove_vocabulary_book:"\u524A\u9664",show_definition_on_hover:"\u30DB\u30D0\u30FC\u3067\u5B9A\u7FA9\u3092\u8868\u793A",show_definition_on_hover_desc:"\u5F37\u8ABF\u8868\u793A\u3055\u308C\u305F\u5358\u8A9E\u306B\u30DE\u30A6\u30B9\u3092\u4E57\u305B\u308B\u3068\u5B9A\u7FA9\u3092\u8868\u793A\u3057\u307E\u3059",enable_auto_highlight:"\u81EA\u52D5\u30CF\u30A4\u30E9\u30A4\u30C8\u3092\u6709\u52B9\u5316",enable_auto_highlight_desc:"\u8AAD\u66F8\u4E2D\u306B\u5358\u8A9E\u5E33\u306E\u5358\u8A9E\u3092\u81EA\u52D5\u7684\u306B\u30CF\u30A4\u30E9\u30A4\u30C8\u3057\u307E\u3059",highlight_style:"\u30CF\u30A4\u30E9\u30A4\u30C8\u30B9\u30BF\u30A4\u30EB",highlight_style_desc:"\u30C6\u30AD\u30B9\u30C8\u4E2D\u306E\u5358\u8A9E\u306E\u30CF\u30A4\u30E9\u30A4\u30C8\u65B9\u6CD5\u3092\u9078\u629E",enable_section_tabs:"\u30BB\u30AF\u30B7\u30E7\u30F3\u30BF\u30D6\u3092\u6709\u52B9\u5316",enable_section_tabs_desc:"\u8907\u6570\u30BB\u30AF\u30B7\u30E7\u30F3\u306E\u5B9A\u7FA9\u3092\u30B5\u30A4\u30C9\u30D0\u30FC\u3068\u30DB\u30D0\u30FC\u30DD\u30C3\u30D7\u30AA\u30FC\u30D0\u30FC\u3067\u30BF\u30D6\u8868\u793A\u3057\u307E\u3059",style_underline:"\u4E0B\u7DDA",style_background:"\u80CC\u666F",style_bold:"\u592A\u5B57",style_dotted:"\u70B9\u7DDA\u306E\u4E0B\u7DDA",style_wavy:"\u6CE2\u7DDA\u306E\u4E0B\u7DDA",save_settings:"\u8A2D\u5B9A\u3092\u4FDD\u5B58",no_vocabulary_books:"\u5358\u8A9E\u5E33\u304C\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002Canvas \u30D5\u30A1\u30A4\u30EB\u3092\u5358\u8A9E\u5E33\u3068\u3057\u3066\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002",path:"\u30D1\u30B9",reload_book:"\u3053\u306E\u5358\u8A9E\u5E33\u3092\u518D\u8AAD\u307F\u8FBC\u307F",statistics:"\u7D71\u8A08",total_books:"\u5358\u8A9E\u5E33\u306E\u5408\u8A08: {0}",enabled_books:"\u6709\u52B9\u306A\u5358\u8A9E\u5E33: {0}",total_words:"\u5358\u8A9E\u306E\u5408\u8A08: {0}",enable_mastered_feature:"\u7FD2\u5F97\u6E08\u307F\u6A5F\u80FD\u3092\u6709\u52B9\u5316",enable_mastered_feature_desc:"\u7FD2\u5F97\u6E08\u307F\u306E\u5358\u8A9E\u3092\u30DE\u30FC\u30AF\u3057\u3066\u30CF\u30A4\u30E9\u30A4\u30C8\u3092\u505C\u6B62\u3002\u30B5\u30A4\u30C9\u30D0\u30FC\u306B\u30B0\u30EB\u30FC\u30D7\u8868\u793A",blur_definitions:"\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u307C\u304B\u3059",blur_definitions_desc:"\u30C7\u30D5\u30A9\u30EB\u30C8\u3067\u307C\u304B\u3057\u3001\u30DB\u30D0\u30FC\u6642\u306B\u8868\u793A\u3002\u5B66\u7FD2\u6642\u306B\u7B54\u3048\u3092\u898B\u308B\u524D\u306B\u601D\u3044\u51FA\u3059\u306E\u306B\u6700\u9069",tts_template:"TTS\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8",tts_template_desc:"{{word}}\u3092\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u3068\u3057\u3066\u4F7F\u7528\u3001\u4F8B\uFF1Ahttps://dict.youdao.com/dictvoice?audio={{word}}&type=2",ai_dictionary:"AI\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8",ai_api_url:"API URL",ai_api_url_desc:"API\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\uFF08\u81EA\u52D5\u691C\u51FA\uFF1AOpenAI\u3001Claude\u3001Gemini\uFF09",ai_api_key:"API\u30AD\u30FC",ai_api_key_desc:"\u3042\u306A\u305F\u306EAI API\u30AD\u30FC",ai_model:"\u30E2\u30C7\u30EB",ai_model_desc:"AI\u30E2\u30C7\u30EB\u540D\uFF08\u4F8B\uFF1Agpt-4o-mini\u3001deepseek-chat\uFF09",ai_prompt:"\u30AB\u30B9\u30BF\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8",ai_prompt_desc:"{{word}}\u3068{{sentence}}\u3092\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u3068\u3057\u3066\u4F7F\u7528\u3002AI\u306F\u3053\u306E\u30D7\u30ED\u30F3\u30D7\u30C8\u3092\u4F7F\u7528\u3057\u3066\u5B9A\u7FA9\u3092\u751F\u6210\u3057\u307E\u3059",ai_extra_params:"\u8FFD\u52A0\u30EA\u30AF\u30A8\u30B9\u30C8\u30D1\u30E9\u30E1\u30FC\u30BF",ai_extra_params_desc:"AI\u30EA\u30AF\u30A8\u30B9\u30C8\u672C\u6587\u306B\u30AB\u30B9\u30BF\u30E0 JSON \u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u8FFD\u52A0\u3057\u307E\u3059\uFF08\u4E0A\u7D1A\u8005\u5411\u3051\uFF09",ai_extra_params_placeholder:`{
"temperature": 0.7,
"top_p": 0.9
}`,auto_layout:"\u30AD\u30E3\u30F3\u30D0\u30B9\u81EA\u52D5\u30EC\u30A4\u30A2\u30A6\u30C8",enable_auto_layout:"\u81EA\u52D5\u30EC\u30A4\u30A2\u30A6\u30C8\u3092\u6709\u52B9\u5316",enable_auto_layout_desc:"\u8FFD\u52A0/\u66F4\u65B0/\u524A\u9664\u304A\u3088\u3073\u30B0\u30EB\u30FC\u30D7\u5909\u66F4\u5F8C\u306B\u30EC\u30A4\u30A2\u30A6\u30C8\u3092\u81EA\u52D5\u6B63\u898F\u5316",card_size:"\u30AB\u30FC\u30C9\u30B5\u30A4\u30BA",card_size_desc:"\u30C7\u30D5\u30A9\u30EB\u30C8\u30AB\u30FC\u30C9\u30B5\u30A4\u30BA\uFF08\u5E45 \xD7 \u9AD8\u3055\u3001\u30C7\u30D5\u30A9\u30EB\u30C8\uFF1A260 \xD7 120\uFF09",grid_gaps:"\u30B0\u30EA\u30C3\u30C9\u9593\u9694",grid_gaps_desc:"\u5DE6\u30B0\u30EA\u30C3\u30C9\u306E\u6C34\u5E73/\u5782\u76F4\u9593\u9694",left_padding:"\u5DE6\u4F59\u767D\u3068\u6700\u5C0F X",left_padding_desc:"Mastered \u30B0\u30EB\u30FC\u30D7\u304B\u3089\u306E\u5DE6\u4F59\u767D\u3068\u5DE6\u30A8\u30EA\u30A2\u306E\u6700\u5C0F X",columns_auto:"\u81EA\u52D5\u30AB\u30E9\u30E0",columns_auto_desc:"\u30AB\u30E9\u30E0\u6570\u3092\u81EA\u52D5\u6C7A\u5B9A\uFF08\u6700\u5927\u30AB\u30E9\u30E0\u6570\u3067\u5236\u9650\uFF09",columns:"\u56FA\u5B9A\u30AB\u30E9\u30E0 / \u6700\u5927\u30AB\u30E9\u30E0",columns_desc:"\u56FA\u5B9A\u30AB\u30E9\u30E0\u3068\u6700\u5927\u30AB\u30E9\u30E0\u3092\u6307\u5B9A\uFF08\u81EA\u52D5\u304C\u30AA\u30D5\u306E\u6642\u306B\u6709\u52B9\uFF09",group_inner_layout:"\u30B0\u30EB\u30FC\u30D7\u5185\u90E8\u30EC\u30A4\u30A2\u30A6\u30C8",group_inner_layout_desc:"\u30B0\u30EB\u30FC\u30D7\u5185\u30CE\u30FC\u30C9\u306E\u5185\u5074\u4F59\u767D\u3001\u9593\u9694\u3001\u30AB\u30E9\u30E0\u8A2D\u5B9A",highlight_scope:"\u30CF\u30A4\u30E9\u30A4\u30C8\u7BC4\u56F2",highlight_mode:"\u30CF\u30A4\u30E9\u30A4\u30C8\u30E2\u30FC\u30C9",highlight_mode_desc:"\u5358\u8A9E\u30CF\u30A4\u30E9\u30A4\u30C8\u306E\u7BC4\u56F2\u30E2\u30FC\u30C9\u3092\u9078\u629E",mode_all:"\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB",mode_exclude:"\u6307\u5B9A\u30D1\u30B9\u3092\u9664\u5916",mode_include:"\u6307\u5B9A\u30D1\u30B9\u306E\u307F",highlight_paths:"\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9",highlight_paths_desc:"\u8907\u6570\u306E\u30D1\u30B9\u3092\u30AB\u30F3\u30DE\u3067\u533A\u5207\u308A\u3001\u30D5\u30A9\u30EB\u30C0\u30D1\u30B9\u3092\u30B5\u30DD\u30FC\u30C8\uFF08\u30B5\u30D6\u30D5\u30A9\u30EB\u30C0\u3092\u542B\u3080\uFF09",highlight_paths_placeholder:"\u4F8B\uFF1AArchive, Templates, Private/Diary",file_node_parse_mode:"\u30D5\u30A1\u30A4\u30EB\u30CE\u30FC\u30C9\u89E3\u6790\u30E2\u30FC\u30C9",file_node_parse_mode_desc:"Canvas \u5185\u306E\u30D5\u30A1\u30A4\u30EB\u30AB\u30FC\u30C9\u306E\u89E3\u6790\u65B9\u6CD5\u3092\u9078\u629E",mode_filename:"\u30D5\u30A1\u30A4\u30EB\u540D\u306E\u307F",mode_content:"\u30D5\u30A1\u30A4\u30EB\u5185\u5BB9\u306E\u307F",mode_filename_with_alias:"\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u5358\u8A9E\u3001\u5185\u5BB9\u3092\u30A8\u30A4\u30EA\u30A2\u30B9\u3068\u3057\u3066",selection_translate:"\u9078\u629E\u7FFB\u8A33",enable_selection_translate:"\u9078\u629E\u7FFB\u8A33\u3092\u6709\u52B9\u306B\u3059\u308B",enable_selection_translate_desc:"\u30C6\u30AD\u30B9\u30C8\u3092\u9078\u629E\u3059\u308B\u3068\u7FFB\u8A33\u30DD\u30C3\u30D7\u30A2\u30C3\u30D7\u3092\u8868\u793A",translate_target_lang:"\u30BF\u30FC\u30B2\u30C3\u30C8\u8A00\u8A9E",translate_target_lang_desc:"\u30BF\u30FC\u30B2\u30C3\u30C8\u8A00\u8A9E\u30B3\u30FC\u30C9\uFF08\u4F8B\uFF1Azh-CN\u3001en\u3001ja\uFF09",translate_prompt:"\u7FFB\u8A33\u30D7\u30ED\u30F3\u30D7\u30C8",translate_prompt_desc:"AI\u7FFB\u8A33\u306E\u30D7\u30ED\u30F3\u30D7\u30C8\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3002{{text}}\u3068{{to}}\u3092\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u3068\u3057\u3066\u4F7F\u7528"},sidebar:{title:"HiWords",empty_state:"\u5358\u8A9E\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u5358\u8A9E\u5E33\u306B\u8FFD\u52A0\u3059\u308B\u3068\u3053\u3053\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002",source_prefix:"\u51FA\u5178: ",found:"\u898B\u3064\u304B\u3063\u305F",words:"\u5358\u8A9E",no_definition:"\u5B9A\u7FA9\u306F\u3042\u308A\u307E\u305B\u3093\u3002",vocabulary_book:"\u5358\u8A9E",mastered:"\u7FD2\u5F97\u6E08\u307F",no_learning_words:"\u5B66\u7FD2\u3059\u308B\u5358\u8A9E\u306F\u3042\u308A\u307E\u305B\u3093",no_mastered_words:"\u7FD2\u5F97\u6E08\u307F\u306E\u5358\u8A9E\u306F\u3042\u308A\u307E\u305B\u3093"},commands:{refresh_vocabulary:"\u5358\u8A9E\u5E33\u3092\u66F4\u65B0",add_word:"HiWords: \u5358\u8A9E\u3092\u8FFD\u52A0",edit_word:"HiWords: \u5358\u8A9E\u3092\u7DE8\u96C6",show_sidebar:"HiWords \u30B5\u30A4\u30C9\u30D0\u30FC\u3092\u8868\u793A",add_selected_word:"\u5358\u8A9E\u3092\u8FFD\u52A0"},notices:{vocabulary_refreshed:"\u5358\u8A9E\u5E33\u3092\u66F4\u65B0\u3057\u307E\u3057\u305F",word_added:"\u5358\u8A9E\u3092\u5358\u8A9E\u5E33\u306B\u8FFD\u52A0\u3057\u307E\u3057\u305F",word_exists:"\u5358\u8A9E\u306F\u3059\u3067\u306B\u5358\u8A9E\u5E33\u306B\u5B58\u5728\u3057\u307E\u3059",error_adding_word:"\u5358\u8A9E\u306E\u8FFD\u52A0\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F",select_book_required:"\u5358\u8A9E\u5E33\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044",adding_word:"\u5358\u8A9E\u3092\u8FFD\u52A0\u4E2D...",updating_word:"\u5358\u8A9E\u3092\u66F4\u65B0\u4E2D...",word_added_success:'\u5358\u8A9E "{0}" \u3092\u8FFD\u52A0\u3057\u307E\u3057\u305F',word_updated_success:'\u5358\u8A9E "{0}" \u3092\u66F4\u65B0\u3057\u307E\u3057\u305F',add_word_failed:"\u5358\u8A9E\u3092\u8FFD\u52A0\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u5358\u8A9E\u5E33\u30D5\u30A1\u30A4\u30EB\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",update_word_failed:"\u5358\u8A9E\u3092\u66F4\u65B0\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u5358\u8A9E\u5E33\u30D5\u30A1\u30A4\u30EB\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",error_processing_word:"\u5358\u8A9E\u306E\u51E6\u7406\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F",no_canvas_files:"Canvas \u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",book_already_exists:"\u3053\u306E\u5358\u8A9E\u5E33\u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059",invalid_canvas_file:"\u7121\u52B9\u306A Canvas \u30D5\u30A1\u30A4\u30EB\u3067\u3059",book_added:"\u5358\u8A9E\u5E33\u3092\u8FFD\u52A0\u3057\u307E\u3057\u305F: {0}",book_reloaded:"\u5358\u8A9E\u5E33\u3092\u518D\u8AAD\u307F\u8FBC\u307F\u3057\u307E\u3057\u305F: {0}",book_removed:"\u5358\u8A9E\u5E33\u3092\u524A\u9664\u3057\u307E\u3057\u305F: {0}",deleting_word:"\u5358\u8A9E\u3092\u524A\u9664\u4E2D...",word_deleted:"\u5358\u8A9E\u3092\u524A\u9664\u3057\u307E\u3057\u305F",delete_word_failed:"\u5358\u8A9E\u3092\u524A\u9664\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u30D5\u30A1\u30A4\u30EB\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",error_deleting_word:"\u524A\u9664\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F",mastered_feature_disabled:"\u7FD2\u5F97\u6E08\u307F\u6A5F\u80FD\u306F\u6709\u52B9\u306B\u306A\u3063\u3066\u3044\u307E\u305B\u3093",update_word_status_failed:"\u5358\u8A9E\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u66F4\u65B0\u306B\u5931\u6557\u3057\u307E\u3057\u305F",move_to_mastered_group_failed:"\u7FD2\u5F97\u6E08\u307F\u30B0\u30EB\u30FC\u30D7\u3078\u306E\u79FB\u52D5\u306B\u5931\u6557\u3057\u307E\u3057\u305F",word_marked_as_mastered:'"{0}" \u3092\u7FD2\u5F97\u6E08\u307F\u306B\u8A2D\u5B9A\u3057\u307E\u3057\u305F',mark_mastered_failed:"\u30DE\u30FC\u30AF\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u3066\u304F\u3060\u3055\u3044",remove_from_mastered_group_failed:"\u7FD2\u5F97\u6E08\u307F\u30B0\u30EB\u30FC\u30D7\u304B\u3089\u306E\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F",word_unmarked_as_mastered:'"{0}" \u306E\u30DE\u30B9\u30BF\u30FC\u6E08\u307F\u30DE\u30FC\u30AF\u3092\u89E3\u9664\u3057\u307E\u3057\u305F',no_text_selected:"\u8FFD\u52A0\u3059\u308B\u5358\u8A9E\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044",word_required:"\u5358\u8A9E\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",unmark_mastered_failed:"\u30DE\u30FC\u30AF\u89E3\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u3066\u304F\u3060\u3055\u3044",batch_marked_success:"{0}\u500B\u306E\u5358\u8A9E\u3092\u7FD2\u5F97\u6E08\u307F\u3068\u3057\u3066\u30DE\u30FC\u30AF\u3057\u307E\u3057\u305F",book_path_updated:"\u5358\u8A9E\u5E33\u306E\u30D1\u30B9\u304C\u66F4\u65B0\u3055\u308C\u307E\u3057\u305F: {0}",new_notice:"\u65B0\u3057\u3044\u901A\u77E5"},modals:{auto_fill_definition:"AI\u5B9A\u7FA9",word_label:"\u5358\u8A9E",word_placeholder:"\u8FFD\u52A0\u3059\u308B\u5358\u8A9E\u3092\u5165\u529B...",definition_label:"\u5B9A\u7FA9",book_label:"\u5358\u8A9E\u5E33",select_book:"\u5358\u8A9E\u5E33\u3092\u9078\u629E",color_label:"\u30AB\u30FC\u30C9\u306E\u8272",color_gray:"\u30B0\u30EC\u30FC",color_red:"\u8D64",color_orange:"\u30AA\u30EC\u30F3\u30B8",color_yellow:"\u9EC4\u8272",color_green:"\u7DD1",color_blue:"\u9752",color_purple:"\u7D2B",aliases_label:"\u5225\u540D\uFF08\u4EFB\u610F\u3001\u30AB\u30F3\u30DE\u533A\u5207\u308A\uFF09",aliases_placeholder:"\u4F8B: doing, done, did",definition_placeholder:"\u5B9A\u7FA9\u3092\u5165\u529B...",add_button:"\u8FFD\u52A0",save_button:"\u4FDD\u5B58",cancel_button:"\u30AD\u30E3\u30F3\u30BB\u30EB",select_canvas_file:"\u5358\u8A9E\u5E33\u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E",delete_confirmation:`\u5358\u8A9E "{0}" \u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F
\u3053\u306E\u64CD\u4F5C\u306F\u5143\u306B\u623B\u305B\u307E\u305B\u3093\u3002`},actions:{expand:"\u5C55\u958B",collapse:"\u6298\u308A\u305F\u305F\u3080",mark_mastered:"\u7FD2\u5F97\u6E08\u307F\u306B\u3059\u308B",unmark_mastered:"\u7FD2\u5F97\u6E08\u307F\u3092\u89E3\u9664"},translate:{text_empty:"\u7FFB\u8A33\u30C6\u30AD\u30B9\u30C8\u306F\u7A7A\u306B\u3067\u304D\u307E\u305B\u3093",translating:"\u7FFB\u8A33\u4E2D...",failed:"\u7FFB\u8A33\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044",ai_not_configured:"AI\u7FFB\u8A33\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u8A2D\u5B9A\u3067API\u3092\u69CB\u6210\u3057\u3066\u304F\u3060\u3055\u3044",invalid_response:"\u7FFB\u8A33\u30B5\u30FC\u30D3\u30B9\u304C\u7121\u52B9\u306A\u30EC\u30B9\u30DD\u30F3\u30B9\u3092\u8FD4\u3057\u307E\u3057\u305F"},ai_errors:{word_empty:"\u5358\u8A9E\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",api_key_not_configured:"API\u30AD\u30FC\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u30D7\u30E9\u30B0\u30A4\u30F3\u8A2D\u5B9A\u3067\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",invalid_response:"API\u304C\u7121\u52B9\u306A\u5FDC\u7B54\u5F62\u5F0F\u3092\u8FD4\u3057\u307E\u3057\u305F",api_key_invalid:"\u274C API\u30AD\u30FC\u304C\u7121\u52B9\u307E\u305F\u306F\u671F\u9650\u5207\u308C\u3067\u3059\u3002\u30D7\u30E9\u30B0\u30A4\u30F3\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",rate_limit:"\u23F1\uFE0F API\u30EC\u30FC\u30C8\u5236\u9650\u3092\u8D85\u3048\u307E\u3057\u305F\u3002\u5F8C\u3067\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044",server_error:"\u{1F527} API\u30B5\u30FC\u30D3\u30B9\u304C\u4E00\u6642\u7684\u306B\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u5F8C\u3067\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044",network_error:"\u{1F310} \u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044",request_failed:"AI\u8F9E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u5931\u6557\u3057\u307E\u3057\u305F",invalid_json_format:"JSON \u5F62\u5F0F\u304C\u7121\u52B9\u3067\u3059\u3002\u69CB\u6587\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044"}};var xt={en:Ze,zh:et,es:tt,fr:it,de:rt,ja:at},We=class l{constructor(){this.app=null}static getInstance(){return l.instance||(l.instance=new l),l.instance}setApp(i){this.app=i}getCurrentLocale(){let i=(0,st.getLanguage)();return i.startsWith("zh")?"zh":i.startsWith("es")?"es":i.startsWith("fr")?"fr":i.startsWith("de")?"de":i.startsWith("ja")||i.startsWith("jp")?"ja":"en"}t(i){let e=this.getCurrentLocale(),t=xt[e],r=i.split("."),a=t;for(let s of r)if(a&&a[s]!==void 0)a=a[s];else return console.warn(`\u7FFB\u8BD1\u952E ${i} \u4E0D\u5B58\u5728\u4E8E ${e} \u8BED\u8A00\u5305\u4E2D`),i;return a}},Pe=We.getInstance(),d=l=>Pe.t(l);var ne=class{constructor(i,e){this.plugin=i,this.vocabularyManager=e,this.masteredGroupManager=new se(i.app,i.settings)}updateSettings(){this.masteredGroupManager.updateSettings(this.plugin.settings)}get isEnabled(){return this.plugin.settings.enableMasteredFeature}async markWordAsMastered(i,e,t){var r;if(!this.isEnabled)return new D.Notice(d("notices.mastered_feature_disabled")),!1;try{let a=(r=this.plugin.settings.masteredDetection)!=null?r:"group";if(!await this.updateWordMasteredStatus(i,e,!0))return new D.Notice(d("notices.update_word_status_failed")),!1;if(a==="group"){if(!await this.masteredGroupManager.moveToMasteredGroup(i,e))return await this.updateWordMasteredStatus(i,e,!1),new D.Notice(d("notices.move_to_mastered_group_failed")),!1}else if(!await this.vocabularyManager.setNodeColor(i,e,4))return await this.updateWordMasteredStatus(i,e,!1),new D.Notice(d("notices.update_word_status_failed")),!1;return this.plugin.refreshHighlighter(),this.plugin.app.workspace.trigger("hi-words:mastered-changed"),new D.Notice(d("notices.word_marked_as_mastered").replace("{0}",t)),!0}catch(a){return console.error("\u6807\u8BB0\u5DF2\u638C\u63E1\u5931\u8D25:",a),new D.Notice(d("notices.mark_mastered_failed")),!1}}async unmarkWordAsMastered(i,e,t){var r;if(!this.isEnabled)return new D.Notice(d("notices.mastered_feature_disabled")),!1;try{let a=(r=this.plugin.settings.masteredDetection)!=null?r:"group";if(!await this.updateWordMasteredStatus(i,e,!1))return new D.Notice(d("notices.update_word_status_failed")),!1;if(a==="group"){if(!await this.masteredGroupManager.removeFromMasteredGroup(i,e))return await this.updateWordMasteredStatus(i,e,!0),new D.Notice(d("notices.remove_from_mastered_group_failed")),!1}else if(!await this.vocabularyManager.setNodeColor(i,e,void 0))return await this.updateWordMasteredStatus(i,e,!0),new D.Notice(d("notices.update_word_status_failed")),!1;return this.plugin.refreshHighlighter(),this.plugin.app.workspace.trigger("hi-words:mastered-changed"),new D.Notice(d("notices.word_unmarked_as_mastered").replace("{0}",t)),!0}catch(a){return console.error("\u53D6\u6D88\u5DF2\u638C\u63E1\u6807\u8BB0\u5931\u8D25:",a),new D.Notice(d("notices.unmark_mastered_failed")),!1}}async isWordMastered(i,e){if(!this.isEnabled)return!1;try{let t=await this.vocabularyManager.getWordDefinitionByNodeId(i,e);return(t==null?void 0:t.mastered)===!0}catch(t){return console.error("\u68C0\u67E5\u5355\u8BCD\u638C\u63E1\u72B6\u6001\u5931\u8D25:",t),!1}}async getMasteredWords(i){if(!this.isEnabled)return[];try{return(await this.vocabularyManager.getAllWordDefinitions()).filter(t=>!(!t.mastered||i&&t.source!==i))}catch(e){return console.error("\u83B7\u53D6\u5DF2\u638C\u63E1\u5355\u8BCD\u5217\u8868\u5931\u8D25:",e),[]}}async getMasteredStats(){if(!this.isEnabled)return{totalMastered:0,totalWords:0,masteredPercentage:0,byBook:{}};try{let i=await this.vocabularyManager.getAllWordDefinitions(),e=i.filter(r=>r.mastered),t={};return i.forEach(r=>{t[r.source]||(t[r.source]={mastered:0,total:0}),t[r.source].total++,r.mastered&&t[r.source].mastered++}),{totalMastered:e.length,totalWords:i.length,masteredPercentage:i.length>0?e.length/i.length*100:0,byBook:t}}catch(i){return console.error("\u83B7\u53D6\u5DF2\u638C\u63E1\u7EDF\u8BA1\u4FE1\u606F\u5931\u8D25:",i),{totalMastered:0,totalWords:0,masteredPercentage:0,byBook:{}}}}async batchMarkAsMastered(i){if(!this.isEnabled)return 0;let e=0;for(let t of i)await this.markWordAsMastered(t.bookPath,t.nodeId,t.word)&&e++;return e>0&&new D.Notice(d("notices.batch_marked_success").replace("{0}",e.toString())),e}async updateWordMasteredStatus(i,e,t){try{let r=await this.vocabularyManager.getWordDefinitionByNodeId(i,e);return r?(r.mastered=t,await this.vocabularyManager.updateWordDefinition(i,e,r),!0):(console.error(`\u672A\u627E\u5230\u5355\u8BCD\u5B9A\u4E49: ${e}`),!1)}catch(r){return console.error("\u66F4\u65B0\u5355\u8BCD\u638C\u63E1\u72B6\u6001\u5931\u8D25:",r),!1}}async syncMasteredStatus(i){var e;if(this.isEnabled)try{let t=await this.vocabularyManager.getWordDefinitionsByBook(i),r=(e=this.plugin.settings.masteredDetection)!=null?e:"group";for(let a of t)if(r==="group"){let s=await this.masteredGroupManager.isNodeInMasteredGroup(i,a.nodeId);a.mastered&&!s?await this.masteredGroupManager.moveToMasteredGroup(i,a.nodeId):!a.mastered&&s&&await this.masteredGroupManager.removeFromMasteredGroup(i,a.nodeId)}else a.mastered?await this.vocabularyManager.setNodeColor(i,a.nodeId,4):await this.vocabularyManager.setNodeColor(i,a.nodeId,void 0)}catch(t){console.error("\u540C\u6B65\u5DF2\u638C\u63E1\u72B6\u6001\u5931\u8D25:",t)}}};var J=require("@codemirror/state"),z=require("@codemirror/view"),ot=require("obsidian");var kt=300,nt=J.StateEffect.define(),De=class l{constructor(){this.highlighters=new Set}static getInstance(){return l.instance||(l.instance=new l),l.instance}register(i){this.highlighters.add(i)}unregister(i){this.highlighters.delete(i)}refreshAll(){this.highlighters.forEach(i=>{try{i.forceUpdate()}catch(e){console.error("\u5237\u65B0\u9AD8\u4EAE\u5668\u5931\u8D25:",e)}})}clear(){this.highlighters.clear()}},K=De.getInstance(),At=J.StateField.define({create(){return z.Decoration.none},update(l,i){for(let e of i.effects)if(e.is(nt))return z.Decoration.none;return l},provide:l=>z.EditorView.decorations.from(l)}),_e=class{constructor(i,e,t){this.patternDefinitions=[];this.debounceTimer=null;this.lastRanges=[];this.cachedMatches=new Map;this.editorView=i,this.vocabularyManager=e,this.shouldHighlightFile=t,this.wordTrie=new U,this.buildWordTrie(),this.decorations=this.buildDecorations(i),K.register(this)}buildWordTrie(){this.wordTrie.clear(),this.patternDefinitions=[];let i=this.vocabularyManager.getAllWordsForHighlight();for(let e of i){let t=this.vocabularyManager.getDefinition(e);t&&(t.isPattern?this.patternDefinitions.push(t):this.wordTrie.addWord(e,t))}}update(i){i.docChanged?(this.cachedMatches.clear(),this.decorations=this.buildDecorations(i.view)):(i.viewportChanged||i.focusChanged)&&this.debouncedUpdate(i.view)}forceUpdate(){this.buildWordTrie(),this.cachedMatches.clear(),this.decorations=this.buildDecorations(this.editorView),this.editorView.dispatch({effects:nt.of(!0)})}debouncedUpdate(i){this.debounceTimer&&window.clearTimeout(this.debounceTimer),this.debounceTimer=window.setTimeout(()=>{this.decorations=this.buildDecorations(i),this.debounceTimer=null},kt)}buildDecorations(i){var c;if(!this.vocabularyManager.getSettings().enableAutoHighlight)return z.Decoration.none;if(this.shouldHighlightFile){let u=i.state.field(ot.editorViewField);if((c=u==null?void 0:u.file)!=null&&c.path&&!this.shouldHighlightFile(u.file.path))return z.Decoration.none}let t=new J.RangeSetBuilder,r=[],a=i.visibleRanges,s=this.haveRangesChanged(a),o=a.map(u=>`${u.from}-${u.to}`).join(",");if(!s&&this.cachedMatches.has(o)){let u=this.cachedMatches.get(o);return this.applyDecorations(t,u),t.finish()}this.lastRanges=a.map(u=>({from:u.from,to:u.to}));for(let{from:u,to:h}of i.visibleRanges){let p=i.state.sliceDoc(u,h);r.push(...this.findWordMatches(p,u))}r.sort((u,h)=>u.from-h.from);let n=this.removeOverlaps(r);return this.cachedMatches.set(o,n),this.applyDecorations(t,n),t.finish()}applyDecorations(i,e){let t=this.vocabularyManager.getSettings().highlightStyle||"underline";e.forEach(r=>{let a=R(r.definition.color,"var(--color-base-60)");r.segments&&r.segments.length>0?r.segments.forEach(s=>{i.add(s.from,s.to,z.Decoration.mark({class:"hi-words-highlight",attributes:{"data-word":r.word,"data-definition":r.definition.definition,"data-color":a,"data-style":t,style:`--word-highlight-color: ${a};`}}))}):i.add(r.from,r.to,z.Decoration.mark({class:"hi-words-highlight",attributes:{"data-word":r.word,"data-definition":r.definition.definition,"data-color":a,"data-style":t,style:`--word-highlight-color: ${a};`}}))})}haveRangesChanged(i){if(this.lastRanges.length!==i.length)return!0;for(let e=0;e<i.length;e++)if(i[e].from!==this.lastRanges[e].from||i[e].to!==this.lastRanges[e].to)return!0;return!1}findWordMatches(i,e){let t=[];try{let r=this.wordTrie.findAllMatches(i);for(let a of r){let s=a.payload;s&&t.push({word:a.word,definition:s,from:e+a.from,to:e+a.to,color:R(s.color,"var(--color-accent)")})}for(let a of this.patternDefinitions)if(a.patternParts&&a.patternParts.length>0){let s=pe(i,a.patternParts,e);for(let o of s)t.push({word:a.word,definition:a,from:o.from,to:o.to,color:R(a.color,"var(--color-accent)"),matchedText:o.matchedText,segments:o.segments})}}catch(r){console.error("\u5728 findWordMatches \u4E2D\u53D1\u751F\u9519\u8BEF:",r)}return t}removeOverlaps(i){return i}destroy(){this.debounceTimer&&(window.clearTimeout(this.debounceTimer),this.debounceTimer=null),this.cachedMatches.clear(),this.wordTrie.clear(),K.unregister(this)}};function He(l,i){let e={decorations:r=>r.decorations};class t extends _e{constructor(a){super(a,l,i)}}return[At,z.ViewPlugin.fromClass(t,e)]}var H=require("obsidian");var $="hi-words-sidebar",X=class extends H.ItemView{constructor(e,t){super(e);this.currentWords=[];this.activeTab="learning";this.currentFile=null;this.firstLoadForFile=!1;this.updateTimer=null;this.measureQueue=[];this.measureScheduled=!1;this.delegatedBound=!1;this.lastInteractionTime=0;this.patternDefinitionsCache=[];this.normalDefinitionsCache=[];this.sectionTabStates=new Map;this.plugin=t}scheduleMeasure(){this.measureScheduled||(this.measureScheduled=!0,requestAnimationFrame(()=>{if(this.measureScheduled=!1,this.measureQueue.length===0)return;let e=140,r=this.measureQueue.splice(0,this.measureQueue.length).map(a=>({el:a,needsToggle:a.scrollHeight>e+4}));for(let{el:a,needsToggle:s}of r){if(!s){a.removeClass("collapsed");continue}let o=a.parentElement;if(!o)continue;let n=o.querySelector(".hi-words-expand-overlay");n||(n=o.createEl("div",{cls:"hi-words-expand-overlay"})),n.setText(a.hasClass("collapsed")?d("actions.expand"):d("actions.collapse"))}}))}getViewType(){return $}getDisplayText(){return d("sidebar.title")}getIcon(){return"book-open"}async onOpen(){let e=this.containerEl.children[1];e.empty(),e.addClass("hi-words-sidebar"),this.bindDelegatedHandlers(e),this.scheduleUpdate(0),this.registerEvent(this.app.workspace.on("file-open",t=>{this.scheduleUpdate(120)})),this.registerEvent(this.app.workspace.on("editor-change",()=>{this.scheduleUpdate(500)})),this.registerEvent(this.app.vault.on("modify",t=>{t instanceof H.TFile&&(t.extension==="canvas"||t.extension==="md")&&this.scheduleUpdate(250)})),this.registerEvent(this.app.workspace.on("hi-words:mastered-changed",()=>{this.scheduleUpdate(100)})),this.registerEvent(this.app.workspace.on("hi-words:settings-changed",()=>{this.scheduleUpdate(100)}))}async onClose(){}async updateView(){let e=this.app.workspace.getActiveFile();if(!e||e.extension!=="md"&&e.extension!=="pdf"){this.showEmptyState("\u8BF7\u6253\u5F00\u4E00\u4E2A Markdown \u6587\u6863\u6216 PDF \u6587\u4EF6");return}if(e===this.currentFile&&this.currentWords.length>0)return;let t=e!==this.currentFile;this.currentFile=e,t&&(this.firstLoadForFile=!0),await this.scanCurrentDocument(),this.renderWordList()}scheduleUpdate(e){Date.now()-this.lastInteractionTime<500||(this.updateTimer!==null&&(clearTimeout(this.updateTimer),this.updateTimer=null),this.updateTimer=window.setTimeout(()=>{this.updateTimer=null,this.updateView()},Math.max(0,e)))}async scanCurrentDocument(){if(this.currentFile)try{let e;this.currentFile.extension==="pdf"?e=await this.extractPDFText():e=await this.app.vault.cachedRead(this.currentFile),await this.updateDefinitionsCache();let t=[];for(let r of this.normalDefinitionsCache){let a=this.buildSearchRegex(r.word),s=a.exec(e),o=s?s.index:-1;if(o===-1&&r.aliases){for(let n of r.aliases)if(a=this.buildSearchRegex(n),s=a.exec(e),s){o=s.index;break}}o!==-1&&(t.some(n=>n.wordDef.nodeId===r.nodeId)||t.push({wordDef:r,position:o}))}for(let r of this.patternDefinitionsCache)if(r.patternParts&&r.patternParts.length>0){let a=pe(e,r.patternParts,0);if(a.length>0){let s=a[0].from;t.some(o=>o.wordDef.nodeId===r.nodeId)||t.push({wordDef:r,position:s})}}t.sort((r,a)=>r.position-a.position),this.currentWords=t.map(r=>r.wordDef)}catch(e){console.error("Failed to scan document:",e),this.currentWords=[]}}async updateDefinitionsCache(){let e=await this.plugin.vocabularyManager.getAllWordDefinitions();this.normalDefinitionsCache=[],this.patternDefinitionsCache=[];for(let t of e)t.isPattern&&t.patternParts&&t.patternParts.length>0?this.patternDefinitionsCache.push(t):this.normalDefinitionsCache.push(t)}async renderWordList(){let e=this.containerEl.querySelector(".hi-words-sidebar");if(!e)return;if(e.empty(),this.bindDelegatedHandlers(e),this.currentWords.length===0){this.showEmptyState(d("sidebar.empty_state"));return}let t=this.currentWords.filter(a=>!a.mastered),r=this.currentWords.filter(a=>a.mastered);this.firstLoadForFile&&this.activeTab==="learning"&&t.length===0&&r.length>0&&(this.activeTab="mastered"),this.firstLoadForFile=!1,this.createTabNavigation(e,t.length,r.length),await this.createTabContent(e,t,r)}createTabNavigation(e,t,r){let a=e.createEl("div",{cls:"hi-words-tab-nav"});a.createEl("div",{cls:`hi-words-tab ${this.activeTab==="learning"?"active":""}`,attr:{"data-tab":"learning"}}).createEl("span",{text:`${d("sidebar.vocabulary_book")} (${t})`}),this.plugin.settings.enableMasteredFeature&&a.createEl("div",{cls:`hi-words-tab ${this.activeTab==="mastered"?"active":""}`,attr:{"data-tab":"mastered"}}).createEl("span",{text:`${d("sidebar.mastered")} (${r})`})}async createTabContent(e,t,r){this.activeTab==="learning"?t.length>0?await this.createWordList(e,t,!1):this.createEmptyState(e,d("sidebar.no_learning_words")):this.activeTab==="mastered"&&(r.length>0?await this.createWordList(e,r,!0):this.createEmptyState(e,d("sidebar.no_mastered_words"))),this.scheduleMeasure()}switchTab(e){this.activeTab!==e&&(this.activeTab=e,this.renderWordList())}async createWordList(e,t,r){let a=e.createEl("div",{cls:"hi-words-word-list"});for(let s of t)await this.createWordCard(a,s,r)}async createWordCard(e,t,r=!1){var m,v;let a=e.createEl("div",{cls:"hi-words-word-card"});if(t.color){let _=R(t.color,"var(--color-base-60)");a.style.setProperty("--word-card-accent-color",_);let b=Be(_,.1);a.style.setProperty("--word-card-bg-color",b)}let s=a.createEl("div",{cls:"hi-words-word-title"});if(s.createEl("span",{text:t.word,cls:"hi-words-word-text"}).addEventListener("click",async _=>{_.stopPropagation(),await he(this.plugin,t.word)}),this.plugin.settings.enableMasteredFeature&&this.plugin.masteredService){let _=s.createEl("div",{cls:"hi-words-title-mastered-button",attr:{"aria-label":r?d("actions.unmark_mastered"):d("actions.mark_mastered")}});(0,H.setIcon)(_,r?"frown":"smile")}let n=(m=this.plugin.settings.enableSectionTabs)!=null?m:!0,c=t.sections,u=(v=this.sectionTabStates.get(t.word))!=null?v:0,h=c&&c.length>u?u:0;if(c&&c.length>1&&n){let _=a.createEl("div",{cls:"hi-words-card-tabs"});c.forEach((b,y)=>{_.createEl("div",{cls:`hi-words-card-tab ${y===h?"active":""}`,text:b.title,attr:{"data-section-index":y.toString()}})})}let p=c&&c.length>0&&n?c[h].content:t.definition;if(p&&p.trim()){let b=a.createEl("div",{cls:"hi-words-word-definition"}).createEl("div",{cls:"hi-words-collapsible collapsed"}),y=b.createEl("div",{cls:this.plugin.settings.blurDefinitions?"hi-words-definition blur-enabled":"hi-words-definition"});await this.renderSectionContent(y,p),this.measureQueue.push(b)}let g=a.createEl("div",{cls:"hi-words-word-source"}),f=this.getBookNameFromPath(t.source);g.createEl("span",{text:`${d("sidebar.source_prefix")}${f}`,cls:"hi-words-source-text"}),g.addEventListener("click",_=>{_.stopPropagation(),this.navigateToSource(t)}),r&&a.addClass("hi-words-word-card-mastered")}async renderSectionContent(e,t){var r,a;if(e.empty(),!t||t.trim()===""){e.textContent=d("sidebar.no_definition");return}try{let s=this.app.workspace.getMostRecentLeaf(),o=(s==null?void 0:s.view)instanceof H.MarkdownView?s.view:null,n=o&&((r=o.file)==null?void 0:r.path)||((a=this.app.workspace.getActiveFile())==null?void 0:a.path)||"";await H.MarkdownRenderer.render(this.plugin.app,t,e,n,this),requestAnimationFrame(()=>this.bindInternalLinksAndTags(e,n,e))}catch(s){console.error("Markdown \u6E32\u67D3\u5931\u8D25:",s),e.textContent=t}}createEmptyState(e,t){e.createEl("div",{cls:"hi-words-empty-state"}).createEl("div",{text:t,cls:"hi-words-empty-text"})}showEmptyState(e){let t=this.containerEl.querySelector(".hi-words-sidebar");if(!t)return;t.empty(),t.createEl("div",{cls:"hi-words-empty-state"}).createEl("div",{text:e,cls:"hi-words-empty-text"})}bindDelegatedHandlers(e){this.delegatedBound||(e.addEventListener("mousedown",t=>{var u,h,p;let r=t.target;if(!r)return;let a=r.closest(".hi-words-tab");if(a&&e.contains(a)){t.preventDefault(),t.stopPropagation();let g=a.getAttr("data-tab")||"learning";g!==this.activeTab&&this.switchTab(g);return}let s=r.closest(".hi-words-card-tab");if(s&&e.contains(s)){t.preventDefault(),t.stopPropagation(),this.lastInteractionTime=Date.now(),this.updateTimer!==null&&(clearTimeout(this.updateTimer),this.updateTimer=null);let g=parseInt(s.getAttr("data-section-index")||"0",10),f=s.closest(".hi-words-word-card"),m=f==null?void 0:f.querySelector(".hi-words-word-text"),v=(u=m==null?void 0:m.textContent)==null?void 0:u.trim();if(!f||!v)return;let _=this.currentWords.find(y=>y.word===v);if(!(_!=null&&_.sections)||g>=_.sections.length)return;this.sectionTabStates.set(v,g),f.querySelectorAll(".hi-words-card-tab").forEach(y=>y.removeClass("active")),s.addClass("active");let b=f.querySelector(".hi-words-definition");b&&this.renderSectionContent(b,_.sections[g].content);return}let o=r.closest(".hi-words-expand-overlay");if(o&&e.contains(o)){t.preventDefault(),t.stopPropagation(),this.lastInteractionTime=Date.now(),this.updateTimer!==null&&(clearTimeout(this.updateTimer),this.updateTimer=null);let g=o.parentElement,m=(g==null?void 0:g.querySelector(".hi-words-collapsible"))||g;if(m){let v=!m.hasClass("collapsed");m.toggleClass("collapsed",v),o.setText(v?d("actions.expand"):d("actions.collapse"))}return}let n=r.closest(".hi-words-title-mastered-button");if(n&&e.contains(n)){t.preventDefault(),t.stopPropagation();let g=n.closest(".hi-words-word-card"),f=!!(g!=null&&g.hasClass("hi-words-word-card-mastered")),m=g==null?void 0:g.querySelector(".hi-words-word-text"),v=(h=m==null?void 0:m.textContent)==null?void 0:h.trim();if(v&&this.plugin.settings.enableMasteredFeature&&this.plugin.masteredService){let _=this.currentWords.find(b=>b.word===v);_&&(async()=>{try{f?await this.plugin.masteredService.unmarkWordAsMastered(_.source,_.nodeId,_.word):await this.plugin.masteredService.markWordAsMastered(_.source,_.nodeId,_.word),setTimeout(()=>this.updateView(),100)}catch(b){console.error("\u5207\u6362\u5DF2\u638C\u63E1\u72B6\u6001\u5931\u8D25:",b)}})()}return}let c=r.closest(".hi-words-word-source");if(c&&e.contains(c)){t.preventDefault(),t.stopPropagation();let g=c.closest(".hi-words-word-card"),f=g==null?void 0:g.querySelector(".hi-words-word-text"),m=(p=f==null?void 0:f.textContent)==null?void 0:p.trim();if(m){let v=this.currentWords.find(_=>_.word===m);v&&this.navigateToSource(v)}return}},{capture:!0}),this.delegatedBound=!0)}getBookNameFromPath(e){var r;let t=this.plugin.settings.vocabularyBooks.find(a=>a.path===e);return t?t.name:((r=e.split("/").pop())==null?void 0:r.replace(".canvas",""))||"\u672A\u77E5"}escapeRegExp(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}async extractPDFText(){try{await new Promise(r=>setTimeout(r,500));let e=document.querySelectorAll(".textLayer"),t="";return e.forEach(r=>{r.closest(".pdf-container, .mod-pdf")&&(r.querySelectorAll('span[role="presentation"]').forEach(o=>{let n=o.textContent||"";n.trim()&&(t+=n+" ")}),t+=`
`)}),t.trim()||document.querySelectorAll(".pdf-container, .mod-pdf").forEach(a=>{let s=a.textContent||"";s.trim()&&(t+=s+`
`)}),t.trim()}catch(e){return console.error("PDF \u6587\u672C\u63D0\u53D6\u5931\u8D25:",e),""}}buildSearchRegex(e){let t=this.escapeRegExp(e),r=/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]/u.test(e),a=r?`${t}`:`\\b${t}\\b`,s=r?"giu":"gi";return new RegExp(a,s)}bindInternalLinksAndTags(e,t,r){e.querySelectorAll("a.internal-link").forEach(a=>{var n;let s=a,o=(s.getAttribute("href")||((n=s.dataset)==null?void 0:n.href)||"").trim();o&&(s.addEventListener("mouseover",c=>{this.app.workspace.trigger("hover-link",{event:c,source:"hi-words",hoverParent:r,target:s,linktext:o,sourcePath:t})}),s.addEventListener("click",c=>{c.preventDefault(),c.stopPropagation(),this.app.workspace.openLinkText(o,t)}))}),e.querySelectorAll("a.tag").forEach(a=>{let s=a,o=(s.getAttribute("href")||s.textContent||"").trim();o&&s.addEventListener("click",n=>{n.preventDefault(),n.stopPropagation(),this.openOrUpdateSearch(o.startsWith("#")?o:`#${o}`)})})}openOrUpdateSearch(e){var t;try{let r=this.app.workspace.getLeavesOfType("search");if(r.length>0){let a=r[0].view;(t=a.setQuery)==null||t.call(a,e),this.app.workspace.revealLeaf(r[0]);return}new H.Notice(d("notices.enable_search_plugin")||"\u8BF7\u5148\u542F\u7528\u6838\u5FC3\u641C\u7D22\u63D2\u4EF6")}catch(r){console.error("\u6253\u5F00\u641C\u7D22\u5931\u8D25:",r)}}async navigateToSource(e){try{let t=this.app.vault.getAbstractFileByPath(e.source);t instanceof H.TFile&&(t.extension==="canvas"?await this.app.workspace.openLinkText(t.path,""):(await this.app.workspace.openLinkText(t.path,""),setTimeout(()=>{var a;let r=this.app.workspace.getActiveViewOfType(H.MarkdownView);if(r&&((a=r.file)==null?void 0:a.path)===t.path){let s=r.editor,n=s.getValue().toLowerCase().indexOf(e.word.toLowerCase());if(n!==-1){let c=s.offsetToPos(n);s.setCursor(c),s.scrollIntoView({from:c,to:c},!0)}}},100)))}catch(t){console.error("\u5BFC\u822A\u5230\u6E90\u6587\u4EF6\u5931\u8D25:",t)}}refresh(){this.currentFile=null,this.scheduleUpdate(0)}};var I=require("obsidian");var Y=class Y extends I.Component{constructor(e){super();this.activeTooltip=null;this.vocabularyManager=null;this.masteredService=null;this.eventHandlers={};this.currentTargetEl=null;this.hoverIntentTimer=null;this.lastShowTs=0;this.currentTooltipComponent=null;this.app=e.app,this.plugin=e,this.eventHandlers={mouseover:t=>this.handleMouseOver(t),mouseout:t=>this.handleMouseOut(t),scroll:(()=>this.removeTooltip()).bind(this),resize:(()=>this.removeTooltip()).bind(this)},this.registerEvents()}bindInternalLinksAndTags(e,t,r){e.querySelectorAll("a.internal-link").forEach(a=>{var n;let s=a,o=(s.getAttribute("href")||((n=s.dataset)==null?void 0:n.href)||"").trim();o&&(s.addEventListener("mouseover",c=>{this.app.workspace.trigger("hover-link",{event:c,source:"hi-words",hoverParent:r,target:s,linktext:o,sourcePath:t})}),s.addEventListener("click",c=>{c.preventDefault(),c.stopPropagation(),this.app.workspace.openLinkText(o,t),this.removeTooltip()}))}),e.querySelectorAll("a.tag").forEach(a=>{let s=a,o=(s.getAttribute("href")||s.textContent||"").trim();o&&s.addEventListener("click",n=>{n.preventDefault(),n.stopPropagation(),this.openOrUpdateSearch(o.startsWith("#")?o:`#${o}`),this.removeTooltip()})})}openOrUpdateSearch(e){var t;try{let r=this.app.workspace.getLeavesOfType("search");if(r.length>0){let a=r[0].view;(t=a.setQuery)==null||t.call(a,e),this.app.workspace.revealLeaf(r[0]);return}new I.Notice(d("notices.enable_search_plugin")||"\u8BF7\u5148\u542F\u7528\u6838\u5FC3\u641C\u7D22\u63D2\u4EF6")}catch(r){console.error("\u6253\u5F00\u641C\u7D22\u5931\u8D25:",r)}}setVocabularyManager(e){this.vocabularyManager=e}setMasteredService(e){this.masteredService=e}registerEvents(){this.registerDomEvent(document,"mouseover",this.eventHandlers.mouseover),this.registerDomEvent(document,"mouseout",this.eventHandlers.mouseout),this.registerDomEvent(window,"scroll",this.eventHandlers.scroll,{passive:!0}),this.registerDomEvent(window,"resize",this.eventHandlers.resize)}handleMouseOut(e){clearTimeout(this.tooltipHideTimeout),this.hoverIntentTimer!==null&&(clearTimeout(this.hoverIntentTimer),this.hoverIntentTimer=null);let t=e.target,r=e.relatedTarget;r&&this.activeTooltip&&(r===this.activeTooltip||this.activeTooltip.contains(r))||t&&r&&t.classList.contains("hi-words-highlight")&&r.classList.contains("hi-words-highlight")||t&&this.activeTooltip&&this.activeTooltip.contains(t)&&r&&r.classList.contains("hi-words-highlight")||(this.tooltipHideTimeout=window.setTimeout(()=>{this.removeTooltip()},80))}async renderSectionContent(e,t,r){var a,s;if(e.empty(),!t||t.trim()===""){e.textContent=d("sidebar.no_definition");return}try{let o=this.app.workspace.getActiveViewOfType(I.MarkdownView),n=o&&((a=o.file)==null?void 0:a.path)||((s=this.app.workspace.getActiveFile())==null?void 0:s.path)||"";this.currentTooltipComponent&&(this.removeChild(this.currentTooltipComponent),this.currentTooltipComponent=null);let c=new I.Component;this.addChild(c),this.currentTooltipComponent=c,await I.MarkdownRenderer.render(this.app,t,e,n,c),requestAnimationFrame(()=>this.bindInternalLinksAndTags(e,n,r))}catch(o){console.error("Markdown \u6E32\u67D3\u5931\u8D25:",o),e.textContent=t}}handleMouseOver(e){var a;if(!this.plugin.settings.showDefinitionOnHover)return;let t=e.target,r=(a=t==null?void 0:t.closest)==null?void 0:a.call(t,".hi-words-highlight");if(r){if(this.currentTargetEl===r&&this.activeTooltip)return;this.hoverIntentTimer!==null&&(clearTimeout(this.hoverIntentTimer),this.hoverIntentTimer=null),this.currentTargetEl=r;let s=r.getAttribute("data-word"),o=r.getAttribute("data-definition");if(!s||!o)return;this.hoverIntentTimer=window.setTimeout(()=>{this.hoverIntentTimer=null;let n=Date.now();n-this.lastShowTs<Y.MIN_INTERVAL_MS||(this.lastShowTs=n,this.createTooltip(r,s,o))},Y.SHOW_DELAY_MS)}}async createTooltip(e,t,r){var g,f;this.removeTooltip();let a=document.createElement("div");a.className="hi-words-tooltip";let s=document.createElement("div");s.className="hi-words-tooltip-title-container";let o=document.createElement("div");o.className="hi-words-tooltip-title",o.textContent=t,s.appendChild(o),o.title="\u70B9\u51FB\u53D1\u97F3",o.addEventListener("click",async m=>{m.stopPropagation(),await he(this.plugin,t)}),a.appendChild(s);let n=(g=this.vocabularyManager)==null?void 0:g.getDefinition(t),c=n==null?void 0:n.sections,u=(f=this.plugin.settings.enableSectionTabs)!=null?f:!0,h;if(c&&c.length>1&&u){let m=document.createElement("div");m.className="hi-words-tooltip-tabs",c.forEach((v,_)=>{let b=document.createElement("div");b.className="hi-words-tooltip-tab",_===0&&b.classList.add("active"),b.textContent=v.title,b.addEventListener("click",()=>{m.querySelectorAll(".hi-words-tooltip-tab").forEach(y=>y.classList.remove("active")),b.classList.add("active"),this.renderSectionContent(h,c[_].content,a)}),m.appendChild(b)}),a.appendChild(m)}h=document.createElement("div"),h.className="hi-words-tooltip-content",this.plugin.settings.blurDefinitions?h.classList.add("hi-words-definition","blur-enabled"):h.classList.add("hi-words-definition"),a.appendChild(h);let p=c&&c.length>0&&u?c[0].content:r;if(!p||p.trim()===""?h.textContent=d("sidebar.no_definition"):await this.renderSectionContent(h,p,a),this.vocabularyManager){let m=this.vocabularyManager.getDefinition(t);if(m&&m.source){if(this.masteredService&&this.masteredService.isEnabled){let y=document.createElement("div");y.className="hi-words-tooltip-title-mastered-button",(0,I.setIcon)(y,m.mastered?"frown":"smile"),y.addEventListener("click",async T=>{T.stopPropagation();try{m.mastered?await this.masteredService.unmarkWordAsMastered(m.source,m.nodeId,m.word):await this.masteredService.markWordAsMastered(m.source,m.nodeId,m.word),this.removeTooltip()}catch(P){console.error("\u5207\u6362\u5DF2\u638C\u63E1\u72B6\u6001\u5931\u8D25:",P)}}),s.appendChild(y)}let v=document.createElement("div");v.className="hi-words-tooltip-source";let _=m.source.split("/").pop()||"",b=_.endsWith(".canvas")?_.slice(0,-7):_;v.textContent=`${d("sidebar.source_prefix")}${b}`,v.addEventListener("click",y=>{y.stopPropagation(),this.navigateToSource(m),this.removeTooltip()}),a.appendChild(v)}}document.body.appendChild(a),requestAnimationFrame(()=>{let m=e.getBoundingClientRect(),v=window.pageYOffset||document.documentElement.scrollTop,_=window.pageXOffset||document.documentElement.scrollLeft,b=window.innerWidth,y=m.left+_,T=m.bottom+v+5;a.style.left=y+"px",a.style.top=T+"px";let P=a.getBoundingClientRect();if(P.right>b-10){let F=P.right-b+10;a.style.left=y-F+"px"}}),a.addEventListener("mouseleave",m=>{this.removeTooltip()}),this.activeTooltip=a}removeTooltip(){clearTimeout(this.tooltipHideTimeout),this.activeTooltip&&this.activeTooltip.parentNode&&(this.activeTooltip.parentNode.removeChild(this.activeTooltip),this.activeTooltip=null),this.currentTooltipComponent&&(this.removeChild(this.currentTooltipComponent),this.currentTooltipComponent=null),this.currentTargetEl=null}async navigateToSource(e){try{let t=this.app.vault.getAbstractFileByPath(e.source);t instanceof I.TFile&&(t.extension==="canvas"?await this.app.workspace.openLinkText(t.path,""):(await this.app.workspace.openLinkText(t.path,""),setTimeout(()=>{var a;let r=this.app.workspace.getActiveViewOfType(I.MarkdownView);if(r&&((a=r.file)==null?void 0:a.path)===t.path){let s=r.editor,n=s.getValue().toLowerCase().indexOf(e.word.toLowerCase());if(n!==-1){let c=s.offsetToPos(n);s.setCursor(c),s.scrollIntoView({from:c,to:c},!0)}}},100)))}catch(t){console.error("\u5BFC\u822A\u5230\u6E90\u6587\u4EF6\u5931\u8D25:",t)}}onunload(){this.removeTooltip()}};Y.SHOW_DELAY_MS=120,Y.MIN_INTERVAL_MS=150;var le=Y;var S=require("obsidian");var lt=require("obsidian");var G=class{constructor(i){this.cache=new Map;this.CACHE_TTL=1440*60*1e3;this.MAX_RETRIES=3;this.API_ADAPTERS={openai:{buildRequest:(i,e)=>({model:i,messages:[{role:"user",content:e}],temperature:.3,max_tokens:500}),buildHeaders:i=>({Authorization:`Bearer ${i}`}),extractResponse:i=>{var e,t,r;return(r=(t=(e=i==null?void 0:i.choices)==null?void 0:e[0])==null?void 0:t.message)==null?void 0:r.content}},claude:{buildRequest:(i,e)=>({model:i,messages:[{role:"user",content:e}],max_tokens:1024}),buildHeaders:i=>({"x-api-key":i,"anthropic-version":"2023-06-01"}),extractResponse:i=>{var e,t;return(t=(e=i==null?void 0:i.content)==null?void 0:e[0])==null?void 0:t.text}},gemini:{buildRequest:(i,e)=>({contents:[{parts:[{text:e}]}]}),buildHeaders:()=>({}),extractResponse:i=>{var e,t,r,a,s;return(s=(a=(r=(t=(e=i==null?void 0:i.candidates)==null?void 0:e[0])==null?void 0:t.content)==null?void 0:r.parts)==null?void 0:a[0])==null?void 0:s.text},buildUrl:(i,e,t)=>{let r=i;return r.includes(":generateContent")||(r=`${r.replace(/\/$/,"")}/models/${e}:generateContent`),`${r}?key=${t}`}}};this.config=i}detectAPIType(){let i=this.config.apiUrl.toLowerCase();return i.includes("anthropic")?"claude":i.includes("googleapis")||i.includes("generativelanguage")?"gemini":"openai"}validateConfig(){var i,e,t,r;if(!((i=this.config.apiUrl)!=null&&i.trim()))return{isValid:!1,error:d("ai_errors.api_url_required")};if(!((e=this.config.apiKey)!=null&&e.trim()))return{isValid:!1,error:d("ai_errors.api_key_not_configured")};if(!((t=this.config.model)!=null&&t.trim()))return{isValid:!1,error:d("ai_errors.model_required")};if(!((r=this.config.prompt)!=null&&r.trim()))return{isValid:!1,error:d("ai_errors.prompt_required")};try{new URL(this.config.apiUrl)}catch(a){return{isValid:!1,error:d("ai_errors.invalid_api_url")}}return this.config.prompt.includes("{{word}}")?{isValid:!0}:{isValid:!1,error:d("ai_errors.prompt_missing_word_placeholder")}}replacePlaceholders(i,e){return this.config.prompt.replace(/\{\{word\}\}/g,i).replace(/\{\{sentence\}\}/g,e||"")}isObject(i){return i&&typeof i=="object"&&!Array.isArray(i)}deepMerge(i,e){let t={...i};return this.isObject(i)&&this.isObject(e)&&Object.keys(e).forEach(r=>{this.isObject(e[r])?r in i?t[r]=this.deepMerge(i[r],e[r]):Object.assign(t,{[r]:e[r]}):Object.assign(t,{[r]:e[r]})}),t}mergeExtraParams(i){var t;let e=(t=this.config.extraParams)==null?void 0:t.trim();if(!e||e==="{}"||e==="")return i;try{let r=JSON.parse(e);return this.deepMerge(i,r)}catch(r){return console.warn("Invalid JSON in extraParams, ignoring:",r),i}}async fetchDefinition(i,e){if(!(i!=null&&i.trim()))throw new Error(d("ai_errors.word_empty"));let t=this.validateConfig();if(!t.isValid)throw new Error(t.error);let r=i.trim(),a=`${r}:${e||""}`,s=this.cache.get(a);if(s&&Date.now()-s.timestamp<this.CACHE_TTL)return s.content;try{let o=this.detectAPIType(),n=this.API_ADAPTERS[o],c=this.replacePlaceholders(r,e),u=n.buildUrl?n.buildUrl(this.config.apiUrl,this.config.model,this.config.apiKey):this.config.apiUrl,h=n.buildHeaders(this.config.apiKey),p=n.buildRequest(this.config.model,c);p=this.mergeExtraParams(p);let g=await this.makeRequestWithRetry(u,h,p),f=n.extractResponse(g);if(!f)throw new Error(d("ai_errors.invalid_response"));let m=f.trim();return this.cache.set(a,{content:m,timestamp:Date.now()}),m}catch(o){throw this.handleError(o)}}async makeRequestWithRetry(i,e,t){let r;for(let a=0;a<this.MAX_RETRIES;a++)try{let s=await(0,lt.requestUrl)({url:i,method:"POST",headers:{"Content-Type":"application/json",...e},body:JSON.stringify(t)});if(s.status>=400)throw new Error(`HTTP ${s.status}: ${s.text}`);return s.json}catch(s){r=s;let o=String(s);if(o.includes("400")||o.includes("401")||o.includes("403")||o.includes("404"))break;if(a<this.MAX_RETRIES-1){let n=1e3*Math.pow(2,a);await new Promise(c=>setTimeout(c,n))}}throw r}handleError(i){let e=(i==null?void 0:i.message)||String(i);return e.includes("401")||e.includes("403")?new Error(d("ai_errors.api_key_invalid")):e.includes("429")?new Error(d("ai_errors.rate_limit")):e.includes("500")||e.includes("502")||e.includes("503")||e.includes("504")?new Error(d("ai_errors.server_error")):e.includes("network")||e.includes("timeout")?new Error(d("ai_errors.network_error")):(console.error("AI Dictionary Error:",i),new Error(`${d("ai_errors.request_failed")}: ${e}`))}clearCache(){this.cache.clear()}getCacheStats(){let i=null;for(let e of this.cache.values())(i===null||e.timestamp<i)&&(i=e.timestamp);return{size:this.cache.size,oldestEntry:i}}};var B=class B extends S.Modal{constructor(i,e,t,r="",a=!1,s=""){super(i),this.plugin=e,this.word=t,this.sentence=r,this.isEditMode=a,this.plugin.settings.aiDictionary?this.dictionaryService=new G(this.plugin.settings.aiDictionary):this.dictionaryService=new G({apiUrl:"",apiKey:"",model:"",prompt:""}),this.prefilledDefinition=s,a?this.definition=this.plugin.vocabularyManager.getDefinition(t):this.definition=null}onOpen(){let{contentEl:i}=this;i.empty();let e=null;if(!this.isEditMode){let E=i.createDiv({cls:"hiwords-form-item"});E.createEl("label",{text:d("modals.word_label"),cls:"hiwords-form-item-label"}),e=E.createEl("input",{type:"text",placeholder:d("modals.word_placeholder"),cls:"setting-item-input"}),e.value=this.word,this.word||setTimeout(()=>e==null?void 0:e.focus(),50)}let t=i.createDiv({cls:"hiwords-form-item"});t.createEl("label",{text:d("modals.book_label"),cls:"hiwords-form-item-label"});let r=t.createEl("select",{cls:"dropdown"});r.createEl("option",{text:d("modals.select_book"),value:""});let a=this.plugin.settings.vocabularyBooks.filter(E=>E.enabled),s=!1;a.forEach((E,M)=>{let W=r.createEl("option",{text:E.name,value:E.path});(this.isEditMode&&this.definition&&this.definition.source===E.path||!this.isEditMode&&!s&&(B.lastSelectedBookPath&&E.path===B.lastSelectedBookPath||!B.lastSelectedBookPath&&M===0))&&(W.selected=!0,s=!0)}),this.isEditMode&&this.definition&&(r.disabled=!0);let o=i.createDiv({cls:"hiwords-form-item"});o.createEl("label",{text:d("modals.color_label"),cls:"hiwords-form-item-label"});let n=o.createEl("select",{cls:"dropdown setting-item-select"}),c=n.createEl("option",{text:d("modals.color_gray"),value:""});!this.isEditMode&&B.lastSelectedColorValue===""&&(c.selected=!0),[{name:d("modals.color_red"),value:"1"},{name:d("modals.color_orange"),value:"2"},{name:d("modals.color_yellow"),value:"3"},{name:d("modals.color_green"),value:"4"},{name:d("modals.color_blue"),value:"5"},{name:d("modals.color_purple"),value:"6"}].forEach(E=>{let M=n.createEl("option",{text:E.name,value:E.value});(this.isEditMode&&this.definition&&this.definition.color===E.value||!this.isEditMode&&B.lastSelectedColorValue===E.value)&&(M.selected=!0)});let h=i.createDiv({cls:"hiwords-form-item"});h.createEl("label",{text:d("modals.aliases_label"),cls:"hiwords-form-item-label"});let p=h.createEl("input",{type:"text",placeholder:d("modals.aliases_placeholder"),cls:"setting-item-input word-aliases-input"});this.isEditMode&&this.definition&&this.definition.aliases&&this.definition.aliases.length>0&&(p.value=this.definition.aliases.join(", "));let g=i.createDiv({cls:"hiwords-form-item"}),f=g.createDiv({cls:"hiwords-definition-label-container"});f.createEl("label",{text:d("modals.definition_label"),cls:"hiwords-form-item-label"});let m=f.createDiv({cls:"hiwords-auto-fill-btn"}),v=m.createDiv({cls:"hiwords-auto-fill-icon"});(0,S.setIcon)(v,"sparkles"),m.setAttribute("aria-label",d("modals.auto_fill_definition")),m.addEventListener("click",async()=>{var M,W,C;let E=this.isEditMode?this.word:(e==null?void 0:e.value.trim())||"";if(!E){new S.Notice(d("notices.enter_word_first"));return}if(!((M=this.plugin.settings.aiDictionary)!=null&&M.apiUrl)||!((W=this.plugin.settings.aiDictionary)!=null&&W.apiKey)||!((C=this.plugin.settings.aiDictionary)!=null&&C.model)){new S.Notice(d("ai_errors.api_key_not_configured"));return}m.addClass("hiwords-loading"),v.empty(),(0,S.setIcon)(v,"loader");try{let A=await new G(this.plugin.settings.aiDictionary).fetchDefinition(E,this.sentence);_.value=A,new S.Notice(d("notices.definition_fetched"))}catch(x){console.error("Failed to fetch definition:",x);let A=x instanceof Error?x.message:d("notices.definition_fetch_failed");new S.Notice(A)}finally{m.removeClass("hiwords-loading"),v.empty(),(0,S.setIcon)(v,"sparkles")}});let _=g.createEl("textarea",{placeholder:d("modals.definition_placeholder"),cls:"setting-item-input hiwords-word-definition-input"});_.rows=5,this.isEditMode&&this.definition?_.value=this.definition.rawDefinition||this.definition.definition:this.prefilledDefinition&&(_.value=this.prefilledDefinition),setTimeout(()=>{(!this.isEditMode&&this.word||this.isEditMode&&this.definition)&&_.focus()},50);let b=i.createDiv({cls:"hiwords-modal-button-container"}),y=b.createDiv({cls:"hiwords-button-group-left"});if(this.isEditMode&&this.definition){let E=y.createEl("button",{cls:"delete-word-button"});(0,S.setIcon)(E,"trash"),E.onclick=async()=>{if(!await this.showDeleteConfirmation())return;let W=new S.Notice(d("notices.deleting_word"),0);try{let C=await this.plugin.vocabularyManager.deleteWordFromCanvas(this.definition.source,this.definition.nodeId);W.hide(),C?(new S.Notice(d("notices.word_deleted")),this.plugin.refreshHighlighter(),this.close()):new S.Notice(d("notices.delete_word_failed"))}catch(C){W.hide(),console.error("\u5220\u9664\u8BCD\u6C47\u65F6\u53D1\u751F\u9519\u8BEF:",C),new S.Notice(d("notices.error_deleting_word"))}}}let T=b.createDiv({cls:"hiwords-button-group-right"}),P=T.createEl("button",{text:d("modals.cancel_button")});P.onclick=()=>this.close();let F=this.isEditMode?"modals.save_button":"modals.add_button",V=T.createEl("button",{text:d(F),cls:"mod-cta"});V.onclick=async()=>{let E=this.word;if(!this.isEditMode&&e&&(E=e.value.trim(),!E)){new S.Notice(d("notices.word_required")),e.focus();return}let M=r.value,W=_.value,C=n.value?parseInt(n.value):void 0,x=p.value.trim(),A;if(x&&(A=x.split(",").map(L=>L.trim().toLowerCase()),A=A.filter(L=>L.length>0),A.length===0&&(A=void 0)),!M){new S.Notice(d("notices.select_book_required"));return}let O=this.isEditMode?new S.Notice(d("notices.updating_word"),0):new S.Notice(d("notices.adding_word"),0);try{let L=!1;if(this.isEditMode&&this.definition)if(L=await this.plugin.vocabularyManager.updateWordInCanvas(this.definition.source,this.definition.nodeId,E,W,C,A),O.hide(),L){let ee=d("notices.word_updated_success").replace("{0}",E);new S.Notice(ee),this.plugin.refreshHighlighter(),this.close()}else new S.Notice(d("notices.update_word_failed"));else if(L=await this.plugin.vocabularyManager.addWordToCanvas(M,E,W,C,A),O.hide(),L){B.lastSelectedBookPath=M,B.lastSelectedColorValue=n.value||"";let ee=d("notices.word_added_success").replace("{0}",E);new S.Notice(ee),this.plugin.refreshHighlighter(),this.close()}else new S.Notice(d("notices.add_word_failed"))}catch(L){O.hide(),console.error("Failed to add/update word:",L),new S.Notice(d("notices.error_processing_word"))}}}async showDeleteConfirmation(){var i;return window.confirm(d("modals.delete_confirmation").replace("{0}",((i=this.definition)==null?void 0:i.word)||this.word))}onClose(){let{contentEl:i}=this;i.empty()}};B.lastSelectedBookPath=null,B.lastSelectedColorValue=null;var Q=B;var w=require("obsidian");var de=class extends w.PluginSettingTab{constructor(e,t){super(e,t);this.isTestingAIConnection=!1;this.plugin=t}addHighlightScopeSettings(){let{containerEl:e}=this;new w.Setting(e).setName(d("settings.highlight_mode")).setDesc(d("settings.highlight_mode_desc")).addDropdown(s=>s.addOption("all",d("settings.mode_all")).addOption("exclude",d("settings.mode_exclude")).addOption("include",d("settings.mode_include")).setValue(this.plugin.settings.highlightMode||"all").onChange(async o=>{this.plugin.settings.highlightMode=o,await this.plugin.saveSettings(),this.plugin.refreshHighlighter()}));let t=new w.Setting(e).setName(d("settings.highlight_paths")).setDesc(d("settings.highlight_paths_desc"));t.settingEl.addClass("hi-words-setting-textarea"),t.controlEl.empty();let a=t.controlEl.createDiv({cls:"hi-words-textarea-container"}).createEl("textarea");a.placeholder=d("settings.highlight_paths_placeholder")||"e.g.: Archive, Templates, Private/Diary",a.value=this.plugin.settings.highlightPaths||"",a.rows=3,a.addEventListener("blur",async()=>{this.plugin.settings.highlightPaths=a.value,await this.plugin.saveSettings(),this.plugin.refreshHighlighter()})}addFileNodeParseModeSettings(){let{containerEl:e}=this;new w.Setting(e).setName(d("settings.file_node_parse_mode")).setDesc(d("settings.file_node_parse_mode_desc")).addDropdown(t=>t.addOption("filename-with-alias",d("settings.mode_filename_with_alias")).addOption("filename",d("settings.mode_filename")).addOption("content",d("settings.mode_content")).setValue(this.plugin.settings.fileNodeParseMode||"filename-with-alias").onChange(async r=>{this.plugin.settings.fileNodeParseMode=r,await this.plugin.saveSettings(),new w.Notice("\u8BF7\u91CD\u65B0\u52A0\u8F7D\u63D2\u4EF6\u4EE5\u5E94\u7528\u65B0\u7684\u6587\u4EF6\u8282\u70B9\u89E3\u6790\u6A21\u5F0F")}))}addSelectionTranslateSection(){let{containerEl:e}=this;new w.Setting(e).setName(d("settings.selection_translate")).setHeading(),new w.Setting(e).setName(d("settings.enable_selection_translate")).setDesc(d("settings.enable_selection_translate_desc")).addToggle(t=>{var r;return t.setValue((r=this.plugin.settings.enableSelectionTranslate)!=null?r:!1).onChange(async a=>{this.plugin.settings.enableSelectionTranslate=a,await this.plugin.saveSettings(),this.display()})}),this.plugin.settings.enableSelectionTranslate&&(new w.Setting(e).setName(d("settings.translate_target_lang")).setDesc(d("settings.translate_target_lang_desc")).addText(t=>t.setPlaceholder("zh-CN").setValue(this.plugin.settings.translateTargetLang||"zh-CN").onChange(async r=>{this.plugin.settings.translateTargetLang=r.trim(),await this.plugin.saveSettings()})),this.addAITranslateSettings())}addAITranslateSettings(){let{containerEl:e}=this,t=new w.Setting(e).setName(d("settings.translate_prompt")).setDesc(d("settings.translate_prompt_desc"));t.settingEl.addClass("hi-words-setting-textarea"),t.controlEl.empty();let a=t.controlEl.createDiv({cls:"hi-words-textarea-container"}).createEl("textarea");a.rows=3,a.value=this.plugin.settings.translatePrompt||"",a.placeholder=`Translate the following text to {{to}}. Only return the translation.
Text: {{text}}`,a.addEventListener("blur",async()=>{this.plugin.settings.translatePrompt=a.value,await this.plugin.saveSettings()})}addAutoLayoutSettings(){let{containerEl:e}=this;new w.Setting(e).setName(d("settings.auto_layout")).setHeading(),new w.Setting(e).setName(d("settings.enable_auto_layout")).setDesc(d("settings.enable_auto_layout_desc")).addToggle(t=>{var r;return t.setValue((r=this.plugin.settings.autoLayoutEnabled)!=null?r:!0).onChange(async a=>{this.plugin.settings.autoLayoutEnabled=a,await this.plugin.saveSettings()})}),new w.Setting(e).setName(d("settings.card_size")||"Card size").setDesc(d("settings.card_size_desc")||"Default width and height for canvas cards").addText(t=>{var r;return t.setPlaceholder("260").setValue(String((r=this.plugin.settings.cardWidth)!=null?r:260)).onChange(async a=>{let s=parseInt(a);!isNaN(s)&&s>0&&(this.plugin.settings.cardWidth=s,await this.plugin.saveSettings())})}).addText(t=>{var r;return t.setPlaceholder("120").setValue(String((r=this.plugin.settings.cardHeight)!=null?r:120)).onChange(async a=>{let s=parseInt(a);!isNaN(s)&&s>0&&(this.plugin.settings.cardHeight=s,await this.plugin.saveSettings())})})}display(){let{containerEl:e}=this;e.empty(),this.addVocabularyBooksSection(),this.addFileNodeParseModeSettings(),this.addHighlightingSection(),this.addLearningFeaturesSection(),this.addSelectionTranslateSection(),this.addAutoLayoutSettings()}addHighlightingSection(){let{containerEl:e}=this;new w.Setting(e).setName(d("settings.enable_auto_highlight")||"Highlighting").setHeading(),new w.Setting(e).setName(d("settings.enable_auto_highlight")).setDesc(d("settings.enable_auto_highlight_desc")).addToggle(t=>t.setValue(this.plugin.settings.enableAutoHighlight).onChange(async r=>{this.plugin.settings.enableAutoHighlight=r,await this.plugin.saveSettings(),this.plugin.refreshHighlighter()})),new w.Setting(e).setName(d("settings.show_definition_on_hover")).setDesc(d("settings.show_definition_on_hover_desc")).addToggle(t=>t.setValue(this.plugin.settings.showDefinitionOnHover).onChange(async r=>{this.plugin.settings.showDefinitionOnHover=r,await this.plugin.saveSettings()})),new w.Setting(e).setName(d("settings.enable_section_tabs")).setDesc(d("settings.enable_section_tabs_desc")).addToggle(t=>{var r;return t.setValue((r=this.plugin.settings.enableSectionTabs)!=null?r:!0).onChange(async a=>{this.plugin.settings.enableSectionTabs=a,await this.plugin.saveSettings(),this.plugin.app.workspace.trigger("hi-words:settings-changed")})}),new w.Setting(e).setName(d("settings.highlight_style")).setDesc(d("settings.highlight_style_desc")).addDropdown(t=>t.addOption("underline",d("settings.style_underline")).addOption("background",d("settings.style_background")).addOption("bold",d("settings.style_bold")).addOption("dotted",d("settings.style_dotted")).addOption("wavy",d("settings.style_wavy")).setValue(this.plugin.settings.highlightStyle).onChange(async r=>{this.plugin.settings.highlightStyle=r,await this.plugin.saveSettings(),this.plugin.refreshHighlighter()})),this.addHighlightScopeSettings()}ensureAIDictionaryConfig(){this.plugin.settings.aiDictionary||(this.plugin.settings.aiDictionary={apiUrl:"",apiKey:"",model:"",prompt:""})}async testAIConnection(){if(this.isTestingAIConnection)return;this.ensureAIDictionaryConfig(),this.isTestingAIConnection=!0;let e=new w.Notice(d("notices.testing_ai_connection")||"Testing AI connection...",0);try{let r=await new G(this.plugin.settings.aiDictionary).fetchDefinition("test","This is a test sentence for checking the AI connection.");if(e.hide(),!r.trim())throw new Error(d("ai_errors.invalid_response"));new w.Notice(d("notices.ai_connection_success")||"AI connection successful",5e3)}catch(t){e.hide(),console.error("AI connection test failed:",t);let r=t instanceof Error?t.message:d("notices.ai_connection_failed")||"AI connection test failed";new w.Notice(r,6e3)}finally{this.isTestingAIConnection=!1}}addLearningFeaturesSection(){var h,p;let{containerEl:e}=this;new w.Setting(e).setName(d("settings.enable_mastered_feature")||"Learning Features").setHeading(),new w.Setting(e).setName(d("settings.enable_mastered_feature")).setDesc(d("settings.enable_mastered_feature_desc")).addToggle(g=>g.setValue(this.plugin.settings.enableMasteredFeature).onChange(async f=>{this.plugin.settings.enableMasteredFeature=f,this.plugin.settings.showMasteredInSidebar=f,await this.plugin.saveSettings(),this.plugin.refreshHighlighter(),this.plugin.app.workspace.trigger("hi-words:mastered-changed"),this.display()}));let t=new w.Setting(e).setName(d("settings.mastered_detection")||"Mastered detection mode").setDesc(d("settings.mastered_detection_desc")||'Choose how to detect "mastered": by group or by color (green = 4)');t.addDropdown(g=>{var f;return g.addOption("group",d("settings.mode_group")||"Group mode").addOption("color",d("settings.mode_color")||"Color mode (green = 4)").setValue((f=this.plugin.settings.masteredDetection)!=null?f:"group").onChange(async m=>{var v;this.plugin.settings.masteredDetection=m,await this.plugin.saveSettings(),(v=this.plugin.vocabularyManager)!=null&&v.updateSettings&&this.plugin.vocabularyManager.updateSettings(this.plugin.settings),await this.plugin.vocabularyManager.loadAllVocabularyBooks(),this.plugin.refreshHighlighter(),this.plugin.app.workspace.trigger("hi-words:settings-changed")})}),this.plugin.settings.enableMasteredFeature||t.setDisabled(!0),new w.Setting(e).setName(d("settings.blur_definitions")).setDesc(d("settings.blur_definitions_desc")).addToggle(g=>g.setValue(this.plugin.settings.blurDefinitions).onChange(async f=>{this.plugin.settings.blurDefinitions=f,await this.plugin.saveSettings(),this.plugin.app.workspace.trigger("hi-words:settings-changed")})),new w.Setting(e).setName(d("settings.tts_template")||"TTS template").setDesc(d("settings.tts_template_desc")||"Use {{word}} as placeholder, e.g. https://dict.youdao.com/dictvoice?audio={{word}}&type=2").addText(g=>g.setPlaceholder("https://...{{word}}...").setValue(this.plugin.settings.ttsTemplate||"https://dict.youdao.com/dictvoice?audio={{word}}&type=2").onChange(async f=>{this.plugin.settings.ttsTemplate=f.trim(),await this.plugin.saveSettings()})),new w.Setting(e).setName(d("settings.ai_dictionary")||"AI Dictionary").setHeading(),new w.Setting(e).setName(d("settings.ai_api_url")||"API URL").setDesc(d("settings.ai_api_url_desc")||"API endpoint (auto-detects: OpenAI, Claude, Gemini). \u26A0\uFE0F Privacy: Words and sentences will be sent to this external service.").addText(g=>{var f;return g.setPlaceholder("https://api.openai.com/v1/chat/completions").setValue(((f=this.plugin.settings.aiDictionary)==null?void 0:f.apiUrl)||"").onChange(async m=>{this.ensureAIDictionaryConfig(),this.plugin.settings.aiDictionary.apiUrl=m.trim(),await this.plugin.saveSettings()})}),new w.Setting(e).setName(d("settings.ai_api_key")||"API Key").setDesc(d("settings.ai_api_key_desc")||"Your AI API key").addText(g=>{var f;g.inputEl.type="password",g.setPlaceholder("sk-...").setValue(((f=this.plugin.settings.aiDictionary)==null?void 0:f.apiKey)||"").onChange(async m=>{this.ensureAIDictionaryConfig(),this.plugin.settings.aiDictionary.apiKey=m.trim(),await this.plugin.saveSettings()})}),new w.Setting(e).setName(d("settings.ai_model")||"Model").setDesc(d("settings.ai_model_desc")||"AI model name (e.g., gpt-4o-mini, deepseek-chat)").addText(g=>{var f;return g.setPlaceholder("gpt-4o-mini").setValue(((f=this.plugin.settings.aiDictionary)==null?void 0:f.model)||"").onChange(async m=>{this.ensureAIDictionaryConfig(),this.plugin.settings.aiDictionary.model=m.trim(),await this.plugin.saveSettings()})});let r=new w.Setting(e).setName(d("settings.ai_prompt")||"Custom Prompt").setDesc(d("settings.ai_prompt_desc")||"Use {{word}} and {{sentence}} as placeholders. The AI will use this prompt to generate definitions.");r.settingEl.addClass("hi-words-setting-textarea"),r.controlEl.empty();let s=r.controlEl.createDiv({cls:"hi-words-textarea-container"}).createEl("textarea"),o=`Please provide a concise definition for the word "{{word}}" based on this context:
Sentence: {{sentence}}
Format:
1) Part of speech
2) English definition
3) Chinese translation
4) Example sentence (use the original sentence if appropriate)`;s.placeholder=o,s.value=((h=this.plugin.settings.aiDictionary)==null?void 0:h.prompt)||o,s.rows=6,s.addEventListener("blur",async()=>{this.ensureAIDictionaryConfig(),this.plugin.settings.aiDictionary.prompt=s.value,await this.plugin.saveSettings()});let n=new w.Setting(e).setName(d("settings.ai_extra_params")||"Extra Request Parameters").setDesc(d("settings.ai_extra_params_desc")||"Add custom JSON parameters to AI request body (Advanced)");n.settingEl.addClass("hi-words-setting-textarea"),n.controlEl.empty();let u=n.controlEl.createDiv({cls:"hi-words-textarea-container"}).createEl("textarea",{cls:"hi-words-json-editor"});u.placeholder=d("settings.ai_extra_params_placeholder")||`{
"temperature": 0.7,
"top_p": 0.9
}`,u.value=((p=this.plugin.settings.aiDictionary)==null?void 0:p.extraParams)||"{}",u.rows=6,u.addEventListener("blur",async()=>{let g=u.value.trim();try{g&&g!=="{}"&&JSON.parse(g),this.ensureAIDictionaryConfig(),this.plugin.settings.aiDictionary.extraParams=g||"{}",await this.plugin.saveSettings(),u.removeClass("hi-words-json-error")}catch(f){u.addClass("hi-words-json-error"),new w.Notice(d("ai_errors.invalid_json_format")||"Invalid JSON format, please check syntax")}}),new w.Setting(e).setName(d("settings.ai_test_connection")||"Test AI connection").setDesc(d("settings.ai_test_connection_desc")||"Send a small test request to verify your API URL, key, and model").addButton(g=>g.setButtonText(d("settings.ai_test_connection")||"Test AI connection").setCta().onClick(async()=>{await this.testAIConnection()}))}addVocabularyBooksSection(){let{containerEl:e}=this,t=e.createDiv({cls:"hi-words-add-book-container"});t.addEventListener("click",()=>this.showCanvasFilePicker());let r=t.createSpan({text:d("settings.add_vocabulary_book"),cls:"hi-words-add-book-label"}),a=t.createDiv({cls:"clickable-icon hi-words-add-book-icon"});(0,w.setIcon)(a,"plus-circle"),a.setAttribute("aria-label",d("settings.add_vocabulary_book")),this.displayVocabularyBooks(),this.displayStats()}async showCanvasFilePicker(){let e=this.app.vault.getFiles().filter(r=>r.extension==="canvas");if(e.length===0){new w.Notice(d("notices.no_canvas_files"));return}new Ie(this.app,e,async r=>{await this.addVocabularyBook(r)}).open()}async addVocabularyBook(e){if(this.plugin.settings.vocabularyBooks.some(o=>o.path===e.path)){new w.Notice(d("notices.book_already_exists"));return}if(!await new k(this.app,this.plugin.settings).validateCanvasFile(e)){new w.Notice(d("notices.invalid_canvas_file"));return}let s={path:e.path,name:e.basename,enabled:!0};this.plugin.settings.vocabularyBooks.push(s),await this.plugin.saveSettings(),await this.plugin.vocabularyManager.loadVocabularyBook(s),this.plugin.refreshHighlighter(),new w.Notice(d("notices.book_added").replace("{0}",s.name)),this.display()}displayVocabularyBooks(){let{containerEl:e}=this;if(this.plugin.settings.vocabularyBooks.length===0){e.createEl("p",{text:d("settings.no_vocabulary_books"),cls:"setting-item-description"});return}this.plugin.settings.vocabularyBooks.forEach((t,r)=>{let a=new w.Setting(e).setName(t.name).setDesc(`${d("settings.path")}: ${t.path}`),s=a.controlEl.createDiv({cls:"hi-words-book-icons"}),o=s.createDiv({cls:"clickable-icon"});(0,w.setIcon)(o,"refresh-cw"),o.setAttribute("aria-label",d("settings.reload_book")),o.addEventListener("click",async()=>{await this.plugin.vocabularyManager.reloadVocabularyBook(t.path),this.plugin.refreshHighlighter(),new w.Notice(d("notices.book_reloaded").replace("{0}",t.name))});let n=s.createDiv({cls:"clickable-icon mod-warning"});(0,w.setIcon)(n,"trash"),n.setAttribute("aria-label",d("settings.remove_vocabulary_book")),n.addEventListener("click",async()=>{this.plugin.settings.vocabularyBooks.splice(r,1),await this.plugin.saveSettings(),await this.plugin.vocabularyManager.loadAllVocabularyBooks(),this.plugin.refreshHighlighter(),new w.Notice(d("notices.book_removed").replace("{0}",t.name)),this.display()}),a.addToggle(c=>c.setValue(t.enabled).onChange(async u=>{t.enabled=u,await this.plugin.saveSettings(),u?await this.plugin.vocabularyManager.loadVocabularyBook(t):await this.plugin.vocabularyManager.loadAllVocabularyBooks(),this.plugin.refreshHighlighter()}))})}displayStats(){let{containerEl:e}=this,t=this.plugin.vocabularyManager.getStats(),r=e.createEl("div",{cls:"hi-words-stats"}),a=r.createEl("div",{cls:"stat-item"});a.createEl("div",{cls:"stat-value",text:t.totalBooks.toString()}),a.createEl("div",{cls:"stat-label",text:d("settings.total_books").split(":")[0]});let s=r.createEl("div",{cls:"stat-item"});s.createEl("div",{cls:"stat-value",text:t.enabledBooks.toString()}),s.createEl("div",{cls:"stat-label",text:d("settings.enabled_books").split(":")[0]});let o=r.createEl("div",{cls:"stat-item"});o.createEl("div",{cls:"stat-value",text:t.totalWords.toString()}),o.createEl("div",{cls:"stat-label",text:d("settings.total_words").split(":")[0]})}},Ie=class extends w.FuzzySuggestModal{constructor(i,e,t){super(i),this.files=e,this.onSelect=t,this.setPlaceholder(d("modals.select_canvas_file"))}getItems(){return this.files}getItemText(i){return i.path}onChooseItem(i,e){this.onSelect(i)}};var N=require("obsidian");var dt=require("obsidian");var ve=class{constructor(i){this.cache=new Map;this.CACHE_TTL=1800*1e3;this.abortController=null;this.settings=i}updateSettings(i){this.settings=i}async translate(i){if(!(i!=null&&i.trim()))throw new Error(d("translate.text_empty"));let e=i.trim(),t=`ai:${e}`,r=this.cache.get(t);if(r&&Date.now()-r.timestamp<this.CACHE_TTL)return r.content;let a;return a=await this.translateWithAI(e),this.cache.set(t,{content:a,timestamp:Date.now()}),a}abort(){this.abortController&&(this.abortController.abort(),this.abortController=null)}async translateWithAI(i){var m,v,_,b,y,T,P,F,V,E;let e=this.settings.aiDictionary;if(!(e!=null&&e.apiUrl)||!(e!=null&&e.apiKey)||!(e!=null&&e.model))throw new Error(d("translate.ai_not_configured"));let t=this.settings.translateTargetLang||"zh-CN",a=(this.settings.translatePrompt||`Translate the following text to {{to}}. Only return the translation, no explanation.
Text: {{text}}`).replace(/\{\{text\}\}/g,i).replace(/\{\{to\}\}/g,t),s=e.apiUrl,o=this.detectAPIType(s),n,c={"Content-Type":"application/json"},u=s;switch(o){case"claude":n={model:e.model,messages:[{role:"user",content:a}],max_tokens:1024},c["x-api-key"]=e.apiKey,c["anthropic-version"]="2023-06-01";break;case"gemini":n={contents:[{parts:[{text:a}]}]},u.includes(":generateContent")||(u=`${u.replace(/\/$/,"")}/models/${e.model}:generateContent`),u=`${u}?key=${e.apiKey}`;break;default:n={model:e.model,messages:[{role:"user",content:a}],temperature:.3,max_tokens:500},c.Authorization=`Bearer ${e.apiKey}`;break}let h=await(0,dt.requestUrl)({url:u,method:"POST",headers:c,body:JSON.stringify(n)});if(h.status>=400)throw new Error(`HTTP ${h.status}: ${h.text}`);let p=h.json,g;switch(o){case"claude":g=(v=(m=p==null?void 0:p.content)==null?void 0:m[0])==null?void 0:v.text;break;case"gemini":g=(P=(T=(y=(b=(_=p==null?void 0:p.candidates)==null?void 0:_[0])==null?void 0:b.content)==null?void 0:y.parts)==null?void 0:T[0])==null?void 0:P.text;break;default:g=(E=(V=(F=p==null?void 0:p.choices)==null?void 0:F[0])==null?void 0:V.message)==null?void 0:E.content;break}if(!g)throw new Error(d("translate.invalid_response"));let f=g.replace(/<think>[\s\S]*?<\/think>/gi,"").trim();return f||(f=g.trim()),f}detectAPIType(i){let e=i.toLowerCase();return e.includes("anthropic")?"claude":e.includes("googleapis")||e.includes("generativelanguage")?"gemini":"openai"}clearCache(){this.cache.clear()}};function ct(l,i){if(!l||i<0||i>l.length)return"";let e=/[.!?。!?\n]/,t=i;for(;t>0;){let s=l[t-1];if(e.test(s))break;t--}let r=i;for(;r<l.length;){let s=l[r];if(e.test(s)){r++;break}r++}return l.substring(t,r).trim()}function Z(l){try{let i=l.getCursor(),e=l.getValue(),t=0;for(let r=0;r<i.line;r++)t+=l.getLine(r).length+1;return t+=i.ch,ct(e,t)}catch(i){return console.error("Failed to extract sentence from editor (multiline):",i),""}}function be(l){if(!l||l.rangeCount===0)return"";try{let i=l.getRangeAt(0),e=l.toString().trim();if(!e)return"";let t=i.startContainer;if(t.nodeType===Node.ELEMENT_NODE){let n=t.childNodes[i.startOffset];n&&n.nodeType===Node.TEXT_NODE&&(t=n)}let r=Mt(t);if(!r)return"";let a=r.textContent||"",s=Wt(r,t,i.startOffset,e);if(s===-1)return"";let o=s+Math.floor(e.length/2);return ct(a,o)}catch(i){return console.error("Failed to extract sentence from selection:",i),""}}function Mt(l){var t,r;let i=l;i.nodeType===Node.TEXT_NODE&&(i=i.parentNode);let e=null;for(;i&&i.nodeType!==Node.DOCUMENT_NODE;){if(i.nodeType===Node.ELEMENT_NODE){let a=i,s=(t=a.tagName)==null?void 0:t.toLowerCase();if(s==="p"||s==="li"||s==="blockquote")return a;if(s==="div"){let o=((r=a.textContent)==null?void 0:r.length)||0;o>0&&o<5e3&&(e=a)}if(a.classList.contains("textLayer"))return a;if(a.classList.contains("page")&&a.closest(".pdf-container")){let o=a.querySelector(".textLayer");if(o)return o}}i=i.parentNode}return e}function Wt(l,i,e,t){var n;let r=document.createTreeWalker(l,NodeFilter.SHOW_TEXT,null),a=0,s;for(;s=r.nextNode();){if(s===i||s.contains(i))return a+e;a+=((n=s.textContent)==null?void 0:n.length)||0}return(l.textContent||"").indexOf(t)}var we=class we extends N.Component{constructor(e){super();this.activePopover=null;this.debounceTimer=null;this.currentTranslateText="";this.isTranslating=!1;this.plugin=e,this.translationService=new ve(e.settings)}onload(){this.registerDomEvent(document,"mouseup",e=>{this.handleMouseUp(e)}),this.registerDomEvent(document,"mousedown",e=>{this.activePopover&&!this.activePopover.contains(e.target)&&this.removePopover()}),this.registerDomEvent(window,"scroll",()=>this.removePopover(),{passive:!0}),this.registerDomEvent(window,"resize",()=>this.removePopover()),this.registerDomEvent(document,"keydown",e=>{e.key==="Escape"&&this.activePopover&&this.removePopover()})}updateSettings(){this.translationService.updateSettings(this.plugin.settings)}handleMouseUp(e){this.plugin.settings.enableSelectionTranslate&&(this.activePopover&&this.activePopover.contains(e.target)||(this.debounceTimer!==null&&clearTimeout(this.debounceTimer),this.debounceTimer=window.setTimeout(()=>{this.debounceTimer=null,this.tryShowPopover(e)},we.DEBOUNCE_MS)))}tryShowPopover(e){var n;let t=this.getSelectedText();if(!t||t.length===0||t.length>500)return;let r=e.target;if((n=r==null?void 0:r.closest)!=null&&n.call(r,".hi-words-highlight")||this.currentTranslateText===t&&this.activePopover)return;this.currentTranslateText=t;let a=window.getSelection();if(!a||a.rangeCount===0)return;let o=a.getRangeAt(0).getBoundingClientRect();o.width<2&&o.height<2||this.showPopover(t,o,e)}getSelectedText(){let e=this.plugin.app.workspace.getActiveViewOfType(N.MarkdownView),t=e==null?void 0:e.editor,r=e==null?void 0:e.getMode();if(t&&r==="source")return t.getSelection().trim();let a=window.getSelection();return(a==null?void 0:a.toString().trim())||""}getSentence(){let e=this.plugin.app.workspace.getActiveViewOfType(N.MarkdownView),t=e==null?void 0:e.editor,r=e==null?void 0:e.getMode();return t&&r==="source"?Z(t):be(window.getSelection())}showPopover(e,t,r){this.removePopover();let a=document.createElement("div");a.className="hi-words-translate-popover";let s=a.createDiv({cls:"hi-words-translate-header"}),o=s.createDiv({cls:"hi-words-translate-title"});o.textContent=e;let n=s.createDiv({cls:"hi-words-translate-actions"}),c=n.createDiv({cls:"hi-words-translate-btn hi-words-translate-btn-add"});(0,N.setIcon)(c,"book-plus"),c.addEventListener("click",f=>{var _;f.stopPropagation();let m=this.getSentence(),v=((_=h.querySelector(".hi-words-translate-result"))==null?void 0:_.textContent)||"";this.removePopover(),this.plugin.addOrEditWord(e,m,v)});let u=n.createDiv({cls:"hi-words-translate-btn hi-words-translate-btn-copy"});(0,N.setIcon)(u,"copy"),u.addEventListener("click",f=>{var v;f.stopPropagation();let m=((v=h.querySelector(".hi-words-translate-result"))==null?void 0:v.textContent)||"";m&&(navigator.clipboard.writeText(m),(0,N.setIcon)(u,"check"),setTimeout(()=>(0,N.setIcon)(u,"copy"),1500))});let h=a.createDiv({cls:"hi-words-translate-content"}),p=h.createDiv({cls:"hi-words-translate-loading"}),g=p.createDiv({cls:"hi-words-translate-spinner"});(0,N.setIcon)(g,"loader"),p.createSpan({text:d("translate.translating")}),a.addEventListener("mousedown",f=>f.stopPropagation()),document.body.appendChild(a),requestAnimationFrame(()=>{let f=window.pageYOffset||document.documentElement.scrollTop,m=window.pageXOffset||document.documentElement.scrollLeft,v=window.innerWidth,_=window.innerHeight,b=t.left+m,y=t.bottom+f+6,T=a.getBoundingClientRect();b+T.width>v+m-10&&(b=v+m-T.width-10),b<m+10&&(b=m+10),t.bottom+T.height+10>_&&(y=t.top+f-T.height-6),a.style.left=b+"px",a.style.top=y+"px"}),this.activePopover=a,this.doTranslate(e,h)}async doTranslate(e,t){this.isTranslating&&this.translationService.abort(),this.isTranslating=!0;try{let r=await this.translationService.translate(e);t.empty(),t.createDiv({cls:"hi-words-translate-result",text:r})}catch(r){t.empty();let a=t.createDiv({cls:"hi-words-translate-error"}),s=a.createDiv({cls:"hi-words-translate-error-icon"});(0,N.setIcon)(s,"alert-circle"),a.createSpan({text:r instanceof Error?r.message:d("translate.failed")})}finally{this.isTranslating=!1}}removePopover(){this.activePopover&&this.activePopover.parentNode&&this.activePopover.parentNode.removeChild(this.activePopover),this.activePopover=null,this.currentTranslateText=""}onunload(){this.removePopover(),this.translationService.abort(),this.debounceTimer!==null&&clearTimeout(this.debounceTimer)}};we.DEBOUNCE_MS=300;var ce=we;var ye=require("obsidian");function Le(l){l.addCommand({id:"refresh-vocabulary",name:d("commands.refresh_vocabulary"),callback:async()=>{await l.vocabularyManager.loadAllVocabularyBooks(),l.refreshHighlighter(),new ye.Notice(d("notices.vocabulary_refreshed"))}}),l.addCommand({id:"open-vocabulary-sidebar",name:d("commands.show_sidebar"),callback:()=>{l.activateSidebarView()}}),l.addCommand({id:"add-selected-word",name:d("commands.add_selected_word"),callback:()=>{let i="",e="",t=l.app.workspace.getActiveViewOfType(ye.MarkdownView),r=t==null?void 0:t.editor,a=t==null?void 0:t.getMode();if(r&&a==="source")i=r.getSelection().trim(),e=Z(r);else{let o=window.getSelection();i=(o==null?void 0:o.toString().trim())||"",!i&&o&&o.rangeCount>0&&(i=o.getRangeAt(0).toString().trim()),e=be(o)}l.addOrEditWord(i,e)}})}var ue=require("obsidian");function Ne(l){let i=new Set,e=null;l.registerEvent(l.app.vault.on("modify",t=>{t instanceof ue.TFile&&t.extension==="canvas"&&l.settings.vocabularyBooks.some(a=>a.path===t.path)&&i.add(t.path)})),l.registerEvent(l.app.workspace.on("active-leaf-change",async t=>{let r=l.app.workspace.getActiveFile();if(e&&i.has(e)&&(!r||r.path!==e)&&(await l.vocabularyManager.reloadVocabularyBook(e),l.refreshHighlighter(),i.delete(e)),r&&r.extension==="canvas")e=r.path;else if(e=null,i.size>0){let a=Array.from(i);i.clear();for(let s of a)await l.vocabularyManager.reloadVocabularyBook(s);l.refreshHighlighter()}else setTimeout(()=>l.refreshHighlighter(),100)})),l.registerEvent(l.app.vault.on("rename",async(t,r)=>{if(t instanceof ue.TFile&&t.extension==="canvas"){let a=l.settings.vocabularyBooks.findIndex(s=>s.path===r);a!==-1&&(l.settings.vocabularyBooks[a].path=t.path,l.settings.vocabularyBooks[a].name=t.basename,await l.saveSettings(),l.vocabularyManager.removeBookData(r),await l.vocabularyManager.reloadVocabularyBook(t.path),l.refreshHighlighter(),new ue.Notice(d("notices.book_path_updated").replace("{0}",t.basename)))}})),l.registerEvent(l.app.workspace.on("editor-menu",(t,r)=>{let a=r.getSelection();if(a&&a.trim()){let s=a.trim(),o=l.vocabularyManager.hasWord(s);t.addItem(n=>{let c=o?"commands.edit_word":"commands.add_word";n.setTitle(d(c)).onClick(()=>{let u=Z(r);l.addOrEditWord(s,u)})})}}))}var Te=class extends ut.Plugin{constructor(){super(...arguments);this.editorExtensions=[];this.isSidebarInitialized=!1}async onload(){await this.loadSettings(),Pe.setApp(this.app),this.vocabularyManager=new oe(this.app,this.settings),this.masteredService=new ne(this,this.vocabularyManager),this.definitionPopover=new le(this),this.addChild(this.definitionPopover),this.definitionPopover.setVocabularyManager(this.vocabularyManager),this.definitionPopover.setMasteredService(this.masteredService),this.selectionTranslatePopover=new ce(this),this.addChild(this.selectionTranslatePopover),this.registerView($,e=>new X(e,this)),this.setupEditorExtensions(),this.registerCommands(),this.registerEvents(),Ge(this),Ue(this),this.addSettingTab(new de(this.app,this)),this.initializeSidebar(),this.app.workspace.onLayoutReady(async()=>{await this.vocabularyManager.loadAllVocabularyBooks(),this.refreshHighlighter()})}setupEditorExtensions(){let e=He(this.vocabularyManager,t=>Se(t,this.settings));this.editorExtensions=[e],this.registerEditorExtension(this.editorExtensions)}registerCommands(){Le(this)}registerEvents(){Ne(this)}shouldHighlightFile(e){return Se(e,this.settings)}refreshHighlighter(){K.refreshAll(),this._refreshReadingModeHighlighter&&this._refreshReadingModeHighlighter(),this._refreshPDFHighlighter&&this._refreshPDFHighlighter(),this.app.workspace.getLeavesOfType($).forEach(t=>{t.view instanceof X&&t.view.refresh()})}async initializeSidebar(){this.isSidebarInitialized||this.app.workspace.onLayoutReady(()=>{this.isSidebarInitialized=!0})}async activateSidebarView(){let{workspace:e}=this.app,t=null,r=e.getLeavesOfType($);r.length>0?t=r[0]:(t=e.getRightLeaf(!1),t&&await t.setViewState({type:$,active:!0})),t&&e.revealLeaf(t)}async loadSettings(){this.settings=Object.assign({},Fe,await this.loadData())}async saveSettings(){await this.saveData(this.settings),this.vocabularyManager.updateSettings(this.settings),this.masteredService.updateSettings(),this.selectionTranslatePopover.updateSettings()}addOrEditWord(e,t="",r=""){this.vocabularyManager.hasWord(e)?new Q(this.app,this,e,t,!0).open():new Q(this.app,this,e,t,!1,r).open()}onunload(){this.vocabularyManager.clear(),this.vocabularyManager.destroy&&this.vocabularyManager.destroy(),K.clear(),je(this)}};
/* nosourcemap */