@justyork/repo-mind 0.7.2 → 0.8.1

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 (76) hide show
  1. package/.cursor/skills/repomind-docs/SKILL.md +160 -0
  2. package/.cursor/skills/repomind-docs/examples.md +429 -0
  3. package/.cursor/skills/repomind-docs/reference.md +209 -0
  4. package/.cursor/skills/repomind-docs/structure.md +132 -0
  5. package/dist/cli.js +17 -0
  6. package/dist/commands/install-skill.d.ts +9 -0
  7. package/dist/commands/install-skill.js +35 -0
  8. package/dist/commands/ui.js +5 -1
  9. package/dist/ui/auth.d.ts +21 -0
  10. package/dist/ui/auth.js +117 -0
  11. package/dist/ui/fs-operations.d.ts +1 -1
  12. package/dist/ui/fs-operations.js +36 -4
  13. package/dist/ui/fs-tree.d.ts +5 -4
  14. package/dist/ui/fs-tree.js +60 -56
  15. package/dist/ui/server.d.ts +2 -0
  16. package/dist/ui/server.js +63 -2
  17. package/package.json +3 -2
  18. package/ui/dist/assets/{arc-C1R_fyW-.js → arc-BitGDA7a.js} +1 -1
  19. package/ui/dist/assets/{architectureDiagram-3BPJPVTR-CcuF3FYc.js → architectureDiagram-3BPJPVTR-BmY2OtU5.js} +1 -1
  20. package/ui/dist/assets/{blockDiagram-GPEHLZMM-BZJKe3Ei.js → blockDiagram-GPEHLZMM-btai_20t.js} +1 -1
  21. package/ui/dist/assets/{c4Diagram-AAUBKEIU-D_0fRNGS.js → c4Diagram-AAUBKEIU-CN-pXtFe.js} +1 -1
  22. package/ui/dist/assets/channel-D1plp4bS.js +1 -0
  23. package/ui/dist/assets/{chunk-2J33WTMH-0LcH4vIA.js → chunk-2J33WTMH-CUgwCKKP.js} +1 -1
  24. package/ui/dist/assets/{chunk-4BX2VUAB-DU1h67AD.js → chunk-4BX2VUAB-ZXi72_qf.js} +1 -1
  25. package/ui/dist/assets/{chunk-55IACEB6-BCx7dyYV.js → chunk-55IACEB6-BvoNhEcH.js} +1 -1
  26. package/ui/dist/assets/{chunk-727SXJPM-CRO5yOrB.js → chunk-727SXJPM-CPVv-LcP.js} +1 -1
  27. package/ui/dist/assets/{chunk-AQP2D5EJ-BayHdr67.js → chunk-AQP2D5EJ-15HMmfKe.js} +1 -1
  28. package/ui/dist/assets/{chunk-FMBD7UC4-CJemLien.js → chunk-FMBD7UC4-CTJu1mOO.js} +1 -1
  29. package/ui/dist/assets/{chunk-ND2GUHAM-B_z-tw44.js → chunk-ND2GUHAM-BaS37xMv.js} +1 -1
  30. package/ui/dist/assets/{chunk-QZHKN3VN-D40rAh_S.js → chunk-QZHKN3VN-CzNZR3D9.js} +1 -1
  31. package/ui/dist/assets/classDiagram-4FO5ZUOK-BsDWU9KJ.js +1 -0
  32. package/ui/dist/assets/classDiagram-v2-Q7XG4LA2-BsDWU9KJ.js +1 -0
  33. package/ui/dist/assets/{cose-bilkent-S5V4N54A-Cqthtrrq.js → cose-bilkent-S5V4N54A-mpC0WnuY.js} +1 -1
  34. package/ui/dist/assets/{dagre-BM42HDAG-CrxsyXEa.js → dagre-BM42HDAG-DVbZMTFr.js} +1 -1
  35. package/ui/dist/assets/{diagram-2AECGRRQ-DTYA7Rrn.js → diagram-2AECGRRQ-BvYsIaeC.js} +1 -1
  36. package/ui/dist/assets/{diagram-5GNKFQAL-CXs7RV13.js → diagram-5GNKFQAL-mM_4t2hT.js} +1 -1
  37. package/ui/dist/assets/{diagram-KO2AKTUF-Bf8EeV_S.js → diagram-KO2AKTUF-u5t0FZtc.js} +1 -1
  38. package/ui/dist/assets/{diagram-LMA3HP47-C2XWB0cI.js → diagram-LMA3HP47-Ngnghl4t.js} +1 -1
  39. package/ui/dist/assets/{diagram-OG6HWLK6-BNMXob9h.js → diagram-OG6HWLK6-DxCLvBmh.js} +1 -1
  40. package/ui/dist/assets/{erDiagram-TEJ5UH35-CnSczOvb.js → erDiagram-TEJ5UH35-Cblf5xKO.js} +1 -1
  41. package/ui/dist/assets/{flowDiagram-I6XJVG4X-DwZBJ2fr.js → flowDiagram-I6XJVG4X-3aVBpTd3.js} +1 -1
  42. package/ui/dist/assets/{ganttDiagram-6RSMTGT7-rxwvD8xn.js → ganttDiagram-6RSMTGT7-CCk8vbkn.js} +1 -1
  43. package/ui/dist/assets/{gitGraphDiagram-PVQCEYII-DjJPiQ2K.js → gitGraphDiagram-PVQCEYII-DLUIS6md.js} +1 -1
  44. package/ui/dist/assets/graph-DwaX8nDF.js +2 -0
  45. package/ui/dist/assets/{infoDiagram-5YYISTIA-BHgtQpBK.js → infoDiagram-5YYISTIA-C6umdFYV.js} +1 -1
  46. package/ui/dist/assets/{ishikawaDiagram-YF4QCWOH-BZ38ndde.js → ishikawaDiagram-YF4QCWOH-H8wERm8_.js} +1 -1
  47. package/ui/dist/assets/{journeyDiagram-JHISSGLW-CNaZf5VN.js → journeyDiagram-JHISSGLW-DnTRQ6Mn.js} +1 -1
  48. package/ui/dist/assets/{kanban-definition-UN3LZRKU-4h1Jmt_X.js → kanban-definition-UN3LZRKU-DrVEsZSL.js} +1 -1
  49. package/ui/dist/assets/main-C0Y60ppL.js +269 -0
  50. package/ui/dist/assets/{mermaid.core-BZZdRyuR.js → mermaid.core-BtOBEW5j.js} +4 -4
  51. package/ui/dist/assets/{mindmap-definition-RKZ34NQL-DG_NciLX.js → mindmap-definition-RKZ34NQL-BFEjh9BY.js} +1 -1
  52. package/ui/dist/assets/{pieDiagram-4H26LBE5-B9FyPCLY.js → pieDiagram-4H26LBE5-KLu3myN4.js} +1 -1
  53. package/ui/dist/assets/{quadrantDiagram-W4KKPZXB-B89WFfQu.js → quadrantDiagram-W4KKPZXB-DwSP1nfl.js} +1 -1
  54. package/ui/dist/assets/{requirementDiagram-4Y6WPE33-BYHKePgB.js → requirementDiagram-4Y6WPE33-CTe59AWj.js} +1 -1
  55. package/ui/dist/assets/{sankeyDiagram-5OEKKPKP-BW6YuBQM.js → sankeyDiagram-5OEKKPKP-DBG4pZal.js} +1 -1
  56. package/ui/dist/assets/{sequenceDiagram-3UESZ5HK-BnojqKwf.js → sequenceDiagram-3UESZ5HK-BV9E_Iae.js} +1 -1
  57. package/ui/dist/assets/{stateDiagram-AJRCARHV-C_x9t2o6.js → stateDiagram-AJRCARHV-BWnAUqpA.js} +1 -1
  58. package/ui/dist/assets/stateDiagram-v2-BHNVJYJU-yNXWOXzs.js +1 -0
  59. package/ui/dist/assets/theme-CfkLgQFf.js +21 -0
  60. package/ui/dist/assets/theme-DJYNWCef.css +1 -0
  61. package/ui/dist/assets/{timeline-definition-PNZ67QCA-CI8Ngfzv.js → timeline-definition-PNZ67QCA-DDoGl25M.js} +1 -1
  62. package/ui/dist/assets/{vennDiagram-CIIHVFJN-CPRKGc2P.js → vennDiagram-CIIHVFJN-DVRPIJjW.js} +1 -1
  63. package/ui/dist/assets/{visual-editor-DUVPRlY3.js → visual-editor-COzWiJ8C.js} +12 -12
  64. package/ui/dist/assets/{wardley-L42UT6IY-CZY42jFT.js → wardley-L42UT6IY-Li08EMdE.js} +1 -1
  65. package/ui/dist/assets/{wardleyDiagram-YWT4CUSO-CGKyWKnw.js → wardleyDiagram-YWT4CUSO-BA2E9m1f.js} +1 -1
  66. package/ui/dist/assets/{xychartDiagram-2RQKCTM6-Cq-onAc3.js → xychartDiagram-2RQKCTM6-DKHRvUg5.js} +1 -1
  67. package/ui/dist/graph.html +3 -3
  68. package/ui/dist/index.html +3 -3
  69. package/ui/dist/assets/channel-BlWnHbuq.js +0 -1
  70. package/ui/dist/assets/classDiagram-4FO5ZUOK-D3OdfPqd.js +0 -1
  71. package/ui/dist/assets/classDiagram-v2-Q7XG4LA2-D3OdfPqd.js +0 -1
  72. package/ui/dist/assets/graph-D_tIaE_I.js +0 -2
  73. package/ui/dist/assets/main-BeHrzLrS.js +0 -273
  74. package/ui/dist/assets/stateDiagram-v2-BHNVJYJU-CBZx8gKT.js +0 -1
  75. package/ui/dist/assets/theme-CFHWfrn1.css +0 -1
  76. package/ui/dist/assets/theme-DS1fBM5L.js +0 -1
@@ -1,273 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/visual-editor-DUVPRlY3.js","assets/editor-CTtDusro.js","assets/theme-DS1fBM5L.js","assets/theme-CFHWfrn1.css","assets/mermaid.core-BZZdRyuR.js","assets/transform-BwXaE9hv.js"])))=>i.map(i=>d[i]);
2
- import{p as Pt,s as Ct,e as Tt,g as qt,a as Dt,l as G,b as Mt,c as xt,d as de,f as At,u as Rt,h as Ht,i as Nt,o as Ze,j as Ft,m as It,k as Wt,n as _t,q as Ut,r as Ae,t as Ot,v as Bt,w as jt,x as Kt,y as U,z as Re,A as J,B as zt}from"./theme-DS1fBM5L.js";import{m as et}from"./editor-CTtDusro.js";const Vt={"wiki-page":"Wiki",adr:"ADR","feature-spec":"Feature specs","glossary-term":"Glossary","open-question":"Open questions","agent-instruction":"Agent instructions"},He="folder:";function ue(e){if(e.startsWith(He)){const t=e.slice(He.length);return t==="__root__"?"General":t.split(/[-_/]/).map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join(" ")}return Vt[e]??e}function Gt(e,t){var L,v,T,k;e.className="workspace-main workspace-dashboard",e.innerHTML=`
3
- <div class="dashboard-header">
4
- <h1 class="doc-title">Health &amp; publish</h1>
5
- <div class="workspace-actions">
6
- <button type="button" id="dash-export" class="btn-ghost">Export agents.md</button>
7
- <button type="button" id="dash-refresh" class="btn-ghost">Refresh</button>
8
- </div>
9
- </div>
10
- <div id="dash-check" class="dashboard-section"></div>
11
- <div id="dash-links" class="dashboard-section"></div>
12
- <div class="dashboard-section">
13
- <h2>Prepare docs</h2>
14
- <p class="dashboard-hint">Markdown files without RepoMind frontmatter. Add frontmatter to index them for MCP and the catalog.</p>
15
- <div class="dashboard-actions">
16
- <button type="button" id="dash-prepare-all" class="btn-primary btn-sm">Prepare all</button>
17
- <button type="button" id="dash-sync-links" class="btn-ghost btn-sm">Sync all links</button>
18
- </div>
19
- <ul id="dash-unprepared" class="queue-list"></ul>
20
- </div>
21
- <div class="dashboard-section">
22
- <h2>Publish queue</h2>
23
- <ul id="dash-queue" class="queue-list"></ul>
24
- </div>
25
- `;const n=e.querySelector("#dash-check"),r=e.querySelector("#dash-links"),i=e.querySelector("#dash-unprepared"),l=e.querySelector("#dash-queue");function d(o){const p=o.ok?"check-ok":"check-fail",s=o.ok?"All checks passed":`${o.violations.length} issue(s)`;let a=`
26
- <h2>Schema check</h2>
27
- <p class="check-status ${p}">${s}</p>
28
- `;if(o.violations.length>0){a+='<ul class="violation-list">';for(const u of o.violations)a+=`<li><code>${R(u.path)}</code> — ${R(u.message)}</li>`;a+="</ul>"}if(o.warnings.length>0){a+='<h3 class="warnings-title">Warnings</h3><ul class="warning-list">';for(const u of o.warnings)a+=`<li>${R(u)}</li>`;a+="</ul>"}n.innerHTML=a}function c(o){let p=`
29
- <h2>Link health</h2>
30
- <div class="link-health-stats">
31
- <div class="link-health-stat"><span class="link-health-value">${o.orphanCount}</span> orphans</div>
32
- <div class="link-health-stat"><span class="link-health-value">${o.brokenCount}</span> broken</div>
33
- <div class="link-health-stat"><span class="link-health-value">${o.oneWayCount}</span> one-way</div>
34
- </div>
35
- `;if(o.brokenTargets.length>0){p+='<h3 class="warnings-title">Broken targets</h3><ul class="warning-list">';for(const s of o.brokenTargets)p+=`<li><code>${R(s)}</code></li>`;p+="</ul>"}if(o.orphanSlugs.length>0){p+='<h3 class="warnings-title">Orphan pages</h3><ul class="warning-list">';for(const s of o.orphanSlugs)p+=`<li><code>${R(s)}</code></li>`;p+="</ul>"}r.innerHTML=p}function y(o){var p;if(i.innerHTML="",o.length===0){i.innerHTML='<li class="placeholder">All docs have frontmatter</li>';return}for(const s of o){const a=document.createElement("li");a.className="queue-item",a.innerHTML=`
36
- <div class="queue-main">
37
- <div class="queue-title">${R(s.relativePath)}</div>
38
- <div class="meta">${R(s.suggestedType)} · slug: ${R(s.suggestedSlug)}</div>
39
- </div>
40
- <div class="queue-actions">
41
- <button type="button" class="btn-primary btn-sm" data-action="prepare">Add frontmatter</button>
42
- </div>
43
- `,(p=a.querySelector('[data-action="prepare"]'))==null||p.addEventListener("click",()=>{xt(s.relativePath,s.suggestedType).then(({result:u})=>{t.onNotify(`Prepared: ${u.slug}`),h()}).catch(u=>{t.onNotify(u instanceof Error?u.message:"Prepare failed",!0)})}),i.appendChild(a)}}function b(o){var p,s;if(l.innerHTML="",o.length===0){l.innerHTML='<li class="placeholder">No drafts in queue</li>';return}for(const a of o){const u=document.createElement("li");u.className="queue-item",u.innerHTML=`
44
- <div class="queue-main">
45
- <div class="queue-title">${R(a.title||a.slug)}</div>
46
- <div class="meta">${R(a.slug)} · ${R(a.type)}</div>
47
- </div>
48
- <div class="queue-actions">
49
- <button type="button" class="btn-ghost btn-sm" data-action="edit">Edit</button>
50
- <button type="button" class="btn-primary btn-sm" data-action="publish">Publish</button>
51
- </div>
52
- `,(p=u.querySelector('[data-action="edit"]'))==null||p.addEventListener("click",()=>{t.onOpenDraft(a)}),(s=u.querySelector('[data-action="publish"]'))==null||s.addEventListener("click",()=>{de(a.id).then(({result:w})=>{t.onPublished(w.path),h()}).catch(w=>{t.onNotify(w instanceof Error?w.message:"Publish failed",!0)})}),l.appendChild(u)}}async function h(){try{const[o,p,{drafts:s},{files:a}]=await Promise.all([qt(),Dt(),G(),Mt()]);d(o),c(p),y(a),b(s)}catch(o){n.innerHTML=`<p class="check-status check-fail">${R(o instanceof Error?o.message:"Failed to load")}</p>`}}return(L=e.querySelector("#dash-refresh"))==null||L.addEventListener("click",()=>{h()}),(v=e.querySelector("#dash-prepare-all"))==null||v.addEventListener("click",()=>{Pt().then(({result:o})=>{t.onNotify(`Prepared ${o.prepared.length} file(s)`),h()}).catch(o=>{t.onNotify(o instanceof Error?o.message:"Prepare all failed",!0)})}),(T=e.querySelector("#dash-sync-links"))==null||T.addEventListener("click",()=>{Ct().then(({result:o})=>{const p=o.files.filter(s=>s.changed).length;t.onNotify(`Synced links in ${p} file(s)`),h()}).catch(o=>{t.onNotify(o instanceof Error?o.message:"Sync links failed",!0)})}),(k=e.querySelector("#dash-export"))==null||k.addEventListener("click",()=>{Tt().then(({path:o})=>{t.onNotify(`Exported ${o}`)}).catch(o=>{t.onNotify(o instanceof Error?o.message:"Export failed",!0)})}),h(),{refresh:h}}function R(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}const tt="repomind-page-info-hidden";function D(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function ne(){try{const e=localStorage.getItem(tt);return e===null?!0:e==="true"}catch{return!0}}function nt(e){try{localStorage.setItem(tt,e?"true":"false")}catch{}}function Jt(e){return e.map((t,n)=>{const r=n>0?'<span class="crumb-sep">›</span>':"";return t.current?`${r}<span class="crumb current">${D(t.label)}</span>`:t.crumbId?`${r}<button type="button" class="crumb" data-crumb="${D(t.crumbId)}">${D(t.label)}</button>`:`${r}<span class="crumb">${D(t.label)}</span>`}).join("")}function pe(e,t){const n=t.focusMode??ne();e.className=t.rootClass??"workspace-main",e.innerHTML=`
53
- <nav class="breadcrumb" aria-label="Breadcrumb">
54
- ${Jt(t.breadcrumbs)}
55
- </nav>
56
- <div class="page-layout${n?" page-layout--focus":""}">
57
- <article class="page-content">
58
- <header class="page-header">
59
- <div class="page-title-slot">${t.titleHtml}</div>
60
- <div class="workspace-actions">${t.actionsHtml}</div>
61
- </header>
62
- <div class="page-body-slot">${t.mainHtml}</div>
63
- </article>
64
- <aside class="page-info">${t.railHtml}</aside>
65
- </div>
66
- `;const r=e.querySelector(".page-layout");return{pageLayout:r,bodySlot:e.querySelector(".page-body-slot"),railSlot:e.querySelector(".page-info"),setFocusMode(i){r.classList.toggle("page-layout--focus",i),nt(i)}}}function fe(e,t,n){const r=e.querySelector("#toggle-focus"),i=e.querySelector(".page-layout");!r||!i||(i.classList.toggle("page-layout--focus",t),r.setAttribute("aria-pressed",String(t)),r.textContent=t?"Show info":"Hide info",r.addEventListener("click",()=>{const l=!i.classList.contains("page-layout--focus");i.classList.toggle("page-layout--focus",l),nt(l),r.setAttribute("aria-pressed",String(l)),r.textContent=l?"Show info":"Hide info"}))}function Xt(e,t){e.querySelectorAll(".breadcrumb [data-crumb]").forEach(n=>{n.addEventListener("click",()=>{const r=n.dataset.crumb;r&&t[r]&&t[r]()})})}const rt=/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g;function st(e,t){const n=e.trim(),r=((t==null?void 0:t.trim())||n).trim();return{display:n,slug:r}}function nr(e,t){const n=e.trim(),r=(t??n).trim();return r===n?`[[${n}]]`:`[[${n}|${r}]]`}function Yt(e){const t=[];for(const n of e.matchAll(rt)){const{slug:r}=st(n[1]??"",n[2]);r&&t.push(r)}return t}function Qt(e){return Yt(e)}function Zt(e,t){const n=t.find(l=>l.slug===e);if(n)return n.slug;const r=e.toLowerCase(),i=t.find(l=>l.title.toLowerCase()===r);return(i==null?void 0:i.slug)??null}function en(e,t,n){const r=new Set(t),i=[];for(const l of Qt(e)){const d=Zt(l,n);!d||r.has(d)||i.includes(d)||i.push(d)}return i}function tn(e,t,n){const r=e.toLowerCase();if(!r)return 1;const i=t.toLowerCase(),l=n.toLowerCase();return i.startsWith(r)||l.startsWith(r)?3:i.includes(r)||l.includes(r)?2:0}function nn(e,t,n=12){return t.map(r=>({doc:r,score:tn(e,r.slug,r.title)})).filter(r=>r.score>0).sort((r,i)=>i.score-r.score||r.doc.slug.localeCompare(i.doc.slug)).slice(0,n).map(r=>r.doc)}const rn=["adr","feature-spec","glossary-term","open-question","agent-instruction","wiki-page"],sn=["draft","proposed","accepted","superseded"];function at(e){return`
67
- <h2 class="page-info-title">Page properties</h2>
68
- <div class="workspace-badges editor-badges">
69
- <span class="badge badge-draft">draft</span>
70
- ${e.forkedFrom?`<span class="badge">fork: ${D(e.forkedFrom)}</span>`:""}
71
- </div>
72
- <div class="props-section">
73
- <div class="props-label">Status</div>
74
- <div class="props-chip-row">
75
- <button type="button" id="ed-status-chip" class="status-chip props-chip-trigger" aria-haspopup="listbox"></button>
76
- <div id="ed-status-menu" class="props-dropdown hidden" role="listbox"></div>
77
- </div>
78
- </div>
79
- <div class="props-section">
80
- <div class="props-label">Type</div>
81
- <div class="props-chip-row">
82
- <button type="button" id="ed-type-chip" class="props-chip props-chip-trigger" aria-haspopup="listbox"></button>
83
- <div id="ed-type-menu" class="props-dropdown hidden" role="listbox"></div>
84
- </div>
85
- <div class="props-hint" id="ed-catalog-hint"></div>
86
- </div>
87
- <div class="props-section">
88
- <div class="props-label">Slug</div>
89
- <input id="ed-slug" class="props-slug-input" spellcheck="false" />
90
- <div class="props-hint props-hint-slug hidden" id="ed-slug-hint"></div>
91
- </div>
92
- <div class="props-section">
93
- <div class="props-label">Tags</div>
94
- <div id="ed-tags-chips" class="props-chip-list"></div>
95
- <input id="ed-tags-input" class="props-add-input" placeholder="Add tag…" />
96
- </div>
97
- <div class="props-section">
98
- <div class="props-label">Related</div>
99
- <div id="ed-related-chips" class="props-chip-list"></div>
100
- <input id="ed-related-input" class="props-add-input" placeholder="Add related slug…" autocomplete="off" />
101
- <div id="ed-related-menu" class="props-dropdown hidden" role="listbox"></div>
102
- </div>
103
- `}function an(e,t,n,r){const i=e.querySelector("#ed-slug"),l=e.querySelector("#ed-slug-hint"),d=e.querySelector("#ed-status-chip"),c=e.querySelector("#ed-status-menu"),y=e.querySelector("#ed-type-chip"),b=e.querySelector("#ed-type-menu"),h=e.querySelector("#ed-catalog-hint"),L=e.querySelector("#ed-tags-chips"),v=e.querySelector("#ed-tags-input"),T=e.querySelector("#ed-related-chips"),k=e.querySelector("#ed-related-input"),o=e.querySelector("#ed-related-menu");let p=[...t.tags],s=[...t.related],a=t.status,u=t.type;i.value=t.slug,t.forkedFrom&&(i.readOnly=!0,i.title="Slug is fixed for edits of an existing published page",l.textContent=`Locked while editing published page (${t.forkedFrom})`,l.classList.remove("hidden")),P(),M(),f(),E();function w(){r()}function P(){d.textContent=a,d.className=`status-chip props-chip-trigger status-${a}`,c.innerHTML=sn.map(S=>`<button type="button" class="props-dropdown-item" data-value="${S}" role="option">${S}</button>`).join("")}function M(){y.textContent=u,h.textContent=ue(u),b.innerHTML=rn.map(S=>`<button type="button" class="props-dropdown-item" data-value="${S}" role="option">${S}</button>`).join("")}function f(){L.innerHTML=p.map(S=>`<span class="tag-chip props-removable-chip">${D(S)}<button type="button" class="chip-remove" data-tag="${D(S)}" aria-label="Remove tag">×</button></span>`).join(""),L.querySelectorAll(".chip-remove").forEach(S=>{S.addEventListener("click",()=>{const g=S.dataset.tag;p=p.filter(q=>q!==g),f(),w()})})}function E(){T.innerHTML=s.map(S=>`<span class="related-chip props-removable-chip">${D(S)}<button type="button" class="chip-remove" data-slug="${D(S)}" aria-label="Remove related">×</button></span>`).join(""),T.querySelectorAll(".chip-remove").forEach(S=>{S.addEventListener("click",()=>{const g=S.dataset.slug;s=s.filter(q=>q!==g),E(),w()})})}function $(){c.classList.add("hidden"),b.classList.add("hidden"),o.classList.add("hidden")}d.addEventListener("click",()=>{c.classList.toggle("hidden")||(b.classList.add("hidden"),o.classList.add("hidden"))}),c.addEventListener("click",S=>{const g=S.target.closest("[data-value]");g&&(a=g.dataset.value??a,P(),c.classList.add("hidden"),w())}),y.addEventListener("click",()=>{b.classList.toggle("hidden")||(c.classList.add("hidden"),o.classList.add("hidden"))}),b.addEventListener("click",S=>{const g=S.target.closest("[data-value]");g&&(u=g.dataset.value??u,M(),b.classList.add("hidden"),w())}),i.addEventListener("input",w),v.addEventListener("keydown",S=>{if(S.key!=="Enter"&&S.key!==",")return;S.preventDefault();const g=v.value.trim().replace(/,$/,"");if(!g||p.includes(g)){v.value="";return}p.push(g),v.value="",f(),w()});function C(S){const g=nn(S,n).filter(q=>!s.includes(q.slug));if(g.length===0){o.classList.add("hidden");return}o.innerHTML=g.map(q=>`<button type="button" class="props-dropdown-item" data-slug="${D(q.slug)}" role="option">
104
- <span class="wikilink-option-slug">${D(q.slug)}</span>
105
- <span class="wikilink-option-title">${D(q.title)}</span>
106
- </button>`).join(""),o.classList.remove("hidden")}return k.addEventListener("input",()=>{C(k.value.trim())}),k.addEventListener("keydown",S=>{if(S.key==="Enter"){S.preventDefault();const g=k.value.trim();g&&!s.includes(g)&&(s.push(g),k.value="",E(),o.classList.add("hidden"),w())}}),o.addEventListener("mousedown",S=>{S.preventDefault();const g=S.target.closest("[data-slug]");if(!g)return;const q=g.dataset.slug??"";q&&!s.includes(q)&&(s.push(q),k.value="",E(),o.classList.add("hidden"),w())}),document.addEventListener("click",S=>{const g=S.target;!d.contains(g)&&!c.contains(g)&&!y.contains(g)&&!b.contains(g)&&!k.contains(g)&&!o.contains(g)&&$()}),{getState:()=>({slug:i.value.trim(),type:u,status:a,tags:[...p],related:[...s]}),setRelated(S){s=[...new Set(S)],E(),w()}}}const on="modulepreload",ln=function(e){return"/"+e},Ne={},it=function(t,n,r){let i=Promise.resolve();if(n&&n.length>0){let d=function(b){return Promise.all(b.map(h=>Promise.resolve(h).then(L=>({status:"fulfilled",value:L}),L=>({status:"rejected",reason:L}))))};document.getElementsByTagName("link");const c=document.querySelector("meta[property=csp-nonce]"),y=(c==null?void 0:c.nonce)||(c==null?void 0:c.getAttribute("nonce"));i=d(n.map(b=>{if(b=ln(b),b in Ne)return;Ne[b]=!0;const h=b.endsWith(".css"),L=h?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${b}"]${L}`))return;const v=document.createElement("link");if(v.rel=h?"stylesheet":on,h||(v.as="script"),v.crossOrigin="",v.href=b,y&&v.setAttribute("nonce",y),document.head.appendChild(v),h)return new Promise((T,k)=>{v.addEventListener("load",T),v.addEventListener("error",()=>k(new Error(`Unable to preload CSS for ${b}`)))})}))}function l(d){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=d,window.dispatchEvent(c),!c.defaultPrevented)throw d}return i.then(d=>{for(const c of d||[])c.status==="rejected"&&l(c.reason);return t().catch(l)})};let I=null,K=null;function ot(e,t,n,r,i=[]){var we,Se,Ee,Le,ke,$e,Pe,Ce,Te,qe,De,Me;const l=i.map(m=>({slug:m.slug,title:m.title}));let d=null,c=n.body;const y=e.querySelector("#ed-title"),b=e.querySelector("#ed-save-status"),h=t.bodySlot.querySelector("#ed-visual-canvas"),L=document.createElement("div");L.id="publish-modal",L.className="modal hidden",L.innerHTML=`
107
- <div class="modal-card modal-card-wide">
108
- <p>Publish to git as markdown?</p>
109
- <code id="publish-target"></code>
110
- <pre id="publish-diff" class="diff-preview"></pre>
111
- <div id="publish-related" class="publish-related hidden">
112
- <p id="publish-related-prompt"></p>
113
- <ul id="publish-related-list" class="publish-related-list"></ul>
114
- <div class="editor-actions">
115
- <button type="button" id="publish-related-apply" class="btn-primary">Add to related</button>
116
- <button type="button" id="publish-related-skip" class="btn-ghost">Skip</button>
117
- </div>
118
- </div>
119
- <div class="editor-actions">
120
- <button type="button" id="publish-confirm" class="btn-primary">Confirm</button>
121
- <button type="button" id="publish-cancel" class="btn-ghost">Cancel</button>
122
- </div>
123
- </div>
124
- `,e.appendChild(L);const v=document.createElement("div");v.id="view-md-modal",v.className="modal hidden",v.innerHTML=`
125
- <div class="modal-card modal-card-wide">
126
- <h3 class="modal-title">Markdown source</h3>
127
- <pre id="view-md-content" class="md-source"></pre>
128
- <div class="editor-actions">
129
- <button type="button" id="view-md-copy" class="btn-primary">Copy</button>
130
- <button type="button" id="view-md-close" class="btn-ghost">Close</button>
131
- </div>
132
- </div>
133
- `,e.appendChild(v);const T=e.querySelector("#ed-publish-menu");y.value=n.title;const k=an(t.railSlot,{slug:n.slug,type:n.type,status:n.status,tags:n.tags,related:n.related},l,()=>w());it(async()=>{const{mountVisualEditor:m}=await import("./visual-editor-DUVPRlY3.js");return{mountVisualEditor:m}},__vite__mapDeps([0,1,2,3])).then(({mountVisualEditor:m})=>{d=m(h,{initialMarkdown:n.body,docCandidates:l,onBodyChange:()=>w(),onError:r.onError})});let o=[];function p(){return(d==null?void 0:d.getMarkdownBody())??c}function s(){const m=k.getState();return{title:y.value,slug:m.slug,type:m.type,status:m.status,tags:m.tags,related:m.related,body:p()}}function a(m){b.textContent=m}async function u(){a("Saving…");const m=s();c=m.body,await Rt(n.id,m),a("Saved")}function w(){I&&clearTimeout(I),I=setTimeout(()=>{I=null,K=u().catch(m=>{a(""),r.onError(m instanceof Error?m.message:"Autosave failed")})},800)}async function P(){I&&(clearTimeout(I),I=null,K=u().catch(m=>{throw a(""),r.onError(m instanceof Error?m.message:"Autosave failed"),m})),K&&(await K,K=null)}y.addEventListener("input",()=>w()),y.addEventListener("change",()=>w());function M(){const m=e.querySelector("#publish-related"),x=e.querySelector("#publish-related-prompt"),_=e.querySelector("#publish-related-list"),H=k.getState();if(o=en(p(),H.related,l),o.length===0){m.classList.add("hidden");return}x.textContent=`Add ${o.length} body link(s) to related?`,_.innerHTML=o.map(ae=>{var xe;const kt=((xe=l.find($t=>$t.slug===ae))==null?void 0:xe.title)??ae;return`<li><code>${D(ae)}</code> — ${D(kt)}</li>`}).join(""),m.classList.remove("hidden")}function f(){var x;if(o.length===0)return;const m=k.getState();k.setRelated([...new Set([...m.related,...o])]),o=[],(x=e.querySelector("#publish-related"))==null||x.classList.add("hidden")}(we=e.querySelector("#publish-related-apply"))==null||we.addEventListener("click",()=>{f()}),(Se=e.querySelector("#publish-related-skip"))==null||Se.addEventListener("click",()=>{var m;o=[],(m=e.querySelector("#publish-related"))==null||m.classList.add("hidden")});let E=null,$=null;function C(){L.classList.add("hidden"),E&&(document.removeEventListener("keydown",E),E=null)}function S(){L.classList.remove("hidden"),E||(E=m=>{m.key==="Escape"&&C()},document.addEventListener("keydown",E))}function g(){v.classList.add("hidden")}function q(){const m=v.querySelector("#view-md-content");m.textContent=p(),v.classList.remove("hidden")}async function se(){await P(),S(),M();const m=e.querySelector("#publish-target"),x=e.querySelector("#publish-diff"),_=k.getState();m.textContent=`docs/.../${_.slug}.md`,x.textContent="Loading diff…";try{const H=await Ht(n.id);H.targetPath&&(m.textContent=H.targetPath),x.textContent=H.diff}catch(H){x.textContent=H instanceof Error?H.message:"Diff unavailable"}}async function Lt(){const m=e.querySelector("#ed-publish");m.setAttribute("aria-busy","true"),m.disabled=!0;try{await P();const{result:x}=await de(n.id);r.onPublished(x.path)}finally{m.removeAttribute("aria-busy"),m.disabled=!1}}(Ee=e.querySelector("#ed-publish"))==null||Ee.addEventListener("click",()=>{Lt().catch(m=>{r.onError(m instanceof Error?m.message:"Publish failed")})}),(Le=e.querySelector("#ed-publish-review"))==null||Le.addEventListener("click",()=>{T.classList.add("hidden"),se().catch(m=>{r.onError(m instanceof Error?m.message:"Failed to prepare publish")})}),(ke=e.querySelector("#ed-publish-menu-btn"))==null||ke.addEventListener("click",()=>{var x;const m=T.classList.toggle("hidden");(x=e.querySelector("#ed-publish-menu-btn"))==null||x.setAttribute("aria-expanded",m?"false":"true")});const ye=m=>{var _,H;const x=m.target;!T.contains(x)&&!((_=e.querySelector("#ed-publish-menu-btn"))!=null&&_.contains(x))&&(T.classList.add("hidden"),(H=e.querySelector("#ed-publish-menu-btn"))==null||H.setAttribute("aria-expanded","false"))};document.addEventListener("click",ye),($e=e.querySelector("#ed-view-md"))==null||$e.addEventListener("click",()=>{q()}),(Pe=v.querySelector("#view-md-close"))==null||Pe.addEventListener("click",()=>{g()}),v.addEventListener("click",m=>{m.target===v&&g()}),(Ce=v.querySelector("#view-md-copy"))==null||Ce.addEventListener("click",()=>{navigator.clipboard.writeText(p()).catch(m=>{r.onError(m instanceof Error?m.message:"Copy failed")})}),(Te=e.querySelector("#publish-cancel"))==null||Te.addEventListener("click",()=>{C()}),L.addEventListener("click",m=>{m.target===L&&C()}),(qe=e.querySelector("#publish-confirm"))==null||qe.addEventListener("click",()=>{(async()=>{await P();const{result:m}=await de(n.id);C(),r.onPublished(m.path)})().catch(m=>{r.onError(m instanceof Error?m.message:"Publish failed")})});const be=()=>{d==null||d.destroy(),r.onClosed()};return(De=e.querySelector("#ed-close"))==null||De.addEventListener("click",be),(Me=e.querySelector("#ed-discard"))==null||Me.addEventListener("click",()=>{confirm("Discard this draft?")&&(d==null||d.destroy(),At(n.id).then(()=>r.onDeleted()).catch(m=>{r.onError(m instanceof Error?m.message:"Delete failed")}))}),$=m=>{m.key==="Escape"&&L.classList.contains("hidden")&&v.classList.contains("hidden")&&be()},document.addEventListener("keydown",$),{destroy:()=>{d==null||d.destroy(),document.removeEventListener("click",ye),$&&document.removeEventListener("keydown",$),C(),g(),L.remove(),v.remove()}}}function lt(e,t){const n=(t==null?void 0:t.showDiscard)??!0;return`
134
- <div class="editor-action-bar">
135
- <span class="editing-badge" aria-hidden="true">Editing</span>
136
- <span id="ed-save-status" class="save-status" aria-live="polite"></span>
137
- <div class="editor-action-spacer" aria-hidden="true"></div>
138
- <div class="editor-action-primary">
139
- <div class="publish-split">
140
- <button type="button" id="ed-publish" class="btn-primary publish-main">Publish</button>
141
- <button type="button" id="ed-publish-menu-btn" class="btn-primary publish-menu-trigger" aria-haspopup="true" aria-expanded="false" title="More publish options">▾</button>
142
- <div id="ed-publish-menu" class="publish-menu hidden" role="menu">
143
- <button type="button" id="ed-publish-review" role="menuitem">Review changes</button>
144
- </div>
145
- </div>
146
- </div>
147
- <div class="editor-action-secondary">
148
- <button type="button" id="ed-view-md" class="btn-ghost btn-sm">Markdown</button>
149
- <button type="button" id="toggle-focus" class="btn-ghost btn-sm" aria-pressed="${e}">
150
- ${e?"Show info":"Hide info"}
151
- </button>
152
- <button type="button" id="ed-close" class="btn-ghost btn-sm">Close</button>
153
- ${n?'<button type="button" id="ed-discard" class="btn-ghost btn-sm btn-danger-text">Discard</button>':""}
154
- </div>
155
- </div>
156
- `}function Fe(e,t,n,r=[]){const i=ne(),l=pe(e,{rootClass:"workspace-main workspace-editor",breadcrumbs:[{label:"Knowledge"},{label:"Drafts"},{label:t.title||t.slug,current:!0}],titleHtml:'<input id="ed-title" class="title-input doc-title" type="text" placeholder="Document title" />',actionsHtml:lt(i),mainHtml:'<div id="ed-visual-canvas"></div>',railHtml:at({forkedFrom:t.forked_from}),focusMode:i});return fe(e,i),ot(e,l,t,n,r)}function dn(e){if(!e)return null;if(e.startsWith("?slug=")||e.startsWith("/?slug=")){const t=e.includes("?")?e.slice(e.indexOf("?")):e,n=new URLSearchParams(t).get("slug");return(n==null?void 0:n.trim())||null}try{const n=new URL(e,"http://local").searchParams.get("slug");return(n==null?void 0:n.trim())||null}catch{return null}}function ge(e){var t,n;return((n=(t=e.split("#")[0])==null?void 0:t.split("?")[0])==null?void 0:n.trim())??""}function dt(e){const t=e.replace(/\\/g,"/").replace(/^\/+/,"");return t?t.toLowerCase().endsWith(".md")?t:`${t}.md`:""}function cn(e,t){const n=ge(t);if(!n||n.startsWith("http://")||n.startsWith("https://")||n.startsWith("mailto:")||n.startsWith("#"))return null;const r=e.includes("/")?e.slice(0,e.lastIndexOf("/")):"",i=n.replace(/\\/g,"/").split("/"),l=r?r.split("/"):[];for(const d of i)if(!(!d||d===".")){if(d===".."){if(l.length===0)return null;l.pop();continue}l.push(d)}return dt(l.join("/"))}function un(e){let t=ge(e).replace(/\\/g,"/");return!t||t.startsWith("http://")||t.startsWith("https://")||t.startsWith("mailto:")||t.startsWith("#")||(t.startsWith("/")&&(t=t.slice(1)),t.startsWith("docs/")&&(t=t.slice(5)),!t)?null:dt(t)}function pn(e,t){const n=t.get(e);if(n)return n;const r=e.toLowerCase();for(const[i,l]of t.entries())if(i.toLowerCase()===r)return l;return null}function fn(e,t,n){const r=dn(t);if(r){for(const l of n.values())if(l===r)return r;return null}const i=[cn(e,t),un(t)].filter(l=>!!l);for(const l of i){const d=pn(l,n);if(d)return d}return null}const gn=[".png",".jpg",".jpeg",".gif",".webp",".svg"];function Ie(e){const t=e.toLowerCase();return gn.some(n=>t.endsWith(n))}function hn(e,t){const n=ge(t);if(!n||n.startsWith("http://")||n.startsWith("https://")||n.startsWith("mailto:")||n.startsWith("#")||n.startsWith("data:"))return null;let r=n.replace(/\\/g,"/");if(r.startsWith("/")&&(r=r.slice(1)),r.startsWith("docs/")?r=r.slice(5):r="",r&&!r.split("/").includes("..")&&Ie(r))return r;const i=e.includes("/")?e.slice(0,e.lastIndexOf("/")):"",l=n.replace(/\\/g,"/").split("/"),d=i?i.split("/"):[];for(const y of l)if(!(!y||y===".")){if(y===".."){if(d.length===0)return null;d.pop();continue}d.push(y)}const c=d.join("/");return c&&Ie(c)?c:null}function mn(e,t){const n=hn(e,t);return n?`/api/assets/${n.split("/").map(encodeURIComponent).join("/")}`:null}let We=null;async function vn(e){const t=e.querySelectorAll("pre.mermaid");if(t.length===0)return;const n=document.documentElement.dataset.theme==="dark"?"dark":"default",r=await it(()=>import("./mermaid.core-BZZdRyuR.js").then(i=>i.ba),__vite__mapDeps([4,5,1]));We!==n&&(r.default.initialize({startOnLoad:!1,theme:n,securityLevel:"loose"}),We=n);try{await r.default.run({nodes:[...t]})}catch{for(const i of t)if(!i.closest(".mermaid-error")){const l=i.parentElement;l==null||l.classList.add("mermaid-error")}}}let _e=!1,W=null;function O(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function yn(e){return e.replace(rt,(t,n,r)=>{const{display:i,slug:l}=st(n,r),d=encodeURIComponent(l);return`[${i}](#wikilink:${d})`})}function bn(){_e||(et.use({gfm:!0,renderer:{code({text:e,lang:t}){return t==="mermaid"?`<div class="mermaid-wrapper"><pre class="mermaid">${O(e.trim())}</pre></div>
157
- `:!1},list(e){if(!e.items.some(l=>l.task))return!1;const n=e.ordered?"ol":"ul",r=e.ordered&&e.start!==1&&e.start!=null?` start="${e.start}"`:"";let i="";for(const l of e.items)i+=this.listitem(l);return`<${n} class="contains-task-list"${r}>
158
- ${i}</${n}>
159
- `},listitem(e){if(!e.task)return!1;const t=`<input type="checkbox" class="task-list-item-checkbox"${e.checked?" checked":""} disabled>`,n=this.parser.parse(e.tokens,!!e.loose).trim();return`<li class="task-list-item"><label class="task-list-item-label">${t}<span class="task-list-item-content">${n}</span></label></li>
160
- `},image({href:e,text:t,title:n}){if(!e||e.startsWith("http://")||e.startsWith("https://")||e.startsWith("data:"))return!1;if(W){const r=mn(W.docRelativePath,e);if(r){const i=O(t||n||"");return`<img src="${O(r)}" alt="${i}" loading="lazy" class="markdown-image">`}}return!1},link({href:e,text:t}){if(e!=null&&e.startsWith("#wikilink:")){const n=decodeURIComponent(e.slice(10));return`<a href="#" class="wikilink" data-slug="${O(n)}">${t}</a>`}if(W&&e){const n=fn(W.docRelativePath,e,W.slugByRelative);if(n)return`<a href="#" class="wikilink" data-slug="${O(n)}">${t}</a>`}return e!=null&&e.startsWith("http://")||e!=null&&e.startsWith("https://")?`<a href="${O(e)}" target="_blank" rel="noopener noreferrer">${t}</a>`:e!=null&&e.startsWith("mailto:")||e!=null&&e.startsWith("#")?!1:e?`<a href="#" class="md-link-unresolved" title="Link not in docs index">${t}</a>`:!1}}}),_e=!0)}function wn(e,t){bn(),W=t??null;try{return et.parse(yn(e),{async:!1})}finally{W=null}}const he="slug",ct="path",Sn="draft";function me(){const e=new URLSearchParams(window.location.search).get(he);return e!=null&&e.trim()?e.trim():null}function En(){const e=new URLSearchParams(window.location.search).get(ct);return e!=null&&e.trim()?e.trim().replace(/\\/g,"/"):null}function Ln(){const e=new URLSearchParams(window.location.search).get(Sn);return e!=null&&e.trim()?e.trim():null}function kn(){const e=new URL(window.location.href),t=e.pathname;if(t==="/"||t==="/index.html")return;const n=me();e.pathname="/",history.replaceState(n?{slug:n}:{},"",e)}function ut(){const e=new URL(window.location.href);return e.pathname="/",e}function $n(e){const t=ut();return t.search="",t.searchParams.set(he,e),t.toString()}function Pn(e,t="push"){const n=ut();n.searchParams.delete(ct),n.searchParams.set(he,e);const r={slug:e};t==="replace"?history.replaceState(r,"",n):history.pushState(r,"",n)}function Cn(e){const t=()=>{e(me())};return window.addEventListener("popstate",t),()=>window.removeEventListener("popstate",t)}function Tn(e,t){if(t==="json")try{const n=JSON.parse(e);return JSON.stringify(n,null,2)}catch{return e}return e}function qn(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Dn(e,t){const n=Tn(e,t);return`<pre class="structured-preview ${t==="json"?"structured-preview--json":"structured-preview--yaml"}"><code>${qn(n)}</code></pre>`}let V=null;function re(){V==null||V.destroy(),V=null}function Mn(e,t){const n=typeof t.status=="string"?t.status:"",r=typeof t.type=="string"?t.type:"",i=typeof t.domain=="string"?t.domain:"",l=Array.isArray(t.tags)?t.tags.filter(y=>typeof y=="string"):[],d=Array.isArray(t.related)?t.related.filter(y=>typeof y=="string"):[],c=e.contentKind??"markdown";return`
161
- <h2 class="page-info-title">Page info</h2>
162
- <dl class="info-list">
163
- <dt>Status</dt><dd><span class="status-chip status-${D(n)}">${D(n)}</span></dd>
164
- <dt>Type</dt><dd>${D(r)}</dd>
165
- ${i?`<dt>Domain</dt><dd>${D(i)}</dd>`:""}
166
- <dt>Format</dt><dd>${D(c)}</dd>
167
- ${l.length>0?`<dt>Tags</dt><dd>${l.map(y=>`<span class="tag-chip">${D(y)}</span>`).join(" ")}</dd>`:""}
168
- </dl>
169
- ${d.length>0?`<div class="info-block"><div class="info-block-label">Related</div>${d.map(y=>`<button type="button" class="related-chip" data-slug="${D(y)}">${D(y)}</button>`).join("")}</div>`:""}
170
- <div class="info-tabs tabs">
171
- <button class="tab active" data-tab="frontmatter">Frontmatter</button>
172
- <button class="tab" data-tab="agent">Agent JSON</button>
173
- </div>
174
- <div id="tab-frontmatter" class="tab-panel active"></div>
175
- <div id="tab-agent" class="tab-panel"></div>
176
- <footer class="page-info-footer">
177
- <code id="doc-path">${D(e.path??"")}</code>
178
- </footer>
179
- `}function xn(e){e.querySelectorAll(".info-tabs .tab").forEach(t=>{t.addEventListener("click",()=>{var r;const n=t.dataset.tab;e.querySelectorAll(".info-tabs .tab").forEach(i=>i.classList.remove("active")),e.querySelectorAll(".page-info .tab-panel").forEach(i=>i.classList.remove("active")),t.classList.add("active"),(r=e.querySelector(`#tab-${n}`))==null||r.classList.add("active")})})}function Ue(e){e.querySelectorAll(".related-chip").forEach(t=>{t.addEventListener("click",()=>{const n=t.dataset.slug;n&&e.dispatchEvent(new CustomEvent("navigate-slug",{detail:{slug:n}}))})})}function pt(e,t,n){return[{label:"Knowledge",crumbId:"root"},{label:ue(n),crumbId:"catalog"},{label:t,current:!0}]}function ft(e,t,n,r){re();const i=t.frontmatter??{},l=typeof i.title=="string"?i.title:t.slug??"",d=typeof i.type=="string"?i.type:"",c=ne(),y=pe(e,{rootClass:"workspace-main workspace-editor workspace-page",breadcrumbs:pt(t,l,d),titleHtml:'<input id="ed-title" class="title-input doc-title" type="text" placeholder="Document title" />',actionsHtml:lt(c,{showDiscard:!0}),mainHtml:'<div id="ed-visual-canvas"></div>',railHtml:at({forkedFrom:n.forked_from}),focusMode:c});fe(e,c),V=ot(e,y,n,{onPublished:b=>{(async()=>{var h;if(await r.onPublished(b),(h=r.onDraftsChanged)==null||h.call(r),t.slug){const L=await r.onReloadDoc(t.slug);B(e,L,r)}})()},onClosed:()=>{(async()=>{var b;if((b=r.onDraftsChanged)==null||b.call(r),t.slug)try{const h=await r.onReloadDoc(t.slug);B(e,h,r)}catch(h){r.onError(h instanceof Error?h.message:"Failed to reload page")}})()},onDeleted:()=>{var b;(b=r.onDraftsChanged)==null||b.call(r),t.slug&&r.onReloadDoc(t.slug).then(h=>B(e,h,r),()=>B(e,t,r))},onError:r.onError},r.docIndex)}function B(e,t,n){var k,o,p;re();const r=t.frontmatter??{},i=typeof r.title=="string"?r.title:t.slug??"",l=typeof r.type=="string"?r.type:"",d=ne(),c=t.contentKind??"markdown",y=c==="json"||c==="yaml",b=pe(e,{rootClass:"workspace-main workspace-page",breadcrumbs:pt(t,i,l),titleHtml:`<h1 class="doc-title reader-title">${D(i)}</h1>`,actionsHtml:`
180
- <button type="button" id="toggle-focus" class="btn-ghost" aria-pressed="${d}">
181
- ${d?"Show info":"Hide info"}
182
- </button>
183
- ${y?"":'<button type="button" id="edit-page" class="btn-primary">Edit</button>'}
184
- <button type="button" id="copy-link" class="btn-ghost">Copy link</button>
185
- <button type="button" id="copy-path" class="btn-ghost">Copy path</button>
186
- `,mainHtml:`
187
- <div class="reader-body">
188
- <div id="tab-preview" class="markdown-preview reader-preview"></div>
189
- <section id="reader-backlinks" class="reader-backlinks hidden" aria-label="Backlinks"></section>
190
- </div>
191
- `,railHtml:Mn(t,r),focusMode:d});fe(e,d),Xt(e,{root:()=>{var s;return(s=n.onNavigateRoot)==null?void 0:s.call(n)},catalog:()=>{var s;return(s=n.onNavigateCatalog)==null?void 0:s.call(n)}});const h=b.bodySlot.querySelector("#tab-preview");if(y)h.innerHTML=Dn(t.body??"",c);else{const s=n.docRelativePath&&n.slugByRelative?{docRelativePath:n.docRelativePath,slugByRelative:n.slugByRelative}:void 0;h.innerHTML=wn(t.body??"",s),vn(h),h.querySelectorAll("a.wikilink").forEach(a=>{a.addEventListener("click",u=>{u.preventDefault();const w=a.dataset.slug;w&&e.dispatchEvent(new CustomEvent("navigate-slug",{detail:{slug:w}}))})}),h.querySelectorAll("a.md-link-unresolved").forEach(a=>{a.addEventListener("click",u=>{u.preventDefault()})})}const L=b.railSlot.querySelector("#tab-frontmatter");L.innerHTML='<pre class="frontmatter-yaml"></pre>',L.querySelector("pre").textContent=JSON.stringify(r,null,2);const v=b.railSlot.querySelector("#tab-agent");v.innerHTML='<pre class="agent-json"></pre>',v.querySelector("pre").textContent=JSON.stringify(t.agentShape,null,2),xn(e),Ue(e),(k=e.querySelector("#copy-path"))==null||k.addEventListener("click",()=>{t.path&&navigator.clipboard.writeText(t.path)}),(o=e.querySelector("#copy-link"))==null||o.addEventListener("click",()=>{var s;t.slug&&(navigator.clipboard.writeText($n(t.slug)),(s=n.onCopyLink)==null||s.call(n))});const T=()=>{if(!t.slug||y)return;const s=b.bodySlot;s.innerHTML='<p class="reader-loading">Opening editor…</p>',Ze(t.slug).then(({draft:a})=>{var u;(u=n.onDraftsChanged)==null||u.call(n),ft(e,t,a,n)}).catch(a=>{n.onError(a instanceof Error?a.message:"Edit failed"),B(e,t,n)})};(p=e.querySelector("#edit-page"))==null||p.addEventListener("click",T),t.slug&&!y&&Nt(t.slug).then(({backlinks:s})=>{const a=b.bodySlot.querySelector("#reader-backlinks");!a||s.length===0||(a.classList.remove("hidden"),a.innerHTML=`
192
- <h2 class="reader-backlinks-title">Backlinks</h2>
193
- <div class="reader-backlinks-list">
194
- ${s.map(u=>`<button type="button" class="related-chip" data-slug="${D(u.slug)}">${D(u.title)} <span class="backlink-kind">${D(u.kind)}</span></button>`).join("")}
195
- </div>
196
- `,Ue(e))}).catch(()=>{})}function N(e,t,n){if(re(),!t||!t.found){e.className="workspace-main",e.innerHTML=`
197
- <div class="workspace-empty">
198
- <h1>Knowledge</h1>
199
- <p class="placeholder">Select a page from the tree or use the ⋯ menu to create one.</p>
200
- </div>
201
- `;return}B(e,t,n)}function Oe(e,t,n,r){ft(e,t,n,r)}function Be(e){const t=[];function n(r){for(const i of r.children)i.kind==="page"?t.push(i.slug):n(i)}return n(e),t}function An(e){if(!(e instanceof HTMLElement))return!1;const t=e.tagName;return t==="INPUT"||t==="TEXTAREA"||t==="SELECT"?!0:e.isContentEditable}function Rn(e){const t=n=>{if(n.metaKey||n.ctrlKey||n.altKey)return;const r=An(n.target);if(n.key==="/"&&!r){n.preventDefault(),e.onFocusSearch();return}if(!r)switch(n.key){case"j":n.preventDefault(),e.onNext();break;case"k":n.preventDefault(),e.onPrev();break;case"e":e.onEdit();break}};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)}const gt="http://www.w3.org/2000/svg",te={folder:"M1.75 5.25A1 1 0 0 1 2.75 4.25h3.85L8 5.65h5.25A1 1 0 0 1 14.25 6.65v5.7a1 1 0 0 1-1 1H2.75a1 1 0 0 1-1-1V5.25z",page:"M4.75 2.25A1 1 0 0 0 3.75 3.25v9.5a1 1 0 0 0 1 1h6.5a1 1 0 0 0 1-1V5.35a1 1 0 0 0-.29-.71L9.11 2.54A1 1 0 0 0 8.46 2.25H4.75zm4.35 1.79L11.75 5.5H9.1V4.04z",json:"M5.1 4.5c-.55 0-1 .45-1 1v1.2c0 .45-.2.85-.5 1.15.3.3.5.7.5 1.15v1.2c0 .55.45 1 1 1M10.9 4.5c.55 0 1 .45 1 1v1.2c0 .45.2.85.5 1.15-.3.3-.5.7-.5 1.15v1.2c0 .55-.45 1-1 1",yaml:"M3.75 5h8.5M3.75 8h8.5M3.75 11h5.5"};function Hn(e){if(e.startsWith("folder:"))return"tree-icon--type-folder-catalog";const t=e.replace(/[^a-z0-9-]/gi,"");return t?`tree-icon--type-${t}`:"tree-icon--type-default"}function Q(e,t){return`<span class="tree-icon ${e}" aria-hidden="true">${t}</span>`}function ce(e,t){const n=(t==null?void 0:t.fill)!==!1?"currentColor":"none",r=t!=null&&t.stroke?"currentColor":"none",i=t!=null&&t.stroke?"1.15":"0",l=t!=null&&t.stroke?"round":"butt";return`<svg viewBox="0 0 16 16" xmlns="${gt}" fill="none" aria-hidden="true"><path d="${e}" fill="${n}" stroke="${r}" stroke-width="${i}" stroke-linecap="${l}" stroke-linejoin="round"/></svg>`}function Nn(){return`<svg viewBox="0 0 16 16" xmlns="${gt}" fill="none" aria-hidden="true"><path d="${te.yaml}" stroke="currentColor" stroke-width="1.15" stroke-linecap="round"/></svg>`}function Fn(){return Q("tree-icon--folder",ce(te.folder))}function je(e,t="markdown"){return t==="json"?Q("tree-icon--page tree-icon--structured",ce(te.json,{fill:!1,stroke:!0})):t==="yaml"?Q("tree-icon--page tree-icon--structured",Nn()):Q(`tree-icon--page ${Hn(e)}`,ce(te.page))}function In(e){return Fn()}function ve(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Wn(e){return ve(e)}function ht(e,t){var d;const n=document.createElement("div");n.className="modal",n.innerHTML=`
202
- <div class="modal-card tree-page-modal" role="dialog" aria-modal="true">
203
- <h2 class="modal-title">${ve(e)}</h2>
204
- ${t}
205
- <div class="modal-actions">
206
- <button type="button" class="btn-ghost" data-action="cancel">Отмена</button>
207
- <button type="button" class="btn-primary" data-action="create">Создать</button>
208
- </div>
209
- </div>
210
- `;const r=()=>{n.remove()};n.querySelector(".modal-card").addEventListener("click",c=>{c.stopPropagation()}),(d=n.querySelector('[data-action="cancel"]'))==null||d.addEventListener("click",r),n.addEventListener("click",c=>{c.target===n&&r()});const l=n.querySelector("#tree-page-name");return l.focus(),document.body.appendChild(n),{backdrop:n,nameInput:l,close:r}}function mt(e,t,n,r,i){var d;const l=()=>{const c=t.value.trim();if(!c){t.focus();return}i&&!i()||(n(),r(c))};(d=e.querySelector('[data-action="create"]'))==null||d.addEventListener("click",l),t.addEventListener("keydown",c=>{c.key==="Enter"&&(c.preventDefault(),l()),c.key==="Escape"&&n()})}function _n(e){const t=`
211
- <label class="modal-field">
212
- <span class="modal-label">Имя (без .md)</span>
213
- <input type="text" class="modal-input" id="tree-page-name" autocomplete="off" />
214
- </label>
215
- `,{backdrop:n,nameInput:r,close:i}=ht("Новый файл",t);mt(n,r,i,e)}function Un(e,t){var y;const n=`
216
- <label class="modal-field">
217
- <span class="modal-label">Имя (без .md)</span>
218
- <input type="text" class="modal-input" id="tree-page-name" autocomplete="off" />
219
- </label>
220
- <div class="modal-field">
221
- <span class="modal-label" id="tree-template-label">Шаблон</span>
222
- <div class="tree-template-list" role="listbox" aria-labelledby="tree-template-label">
223
- ${e.map((b,h)=>`
224
- <button
225
- type="button"
226
- class="tree-template-item${h===0?" is-selected":""}"
227
- role="option"
228
- aria-selected="${h===0?"true":"false"}"
229
- data-template-id="${Wn(b.id)}"
230
- >${ve(b.label)}</button>`).join("")}
231
- </div>
232
- </div>
233
- `,{backdrop:r,nameInput:i,close:l}=ht("Новый файл из шаблона",n),d=r.querySelector(".tree-template-list");let c=((y=e[0])==null?void 0:y.id)??"";d.addEventListener("click",b=>{const h=b.target.closest(".tree-template-item");h!=null&&h.dataset.templateId&&(c=h.dataset.templateId,d.querySelectorAll(".tree-template-item").forEach(L=>{const v=L===h;L.classList.toggle("is-selected",v),L.setAttribute("aria-selected",String(v))}))}),mt(r,i,l,b=>{c&&t(b,c)},()=>!!c)}function On(e){if(e.childFolderPath)return e.childFolderPath;const t=e.relativePath.replace(/\\/g,"/");if(t==="README.md")return"";const n=t.lastIndexOf("/"),r=n===-1?t:t.slice(n+1),i=n===-1?"":t.slice(0,n);if(r.toLowerCase()==="readme.md")return i;const l=r.replace(/\.(md|ya?ml|json)$/i,"");return i?`${i}/${l}`:l}function Bn(e){if(e.childFolderPath)return!1;const t=e.relativePath.replace(/\\/g,"/");return t==="README.md"?!1:(t.includes("/")?t.slice(t.lastIndexOf("/")+1):t).toLowerCase()!=="readme.md"}async function jn(e,t){var n,r,i;if(!Bn(e))return On(e);try{const{result:l}=await Ft(e.relativePath);return(n=t.onTreeChanged)==null||n.call(t),(r=t.onExpandFolder)==null||r.call(t,l.folderPath),l.folderPath}catch(l){return(i=t.onError)==null||i.call(t,l instanceof Error?l.message:"Promote page failed"),null}}const vt="application/x-repomind-tree-node";function F(e){return e.replace(/\\/g,"/").replace(/^\/+|\/+$/g,"")}function yt(e){const t=F(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function bt(e,t){const n=F(e),r=F(t);return n?r===n||r.startsWith(`${n}/`):!0}function Ke(e){var n;const t=(n=e.dataTransfer)==null?void 0:n.getData(vt);if(!t)return null;try{const r=JSON.parse(t);return r.kind!=="page"&&r.kind!=="folder"||typeof r.path!="string"?null:{kind:r.kind,path:F(r.path)}}catch{return null}}function ze(e,t){const n=F(e.path),r=F(t);return!(yt(n)===r||bt(n.replace(/\.md$/i,""),r))}function Ve(e,t){const n=F(e.path),r=F(t);return!(n===r||yt(n)===r||bt(n,r))}function Kn(e,t){let n=null,r=null;function i(o){return o.target.closest("[data-drop-dir]")}function l(){n&&(n.classList.remove("tree-drop-target","tree-drop-invalid"),n=null)}function d(o,p){n&&n!==o&&n.classList.remove("tree-drop-target","tree-drop-invalid"),n=o,o.classList.toggle("tree-drop-target",p),o.classList.toggle("tree-drop-invalid",!p)}function c(o){const p=o.dataset.dropDir;return p===void 0?null:p}async function y(o,p){var s,a,u,w,P,M;try{if(o.kind==="page"){const{result:E}=await It(o.path,p);(s=t.onTreeChanged)==null||s.call(t),E.cascadeUpdated.length>0?(a=t.onNotify)==null||a.call(t,`Moved page; updated links in ${E.cascadeUpdated.length} file(s).`):E.inboundWarnings.length>0&&((u=t.onError)==null||u.call(t,`${E.inboundWarnings.length} page(s) still reference old slug "${E.previousSlug}".`));return}const{result:f}=await Wt(o.path,p);(w=t.onTreeChanged)==null||w.call(t),f.cascadeUpdated.length>0&&((P=t.onNotify)==null||P.call(t,`Moved folder; updated links in ${f.cascadeUpdated.length} file(s).`))}catch(f){(M=t.onError)==null||M.call(t,f instanceof Error?f.message:"Move failed")}}const b=o=>{const p=o.target.closest(".tree-row[data-drag-kind]");if(!p||!o.dataTransfer)return;if(o.target.closest(".tree-menu, .tree-toggle")){o.preventDefault();return}const s=p.dataset.dragKind,a=p.dataset.dragPath;if(!s||!a){o.preventDefault();return}const u={kind:s,path:a};r=u,o.dataTransfer.setData(vt,JSON.stringify(u)),o.dataTransfer.setData("text/plain",a),o.dataTransfer.effectAllowed="move",p.classList.add("is-dragging")},h=o=>{r=null;const p=o.target.closest(".tree-row");p==null||p.classList.remove("is-dragging"),l()},L=o=>{!r||!i(o)||o.preventDefault()},v=o=>{const p=r??Ke(o),s=i(o);if(!p||!s)return;const a=c(s);if(a===null)return;const u=p.kind==="page"?ze(p,a):Ve(p,a);o.preventDefault(),o.dataTransfer.dropEffect=u?"move":"none";const w=s.classList.contains("tree-row")?s:s.closest(".tree-row");w&&d(w,u)},T=o=>{const p=i(o);if(!p||p.contains(o.relatedTarget))return;const s=p.classList.contains("tree-row")?p:p.closest(".tree-row");s&&n===s&&l()},k=o=>{o.preventDefault(),o.stopPropagation();const p=r??Ke(o),s=i(o),a=s?c(s):null;l(),r=null,!(!p||a===null||!(p.kind==="page"?ze(p,a):Ve(p,a)))&&y(p,a)};return e.addEventListener("dragstart",b),e.addEventListener("dragend",h),e.addEventListener("dragenter",L),e.addEventListener("dragover",v),e.addEventListener("dragleave",T),e.addEventListener("drop",k),()=>{r=null,e.removeEventListener("dragstart",b),e.removeEventListener("dragend",h),e.removeEventListener("dragenter",L),e.removeEventListener("dragover",v),e.removeEventListener("dragleave",T),e.removeEventListener("drop",k),l()}}function Ge(e,t,n){e.draggable=!0,e.dataset.dragKind=t,e.dataset.dragPath=n}function Je(e,t){e.dataset.dropDir=t}function Xe(e,t){e.dataset.dropDir=t}const wt="repomind-tree-expanded";function zn(){try{const e=localStorage.getItem(wt);return e?new Set(JSON.parse(e)):new Set([""])}catch{return new Set([""])}}function z(e){localStorage.setItem(wt,JSON.stringify([...e]))}function Vn(){document.querySelectorAll(".tree-context-menu").forEach(e=>e.remove())}function Ye(e,t,n,r){Ot(e,t,void 0,n).then(({draft:i})=>{var l,d;(l=r.onTreeChanged)==null||l.call(r),(d=r.onSelectDraft)==null||d.call(r,i)}).catch(i=>{var l;(l=r.onError)==null||l.call(r,i instanceof Error?i.message:"Create page failed")})}function Gn(e,t,n){var k,o,p,s;Vn();const{kind:r,folderPath:i,page:l,templates:d,resolveCreateParent:c}=t,y=r==="page"||r==="folder"&&!!i,b=d.length>0,h=document.createElement("div");h.className="tree-create-menu tree-context-menu",h.innerHTML=`
234
- <button type="button" data-action="folder">Добавить директорию</button>
235
- <button type="button" data-action="page">Создать файл</button>
236
- ${b?'<button type="button" data-action="template">Создать из шаблона</button>':""}
237
- ${y?'<button type="button" data-action="delete" class="tree-menu-danger">Удалить</button>':""}
238
- `;const L=e.getBoundingClientRect();h.style.top=`${L.bottom+4}px`,h.style.left=`${Math.max(8,L.right-200)}px`,document.body.appendChild(h);const v=()=>h.remove(),T=a=>{h.contains(a.target)||(v(),document.removeEventListener("click",T))};setTimeout(()=>document.addEventListener("click",T),0),(k=h.querySelector('[data-action="page"]'))==null||k.addEventListener("click",()=>{v(),(async()=>{const a=await c();a!==null&&_n(u=>{Ye(a,u,void 0,n)})})()}),(o=h.querySelector('[data-action="template"]'))==null||o.addEventListener("click",()=>{v(),(async()=>{const a=await c();a!==null&&Un(d,(u,w)=>{Ye(a,u,w,n)})})()}),(p=h.querySelector('[data-action="folder"]'))==null||p.addEventListener("click",()=>{v();const a=window.prompt("Имя директории:");a!=null&&a.trim()&&(async()=>{const u=await c();u!==null&&Ut(u,a.trim()).then(()=>{var w;return(w=n.onTreeChanged)==null?void 0:w.call(n)}).catch(w=>{var P;(P=n.onError)==null||P.call(n,w instanceof Error?w.message:"Create folder failed")})})()}),(s=h.querySelector('[data-action="delete"]'))==null||s.addEventListener("click",()=>{if(v(),r==="page"&&l){if(!window.confirm(`Удалить «${l.title}»?`))return;Ae(l.relativePath,"page").then(({result:a})=>{var u,w,P,M;(u=n.onFsDeleted)==null||u.call(n,[a.slug]),(w=n.onTreeChanged)==null||w.call(n),a.cascadeUpdated.length>0?(P=n.onNotify)==null||P.call(n,`Deleted ${a.slug}; cleaned links in ${a.cascadeUpdated.length} file(s).`):a.inboundWarnings.length>0&&((M=n.onError)==null||M.call(n,`${a.inboundWarnings.length} page(s) still reference deleted slug "${a.slug}".`))}).catch(a=>{var u;(u=n.onError)==null||u.call(n,a instanceof Error?a.message:"Delete failed")});return}if(r==="folder"&&i){if(!window.confirm(`Удалить «${i}» и всё содержимое?`))return;Ae(i,"folder").then(({result:a})=>{var u,w,P,M;(u=n.onFsDeleted)==null||u.call(n,a.deletedSlugs),(w=n.onTreeChanged)==null||w.call(n),a.cascadeUpdated.length>0?(P=n.onNotify)==null||P.call(n,`Deleted folder; cleaned links in ${a.cascadeUpdated.length} file(s).`):a.inboundWarnings.length>0&&((M=n.onError)==null||M.call(n,`${a.inboundWarnings.length} page(s) still reference deleted page(s).`))}).catch(a=>{var u;(u=n.onError)==null||u.call(n,a instanceof Error?a.message:"Delete folder failed")})}})}function Jn(e,t,n,r){var p;e.innerHTML=`
239
- <nav id="docs-tree" class="docs-tree" aria-label="Documentation tree"></nav>
240
- <section class="catalog-section catalog-drafts">
241
- <button type="button" class="catalog-header" data-catalog="__drafts__" aria-expanded="true">
242
- <span class="catalog-chevron" aria-hidden="true">▾</span>
243
- <span class="catalog-icon catalog-icon--draft" aria-hidden="true">✎</span>
244
- <span class="catalog-label">Drafts</span>
245
- <span class="catalog-count">${n.length}</span>
246
- </button>
247
- <ul id="draft-list" class="catalog-pages"></ul>
248
- </section>
249
- `;const i=e.querySelector("#docs-tree"),l=e.querySelector("#draft-list"),d=zn();let c=null,y=null,b=null;function h(s){d.add("");let a="";for(const u of s.split("/").filter(Boolean))a=a?`${a}/${u}`:u,d.add(a);z(d)}async function L(s,a){var u;try{c||(c=(await _t()).templates),Gn(s,{...a,templates:c},r)}catch(w){(u=r.onError)==null||u.call(r,w instanceof Error?w.message:"Failed to open menu")}}function v(s,a){var $,C,S;const u=!!s.childFolderPath,w=s.childFolderPath??"",P=u&&d.has(w),M=document.createElement("div");M.className=u?"tree-folder tree-page-folder":"tree-page";const f=document.createElement("div");f.className="tree-row",f.style.paddingLeft=`${a*12+8}px`,s.slug===y&&f.classList.add("active"),f.innerHTML=u?`
250
- <button type="button" class="tree-toggle" aria-expanded="${P}">${P?"▾":"▸"}</button>
251
- <button type="button" class="tree-label">
252
- ${je(s.type,s.contentKind)}
253
- <span class="tree-title">${X(s.title)}</span>
254
- </button>
255
- <button type="button" class="tree-menu" title="Actions">⋯</button>
256
- `:`
257
- <span class="tree-spacer" aria-hidden="true"></span>
258
- <button type="button" class="tree-label">
259
- ${je(s.type,s.contentKind)}
260
- <span class="tree-title">${X(s.title)}</span>
261
- </button>
262
- <button type="button" class="tree-menu" title="Actions">⋯</button>
263
- `;const E=s.relativePath.includes("/")?s.relativePath.slice(0,s.relativePath.lastIndexOf("/")):"";if(u&&(($=f.querySelector(".tree-toggle"))==null||$.addEventListener("click",g=>{g.stopPropagation(),d.has(w)?d.delete(w):d.add(w),z(d),k()})),(C=f.querySelector(".tree-menu"))==null||C.addEventListener("click",g=>{g.stopPropagation(),L(g.currentTarget,{kind:"page",parentPath:E,folderPath:s.childFolderPath??E,page:s,resolveCreateParent:()=>jn(s,{onTreeChanged:r.onTreeChanged,onError:r.onError,onExpandFolder:h})})}),(S=f.querySelector(".tree-label"))==null||S.addEventListener("click",()=>{y=s.slug,b=null,k(),o(),r.onSelectSlug(s.slug)}),Ge(f,"page",s.relativePath),s.childFolderPath&&Je(f,s.childFolderPath),M.appendChild(f),u&&P&&s.children){const g=document.createElement("div");g.className="tree-children",s.childFolderPath&&Xe(g,s.childFolderPath);for(const q of s.children)q.kind==="folder"?g.appendChild(T(q,a+1)):g.appendChild(v(q,a+1));M.appendChild(g)}return M}function T(s,a){var M,f,E;const u=document.createElement("div");u.className="tree-folder";const w=d.has(s.relativePath),P=document.createElement("div");if(P.className="tree-row",P.style.paddingLeft=`${a*12+8}px`,P.innerHTML=`
264
- <button type="button" class="tree-toggle" aria-expanded="${w}">${w?"▾":"▸"}</button>
265
- <button type="button" class="tree-label">
266
- ${In()}
267
- <span class="tree-title">${X(s.name)}</span>
268
- </button>
269
- <button type="button" class="tree-menu" title="Actions">⋯</button>
270
- `,(M=P.querySelector(".tree-toggle"))==null||M.addEventListener("click",$=>{$.stopPropagation(),d.has(s.relativePath)?d.delete(s.relativePath):d.add(s.relativePath),z(d),k()}),(f=P.querySelector(".tree-label"))==null||f.addEventListener("click",()=>{d.has(s.relativePath)?d.delete(s.relativePath):d.add(s.relativePath),z(d),k()}),(E=P.querySelector(".tree-menu"))==null||E.addEventListener("click",$=>{$.stopPropagation(),L($.currentTarget,{kind:"folder",parentPath:s.relativePath,folderPath:s.relativePath,resolveCreateParent:async()=>s.relativePath})}),Ge(P,"folder",s.relativePath),Je(P,s.relativePath),u.appendChild(P),w){const $=document.createElement("div");$.className="tree-children",Xe($,s.relativePath);for(const C of s.children??[])C.kind==="folder"?$.appendChild(T(C,a+1)):$.appendChild(v(C,a+1));u.appendChild($)}return u}function k(){i.innerHTML="",i.appendChild(T(t,0))}function o(){if(l.innerHTML="",n.length===0){l.innerHTML='<li class="placeholder page-item">No drafts</li>';return}for(const s of n){const a=document.createElement("li");a.className="page-item",s.id===b&&a.classList.add("active"),a.innerHTML=`<span class="page-title">${X(s.title||s.slug)}</span><span class="status-chip status-draft">draft</span>`,a.addEventListener("click",()=>{var u;b=s.id,y=null,k(),o(),(u=r.onSelectDraft)==null||u.call(r,s)}),l.appendChild(a)}}k(),o(),Kn(i,{onTreeChanged:r.onTreeChanged,onError:r.onError,onNotify:r.onNotify}),(p=e.querySelector('[data-catalog="__drafts__"]'))==null||p.addEventListener("click",()=>{const s=e.querySelector("#draft-list"),a=e.querySelector('[data-catalog="__drafts__"]'),u=(s==null?void 0:s.classList.toggle("hidden"))===!1;a==null||a.setAttribute("aria-expanded",String(u));const w=a==null?void 0:a.querySelector(".catalog-chevron");w&&(w.textContent=u?"▾":"▸")}),e.setActiveSlug=s=>{y=s,b=null,d.add(""),z(d),k(),o()},e.setActiveDraft=s=>{b=s,y=null,k(),o()},e.refreshDrafts=s=>{n.length=0,n.push(...s),o();const a=e.querySelector(".catalog-drafts .catalog-count");a&&(a.textContent=String(n.length))},e.refreshTree=(s,a)=>{t.children=s.children??[],t.emoji=s.emoji,t.indexPageSlug=s.indexPageSlug,t.indexPageType=s.indexPageType,t.indexPageContentKind=s.indexPageContentKind,t.name=s.name,n.length=0,n.push(...a??[]),k(),o()}}function X(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}const Z="repomind-sidebar-width",St=220,Et=420,j=280;function ee(e){return Math.min(Et,Math.max(St,e))}function Xn(){try{const e=localStorage.getItem(Z);if(!e)return j;const t=Number.parseInt(e,10);return Number.isFinite(t)?ee(t):j}catch{return j}}function Y(e,t){e.style.setProperty("--sidebar-width",`${t}px`)}function Yn(e){const t=Xn();Y(e,t);const n=document.createElement("div");n.className="sidebar-resize-handle",n.setAttribute("role","separator"),n.setAttribute("aria-orientation","vertical"),n.setAttribute("aria-label","Resize sidebar"),n.tabIndex=0;const r=e.querySelector("#sidebar");r!=null&&r.nextSibling?e.insertBefore(n,r.nextSibling):e.appendChild(n);let i=!1,l=0,d=t;const c=v=>{if(!i)return;const T=v.clientX-l;Y(e,ee(d+T))},y=()=>{if(!i)return;i=!1,n.classList.remove("is-dragging"),document.body.style.cursor="",document.body.style.userSelect="";const v=ie(e);localStorage.setItem(Z,String(v)),window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",y)},b=v=>{v.button===0&&(i=!0,l=v.clientX,d=ie(e),n.classList.add("is-dragging"),document.body.style.cursor="col-resize",document.body.style.userSelect="none",n.setPointerCapture(v.pointerId),window.addEventListener("pointermove",c),window.addEventListener("pointerup",y))},h=v=>{const T=v.shiftKey?40:16;let k=ie(e);if(v.key==="ArrowLeft")k=ee(k-T);else if(v.key==="ArrowRight")k=ee(k+T);else if(v.key==="Home")k=St;else if(v.key==="End")k=Et;else return;v.preventDefault(),Y(e,k),localStorage.setItem(Z,String(k))},L=()=>{Y(e,j),localStorage.setItem(Z,String(j))};return n.addEventListener("pointerdown",b),n.addEventListener("keydown",h),n.addEventListener("dblclick",L),()=>{n.removeEventListener("pointerdown",b),n.removeEventListener("keydown",h),n.removeEventListener("dblclick",L),n.remove()}}function ie(e){const t=getComputedStyle(e).getPropertyValue("--sidebar-width").trim(),n=Number.parseInt(t,10);return Number.isFinite(n)?n:j}function Qn(e){const t=new EventSource("/api/events");return t.onmessage=()=>{e()},()=>{t.close()}}kn();Bt();function oe(e){return new Map(e.map(t=>[t.relativePath,t.slug]))}function le(e,t){var n;return(n=e.find(r=>r.slug===t))==null?void 0:n.relativePath}function A(e,t=!1){const n=document.querySelector("#banner");n&&(n.textContent=e,n.classList.toggle("error",t),n.classList.remove("hidden"),setTimeout(()=>n.classList.add("hidden"),5e3))}async function Qe(e){var n;const{drafts:t}=await G();return(n=e.refreshDrafts)==null||n.call(e,t),t}async function Zn(){var M;jt(document.querySelector("#theme-toggle"));const e=document.querySelector(".layout");e&&Yn(e);const t=document.querySelector("#sidebar"),n=document.querySelector("#workspace"),r=document.querySelector("#health-toggle"),i=document.querySelector("#stats"),l=document.querySelector("#global-search"),d=document.querySelector("#search-dropdown");let c=[],y=null,b=[],h="workspace",L=null,v=null;async function T(f){var C;const[{tree:E},{drafts:$}]=await Promise.all([Re(),G()]);return(C=f.refreshTree)==null||C.call(f,E,$),b=Be(E),E}function k(f){if(h=f,r.setAttribute("aria-pressed",String(f==="dashboard")),f==="dashboard"){L=Gt(n,{onOpenDraft:$=>{k("workspace"),a($)},onPublished:$=>{(async()=>(await T(t),await o(),A(`Published: ${$}`)))()},onNotify:($,C)=>A($,C)}).refresh;return}L=null,re(),N(n,null,p())}r.addEventListener("click",()=>{k(h==="dashboard"?"workspace":"dashboard")}),Rn({onNext:()=>{if(h!=="workspace"||!y)return;const f=b.indexOf(y);f>=0&&f<b.length-1&&P(b[f+1])},onPrev:()=>{if(h!=="workspace"||!y)return;const f=b.indexOf(y);f>0&&P(b[f-1])},onFocusSearch:()=>{l.focus(),l.select()},onEdit:()=>{h==="workspace"&&y&&w(y)}});async function o(){const f=await zt(),$=await(await fetch("/api/stats")).json(),{drafts:C}=await G(),S=$.brokenRelatedCount>0?` · ${$.brokenRelatedCount} broken links`:"";i.textContent=`v${f.version} · ${f.docCount} pages · ${C.length} drafts${S}`}function p(){return{docIndex:c,onPublished:async f=>{c=(await U()).docs,await T(t),await o(),L==null||L(),A(`Published: ${f}`)},onError:f=>A(f,!0),onReloadDoc:f=>J(f),onDraftsChanged:()=>{Qe(t)},onCopyLink:()=>A("Link copied")}}function s(f){if(f.length===0){d.innerHTML='<p class="search-empty">No matches</p>',d.classList.remove("hidden");return}const E=document.createElement("ul");E.className="search-results";for(const $ of f){const C=c.find(g=>g.slug===$.slug),S=document.createElement("li");S.innerHTML=`
271
- <div class="search-result-title">${$.title}</div>
272
- <div class="search-result-meta">${ue((C==null?void 0:C.type)??"")} · ${$.snippet}</div>
273
- `,S.addEventListener("click",()=>{d.classList.add("hidden"),l.value="",P($.slug)}),E.appendChild(S)}d.innerHTML="",d.appendChild(E),d.classList.remove("hidden")}l.addEventListener("input",()=>{const f=l.value.trim();if(v&&clearTimeout(v),!f){d.classList.add("hidden"),d.innerHTML="";return}v=setTimeout(()=>{Kt(f).then(({results:E})=>s(E)).catch(E=>A(E instanceof Error?E.message:"Search failed",!0))},300)}),document.addEventListener("click",f=>{!d.contains(f.target)&&f.target!==l&&d.classList.add("hidden")});function a(f){var $;k("workspace"),($=t.setActiveDraft)==null||$.call(t,f.id);const E=f.forked_from??(c.some(C=>C.slug===f.slug)?f.slug:null);if(E){J(E).then(C=>{Oe(n,C,f,{...p(),docRelativePath:le(c,E),slugByRelative:oe(c),onPublished:async S=>{await p().onPublished(S),await P(f.slug)}})}).catch(()=>{Fe(n,f,u(),c)});return}Fe(n,f,u(),c)}function u(){return{onPublished:f=>{(async()=>{c=(await U()).docs,await T(t),await o(),L==null||L(),A(`Published: ${f}`);const $=c.find(C=>C.slug===draft.slug);$&&await P($.slug)})()},onClosed:()=>{N(n,null,p())},onDeleted:()=>{(async()=>(await T(t),N(n,null,p())))()},onError:f=>A(f,!0)}}async function w(f){if(h==="workspace")try{const E=await J(f),{draft:$}=await Ze(f);await Qe(t),Oe(n,E,$,{...p(),docRelativePath:le(c,f),slugByRelative:oe(c)})}catch(E){A(E instanceof Error?E.message:"Edit failed",!0)}}async function P(f,E={}){var S;const $=E.updateUrl??!0,C=E.urlMode??"push";h==="dashboard"&&k("workspace"),y=f,(S=t.setActiveSlug)==null||S.call(t,f);try{const g=await J(f),q=le(c,f);N(n,g,{...p(),docRelativePath:q,slugByRelative:oe(c)}),$&&Pn(f,C)}catch(g){A(g instanceof Error?g.message:"Failed to load doc",!0)}}n.addEventListener("navigate-slug",(f=>{P(f.detail.slug)}));try{await o();const[f,{tree:E},{drafts:$}]=await Promise.all([U(),Re(),G()]);c=f.docs,b=Be(E),Jn(t,E,$,{onSelectSlug:g=>{P(g)},onSelectDraft:g=>a(g),onTreeChanged:()=>{(async()=>(c=(await U()).docs,await T(t),await o()))()},onFsDeleted:g=>{(async()=>(c=(await U()).docs,y&&g.includes(y)&&(y=null,N(n,null,p())),await T(t),await o()))()},onError:g=>A(g,!0),onNotify:g=>A(g)}),Qn(()=>{(async()=>{try{c=(await U()).docs,await T(t),await o(),y&&!c.some(q=>q.slug===y)&&(y=null,N(n,null,p()))}catch{}})()}),Cn(g=>{if(!g){y=null,N(n,null,p());return}c.some(q=>q.slug===g)&&P(g,{updateUrl:!1})}),N(n,null,p());const C=me(),S=Ln();if(S){const g=$.find(q=>q.id===S);g?a(g):A(`Unknown draft: ${S}`,!0)}else if(C)c.some(g=>g.slug===C)?await P(C,{updateUrl:!1}):A(`Unknown page: ${C}`,!0);else{const g=En(),q=g?(M=c.find(se=>se.relativePath===g))==null?void 0:M.slug:void 0;g&&q?await P(q,{updateUrl:!1}):g?A(`Unknown path: ${g}`,!0):E.indexPageSlug?await P(E.indexPageSlug,{urlMode:"replace"}):c.length>0&&c[0]&&await P(c[0].slug,{urlMode:"replace"})}}catch(f){A(f instanceof Error?f.message:"Failed to load workspace",!0)}}Zn();export{it as _,nn as a,vn as e,nr as f,st as p};
@@ -1 +0,0 @@
1
- import{s as r,b as e,a,S as s}from"./chunk-AQP2D5EJ-BayHdr67.js";import{_ as i}from"./mermaid.core-BZZdRyuR.js";import"./transform-BwXaE9hv.js";import"./chunk-55IACEB6-BCx7dyYV.js";import"./chunk-2J33WTMH-0LcH4vIA.js";import"./main-BeHrzLrS.js";import"./theme-DS1fBM5L.js";import"./editor-CTtDusro.js";var b={parser:a,get db(){return new s(2)},renderer:e,styles:r,init:i(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")};export{b as diagram};
@@ -1 +0,0 @@
1
- :root,[data-theme=light]{--bg: #ffffff;--panel: #f4f5f7;--border: #dfe1e6;--text: #172b4d;--muted: #626f86;--accent: #0c66e4;--accent-hover: #0055cc;--accent-subtle: #e9f2ff;--link: #0c66e4;--link-hover: #0055cc;--link-underline: rgba(12, 102, 228, .4);--wikilink-underline: rgba(12, 102, 228, .55);--table-stripe: #fafbfc;--table-header: #f4f5f7;--shadow: rgba(9, 30, 66, .15);--folder-icon-bg: #dfe1e6;--folder-icon-fg: #42526e}[data-theme=dark]{--bg: #0f1419;--panel: #1a2332;--border: #2d3a4f;--text: #e8edf4;--muted: #8b9cb3;--accent: #5b9fd4;--accent-hover: #7eb8e8;--accent-subtle: rgba(91, 159, 212, .18);--link: #7eb8ff;--link-hover: #a8d4ff;--link-underline: rgba(126, 192, 255, .72);--wikilink-underline: rgba(126, 192, 255, .85);--table-stripe: rgba(255, 255, 255, .03);--table-header: #1a2332;--shadow: rgba(0, 0, 0, .45);--folder-icon-bg: #3d4f6f;--folder-icon-fg: #f4f5f7}*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--text);min-height:100vh}#app{display:flex;flex-direction:column;height:100vh}.topbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.5rem 1rem;border-bottom:1px solid var(--border);background:var(--bg);flex-shrink:0}.topbar-left{display:flex;align-items:center;gap:1rem;flex:1;min-width:0}.topbar-right{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.topbar-search-wrap{position:relative;flex:1;max-width:420px}.topbar-search-wrap input{width:100%;padding:.45rem .75rem;border:1px solid var(--border);border-radius:var(--rm-radius, 4px);background:var(--panel);font-size:.875rem}.topbar-search-wrap input:focus{outline:2px solid var(--accent-subtle);border-color:var(--accent)}.search-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;background:var(--bg);border:1px solid var(--border);border-radius:6px;box-shadow:0 8px 24px var(--shadow);max-height:320px;overflow:auto;z-index:50}.search-empty{margin:0;padding:.75rem 1rem;color:var(--muted);font-size:.85rem}.search-result-title{font-weight:600;font-size:.875rem}.search-result-meta{font-size:.75rem;color:var(--muted);margin-top:.15rem}.brand{font-weight:700;letter-spacing:.02em}.stats{font-size:.85rem;color:var(--muted)}.layout{display:grid;grid-template-columns:var(--sidebar-width, 280px) 4px 1fr;flex:1;min-height:0}.sidebar-resize-handle{width:4px;cursor:col-resize;background:transparent;flex-shrink:0;position:relative;z-index:2}.sidebar-resize-handle:hover,.sidebar-resize-handle.is-dragging{background:color-mix(in srgb,var(--accent) 35%,transparent)}.sidebar-resize-handle:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.sidebar{background:var(--bg);border-right:1px solid var(--border);overflow:auto;padding:.75rem .5rem}.workspace{display:flex;flex-direction:column;min-height:0;min-width:0;background:var(--bg)}.workspace-main{flex:1;min-height:0;overflow:auto;padding:1.5rem 2rem;display:flex;flex-direction:column}.graph-panel{position:relative;height:100%;width:100%;background:var(--panel)}.graph-panel svg{display:block;width:100%;height:100%}.graph-page{display:flex;flex-direction:column;height:100vh}.graph-fullscreen{flex:1;min-height:0;position:relative;background:var(--panel)}.graph-fullscreen svg{display:block;width:100%;height:100%}.graph-back{text-decoration:none;display:inline-flex;align-items:center}.graph-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:.85rem}.workspace-toolbar{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1rem;flex-shrink:0}.workspace-title-row{flex:1;min-width:0}.doc-title{font-size:1.75rem;font-weight:600;margin:0;line-height:1.25}.title-input{width:100%;font-size:1.35rem;font-weight:600;padding:.35rem .5rem;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--text)}.title-input:hover,.title-input:focus{border-color:var(--border);background:var(--panel);outline:none}.workspace-badges{display:flex;flex-wrap:wrap;gap:.35rem}.workspace-actions{display:flex;gap:.5rem;flex-shrink:0}.workspace-editor .workspace-actions{width:100%}.workspace-empty{margin:auto;text-align:center;max-width:360px}.workspace-empty h1{font-size:1.25rem;margin:0 0 .5rem}.workspace-footer{margin-top:auto;padding-top:1rem;border-top:1px solid var(--border);flex-shrink:0}.workspace-footer code{font-size:.75rem;color:var(--muted);word-break:break-all}.meta-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.75rem;margin-bottom:1rem;flex-shrink:0}.field-wide{grid-column:span 2}.split-editor{display:grid;grid-template-columns:1fr 1fr;gap:0;flex:1;min-height:320px;border:1px solid var(--border);border-radius:6px;overflow:hidden}.split-pane{display:flex;flex-direction:column;min-height:0;min-width:0}.split-pane+.split-pane{border-left:1px solid var(--border)}.pane-label{font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:.35rem .75rem;background:var(--panel);border-bottom:1px solid var(--border);flex-shrink:0}.split-pane textarea{flex:1;min-height:280px;border:none;border-radius:0;resize:none;padding:.75rem;line-height:1.55}.pane-preview{flex:1;overflow:auto;padding:.75rem 1rem;min-height:280px}.workspace-main:has(.workspace-editor){padding-bottom:.75rem}.workspace-editor{display:flex;flex-direction:column;flex:1;min-height:0}.visual-canvas{flex:1;min-height:320px;border:1px solid var(--border);border-radius:6px;overflow:visible;display:flex;flex-direction:column;background:var(--bg)}.visual-canvas .visual-editor-mount{flex:1;min-height:0;overflow:auto;border-radius:0 0 6px 6px}.visual-canvas .ProseMirror{min-height:280px;padding:.75rem 1rem;max-width:72ch;line-height:1.6;outline:none}.visual-canvas .ProseMirror h1{font-size:1.75rem;margin:.5rem 0}.visual-canvas .ProseMirror h2{font-size:1.35rem;margin:.5rem 0}.visual-canvas .ProseMirror h3{font-size:1.1rem;margin:.5rem 0}.visual-canvas .ProseMirror p{margin:.35rem 0}.visual-canvas .ProseMirror ul,.visual-canvas .ProseMirror ol{margin:.35rem 0;padding-left:1.5rem}.visual-canvas .ProseMirror blockquote{border-left:3px solid var(--border);margin:.5rem 0;padding-left:.75rem;color:var(--muted)}.visual-canvas .ProseMirror pre{background:var(--panel);border-radius:4px;padding:.75rem;overflow-x:auto;font-size:.85rem}.visual-canvas .ProseMirror img{max-width:100%;height:auto;border-radius:4px}.visual-canvas .ProseMirror table{width:100%;border-collapse:collapse;margin:.75rem 0;font-size:.9rem}.visual-canvas .ProseMirror th,.visual-canvas .ProseMirror td{border:1px solid var(--border);padding:.35rem .5rem;vertical-align:top}.visual-canvas .ProseMirror th{background:var(--table-header);font-weight:600}.visual-canvas .ProseMirror tr:nth-child(2n) td{background:var(--table-stripe)}.mermaid-editor-preview{margin:.35rem 0 .75rem;padding:.75rem;border:1px dashed var(--border);border-radius:6px;background:var(--panel);max-width:72ch;overflow-x:auto}.mermaid-editor-preview .mermaid-placeholder{margin:0;font-size:.8rem;color:var(--muted)}.visual-canvas .ProseMirror p.is-editor-empty:first-child:before{color:var(--muted);content:attr(data-placeholder);float:left;height:0;pointer-events:none}.visual-canvas .ProseMirror a{color:var(--link);text-decoration:underline;text-decoration-color:var(--link-underline);text-underline-offset:2px}.visual-canvas .ProseMirror a:hover{color:var(--link-hover);text-decoration-color:var(--link-hover)}.wikilink-chip{color:var(--link);background:var(--accent-subtle);border:1px solid color-mix(in srgb,var(--link) 40%,transparent);padding:.1rem .35rem;border-radius:4px;font-size:.9em;text-decoration:none;cursor:pointer}.publish-split{display:inline-flex;align-items:stretch;position:relative}.publish-split .publish-main{border-top-right-radius:0;border-bottom-right-radius:0}.publish-menu-trigger{border-top-left-radius:0;border-bottom-left-radius:0;border-left:1px solid rgba(255,255,255,.25);padding:0 .45rem;min-width:2rem}.publish-menu{position:absolute;top:calc(100% + 4px);right:0;z-index:200;background:var(--panel);border:1px solid var(--border);border-radius:6px;box-shadow:0 8px 24px var(--shadow);min-width:10rem;display:flex;flex-direction:column}.publish-menu.hidden{display:none}.publish-menu button{border:none;background:transparent;color:var(--text);text-align:left;padding:.5rem .75rem;cursor:pointer;font-size:.85rem}.publish-menu button:hover{background:var(--accent-subtle)}.md-source{max-height:50vh;overflow:auto;background:var(--panel);border:1px solid var(--border);border-radius:4px;padding:.75rem;font-size:.8rem;white-space:pre-wrap;word-break:break-word}.modal-title{margin:0 0 .75rem;font-size:1rem}.save-status{font-size:.75rem;color:var(--muted);align-self:center;min-width:3.5rem}.page-title-slot{flex:1;min-width:0}.props-section{margin-bottom:1rem}.props-label{font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:.35rem}.props-chip-row{position:relative}.props-chip-trigger,.props-chip{font-size:.8rem;padding:.2rem .5rem;border-radius:999px;border:1px solid var(--border);background:var(--bg);cursor:pointer}.props-chip-list{display:flex;flex-wrap:wrap;gap:.35rem;margin-bottom:.35rem}.props-removable-chip{display:inline-flex;align-items:center;gap:.2rem}.chip-remove{border:none;background:transparent;color:var(--muted);cursor:pointer;padding:0;line-height:1;font-size:.9rem}.chip-remove:hover{color:var(--text)}.props-add-input,.props-slug-input{width:100%;border:1px solid var(--border);border-radius:4px;padding:.35rem .5rem;font-size:.85rem;background:var(--bg);color:var(--text)}.props-hint{font-size:.75rem;color:var(--muted);margin-top:.25rem}.props-dropdown{position:absolute;top:calc(100% + 4px);left:0;z-index:300;min-width:10rem;max-height:200px;overflow-y:auto;background:var(--panel);border:1px solid var(--border);border-radius:6px;box-shadow:0 8px 24px var(--shadow);display:flex;flex-direction:column}.props-dropdown.hidden{display:none}.props-dropdown-item{border:none;background:transparent;color:var(--text);text-align:left;padding:.45rem .6rem;cursor:pointer;font-size:.8rem;display:flex;flex-direction:column;align-items:flex-start;gap:.1rem}.props-dropdown-item:hover{background:var(--accent-subtle)}.slash-menu{position:fixed;z-index:400;max-height:280px;overflow-y:auto;background:var(--panel);border:1px solid var(--border);border-radius:6px;box-shadow:0 8px 24px var(--shadow);display:flex;flex-direction:column}.slash-menu.hidden{display:none}.slash-option{display:flex;align-items:baseline;gap:.5rem;border:none;background:transparent;color:var(--text);text-align:left;padding:.45rem .6rem;cursor:pointer}.slash-option:hover{background:var(--accent-subtle)}.slash-option-id{font-family:var(--mono, monospace);font-size:.8rem;color:var(--link);min-width:4.5rem}.slash-option-label{font-size:.8rem;color:var(--muted)}.workspace-editor #ed-visual-canvas{flex:1;min-height:0}.reader-body{flex:1;min-height:0;overflow:auto}.reader-preview{max-width:72ch;line-height:1.6}.reader-loading{color:var(--muted);padding:1rem 0}.workspace-page.workspace-editor #ed-visual-canvas{flex:1;min-height:0}.workspace-editor .visual-toolbar{position:sticky;top:0;z-index:30;margin-bottom:0;background:var(--bg);border-bottom:1px solid var(--border)}.workspace-editor .visual-toolbar.visual-toolbar--collapsed{max-height:none;opacity:1;overflow:visible;pointer-events:auto;margin-bottom:.5rem;border-bottom:1px solid var(--border)}.visual-toolbar--collapsed{max-height:0;overflow:hidden;opacity:0;padding-top:0;padding-bottom:0;margin:0;border:none;pointer-events:none;transition:max-height .15s ease,opacity .15s ease}.visual-toolbar:not(.visual-toolbar--collapsed){max-height:3rem;opacity:1}.editor-toolbar.visual-toolbar{min-height:3rem;padding:0;background:var(--panel);border:1px solid var(--border);border-radius:6px 6px 0 0;overflow:visible;position:relative;z-index:30;flex-shrink:0}.workspace-editor .editor-toolbar.visual-toolbar{border-radius:0;border-left:none;border-right:none;border-top:none;background:var(--bg)}.toolbar-inner{display:flex;align-items:center;gap:.15rem;min-height:3rem;padding:0 .35rem;overflow-x:auto;overflow-y:visible;scrollbar-width:thin}.toolbar-group{display:flex;align-items:center;gap:.1rem;flex-shrink:0}.toolbar-sep{width:1px;height:1.25rem;background:var(--border);margin:0 .2rem;flex-shrink:0}.toolbar-btn{display:inline-flex;align-items:center;justify-content:center;min-width:2rem;height:2rem;padding:0 .35rem;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--text);cursor:pointer;flex-shrink:0}.toolbar-btn:hover{background:var(--accent-subtle);border-color:color-mix(in srgb,var(--accent) 25%,transparent);color:var(--accent)}.toolbar-btn.is-active{background:var(--accent-subtle);border-color:color-mix(in srgb,var(--accent) 45%,transparent);color:var(--accent)}.toolbar-style-trigger{min-width:7.5rem;justify-content:space-between;gap:.25rem;padding:0 .5rem;font-size:.8rem;font-weight:500}.toolbar-style-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.toolbar-icon,.toolbar-btn svg.lucide,.toolbar-dropdown-item-icon svg.lucide{width:1rem;height:1rem;flex-shrink:0;display:block}.toolbar-dropdown{position:relative;flex-shrink:0}.toolbar-dropdown-menu{position:absolute;top:calc(100% + 4px);left:0;z-index:50;min-width:9rem;padding:.25rem;background:var(--bg);border:1px solid var(--border);border-radius:6px;box-shadow:0 8px 24px var(--shadow)}.toolbar-dropdown-menu--floating{position:fixed;z-index:500}.toolbar-dropdown-menu.hidden{display:none}.toolbar-dropdown-item{display:block;width:100%;border:none;border-radius:4px;background:transparent;color:var(--text);text-align:left;padding:.45rem .6rem;font-size:.85rem;cursor:pointer}.toolbar-dropdown-item--icon{display:flex;align-items:center;gap:.5rem}.toolbar-dropdown-item-icon{display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem;color:var(--muted);flex-shrink:0}.toolbar-dropdown-item--icon:hover .toolbar-dropdown-item-icon{color:var(--accent)}.toolbar-dropdown-item:hover{background:var(--accent-subtle);color:var(--accent)}.toolbar-dropdown-item.is-current{background:var(--accent-subtle);color:var(--accent);font-weight:600}.editor-bubble-menu{display:flex;gap:.15rem;padding:.25rem;background:var(--panel);border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 16px #0000001f}.bubble-btn{display:inline-flex;align-items:center;justify-content:center;min-width:2rem;height:2rem;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--text);cursor:pointer;font-size:.85rem;font-weight:600}.bubble-btn:hover{background:var(--accent-subtle);border-color:color-mix(in srgb,var(--accent) 25%,transparent);color:var(--accent)}.related-row{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;margin-bottom:.75rem;font-size:.85rem}.related-label{color:var(--muted)}.related-chip{padding:.2rem .5rem;border:1px solid var(--border);border-radius:999px;background:var(--panel);color:var(--link);cursor:pointer;font-size:.8rem}.related-chip:hover{border-color:var(--link);color:var(--link-hover)}h2{font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:0 0 .5rem}.field{margin-bottom:0}.field label{display:block;font-size:.7rem;color:var(--muted);margin-bottom:.2rem}input,select{width:100%;padding:.4rem .5rem;border:1px solid var(--border);border-radius:4px;background:var(--bg);color:var(--text);font-size:.85rem}.doc-list,.search-results{list-style:none;padding:0;margin:0}.doc-list li,.search-results li{padding:.4rem .5rem;border-radius:4px;cursor:pointer;font-size:.9rem}.doc-list li:hover,.search-results li:hover,.doc-list li.active{background:var(--accent-subtle)}.doc-list .meta,.search-results .snippet{font-size:.75rem;color:var(--muted)}.tabs{display:flex;gap:.25rem;margin-bottom:.75rem}.tab{padding:.35rem .6rem;border:1px solid var(--border);background:transparent;color:var(--muted);border-radius:4px;cursor:pointer;font-size:.8rem}.tab.active{color:var(--text);border-color:var(--accent);background:var(--accent-subtle)}.tab-panel{display:none}.tab-panel.active{display:block}.markdown-preview{line-height:1.6;overflow-x:auto}.markdown-preview ul,.markdown-preview ol{margin:.75rem 0;padding-left:1.5rem}.markdown-preview li{margin:.25rem 0}.markdown-preview ul.contains-task-list{list-style:none;padding-left:0}.markdown-preview li.task-list-item{list-style:none;margin:.35rem 0;padding:0}.markdown-preview .task-list-item-label{display:flex;align-items:flex-start;gap:.55rem;cursor:default;line-height:1.5}.markdown-preview .task-list-item-checkbox{margin:.2rem 0 0;width:1rem;height:1rem;flex-shrink:0;accent-color:var(--accent)}.markdown-preview .task-list-item-content{flex:1;min-width:0}.markdown-preview .task-list-item-content>p{margin:0}.markdown-preview blockquote{margin:1rem 0;padding:.5rem 1rem;border-left:3px solid var(--accent);color:var(--muted);background:var(--accent-subtle);border-radius:0 4px 4px 0}.markdown-preview :not(pre)>code{font-family:ui-monospace,monospace;font-size:.88em;background:var(--panel);padding:.1rem .35rem;border-radius:3px;border:1px solid var(--border)}.markdown-preview .mermaid-wrapper{margin:1rem 0;padding:.75rem;background:var(--panel);border:1px solid var(--border);border-radius:6px;overflow-x:auto}.markdown-preview .mermaid-wrapper pre.mermaid{margin:0;padding:0;background:transparent;border:none}.markdown-preview .mermaid-error{border-color:#c0392b}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3{margin-top:1rem}.markdown-preview table{width:100%;border-collapse:collapse;margin:1rem 0;font-size:.9rem;border:1px solid var(--border);table-layout:auto}.markdown-preview thead th{background:var(--table-header);font-weight:600}.markdown-preview th,.markdown-preview td{border:1px solid var(--border);padding:.5rem .75rem;text-align:left;vertical-align:top;min-width:4rem}.markdown-preview tbody tr:nth-child(2n) td{background:var(--table-stripe)}.markdown-preview tbody tr:hover td{background:var(--accent-subtle)}.markdown-preview pre{overflow:auto;background:var(--panel);padding:.5rem;border-radius:4px}.agent-json,.frontmatter-yaml,.structured-preview{font-family:ui-monospace,monospace;font-size:.8rem;white-space:pre-wrap;word-break:break-word;background:var(--panel);padding:.75rem;border-radius:4px;border:1px solid var(--border);margin:0;overflow:auto}.structured-preview--json code,.structured-preview--yaml code{color:var(--text)}.badge{display:inline-block;font-size:.7rem;padding:.15rem .45rem;border-radius:3px;background:var(--border)}.badge-draft{background:#e0c04a40;color:#e0c04a}.banner{position:fixed;bottom:1rem;left:50%;transform:translate(-50%);background:#2d5a3d;color:#fff;padding:.5rem 1rem;border-radius:6px;font-size:.85rem;z-index:200}.banner.error{background:#8b2e2e}.banner.hidden,.hidden{display:none}.node circle{stroke:var(--border);stroke-width:1.5px;cursor:pointer}.node.selected circle{stroke:var(--accent);stroke-width:3px}.node text{font-size:9px;fill:var(--text);pointer-events:none}.link{stroke:var(--border);stroke-opacity:.6}.placeholder{color:var(--muted);font-size:.9rem}.sidebar-actions{padding:0 .25rem .75rem}.catalog-tree{display:flex;flex-direction:column;gap:.25rem}.catalog-section{margin-bottom:.25rem}.catalog-header{width:100%;display:flex;align-items:center;gap:.35rem;padding:.35rem .5rem;border:none;background:transparent;color:var(--text);font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;cursor:pointer;border-radius:4px}.catalog-icon{width:18px;height:18px;border-radius:3px;display:inline-flex;align-items:center;justify-content:center;font-size:.65rem;font-weight:700;color:#fff;flex-shrink:0;text-transform:none;letter-spacing:0}.catalog-icon--sm{width:16px;height:16px;font-size:.6rem}.catalog-icon--adr{background:#c97b4a}.catalog-icon--feature-spec{background:#6abf69}.catalog-icon--glossary-term{background:#b07cc6}.catalog-icon--open-question{background:#e0c04a;color:#172b4d}.catalog-icon--agent-instruction{background:#5b9fd4}.catalog-icon--draft{background:var(--muted)}.catalog-header:hover{background:var(--panel)}.catalog-chevron{width:1rem;color:var(--muted);flex-shrink:0}.catalog-label{flex:1;text-align:left}.catalog-count{color:var(--muted);font-weight:500}.catalog-pages{list-style:none;margin:0;padding:0 0 .25rem 1.25rem}.page-item{display:flex;align-items:center;gap:.35rem;padding:.35rem .5rem;border-radius:4px;cursor:pointer;font-size:.875rem}.editor-meta{grid-template-columns:1fr;margin-top:.75rem}.editor-meta .field-wide{grid-column:span 1}.editor-badges{margin-bottom:.5rem}.workspace-editor .split-editor{min-height:360px}.page-item:hover{background:var(--accent-subtle)}.page-item.active{background:var(--accent-subtle);color:var(--accent)}.page-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-item-text{display:flex;flex-direction:column;flex:1;min-width:0;gap:.1rem}.page-path{font-size:.7rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.catalog-subfolder{list-style:none;margin:.15rem 0 .25rem}.catalog-subheader{display:flex;align-items:center;gap:.35rem;width:100%;padding:.25rem .35rem;border:none;border-radius:4px;background:transparent;color:var(--text);font-size:.8rem;cursor:pointer}.catalog-subheader:hover{background:var(--accent-subtle)}.catalog-pages--nested{padding-left:.75rem}.catalog-icon--folder{background:var(--folder-icon-bg, #dfe1e6);color:var(--folder-icon-fg, #42526e)}.docs-tree{display:flex;flex-direction:column;gap:.1rem;margin-bottom:.75rem}.tree-row{display:flex;align-items:center;gap:.25rem;min-height:28px;border-radius:4px;padding-right:.25rem}.tree-row:hover .tree-add,.tree-row:focus-within .tree-add{opacity:1}.tree-row.active{background:var(--accent-subtle)}.tree-row.tree-drop-target{outline:2px solid var(--accent);outline-offset:-2px;background:var(--accent-subtle)}.tree-row.tree-drop-invalid{outline:2px dashed var(--danger, #c62828);outline-offset:-2px}.tree-toggle,.tree-spacer{width:18px;flex-shrink:0;border:none;background:transparent;color:var(--muted);cursor:pointer;padding:0;font-size:.7rem}.tree-label{flex:1;min-width:0;display:flex;align-items:center;gap:.4rem;border:none;background:transparent;color:var(--text);cursor:pointer;text-align:left;padding:.2rem 0}.tree-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem}.tree-icon{width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--muted)}.tree-icon svg{width:16px;height:16px;display:block}.tree-icon--folder{color:var(--folder-icon-fg)}.tree-icon--folder svg path{fill:var(--folder-icon-bg);stroke:var(--folder-icon-fg);stroke-width:.6}.tree-icon--page svg path{fill:currentColor}.tree-icon--structured{color:var(--muted)}.tree-icon--type-wiki-page,.tree-icon--type-default{color:#5b8fc7}.tree-icon--type-adr{color:#c97b4a}.tree-icon--type-feature-spec{color:#6abf69}.tree-icon--type-glossary-term{color:#b07cc6}.tree-icon--type-open-question{color:#c9a832}.tree-icon--type-agent-instruction{color:#5b9fd4}.tree-icon--type-folder-catalog{color:var(--folder-icon-fg)}.tree-add{opacity:0;width:22px;height:22px;border:1px solid var(--border);border-radius:4px;background:var(--panel);color:var(--text);cursor:pointer;font-size:.95rem;line-height:1;flex-shrink:0}.tree-add:hover{border-color:var(--accent);color:var(--accent)}.tree-create-menu{position:fixed;z-index:300;min-width:140px;background:var(--panel);border:1px solid var(--border);border-radius:6px;box-shadow:0 8px 24px #00000026;padding:.25rem;display:flex;flex-direction:column}.tree-create-menu button{border:none;background:transparent;color:var(--text);text-align:left;padding:.45rem .6rem;border-radius:4px;cursor:pointer;font-size:.85rem}.tree-create-menu button:hover{background:var(--accent-subtle)}.tree-create-menu button.tree-menu-danger{color:#c0392b}.tree-create-menu button.tree-menu-danger:hover{background:#c0392b1f}.link-health-stats{display:flex;flex-wrap:wrap;gap:1rem;margin-bottom:.75rem}.link-health-stat{font-size:.9rem;color:var(--muted)}.link-health-value{display:block;font-size:1.35rem;font-weight:600;color:var(--text)}.tree-menu{width:1.5rem;height:1.5rem;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--muted);cursor:pointer;font-size:.95rem;line-height:1;flex-shrink:0}.tree-menu:hover{border-color:var(--border);color:var(--text)}.tree-menu-label{font-size:.7rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:.35rem .6rem .15rem}.split-editor .editor-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem;margin-bottom:.35rem}.split-editor .editor-toolbar button{border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:4px;padding:.2rem .45rem;font-size:.75rem;cursor:pointer}.split-editor .editor-toolbar button:hover{border-color:var(--accent);color:var(--accent)}.split-editor .editor-toolbar-sep{width:1px;height:1rem;background:var(--border);margin:0 .15rem}.wikilink-menu{position:fixed;z-index:500;max-height:280px;overflow-y:auto;background:var(--bg);border:1px solid var(--border);border-radius:6px;box-shadow:0 8px 24px var(--shadow);display:flex;flex-direction:column}.wikilink-menu-hint{margin:0;padding:.4rem .6rem .25rem;font-size:.7rem;color:var(--muted);border-bottom:1px solid var(--border)}.wikilink-menu-hint code{font-size:.68rem}.wikilink-menu-empty{margin:0;padding:.6rem .75rem;font-size:.8rem;color:var(--muted)}.wikilink-menu-empty code{font-size:.75rem}.wikilink-menu.hidden{display:none}.wikilink-option{display:flex;flex-direction:column;align-items:flex-start;gap:.1rem;border:none;background:transparent;color:var(--text);text-align:left;padding:.45rem .6rem;cursor:pointer}.wikilink-option:hover,.wikilink-option--active{background:var(--accent-subtle)}.wikilink-option--active{outline:1px solid color-mix(in srgb,var(--accent) 40%,transparent);outline-offset:-1px}.wikilink-option--custom .wikilink-option-slug{font-family:inherit;font-size:.8rem}.wikilink-option-slug{font-family:var(--mono, monospace);font-size:.8rem}.wikilink-option-title{font-size:.75rem;color:var(--muted)}.publish-related{margin-top:.75rem;padding-top:.75rem;border-top:1px solid var(--border)}.publish-related-list{margin:.5rem 0 0;padding-left:1.25rem;font-size:.85rem}.status-chip{font-size:.65rem;padding:.1rem .35rem;border-radius:3px;background:var(--panel);color:var(--muted);text-transform:uppercase;flex-shrink:0}.status-accepted{display:none}.status-draft{background:#fff7d6;color:#974f0c}[data-theme=dark] .status-draft{background:#e0c04a33;color:#e0c04a}.breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:.35rem;margin-bottom:1rem;font-size:.85rem}.crumb{border:none;background:transparent;color:var(--muted);cursor:pointer;padding:0;font:inherit}.crumb:hover{color:var(--link);text-decoration:underline}.crumb.current{color:var(--text);font-weight:600;cursor:default;text-decoration:none}.crumb-sep{color:var(--muted)}.page-layout{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:1.5rem;align-items:start}.page-layout--focus{grid-template-columns:minmax(0,1fr)}.page-layout--focus .page-info{display:none}.reader-backlinks{margin-top:2rem;padding-top:1.25rem;border-top:1px solid var(--border)}.reader-backlinks.hidden{display:none}.reader-backlinks-title{font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 .75rem}.reader-backlinks-list{display:flex;flex-wrap:wrap;gap:.35rem}.backlink-kind{font-size:.65rem;color:var(--muted);text-transform:uppercase;margin-left:.25rem}.markdown-preview a{color:var(--link);text-decoration:underline;text-decoration-color:var(--link-underline);text-underline-offset:2px;text-decoration-thickness:1px}.markdown-preview a:hover{color:var(--link-hover);text-decoration-color:var(--link-hover)}.markdown-preview a.wikilink{color:var(--link);text-decoration:none;border-bottom:1px solid var(--wikilink-underline);padding-bottom:.05em}.markdown-preview a.wikilink:hover{color:var(--link-hover);border-bottom-color:var(--link-hover);text-decoration:none}.markdown-preview a.md-link-unresolved{color:var(--muted);text-decoration:line-through;cursor:not-allowed}.markdown-preview img.markdown-image{display:block;max-width:100%;height:auto;margin:1rem 0;border-radius:6px;border:1px solid var(--border);background:var(--panel)}.page-content{min-width:0}.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1.25rem}.workspace-editor .page-header{flex-direction:column;align-items:stretch;gap:.65rem;margin-bottom:1rem}.workspace-editor .page-title-slot .title-input{width:100%;font-size:1.75rem;font-weight:600;border:none;background:transparent;color:var(--text);padding:0;outline:none}.workspace-editor .page-title-slot .title-input:focus{outline:2px solid color-mix(in srgb,var(--accent) 45%,transparent);outline-offset:4px;border-radius:4px}.editor-action-bar{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem .75rem;padding:.5rem .75rem;background:var(--panel);border:1px solid var(--border);border-radius:6px;width:100%}.editing-badge{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--accent);background:var(--accent-subtle);border:1px solid color-mix(in srgb,var(--accent) 35%,var(--border));border-radius:999px;padding:.15rem .5rem;flex-shrink:0}.editor-action-spacer{flex:1 1 .5rem;min-width:.25rem}.editor-action-primary{display:flex;align-items:center;flex-shrink:0}.editor-action-secondary{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;flex-shrink:0}.workspace-editor .save-status{min-width:0}.btn-sm{padding:.3rem .55rem;font-size:.8rem}.btn-danger-text{color:#c0392b;border-color:color-mix(in srgb,#c0392b 35%,var(--border))}[data-theme=dark] .btn-danger-text{color:#f5a5a0;border-color:color-mix(in srgb,#f5a5a0 35%,var(--border))}.btn-danger-text:hover{color:#a93226;border-color:#c0392b}[data-theme=dark] .btn-danger-text:hover{color:#ffd4d1;border-color:#f5a5a0}.page-info{background:var(--panel);border:1px solid var(--border);border-radius:6px;padding:1rem;position:sticky;top:0}.page-info-title{font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 .75rem}.info-list{margin:0 0 1rem;display:grid;grid-template-columns:auto 1fr;gap:.35rem .75rem;font-size:.85rem}.info-list dt{color:var(--muted);margin:0}.info-list dd{margin:0}.info-block{margin-bottom:1rem}.info-block-label{font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:.35rem}.tag-chip{display:inline-block;font-size:.75rem;padding:.1rem .4rem;border-radius:3px;background:var(--bg);border:1px solid var(--border);margin-right:.25rem}.page-info-footer{margin-top:.75rem;padding-top:.75rem;border-top:1px solid var(--border)}.page-info-footer code{font-size:.7rem;color:var(--muted);word-break:break-all}.btn-primary{background:var(--accent);color:#fff;border:none;border-radius:4px;padding:.45rem .75rem;font-weight:600;cursor:pointer;font-size:.85rem}.btn-primary:hover{background:var(--accent-hover)}[data-theme=dark] .btn-primary{color:#0f1419}[data-theme=dark] .publish-menu-trigger{border-left-color:#0f141933}.btn-ghost{background:transparent;color:var(--muted);border:1px solid var(--border);border-radius:4px;padding:.4rem .65rem;cursor:pointer;font-size:.85rem}.btn-ghost:hover,.btn-ghost:focus-visible{color:var(--text);border-color:var(--accent);background:var(--accent-subtle)}[data-theme=dark] .btn-ghost:hover,[data-theme=dark] .btn-ghost:focus-visible{color:var(--text)}#health-toggle[aria-pressed=true]{color:var(--text);border-color:var(--accent)}.btn-block{width:100%}.editor-actions{display:flex;gap:.5rem;margin-top:.75rem}.modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:600}.modal.hidden{display:none}.modal-card{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:1rem;max-width:420px;width:90%}.modal-card-wide{max-width:640px}.tree-page-modal .modal-field{display:flex;flex-direction:column;gap:.35rem;margin-bottom:.75rem}.tree-page-modal .modal-label{font-size:.8rem;color:var(--muted)}.tree-page-modal .modal-input{border:1px solid var(--border);border-radius:6px;padding:.45rem .6rem;font-size:.9rem;background:var(--bg);color:var(--text)}.tree-template-list{display:flex;flex-direction:column;gap:.35rem;max-height:220px;overflow-y:auto;margin:0;padding:0}.tree-template-item{display:block;width:100%;box-sizing:border-box;margin:0;border:1px solid var(--border);border-radius:var(--radius-sm, 6px);background:var(--bg);color:var(--text);text-align:left;padding:.5rem .65rem;font-size:.9rem;line-height:1.35;cursor:pointer}.tree-template-item:hover{border-color:color-mix(in srgb,var(--accent) 35%,var(--border));background:var(--accent-subtle)}.tree-template-item.is-selected{border-color:var(--accent);background:var(--accent-subtle);color:var(--accent);font-weight:500}.tree-page-modal .modal-actions{display:flex;justify-content:flex-end;gap:.5rem}.modal-title{margin:0 0 .75rem;font-size:1.1rem}.field-hint{font-size:.75rem;color:#e07a7a;margin:.25rem 0 0}.wikilink-picker-card{max-width:480px;width:min(480px,92vw)}.wikilink-picker-hint{margin:-.35rem 0 .85rem;font-size:.8rem;color:var(--muted);line-height:1.45}.wikilink-picker-hint code{font-size:.78rem}.wikilink-picker-field{display:flex;flex-direction:column;gap:.25rem;margin-bottom:.65rem}.wikilink-picker-label{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.wikilink-picker-search,.wikilink-picker-label-input{width:100%;border:1px solid var(--border);border-radius:4px;padding:.45rem .55rem;font:inherit;background:var(--bg);color:var(--text)}.wikilink-picker-search:focus,.wikilink-picker-label-input:focus{outline:2px solid color-mix(in srgb,var(--accent) 40%,transparent);border-color:var(--accent)}.wikilink-picker-results{max-height:220px;overflow-y:auto;border:1px solid var(--border);border-radius:6px;margin-bottom:.75rem;background:var(--panel)}.wikilink-picker-results .wikilink-option{width:100%}.wikilink-picker-actions{display:flex;justify-content:flex-end}.workspace-dashboard{display:flex;flex-direction:column;gap:1rem;max-width:900px}.dashboard-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}.dashboard-section h2{margin-top:0}.dashboard-hint{margin:0 0 .75rem;font-size:.875rem;color:var(--text-muted)}.dashboard-actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:.75rem}.check-status{font-size:.95rem;margin:0 0 .75rem}.check-ok{color:#6abf69}.check-fail{color:#e07a7a}.violation-list,.warning-list,.queue-list{list-style:none;padding:0;margin:0}.violation-list li,.warning-list li{font-size:.85rem;padding:.35rem 0;border-bottom:1px solid var(--border)}.warning-list li{color:var(--muted)}.warnings-title{font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:1rem 0 .5rem}.queue-item{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem 0;border-bottom:1px solid var(--border)}.queue-main{min-width:0}.queue-actions{display:flex;gap:.35rem;flex-shrink:0}.btn-sm{padding:.3rem .55rem;font-size:.75rem}.diff-preview{margin:.75rem 0 0;max-height:240px;overflow:auto;font-family:ui-monospace,monospace;font-size:.75rem;white-space:pre-wrap;word-break:break-word;background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:.5rem}@media(max-width:900px){.layout{grid-template-columns:1fr}.sidebar-resize-handle{display:none}.sidebar{max-height:240px;border-right:none;border-bottom:1px solid var(--border)}.page-layout{grid-template-columns:1fr}.page-info{position:static}.split-editor{grid-template-columns:1fr}.split-pane+.split-pane{border-left:none;border-top:1px solid var(--border)}.meta-grid{grid-template-columns:1fr 1fr}.field-wide{grid-column:span 2}}
@@ -1 +0,0 @@
1
- (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))a(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const s of i.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&a(s)}).observe(document,{childList:!0,subtree:!0});function o(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function a(r){if(r.ep)return;r.ep=!0;const i=o(r);fetch(r.href,i)}})();async function n(e,t){const o=await fetch(e,t);if(!o.ok){const a=await o.json().catch(()=>({}));throw new Error(a.error??`HTTP ${o.status}`)}return o.json()}function h(){return n("/api/health")}function m(e={}){const t=new URLSearchParams(e).toString();return n(`/api/docs${t?`?${t}`:""}`)}function g(e,t){const o=new URLSearchParams({q:e});return n(`/api/search?${o}`)}function y(e,t){return n(`/api/graph/${encodeURIComponent(e)}`)}function T(e){return n(`/api/docs/${encodeURIComponent(e)}`)}function S(){return n("/api/tree")}function O(e){return n(`/api/backlinks/${encodeURIComponent(e)}`)}function P(){return n("/api/link-health")}function b(e){return n("/api/drafts/open",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({slug:e})})}function C(e,t){return n("/api/fs/folder",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({parentPath:e,name:t})})}function w(e,t,o,a){return n("/api/fs/page",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({parentPath:e,name:t,title:o,templateId:a})})}function D(e){return n("/api/fs/promote-page",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({pagePath:e})})}function j(e,t){return n("/api/fs/move",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fromPath:e,toDir:t})})}function k(e,t){return n("/api/fs/move-folder",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fromPath:e,toParentDir:t})})}function N(e,t){return n("/api/fs/delete",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e,kind:t})})}function A(){return n("/api/templates")}function L(){return n("/api/drafts")}function $(e,t){return n(`/api/drafts/${encodeURIComponent(e)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}function E(e){return n(`/api/drafts/${encodeURIComponent(e)}/publish`,{method:"POST"})}function J(e){return n(`/api/drafts/${encodeURIComponent(e)}`,{method:"DELETE"})}function v(){return n("/api/check")}function F(e){return n(`/api/drafts/${encodeURIComponent(e)}/diff`)}function R(){return n("/api/export",{method:"POST"})}function U(){return n("/api/unprepared")}function I(e,t){return n("/api/prepare",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e,type:t})})}function x(e=!1){return n("/api/prepare-all",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({dryRun:e})})}function q(e={}){return n("/api/sync-links",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async function H(e,t="assets"){const o=new FormData;o.append("file",e),o.append("relativeDir",t);const a=await fetch("/api/assets/upload",{method:"POST",body:o});if(!a.ok){const r=await a.json().catch(()=>({}));throw new Error(r.error??`HTTP ${a.status}`)}return a.json()}const p="repomind-theme";function c(){try{const e=localStorage.getItem(p);if(e==="light"||e==="dark")return e}catch{}return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function d(e){document.documentElement.setAttribute("data-theme",e);try{localStorage.setItem(p,e)}catch{}u(e),window.dispatchEvent(new CustomEvent("repomind-theme-change",{detail:{theme:e}}))}function M(){const e=c();return d(e),e}function f(){const e=c()==="light"?"dark":"light";return d(e),e}function l(e){return e==="light"?"Dark mode":"Light mode"}function u(e){for(const t of document.querySelectorAll("[data-theme-toggle]"))t.textContent=l(e),t.setAttribute("aria-pressed",String(e==="dark"))}function B(e){e&&(e.setAttribute("data-theme-toggle","true"),u(c()),e.addEventListener("click",()=>{f()}))}export{T as A,h as B,H as C,y as D,P as a,U as b,I as c,E as d,R as e,J as f,v as g,F as h,O as i,D as j,k,L as l,j as m,A as n,b as o,x as p,C as q,N as r,q as s,w as t,$ as u,M as v,B as w,g as x,m as y,S as z};