texlite 0.9.0 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/DESIGN.md +7 -0
  2. package/OPERATIONS.md +70 -3
  3. package/README.md +5 -0
  4. package/README.zh-CN.md +5 -0
  5. package/THIRD_PARTY_NOTICES.md +29 -0
  6. package/dist/client/assets/{AdminUsers-3CHb5012.js → AdminUsers-Buf5ZclR.js} +1 -1
  7. package/dist/client/assets/{CitationLibraryDialog-zPpsUhWJ.js → CitationLibraryDialog-DrKbIlD-.js} +1 -1
  8. package/dist/client/assets/Dashboard-DLk2j3oq.js +2 -0
  9. package/dist/client/assets/GitDialog-CTWAU8q6.js +3 -0
  10. package/dist/client/assets/HistoryDialog-Mo4p8HEg.js +7 -0
  11. package/dist/client/assets/LatexEditor-CwvakYva.js +135 -0
  12. package/dist/client/assets/{PdfPreview-BFVNczSk.js → PdfPreview-BUpELZd-.js} +1 -1
  13. package/dist/client/assets/{ProjectIconPickerDialog-Cf0zBf8u.js → ProjectIconPickerDialog-BiWSwDdt.js} +1 -1
  14. package/dist/client/assets/{ProjectNavigationDialogs-TPbe11iR.js → ProjectNavigationDialogs-CpjkXZTz.js} +1 -1
  15. package/dist/client/assets/{ProjectSettings-CDQvIlQ4.js → ProjectSettings-DoxitHbX.js} +1 -1
  16. package/dist/client/assets/ProjectWorkspace-iNqXZlsj.js +29 -0
  17. package/dist/client/assets/SelectionHistoryDialog-9FWlc3Rb.js +3 -0
  18. package/dist/client/assets/{SystemMetricsDialog-CuqHPUnn.js → SystemMetricsDialog-24kifZO6.js} +1 -1
  19. package/dist/client/assets/TagManagementDialog-BHIA0vEA.js +1 -0
  20. package/dist/client/assets/{WordCountDialog-B4PI0vEk.js → WordCountDialog-DFIWvLrP.js} +1 -1
  21. package/dist/client/assets/check-C3GZh6a1.js +1 -0
  22. package/dist/client/assets/chevron-left-l1oupvGO.js +1 -0
  23. package/dist/client/assets/editor-3rgn4IYh.js +14 -0
  24. package/dist/client/assets/{hard-drive-6uYFyezl.js → hard-drive-B-NSDVVA.js} +1 -1
  25. package/dist/client/assets/{index-BRT5O-Hg.js → index-CNTGCh7t.js} +1 -1
  26. package/dist/client/assets/index-CrlfruX_.css +1 -0
  27. package/dist/client/assets/index-DIM_KiG2.js +12 -0
  28. package/dist/client/assets/katex-D9PXdmFF.css +1 -0
  29. package/dist/client/assets/{key-round-DOAxDSfz.js → key-round-BjL9H8-H.js} +1 -1
  30. package/dist/client/assets/{latexFormatterWorker-DYkYtcFy.js → latexFormatterWorker-BRmsns8a.js} +2 -2
  31. package/dist/client/assets/minimize-2-DDCq8c49.js +1 -0
  32. package/dist/client/assets/{minus-9eVJnugf.js → minus-DgKZCT9F.js} +1 -1
  33. package/dist/client/assets/{pdf-BB1XvBIF.js → pdf-DUYcbPMK.js} +1 -1
  34. package/dist/client/assets/{plus-BGXipRoG.js → plus-CezUzSIZ.js} +1 -1
  35. package/dist/client/assets/{refresh-cw-Dvp3O90f.js → refresh-cw-CDFNL-qu.js} +1 -1
  36. package/dist/client/assets/{search-b1ORp1k8.js → search-CrDJjHoj.js} +1 -1
  37. package/dist/client/assets/{sigma-Bk0_MzWi.js → sigma-DOcJr7VG.js} +1 -1
  38. package/dist/client/assets/spellCheck-BgWyesvf.js +1 -0
  39. package/dist/client/assets/{tags-JAkbmWns.js → tags-BedQ75lh.js} +1 -1
  40. package/dist/client/assets/{type-CE2DYkPH.js → type-glZNdzZR.js} +1 -1
  41. package/dist/client/assets/{user-plus-CKalKSsw.js → user-plus-gQ6q5Nom.js} +1 -1
  42. package/dist/client/assets/{x-Bq29njHL.js → x-CSzFikn2.js} +1 -1
  43. package/dist/client/index.html +6 -4
  44. package/dist/server/app.js +130 -83
  45. package/dist/server/cli.js +4 -2
  46. package/dist/server/compileArtifacts.js +3 -2
  47. package/dist/server/config.js +27 -0
  48. package/dist/server/harper.js +205 -8
  49. package/dist/server/history.js +53 -3
  50. package/dist/server/i18n.js +8 -0
  51. package/dist/server/index.js +4 -2
  52. package/dist/server/instanceLock.js +4 -2
  53. package/dist/server/latexCompletion.js +126 -63
  54. package/dist/server/latexDocumentGraph.js +106 -0
  55. package/dist/server/latexSpellMask.js +196 -43
  56. package/dist/server/pm2.js +3 -2
  57. package/dist/server/projectReferences.js +109 -0
  58. package/dist/server/routes/auth.js +5 -2
  59. package/dist/server/routes/comments.js +13 -1
  60. package/dist/server/routes/compile.js +2 -2
  61. package/dist/server/routes/projectFiles.js +12 -3
  62. package/dist/server/routes/projectHistory.js +13 -1
  63. package/dist/server/routes/projectReferences.js +36 -0
  64. package/dist/server/routes/projects.js +41 -4
  65. package/dist/server/routes/system.js +1 -0
  66. package/dist/server/zip.js +2 -16
  67. package/dist/shared/basePath.js +44 -0
  68. package/dist/shared/bibtexReferences.js +135 -0
  69. package/dist/shared/latexCommandSnippets.js +91 -0
  70. package/dist/shared/latexDependencies.js +71 -0
  71. package/dist/shared/latexLiterals.js +215 -0
  72. package/dist/shared/latexReferenceCommands.js +75 -0
  73. package/dist/shared/latexReferences.js +193 -0
  74. package/dist/shared/latexRoot.js +21 -0
  75. package/dist/shared/latexScanner.js +183 -0
  76. package/dist/shared/writingChecks.js +4 -0
  77. package/package.json +11 -4
  78. package/texlite.config.example.json +2 -4
  79. package/dist/client/assets/Dashboard-CWfSLzD3.js +0 -2
  80. package/dist/client/assets/GitDialog-BUU2U_LV.js +0 -3
  81. package/dist/client/assets/HistoryDialog-B6aopsrw.js +0 -7
  82. package/dist/client/assets/LatexEditor-CM445Tk0.js +0 -65
  83. package/dist/client/assets/ProjectWorkspace-C6GrvKN6.js +0 -27
  84. package/dist/client/assets/SelectionHistoryDialog-CyE0_YDs.js +0 -3
  85. package/dist/client/assets/TagManagementDialog-gRLM3lLx.js +0 -1
  86. package/dist/client/assets/check-BXvzrdoz.js +0 -1
  87. package/dist/client/assets/chevron-left-BB5MYb7g.js +0 -1
  88. package/dist/client/assets/editor-CiK7TK0p.js +0 -14
  89. package/dist/client/assets/index-C0t11tlT.js +0 -14
  90. package/dist/client/assets/index-DXWp2bzM.css +0 -1
  91. package/dist/client/assets/katex-CEK31ho9.css +0 -1
  92. package/dist/client/assets/minimize-2-BWtbag2I.js +0 -1
  93. package/dist/client/assets/spellCheck-BJjWgnef.js +0 -1
@@ -1,3 +0,0 @@
1
- import{u as ce,r as h,j as i}from"./react-BVUjbTTn.js";import{c as ae,f as W,M as le,C as de,b as fe}from"./index-C0t11tlT.js";import{B as V,j as ue}from"./ProjectWorkspace-C6GrvKN6.js";import{d as he,C as xe}from"./index-BRT5O-Hg.js";import"./check-BXvzrdoz.js";import"./x-Bq29njHL.js";import"./search-b1ORp1k8.js";import"./user-plus-CKalKSsw.js";import"./refresh-cw-Dvp3O90f.js";const me=ae("UserRound",[["circle",{cx:"12",cy:"8",r:"5",key:"1hypcn"}],["path",{d:"M20 21a8 8 0 0 0-16 0",key:"rfgkzh"}]]),g=(e,t)=>e>>>t|e<<32-t,be=e=>g(e,2)^g(e,13)^g(e,22),ge=e=>g(e,6)^g(e,11)^g(e,25),ye=e=>g(e,7)^g(e,18)^e>>>3,pe=e=>g(e,17)^g(e,19)^e>>>10,je=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),He=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);class ve{constructor(){const t=new ArrayBuffer(320);this._H=new Uint32Array(t,0,8),this._H.set(He),this._W=new Uint32Array(t,64,64)}_updateHash(){const t=this._H,n=this._W;for(let a=16;a<64;a++)n[a]=pe(n[a-2])+n[a-7]+ye(n[a-15])+n[a-16];let o=t[0],c=t[1],f=t[2],s=t[3],l=t[4],x=t[5],d=t[6],b=t[7];for(let a=0,m,p;a<64;a++)m=b+ge(l)+(l&x^~l&d)+je[a]+n[a]>>>0,p=be(o)+(o&c^o&f^c&f)>>>0,b=d,d=x,x=l,l=s+m>>>0,s=f,f=c,c=o,o=m+p>>>0;t[0]+=o,t[1]+=c,t[2]+=f,t[3]+=s,t[4]+=l,t[5]+=x,t[6]+=d,t[7]+=b}digest(t){let n=0;for(;n+56<=t.length;){let s=0;for(;s<16&&n+3<t.length;s++)this._W[s]=t[n++]<<24|t[n++]<<16|t[n++]<<8|t[n++];if(n%64!==0){for(this._W.fill(0,s,16);n<t.length;)this._W[s]|=t[n]<<(3-n%4)*8,n++;this._W[s]|=V<<(3-n%4)*8}this._updateHash()}const o=n%64!==0;this._W.fill(0,0,16);let c=0;for(;n<t.length;c++)for(let s=3;s>=0&&n<t.length;s--)this._W[c]|=t[n++]<<s*8;o||(this._W[c-(n%4===0?0:1)]|=V<<(3-n%4)*8),this._W[14]=t.byteLength/ue,this._W[15]=t.byteLength*8,this._updateHash();const f=new Uint8Array(32);for(let s=0;s<this._H.length;s++)for(let l=0;l<4;l++)f[s*4+l]=this._H[s]>>>(3-l)*8;return f}}const Ce=e=>new ve().digest(e),M=96,U=48;function Se(e,t){const n=e.replace(/\r\n/g,`
2
- `),o=t.replace(/\r\n/g,`
3
- `);if(n===o)return{previous:[],current:[],additions:0,deletions:0,hasChanges:!1};const c=new he,f=c.diff_main(n,o,!1);c.diff_cleanupSemantic(f);const s=[],l=[];let x=0,d=0;for(let b=0;b<f.length;b+=1){const[a,m]=f[b];if(m)if(a===0){const p=Ne(m,b,f.length);T(s,p),T(l,p)}else a<0?(d+=m.length,T(s,{kind:"deletion",text:m})):(x+=m.length,T(l,{kind:"addition",text:m}))}return{previous:s,current:l,additions:x,deletions:d,hasChanges:x>0||d>0}}function Ne(e,t,n){const o=t===0,c=t===n-1;return(o||c)&&e.length<=M?{kind:"equal",text:e}:!o&&!c&&e.length<=U*2?{kind:"equal",text:e}:o?{kind:"omitted",text:`…${X(e,M)}`}:c?{kind:"omitted",text:`${q(e,M)}…`}:{kind:"omitted",text:`${q(e,U)}…${X(e,U)}`}}function q(e,t){if(e.length<=t)return e;const n=_e(e,t);return e.slice(0,n)}function X(e,t){if(e.length<=t)return e;const n=Te(e,e.length-t);return e.slice(n)}function _e(e,t){const n=Math.min(e.length,t+24);for(let o=t;o<n;o+=1)if(J(e[o]))return o+1;return t}function Te(e,t){const n=Math.max(0,t-24);for(let o=t;o>n;o-=1)if(J(e[o-1]))return o;return t}function J(e){return/\s|[.,;:!?)}\]]/.test(e)}function T(e,t){const n=e.at(-1);n?.kind===t.kind?n.text+=t.text:e.push({...t})}function Re({open:e,project:t,filePath:n,selection:o,currentSource:c,onOpenChange:f}){const{t:s,i18n:l}=ce(),[{filePath:x,selection:d,source:b}]=h.useState(()=>({filePath:n,selection:o,source:c})),[a,m]=h.useState([]),[p,w]=h.useState(null),[Q,E]=h.useState(!1),[Y,k]=h.useState(!0),[R,$]=h.useState(!1),[A,C]=h.useState(""),[H,P]=h.useState(null),[Z,L]=h.useState(!1),[S,I]=h.useState(!1),[ee,D]=h.useState(""),[te,se]=h.useState(0);h.useEffect(()=>{if(P(null),!e||t.permission!=="owner")return;const r=new AbortController;return W(`/api/projects/${t.id}/edit-history/stats`,{signal:r.signal}).then(y=>{r.signal.aborted||P(y)}).catch(y=>{!r.signal.aborted&&!K(y)&&C(O(y))}),()=>r.abort()},[e,t.id,t.permission,te]);const ne=async()=>{if(!S){I(!0),D("");try{await W(`/api/projects/${t.id}/edit-history`,{method:"DELETE"}),m([]),w(null),E(!1),k(!0),se(r=>r+1),L(!1)}catch(r){D(O(r))}finally{I(!1)}}},[ie,B]=h.useState({}),N=Math.max(0,d.endOffset-d.startOffset);h.useEffect(()=>{if(!e||!x||N<=0)return;const r=new AbortController;if($(!0),C(""),m([]),k(!0),B({}),w(null),E(!1),b.slice(d.startOffset,d.endOffset)!==d.selectedText){C(s("selectionHistory.sourceChanged")),$(!1);return}const y=new URLSearchParams({path:x,start:String(d.startOffset),end:String(d.endOffset),sourceHash:Array.from(Ce(new TextEncoder().encode(b)),u=>u.toString(16).padStart(2,"0")).join("")});return W(`/api/projects/${t.id}/edit-history?${y}`,{signal:r.signal}).then(u=>{m(u.entries),k(u.chainComplete),w(u.baseline),E(u.hasMore)}).catch(u=>{K(u)||C(O(u))}).finally(()=>{r.signal.aborted||$(!1)}),()=>r.abort()},[e,t.id,x,d,N,b,s]);const oe=h.useMemo(()=>s("selectionHistory.description",{path:x,count:N}),[s,x,N]);return i.jsx(le,{open:e,wide:!0,draggable:!0,className:"selection-history-modal",title:s("selectionHistory.title"),description:oe,onOpenChange:f,footer:i.jsx("button",{onClick:()=>f(!1),children:s("common.close")}),children:i.jsxs("div",{className:"selection-history-dialog",children:[t.permission==="owner"&&H&&i.jsxs("div",{className:"history-stats",children:[i.jsx("strong",{children:s("selectionHistory.storageUsage",{used:(H.payloadBytes/1048576).toFixed(2),limit:(H.maxStorageBytes/1048576).toFixed(0),count:H.segmentCount})}),i.jsx("small",{children:s("selectionHistory.storageDescription")}),i.jsx("button",{type:"button",className:"danger-text",disabled:R||S||H.segmentCount===0,onClick:()=>{D(""),L(!0)},children:s("selectionHistory.clearAll")})]}),i.jsx(de,{open:Z,title:s("selectionHistory.clearAll"),description:s("selectionHistory.clearDescription"),confirmLabel:s("common.delete"),danger:!0,busy:S,error:ee,onConfirm:()=>{ne()},onCancel:()=>{S||L(!1)}}),A&&i.jsx("p",{className:"error selection-history-message",children:A}),R?i.jsxs("div",{className:"selection-history-loading",children:[i.jsx(fe,{className:"spin",size:22}),s("common.loading")]}):i.jsxs(i.Fragment,{children:[!Y&&i.jsx("p",{className:"selection-history-boundary",children:s("selectionHistory.boundary")}),Q&&i.jsx("p",{className:"selection-history-boundary",children:s("selectionHistory.limited",{count:a.length})}),a.length===0&&!A?i.jsxs("div",{className:"selection-history-empty",children:[i.jsx(xe,{size:28}),i.jsx("strong",{children:s("selectionHistory.emptyTitle")}),i.jsx("span",{children:s("selectionHistory.emptyDescription")})]}):i.jsx("ol",{className:"selection-history-list",children:a.map((r,y)=>{const u=ie[r.id]||"content",v=a[y+1]||p,z=!!(v&&r.content!==null&&v.content!==null&&!r.contentTruncated&&!v.contentTruncated),_=u==="diff"&&z?Se(v.content,r.content):null,F=v?z?_&&!_.hasChanges?s("selectionHistory.noDiff"):null:s("selectionHistory.diffUnavailable"):s("selectionHistory.noPrevious");return i.jsx("li",{children:i.jsxs("article",{className:"selection-history-entry",children:[i.jsxs("header",{children:[i.jsx("time",{title:new Date(r.updatedAt).toLocaleString(l.resolvedLanguage),children:ke(r.updatedAt,l.resolvedLanguage)}),i.jsxs("span",{className:"selection-history-authors",children:[i.jsx(me,{size:14}),i.jsx("span",{children:s("selectionHistory.changedBy")}),i.jsx("span",{className:"selection-history-author-list",children:r.authors.map((j,re)=>i.jsx("span",{children:we(j,s("editor.deletedUser"))},j.id||`deleted-${re}`))})]})]}),i.jsxs("div",{className:"selection-history-tabs",role:"tablist","aria-label":s("selectionHistory.view"),children:[i.jsx("button",{type:"button",className:u==="content"?"active":"",role:"tab","aria-selected":u==="content","aria-controls":`selection-history-content-${r.id}`,onClick:()=>B(j=>({...j,[r.id]:"content"})),children:s("selectionHistory.contentTab")}),i.jsx("button",{type:"button",className:u==="diff"?"active":"",role:"tab","aria-selected":u==="diff","aria-controls":`selection-history-diff-${r.id}`,onClick:()=>B(j=>({...j,[r.id]:"diff"})),children:s("selectionHistory.diffTab")})]}),u==="content"?i.jsxs("div",{className:"selection-history-content",id:`selection-history-content-${r.id}`,role:"tabpanel",children:[r.content===null?i.jsx("p",{className:"selection-history-content-unavailable",children:s("selectionHistory.contentUnavailable")}):i.jsx("pre",{children:r.content||"∅"}),r.contentTruncated&&i.jsx("small",{children:s("selectionHistory.contentTruncated")})]}):i.jsx("div",{className:"selection-history-content",id:`selection-history-diff-${r.id}`,role:"tabpanel",children:F?i.jsx("p",{className:"selection-history-content-unavailable",children:F}):_&&i.jsx(Ee,{diff:_,previousLabel:s("selectionHistory.previousVersion"),currentLabel:s("selectionHistory.currentVersion")})})]})},r.id)})})]})]})})}function we(e,t){return!e.name&&!e.username?t:e.name&&e.username?`${e.name} (@${e.username})`:e.name||`@${e.username}`}function Ee({diff:e,previousLabel:t,currentLabel:n}){return i.jsxs("div",{className:"selection-history-semantic-diff",children:[i.jsx(G,{label:t,pieces:e.previous,variant:"previous"}),i.jsx(G,{label:n,pieces:e.current,variant:"current"})]})}function G({label:e,pieces:t,variant:n}){return i.jsxs("section",{className:`selection-history-diff-side ${n}`,children:[i.jsx("header",{children:e}),i.jsx("pre",{children:t.length?t.map((o,c)=>i.jsx("span",{className:o.kind,children:o.text},`${c}-${o.kind}`)):"∅"})]})}function ke(e,t){const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(t,{month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit"})}function K(e){return e instanceof Error&&e.name==="AbortError"}function O(e){return e instanceof Error?e.message:String(e)}export{Re as SelectionHistoryDialog};
@@ -1 +0,0 @@
1
- import{u as W,r as s,j as a}from"./react-BVUjbTTn.js";import{f,g as b,M as Y,b as E,C as Z}from"./index-C0t11tlT.js";import{P as _}from"./plus-BGXipRoG.js";import{P as ee,T as ae,X as te}from"./x-Bq29njHL.js";import{C as ne}from"./check-BXvzrdoz.js";const H=["red","orange","yellow","green","blue","purple","gray"];function S(l){return[...l].sort((C,y)=>C.name.localeCompare(y.name))}function se(l){return l instanceof Error&&l.name==="AbortError"}function de({open:l,onOpenChange:C,onTagCreated:y,onTagUpdated:R,onTagDeleted:X}){const{t}=W(),[T,h]=s.useState([]),[G,w]=s.useState(!1),[D,i]=s.useState(""),[p,k]=s.useState(""),[z,L]=s.useState("blue"),[d,P]=s.useState(!1),[$,m]=s.useState(null),[j,I]=s.useState(""),[M,A]=s.useState("blue"),[N,O]=s.useState(null),[o,v]=s.useState(null),[Q,g]=s.useState(""),[u,q]=s.useState(!1);s.useEffect(()=>{if(!l)return;const e=new AbortController;return w(!0),i(""),f("/api/tags/management",{signal:e.signal}).then(n=>h(S(n.tags))).catch(n=>{se(n)||i(b(n))}).finally(()=>{e.signal.aborted||w(!1)}),()=>e.abort()},[l]);const F=async()=>{if(!(!p.trim()||d)){P(!0),i("");try{const e=await f("/api/tags",{method:"POST",body:JSON.stringify({name:p,color:z})});h(n=>S([...n,{...e.tag,projectCount:0}])),y(e.tag),k(""),L("blue")}catch(e){i(b(e))}finally{P(!1)}}},U=e=>{m(e.id),I(e.name),A(e.color),i("")},J=async e=>{if(!(!j.trim()||N)){O(e.id),i("");try{const n=await f(`/api/tags/${e.id}`,{method:"PATCH",body:JSON.stringify({name:j,color:M})}),c={...n.tag,projectCount:e.projectCount};h(r=>S(r.map(B=>B.id===e.id?c:B))),R(n.tag),m(null)}catch(n){i(b(n))}finally{O(null)}}},V=async()=>{if(!(!o||u)){q(!0),g("");try{await f(`/api/tags/${o.id}`,{method:"DELETE"}),h(e=>e.filter(n=>n.id!==o.id)),X(o.id),v(null),$===o.id&&m(null)}catch(e){g(b(e))}finally{q(!1)}}},x=d||N!==null||u,K=e=>{!e&&x||(e||(i(""),g(""),m(null)),C(e))};return a.jsxs(a.Fragment,{children:[a.jsx(Y,{open:l,title:t("tags.manage"),description:t("tags.manageDescription"),wide:!0,className:"tag-management-modal",onOpenChange:K,footer:a.jsx("button",{onClick:()=>K(!1),disabled:x,children:t("common.close")}),children:a.jsxs("div",{className:"tag-management",children:[D&&a.jsx("p",{className:"error dialog-error",role:"alert",children:D}),a.jsxs("div",{className:"tag-management-create",children:[a.jsxs("label",{className:"tag-management-field",children:[a.jsx("span",{children:t("tags.name")}),a.jsx("input",{autoFocus:!0,value:p,maxLength:32,placeholder:t("tags.name"),onChange:e=>{k(e.target.value),i("")},onKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),F())}})]}),a.jsxs("label",{className:"tag-management-field tag-management-color",children:[a.jsx("span",{children:t("tags.color")}),a.jsx("select",{value:z,onChange:e=>L(e.target.value),children:H.map(e=>a.jsx("option",{value:e,children:t(`tags.${e}`)},e))})]}),a.jsxs("button",{type:"button",className:"primary",disabled:!p.trim()||d,"aria-busy":d,onClick:()=>{F()},children:[d?a.jsx(E,{className:"spin",size:14}):a.jsx(_,{"aria-hidden":!0,size:14}),t("tags.createInManager")]})]}),G?a.jsxs("div",{className:"tag-management-loading",children:[a.jsx(E,{className:"spin",size:16}),t("common.loading")]}):T.length===0?a.jsx("p",{className:"tag-management-empty",children:t("tags.noTags")}):a.jsx("div",{className:"tag-management-list",children:T.map(e=>{const n=$===e.id,c=N===e.id;return a.jsxs("article",{className:`tag-management-item${n?" editing":""}`,children:[a.jsxs("div",{className:"tag-management-item-main",children:[a.jsx("span",{className:`tag-dot tag-${e.color}`,"aria-hidden":"true"}),a.jsxs("div",{children:[a.jsx("strong",{title:e.name,children:e.name}),a.jsx("small",{children:t("tags.projectCount",{count:e.projectCount})})]})]}),a.jsxs("div",{className:"tag-management-item-actions",children:[a.jsx("button",{type:"button",title:t("tags.edit"),"aria-label":t("tags.edit"),disabled:x&&!n,onClick:()=>U(e),children:a.jsx(ee,{"aria-hidden":!0,size:14})}),a.jsx("button",{type:"button",className:"danger-text",title:t("common.delete"),"aria-label":t("common.delete"),disabled:x,onClick:()=>{v(e),g("")},children:a.jsx(ae,{"aria-hidden":!0,size:14})})]}),n&&a.jsxs("div",{className:"tag-management-edit",children:[a.jsxs("label",{className:"tag-management-field",children:[a.jsx("span",{children:t("tags.rename")}),a.jsx("input",{value:j,maxLength:32,onChange:r=>{I(r.target.value),i("")},onKeyDown:r=>{r.key==="Enter"&&(r.preventDefault(),J(e))}})]}),a.jsxs("label",{className:"tag-management-field tag-management-color",children:[a.jsx("span",{children:t("tags.color")}),a.jsx("select",{value:M,onChange:r=>{A(r.target.value),i("")},children:H.map(r=>a.jsx("option",{value:r,children:t(`tags.${r}`)},r))})]}),a.jsxs("div",{className:"tag-management-edit-actions",children:[a.jsxs("button",{type:"button",disabled:c,onClick:()=>{m(null),i("")},children:[a.jsx(te,{"aria-hidden":!0,size:14}),t("common.cancel")]}),a.jsxs("button",{type:"button",className:"primary",disabled:!j.trim()||c,"aria-busy":c,onClick:()=>{J(e)},children:[c?a.jsx(E,{className:"spin",size:14}):a.jsx(ne,{"aria-hidden":!0,size:14}),t("common.save")]})]})]})]},e.id)})})]})}),a.jsx(Z,{open:!!o,title:t("tags.deleteTitle"),description:t("tags.deleteDescription",{tag:o?.name??"",count:o?.projectCount??0}),confirmLabel:t(u?"common.loading":"common.delete"),danger:!0,busy:u,error:Q,onCancel:()=>{u||(v(null),g(""))},onConfirm:()=>{V()}})]})}export{de as TagManagementDialog};
@@ -1 +0,0 @@
1
- import{c}from"./index-C0t11tlT.js";const o=c("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);export{o as C};
@@ -1 +0,0 @@
1
- import{c as e}from"./index-C0t11tlT.js";const t=e("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);export{t as C};