@justyork/repo-mind 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ui/draft-api.js +33 -1
- package/dist/ui/fs-operations.d.ts +13 -0
- package/dist/ui/fs-operations.js +139 -0
- package/dist/ui/fs-tree.d.ts +6 -1
- package/dist/ui/fs-tree.js +62 -36
- package/package.json +3 -1
- package/ui/dist/assets/{arc-DufwQU06.js → arc-C1R_fyW-.js} +1 -1
- package/ui/dist/assets/{architectureDiagram-3BPJPVTR-CI2fjjSo.js → architectureDiagram-3BPJPVTR-CcuF3FYc.js} +1 -1
- package/ui/dist/assets/{blockDiagram-GPEHLZMM-DVBIs-Z6.js → blockDiagram-GPEHLZMM-BZJKe3Ei.js} +1 -1
- package/ui/dist/assets/{c4Diagram-AAUBKEIU-rhAX_HrB.js → c4Diagram-AAUBKEIU-D_0fRNGS.js} +1 -1
- package/ui/dist/assets/channel-BlWnHbuq.js +1 -0
- package/ui/dist/assets/{chunk-2J33WTMH-CxWSQi5S.js → chunk-2J33WTMH-0LcH4vIA.js} +1 -1
- package/ui/dist/assets/{chunk-4BX2VUAB-BEM-vVbU.js → chunk-4BX2VUAB-DU1h67AD.js} +1 -1
- package/ui/dist/assets/{chunk-55IACEB6-TcrLDHYx.js → chunk-55IACEB6-BCx7dyYV.js} +1 -1
- package/ui/dist/assets/{chunk-727SXJPM-D8g4OcIW.js → chunk-727SXJPM-CRO5yOrB.js} +1 -1
- package/ui/dist/assets/{chunk-AQP2D5EJ-CSvrR8rQ.js → chunk-AQP2D5EJ-BayHdr67.js} +1 -1
- package/ui/dist/assets/{chunk-FMBD7UC4-C14JNc29.js → chunk-FMBD7UC4-CJemLien.js} +1 -1
- package/ui/dist/assets/{chunk-ND2GUHAM-Cnb0VFKm.js → chunk-ND2GUHAM-B_z-tw44.js} +1 -1
- package/ui/dist/assets/{chunk-QZHKN3VN-D2pqmAXN.js → chunk-QZHKN3VN-D40rAh_S.js} +1 -1
- package/ui/dist/assets/classDiagram-4FO5ZUOK-D3OdfPqd.js +1 -0
- package/ui/dist/assets/classDiagram-v2-Q7XG4LA2-D3OdfPqd.js +1 -0
- package/ui/dist/assets/{cose-bilkent-S5V4N54A-Cli2Sbvt.js → cose-bilkent-S5V4N54A-Cqthtrrq.js} +1 -1
- package/ui/dist/assets/{dagre-BM42HDAG-gUsVuy4s.js → dagre-BM42HDAG-CrxsyXEa.js} +1 -1
- package/ui/dist/assets/{diagram-2AECGRRQ-DTKi_1b6.js → diagram-2AECGRRQ-DTYA7Rrn.js} +1 -1
- package/ui/dist/assets/{diagram-5GNKFQAL-8Bj0k_-k.js → diagram-5GNKFQAL-CXs7RV13.js} +1 -1
- package/ui/dist/assets/{diagram-KO2AKTUF-CKOX2fpv.js → diagram-KO2AKTUF-Bf8EeV_S.js} +1 -1
- package/ui/dist/assets/{diagram-LMA3HP47-B12JvpF3.js → diagram-LMA3HP47-C2XWB0cI.js} +1 -1
- package/ui/dist/assets/{diagram-OG6HWLK6-DKeTI9IH.js → diagram-OG6HWLK6-BNMXob9h.js} +1 -1
- package/ui/dist/assets/editor-CTtDusro.js +211 -0
- package/ui/dist/assets/{erDiagram-TEJ5UH35-oDb31edH.js → erDiagram-TEJ5UH35-CnSczOvb.js} +1 -1
- package/ui/dist/assets/{flowDiagram-I6XJVG4X-SPf3KLS-.js → flowDiagram-I6XJVG4X-DwZBJ2fr.js} +1 -1
- package/ui/dist/assets/{ganttDiagram-6RSMTGT7-D8oPEcrt.js → ganttDiagram-6RSMTGT7-rxwvD8xn.js} +1 -1
- package/ui/dist/assets/{gitGraphDiagram-PVQCEYII-eI9Yp7d7.js → gitGraphDiagram-PVQCEYII-DjJPiQ2K.js} +1 -1
- package/ui/dist/assets/{graph-DqCH9VKs.js → graph-D_tIaE_I.js} +1 -1
- package/ui/dist/assets/{infoDiagram-5YYISTIA-CQ6dtyj3.js → infoDiagram-5YYISTIA-BHgtQpBK.js} +1 -1
- package/ui/dist/assets/{ishikawaDiagram-YF4QCWOH-BHnOZ8-9.js → ishikawaDiagram-YF4QCWOH-BZ38ndde.js} +1 -1
- package/ui/dist/assets/{journeyDiagram-JHISSGLW-0t985reH.js → journeyDiagram-JHISSGLW-CNaZf5VN.js} +1 -1
- package/ui/dist/assets/{kanban-definition-UN3LZRKU-vPlhgwPS.js → kanban-definition-UN3LZRKU-4h1Jmt_X.js} +1 -1
- package/ui/dist/assets/main-BeHrzLrS.js +273 -0
- package/ui/dist/assets/{mermaid.core-C2wn2wM5.js → mermaid.core-BZZdRyuR.js} +4 -4
- package/ui/dist/assets/{mindmap-definition-RKZ34NQL-COKv8bQN.js → mindmap-definition-RKZ34NQL-DG_NciLX.js} +1 -1
- package/ui/dist/assets/{pieDiagram-4H26LBE5-CgVeawD6.js → pieDiagram-4H26LBE5-B9FyPCLY.js} +1 -1
- package/ui/dist/assets/{quadrantDiagram-W4KKPZXB-Bwpr8PxN.js → quadrantDiagram-W4KKPZXB-B89WFfQu.js} +1 -1
- package/ui/dist/assets/{requirementDiagram-4Y6WPE33-Cc8HFBxl.js → requirementDiagram-4Y6WPE33-BYHKePgB.js} +1 -1
- package/ui/dist/assets/{sankeyDiagram-5OEKKPKP-B_1nSAK5.js → sankeyDiagram-5OEKKPKP-BW6YuBQM.js} +1 -1
- package/ui/dist/assets/{sequenceDiagram-3UESZ5HK-hsYrUJza.js → sequenceDiagram-3UESZ5HK-BnojqKwf.js} +1 -1
- package/ui/dist/assets/{stateDiagram-AJRCARHV-BMf4FL5O.js → stateDiagram-AJRCARHV-C_x9t2o6.js} +1 -1
- package/ui/dist/assets/stateDiagram-v2-BHNVJYJU-CBZx8gKT.js +1 -0
- package/ui/dist/assets/theme-CFHWfrn1.css +1 -0
- package/ui/dist/assets/theme-DS1fBM5L.js +1 -0
- package/ui/dist/assets/{timeline-definition-PNZ67QCA-Cf3u1h2_.js → timeline-definition-PNZ67QCA-CI8Ngfzv.js} +1 -1
- package/ui/dist/assets/{vennDiagram-CIIHVFJN-2uKO3x22.js → vennDiagram-CIIHVFJN-CPRKGc2P.js} +1 -1
- package/ui/dist/assets/visual-editor-DUVPRlY3.js +220 -0
- package/ui/dist/assets/{wardley-L42UT6IY-BjLaoVtm.js → wardley-L42UT6IY-CZY42jFT.js} +1 -1
- package/ui/dist/assets/{wardleyDiagram-YWT4CUSO-DlrUKeJk.js → wardleyDiagram-YWT4CUSO-CGKyWKnw.js} +1 -1
- package/ui/dist/assets/{xychartDiagram-2RQKCTM6-Bzbb3cqD.js → xychartDiagram-2RQKCTM6-Cq-onAc3.js} +1 -1
- package/ui/dist/favicon.svg +8 -0
- package/ui/dist/graph.html +4 -3
- package/ui/dist/index.html +5 -4
- package/ui/dist/assets/channel-Q_-BqwUT.js +0 -1
- package/ui/dist/assets/classDiagram-4FO5ZUOK-CPrZx4R4.js +0 -1
- package/ui/dist/assets/classDiagram-v2-Q7XG4LA2-CPrZx4R4.js +0 -1
- package/ui/dist/assets/editor-DZbRkvnr.js +0 -211
- package/ui/dist/assets/main-Io6jccwi.js +0 -232
- package/ui/dist/assets/stateDiagram-v2-BHNVJYJU-BpaPdu-O.js +0 -1
- package/ui/dist/assets/theme-Dl8H1UuW.js +0 -1
- package/ui/dist/assets/theme-PE9lQ4bz.css +0 -1
- package/ui/dist/assets/visual-editor-D1uYYGOW.js +0 -47
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mermaid.core-C2wn2wM5.js","assets/transform-BwXaE9hv.js","assets/editor-DZbRkvnr.js","assets/visual-editor-D1uYYGOW.js","assets/theme-Dl8H1UuW.js","assets/theme-PE9lQ4bz.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{p as Fe,s as je,e as Ie,g as Oe,a as Be,l as O,b as Ke,c as Ge,d as z,f as ze,h as Je,i as Ve,j as Xe,k as Ye,m as Qe,n as Ze,r as et,o as tt,q as pe,t as nt,v as st,w as rt,x as it,y as j,z as fe,A as at,B as ot,C as lt}from"./theme-Dl8H1UuW.js";import{m as Ee}from"./editor-DZbRkvnr.js";const dt={"wiki-page":"Wiki",adr:"ADR","feature-spec":"Feature specs","glossary-term":"Glossary","open-question":"Open questions","agent-instruction":"Agent instructions"},ct={"wiki-page":"W",adr:"A","feature-spec":"S","glossary-term":"G","open-question":"?","agent-instruction":"◎"},B="folder:";function ut(e){return e.startsWith(B)?e.slice(B.length).slice(0,1).toUpperCase():ct[e]??e.slice(0,1).toUpperCase()}function J(e){if(e.startsWith(B)){const n=e.slice(B.length);return n==="__root__"?"General":n.split(/[-_/]/).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}return dt[e]??e}function pt(e,n){var T,w,L,$;e.className="workspace-main workspace-dashboard",e.innerHTML=`
|
|
3
|
-
<div class="dashboard-header">
|
|
4
|
-
<h1 class="doc-title">Health & 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 t=e.querySelector("#dash-check"),s=e.querySelector("#dash-links"),c=e.querySelector("#dash-unprepared"),a=e.querySelector("#dash-queue");function o(p){const i=p.ok?"check-ok":"check-fail",g=p.ok?"All checks passed":`${p.violations.length} issue(s)`;let d=`
|
|
26
|
-
<h2>Schema check</h2>
|
|
27
|
-
<p class="check-status ${i}">${g}</p>
|
|
28
|
-
`;if(p.violations.length>0){d+='<ul class="violation-list">';for(const h of p.violations)d+=`<li><code>${D(h.path)}</code> — ${D(h.message)}</li>`;d+="</ul>"}if(p.warnings.length>0){d+='<h3 class="warnings-title">Warnings</h3><ul class="warning-list">';for(const h of p.warnings)d+=`<li>${D(h)}</li>`;d+="</ul>"}t.innerHTML=d}function v(p){let i=`
|
|
29
|
-
<h2>Link health</h2>
|
|
30
|
-
<div class="link-health-stats">
|
|
31
|
-
<div class="link-health-stat"><span class="link-health-value">${p.orphanCount}</span> orphans</div>
|
|
32
|
-
<div class="link-health-stat"><span class="link-health-value">${p.brokenCount}</span> broken</div>
|
|
33
|
-
<div class="link-health-stat"><span class="link-health-value">${p.oneWayCount}</span> one-way</div>
|
|
34
|
-
</div>
|
|
35
|
-
`;if(p.brokenTargets.length>0){i+='<h3 class="warnings-title">Broken targets</h3><ul class="warning-list">';for(const g of p.brokenTargets)i+=`<li><code>${D(g)}</code></li>`;i+="</ul>"}if(p.orphanSlugs.length>0){i+='<h3 class="warnings-title">Orphan pages</h3><ul class="warning-list">';for(const g of p.orphanSlugs)i+=`<li><code>${D(g)}</code></li>`;i+="</ul>"}s.innerHTML=i}function S(p){var i;if(c.innerHTML="",p.length===0){c.innerHTML='<li class="placeholder">All docs have frontmatter</li>';return}for(const g of p){const d=document.createElement("li");d.className="queue-item",d.innerHTML=`
|
|
36
|
-
<div class="queue-main">
|
|
37
|
-
<div class="queue-title">${D(g.relativePath)}</div>
|
|
38
|
-
<div class="meta">${D(g.suggestedType)} · slug: ${D(g.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
|
-
`,(i=d.querySelector('[data-action="prepare"]'))==null||i.addEventListener("click",()=>{Ge(g.relativePath,g.suggestedType).then(({result:h})=>{n.onNotify(`Prepared: ${h.slug}`),E()}).catch(h=>{n.onNotify(h instanceof Error?h.message:"Prepare failed",!0)})}),c.appendChild(d)}}function P(p){var i,g;if(a.innerHTML="",p.length===0){a.innerHTML='<li class="placeholder">No drafts in queue</li>';return}for(const d of p){const h=document.createElement("li");h.className="queue-item",h.innerHTML=`
|
|
44
|
-
<div class="queue-main">
|
|
45
|
-
<div class="queue-title">${D(d.title||d.slug)}</div>
|
|
46
|
-
<div class="meta">${D(d.slug)} · ${D(d.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
|
-
`,(i=h.querySelector('[data-action="edit"]'))==null||i.addEventListener("click",()=>{n.onOpenDraft(d)}),(g=h.querySelector('[data-action="publish"]'))==null||g.addEventListener("click",()=>{z(d.id).then(({result:r})=>{n.onPublished(r.path),E()}).catch(r=>{n.onNotify(r instanceof Error?r.message:"Publish failed",!0)})}),a.appendChild(h)}}async function E(){try{const[p,i,{drafts:g},{files:d}]=await Promise.all([Oe(),Be(),O(),Ke()]);o(p),v(i),S(d),P(g)}catch(p){t.innerHTML=`<p class="check-status check-fail">${D(p instanceof Error?p.message:"Failed to load")}</p>`}}return(T=e.querySelector("#dash-refresh"))==null||T.addEventListener("click",()=>{E()}),(w=e.querySelector("#dash-prepare-all"))==null||w.addEventListener("click",()=>{Fe().then(({result:p})=>{n.onNotify(`Prepared ${p.prepared.length} file(s)`),E()}).catch(p=>{n.onNotify(p instanceof Error?p.message:"Prepare all failed",!0)})}),(L=e.querySelector("#dash-sync-links"))==null||L.addEventListener("click",()=>{je().then(({result:p})=>{const i=p.files.filter(g=>g.changed).length;n.onNotify(`Synced links in ${i} file(s)`),E()}).catch(p=>{n.onNotify(p instanceof Error?p.message:"Sync links failed",!0)})}),($=e.querySelector("#dash-export"))==null||$.addEventListener("click",()=>{Ie().then(({path:p})=>{n.onNotify(`Exported ${p}`)}).catch(p=>{n.onNotify(p instanceof Error?p.message:"Export failed",!0)})}),E(),{refresh:E}}function D(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function ft(e){if(!e)return null;if(e.startsWith("?slug=")||e.startsWith("/?slug=")){const n=e.includes("?")?e.slice(e.indexOf("?")):e,t=new URLSearchParams(n).get("slug");return(t==null?void 0:t.trim())||null}try{const t=new URL(e,"http://local").searchParams.get("slug");return(t==null?void 0:t.trim())||null}catch{return null}}function V(e){var n,t;return((t=(n=e.split("#")[0])==null?void 0:n.split("?")[0])==null?void 0:t.trim())??""}function Le(e){const n=e.replace(/\\/g,"/").replace(/^\/+/,"");return n?n.toLowerCase().endsWith(".md")?n:`${n}.md`:""}function gt(e,n){const t=V(n);if(!t||t.startsWith("http://")||t.startsWith("https://")||t.startsWith("mailto:")||t.startsWith("#"))return null;const s=e.includes("/")?e.slice(0,e.lastIndexOf("/")):"",c=t.replace(/\\/g,"/").split("/"),a=s?s.split("/"):[];for(const o of c)if(!(!o||o===".")){if(o===".."){if(a.length===0)return null;a.pop();continue}a.push(o)}return Le(a.join("/"))}function ht(e){let n=V(e).replace(/\\/g,"/");return!n||n.startsWith("http://")||n.startsWith("https://")||n.startsWith("mailto:")||n.startsWith("#")||(n.startsWith("/")&&(n=n.slice(1)),n.startsWith("docs/")&&(n=n.slice(5)),!n)?null:Le(n)}function mt(e,n){const t=n.get(e);if(t)return t;const s=e.toLowerCase();for(const[c,a]of n.entries())if(c.toLowerCase()===s)return a;return null}function vt(e,n,t){const s=ft(n);if(s){for(const a of t.values())if(a===s)return s;return null}const c=[gt(e,n),ht(n)].filter(a=>!!a);for(const a of c){const o=mt(a,t);if(o)return o}return null}const yt=[".png",".jpg",".jpeg",".gif",".webp",".svg"];function ge(e){const n=e.toLowerCase();return yt.some(t=>n.endsWith(t))}function bt(e,n){const t=V(n);if(!t||t.startsWith("http://")||t.startsWith("https://")||t.startsWith("mailto:")||t.startsWith("#")||t.startsWith("data:"))return null;let s=t.replace(/\\/g,"/");if(s.startsWith("/")&&(s=s.slice(1)),s.startsWith("docs/")?s=s.slice(5):s="",s&&!s.split("/").includes("..")&&ge(s))return s;const c=e.includes("/")?e.slice(0,e.lastIndexOf("/")):"",a=t.replace(/\\/g,"/").split("/"),o=c?c.split("/"):[];for(const S of a)if(!(!S||S===".")){if(S===".."){if(o.length===0)return null;o.pop();continue}o.push(S)}const v=o.join("/");return v&&ge(v)?v:null}function St(e,n){const t=bt(e,n);return t?`/api/assets/${t.split("/").map(encodeURIComponent).join("/")}`:null}const wt="modulepreload",Et=function(e){return"/"+e},he={},$e=function(n,t,s){let c=Promise.resolve();if(t&&t.length>0){let o=function(P){return Promise.all(P.map(E=>Promise.resolve(E).then(T=>({status:"fulfilled",value:T}),T=>({status:"rejected",reason:T}))))};document.getElementsByTagName("link");const v=document.querySelector("meta[property=csp-nonce]"),S=(v==null?void 0:v.nonce)||(v==null?void 0:v.getAttribute("nonce"));c=o(t.map(P=>{if(P=Et(P),P in he)return;he[P]=!0;const E=P.endsWith(".css"),T=E?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${P}"]${T}`))return;const w=document.createElement("link");if(w.rel=E?"stylesheet":wt,E||(w.as="script"),w.crossOrigin="",w.href=P,S&&w.setAttribute("nonce",S),document.head.appendChild(w),E)return new Promise((L,$)=>{w.addEventListener("load",L),w.addEventListener("error",()=>$(new Error(`Unable to preload CSS for ${P}`)))})}))}function a(o){const v=new Event("vite:preloadError",{cancelable:!0});if(v.payload=o,window.dispatchEvent(v),!v.defaultPrevented)throw o}return c.then(o=>{for(const v of o||[])v.status==="rejected"&&a(v.reason);return n().catch(a)})};let me=null;async function Lt(e){const n=e.querySelectorAll("pre.mermaid");if(n.length===0)return;const t=document.documentElement.dataset.theme==="dark"?"dark":"default",s=await $e(()=>import("./mermaid.core-C2wn2wM5.js").then(c=>c.ba),__vite__mapDeps([0,1,2]));me!==t&&(s.default.initialize({startOnLoad:!1,theme:t,securityLevel:"loose"}),me=t);try{await s.default.run({nodes:[...n]})}catch{for(const c of n)if(!c.closest(".mermaid-error")){const a=c.parentElement;a==null||a.classList.add("mermaid-error")}}}const qe=/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g;function Pe(e,n){const t=e.trim(),s=((n==null?void 0:n.trim())||t).trim();return{display:t,slug:s}}function fn(e,n){const t=e.trim(),s=(n??t).trim();return s===t?`[[${t}]]`:`[[${t}|${s}]]`}function $t(e){const n=[];for(const t of e.matchAll(qe)){const{slug:s}=Pe(t[1]??"",t[2]);s&&n.push(s)}return n}let ve=!1,W=null;function _(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function qt(e){return e.replace(qe,(n,t,s)=>{const{display:c,slug:a}=Pe(t,s),o=encodeURIComponent(a);return`[${c}](#wikilink:${o})`})}function Pt(){ve||(Ee.use({gfm:!0,renderer:{code({text:e,lang:n}){return n==="mermaid"?`<div class="mermaid-wrapper"><pre class="mermaid">${_(e.trim())}</pre></div>
|
|
53
|
-
`:!1},list(e){if(!e.items.some(a=>a.task))return!1;const t=e.ordered?"ol":"ul",s=e.ordered&&e.start!==1&&e.start!=null?` start="${e.start}"`:"";let c="";for(const a of e.items)c+=this.listitem(a);return`<${t} class="contains-task-list"${s}>
|
|
54
|
-
${c}</${t}>
|
|
55
|
-
`},listitem(e){if(!e.task)return!1;const n=`<input type="checkbox" class="task-list-item-checkbox"${e.checked?" checked":""} disabled>`,t=this.parser.parse(e.tokens,!!e.loose).trim();return`<li class="task-list-item"><label class="task-list-item-label">${n}<span class="task-list-item-content">${t}</span></label></li>
|
|
56
|
-
`},image({href:e,text:n,title:t}){if(!e||e.startsWith("http://")||e.startsWith("https://")||e.startsWith("data:"))return!1;if(W){const s=St(W.docRelativePath,e);if(s){const c=_(n||t||"");return`<img src="${_(s)}" alt="${c}" loading="lazy" class="markdown-image">`}}return!1},link({href:e,text:n}){if(e!=null&&e.startsWith("#wikilink:")){const t=decodeURIComponent(e.slice(10));return`<a href="#" class="wikilink" data-slug="${_(t)}">${n}</a>`}if(W&&e){const t=vt(W.docRelativePath,e,W.slugByRelative);if(t)return`<a href="#" class="wikilink" data-slug="${_(t)}">${n}</a>`}return e!=null&&e.startsWith("http://")||e!=null&&e.startsWith("https://")?`<a href="${_(e)}" target="_blank" rel="noopener noreferrer">${n}</a>`:e!=null&&e.startsWith("mailto:")||e!=null&&e.startsWith("#")?!1:e?`<a href="#" class="md-link-unresolved" title="Link not in docs index">${n}</a>`:!1}}}),ve=!0)}function Ct(e,n){Pt(),W=n??null;try{return Ee.parse(qt(e),{async:!1})}finally{W=null}}const X="slug",Ce="path",Tt="draft";function Y(){const e=new URLSearchParams(window.location.search).get(X);return e!=null&&e.trim()?e.trim():null}function kt(){const e=new URLSearchParams(window.location.search).get(Ce);return e!=null&&e.trim()?e.trim().replace(/\\/g,"/"):null}function Mt(){const e=new URLSearchParams(window.location.search).get(Tt);return e!=null&&e.trim()?e.trim():null}function At(){const e=new URL(window.location.href),n=e.pathname;if(n==="/"||n==="/index.html")return;const t=Y();e.pathname="/",history.replaceState(t?{slug:t}:{},"",e)}function Te(){const e=new URL(window.location.href);return e.pathname="/",e}function xt(e){const n=Te();return n.search="",n.searchParams.set(X,e),n.toString()}function Dt(e,n="push"){const t=Te();t.searchParams.delete(Ce),t.searchParams.set(X,e);const s={slug:e};n==="replace"?history.replaceState(s,"",t):history.pushState(s,"",t)}function Rt(e){const n=()=>{e(Y())};return window.addEventListener("popstate",n),()=>window.removeEventListener("popstate",n)}const ke="repomind-page-info-hidden";function k(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function Q(){try{const e=localStorage.getItem(ke);return e===null?!0:e==="true"}catch{return!0}}function Me(e){try{localStorage.setItem(ke,e?"true":"false")}catch{}}function Ht(e){return e.map((n,t)=>{const s=t>0?'<span class="crumb-sep">›</span>':"";return n.current?`${s}<span class="crumb current">${k(n.label)}</span>`:n.crumbId?`${s}<button type="button" class="crumb" data-crumb="${k(n.crumbId)}">${k(n.label)}</button>`:`${s}<span class="crumb">${k(n.label)}</span>`}).join("")}function Ae(e,n){const t=n.focusMode??Q();e.className=n.rootClass??"workspace-main",e.innerHTML=`
|
|
57
|
-
<nav class="breadcrumb" aria-label="Breadcrumb">
|
|
58
|
-
${Ht(n.breadcrumbs)}
|
|
59
|
-
</nav>
|
|
60
|
-
<div class="page-layout${t?" page-layout--focus":""}">
|
|
61
|
-
<article class="page-content">
|
|
62
|
-
<header class="page-header">
|
|
63
|
-
<div class="page-title-slot">${n.titleHtml}</div>
|
|
64
|
-
<div class="workspace-actions">${n.actionsHtml}</div>
|
|
65
|
-
</header>
|
|
66
|
-
<div class="page-body-slot">${n.mainHtml}</div>
|
|
67
|
-
</article>
|
|
68
|
-
<aside class="page-info">${n.railHtml}</aside>
|
|
69
|
-
</div>
|
|
70
|
-
`;const s=e.querySelector(".page-layout");return{pageLayout:s,bodySlot:e.querySelector(".page-body-slot"),railSlot:e.querySelector(".page-info"),setFocusMode(c){s.classList.toggle("page-layout--focus",c),Me(c)}}}function xe(e,n,t){const s=e.querySelector("#toggle-focus"),c=e.querySelector(".page-layout");!s||!c||(c.classList.toggle("page-layout--focus",n),s.setAttribute("aria-pressed",String(n)),s.textContent=n?"Show info":"Hide info",s.addEventListener("click",()=>{const a=!c.classList.contains("page-layout--focus");c.classList.toggle("page-layout--focus",a),Me(a),s.setAttribute("aria-pressed",String(a)),s.textContent=a?"Show info":"Hide info"}))}function Nt(e,n){e.querySelectorAll(".breadcrumb [data-crumb]").forEach(t=>{t.addEventListener("click",()=>{const s=t.dataset.crumb;s&&n[s]&&n[s]()})})}function Wt(e,n){if(n==="json")try{const t=JSON.parse(e);return JSON.stringify(t,null,2)}catch{return e}return e}function Ut(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function _t(e,n){const t=Wt(e,n);return`<pre class="structured-preview ${n==="json"?"structured-preview--json":"structured-preview--yaml"}"><code>${Ut(t)}</code></pre>`}function Ft(e,n){typeof n.title=="string"?n.title:e.slug;const t=typeof n.status=="string"?n.status:"",s=typeof n.type=="string"?n.type:"",c=typeof n.domain=="string"?n.domain:"",a=Array.isArray(n.tags)?n.tags.filter(S=>typeof S=="string"):[],o=Array.isArray(n.related)?n.related.filter(S=>typeof S=="string"):[],v=e.contentKind??"markdown";return`
|
|
71
|
-
<h2 class="page-info-title">Page info</h2>
|
|
72
|
-
<dl class="info-list">
|
|
73
|
-
<dt>Status</dt><dd><span class="status-chip status-${k(t)}">${k(t)}</span></dd>
|
|
74
|
-
<dt>Type</dt><dd>${k(s)}</dd>
|
|
75
|
-
${c?`<dt>Domain</dt><dd>${k(c)}</dd>`:""}
|
|
76
|
-
<dt>Format</dt><dd>${k(v)}</dd>
|
|
77
|
-
${a.length>0?`<dt>Tags</dt><dd>${a.map(S=>`<span class="tag-chip">${k(S)}</span>`).join(" ")}</dd>`:""}
|
|
78
|
-
</dl>
|
|
79
|
-
${o.length>0?`<div class="info-block"><div class="info-block-label">Related</div>${o.map(S=>`<button type="button" class="related-chip" data-slug="${k(S)}">${k(S)}</button>`).join("")}</div>`:""}
|
|
80
|
-
<div class="info-tabs tabs">
|
|
81
|
-
<button class="tab active" data-tab="frontmatter">Frontmatter</button>
|
|
82
|
-
<button class="tab" data-tab="agent">Agent JSON</button>
|
|
83
|
-
</div>
|
|
84
|
-
<div id="tab-frontmatter" class="tab-panel active"></div>
|
|
85
|
-
<div id="tab-agent" class="tab-panel"></div>
|
|
86
|
-
<footer class="page-info-footer">
|
|
87
|
-
<code id="doc-path">${k(e.path??"")}</code>
|
|
88
|
-
</footer>
|
|
89
|
-
`}function H(e,n,t={}){var p,i,g;if(!n||!n.found){e.className="workspace-main",e.innerHTML=`
|
|
90
|
-
<div class="workspace-empty">
|
|
91
|
-
<h1>Knowledge</h1>
|
|
92
|
-
<p class="placeholder">Select a page from the tree or use the ⋯ menu to create one.</p>
|
|
93
|
-
</div>
|
|
94
|
-
`;return}const s=n.frontmatter??{},c=typeof s.title=="string"?s.title:n.slug??"",a=typeof s.type=="string"?s.type:"",o=J(a),v=Q(),S=n.contentKind??"markdown",P=S==="json"||S==="yaml",E=P?"":'<button type="button" id="edit-page" class="btn-primary">Edit</button>',T=Ae(e,{breadcrumbs:[{label:"Knowledge",crumbId:"root"},{label:o,crumbId:"catalog"},{label:c,current:!0}],titleHtml:`<h1 class="doc-title">${k(c)}</h1>`,actionsHtml:`
|
|
95
|
-
<button type="button" id="toggle-focus" class="btn-ghost" aria-pressed="${v}">
|
|
96
|
-
${v?"Show info":"Hide info"}
|
|
97
|
-
</button>
|
|
98
|
-
${E}
|
|
99
|
-
<button type="button" id="copy-link" class="btn-ghost">Copy link</button>
|
|
100
|
-
<button type="button" id="copy-path" class="btn-ghost">Copy path</button>
|
|
101
|
-
`,mainHtml:`
|
|
102
|
-
<div id="tab-preview" class="markdown-preview reader-preview"></div>
|
|
103
|
-
<section id="reader-backlinks" class="reader-backlinks hidden" aria-label="Backlinks"></section>
|
|
104
|
-
`,railHtml:Ft(n,s),focusMode:v});xe(e,v),Nt(e,{root:()=>{var d;return(d=t.onNavigateRoot)==null?void 0:d.call(t)},catalog:()=>{var d;return(d=t.onNavigateCatalog)==null?void 0:d.call(t)}});const w=T.bodySlot.querySelector("#tab-preview");if(P)w.innerHTML=_t(n.body??"",S);else{const d=t.docRelativePath&&t.slugByRelative?{docRelativePath:t.docRelativePath,slugByRelative:t.slugByRelative}:void 0;w.innerHTML=Ct(n.body??"",d),Lt(w),w.querySelectorAll("a.wikilink").forEach(h=>{h.addEventListener("click",r=>{r.preventDefault();const l=h.dataset.slug;l&&e.dispatchEvent(new CustomEvent("navigate-slug",{detail:{slug:l}}))})}),w.querySelectorAll("a.md-link-unresolved").forEach(h=>{h.addEventListener("click",r=>{r.preventDefault()})})}const L=T.railSlot.querySelector("#tab-frontmatter");L.innerHTML='<pre class="frontmatter-yaml"></pre>',L.querySelector("pre").textContent=JSON.stringify(s,null,2);const $=T.railSlot.querySelector("#tab-agent");$.innerHTML='<pre class="agent-json"></pre>',$.querySelector("pre").textContent=JSON.stringify(n.agentShape,null,2),e.querySelectorAll(".info-tabs .tab").forEach(d=>{d.addEventListener("click",()=>{var r;const h=d.dataset.tab;e.querySelectorAll(".info-tabs .tab").forEach(l=>l.classList.remove("active")),e.querySelectorAll(".page-info .tab-panel").forEach(l=>l.classList.remove("active")),d.classList.add("active"),(r=e.querySelector(`#tab-${h}`))==null||r.classList.add("active")})}),(p=e.querySelector("#copy-path"))==null||p.addEventListener("click",()=>{n.path&&navigator.clipboard.writeText(n.path)}),(i=e.querySelector("#copy-link"))==null||i.addEventListener("click",()=>{var d;n.slug&&(navigator.clipboard.writeText(xt(n.slug)),(d=t.onCopyLink)==null||d.call(t))}),(g=e.querySelector("#edit-page"))==null||g.addEventListener("click",()=>{n.slug&&t.onEdit&&t.onEdit(n.slug)}),T.railSlot.querySelectorAll(".related-chip").forEach(d=>{d.addEventListener("click",()=>{const h=d.dataset.slug;h&&e.dispatchEvent(new CustomEvent("navigate-slug",{detail:{slug:h}}))})}),n.slug&&!P&&ze(n.slug).then(({backlinks:d})=>{const h=T.bodySlot.querySelector("#reader-backlinks");!h||d.length===0||(h.classList.remove("hidden"),h.innerHTML=`
|
|
105
|
-
<h2 class="reader-backlinks-title">Backlinks</h2>
|
|
106
|
-
<div class="reader-backlinks-list">
|
|
107
|
-
${d.map(r=>`<button type="button" class="related-chip" data-slug="${k(r.slug)}">${k(r.title)} <span class="backlink-kind">${k(r.kind)}</span></button>`).join("")}
|
|
108
|
-
</div>
|
|
109
|
-
`,h.querySelectorAll(".related-chip").forEach(r=>{r.addEventListener("click",()=>{const l=r.dataset.slug;l&&e.dispatchEvent(new CustomEvent("navigate-slug",{detail:{slug:l}}))})}))}).catch(()=>{})}function jt(e){return $t(e)}function It(e,n){const t=n.find(a=>a.slug===e);if(t)return t.slug;const s=e.toLowerCase(),c=n.find(a=>a.title.toLowerCase()===s);return(c==null?void 0:c.slug)??null}function Ot(e,n,t){const s=new Set(n),c=[];for(const a of jt(e)){const o=It(a,t);!o||s.has(o)||c.includes(o)||c.push(o)}return c}function Bt(e,n,t){const s=e.toLowerCase();if(!s)return 1;const c=n.toLowerCase(),a=t.toLowerCase();return c.startsWith(s)||a.startsWith(s)?3:c.includes(s)||a.includes(s)?2:0}function Kt(e,n,t=12){return n.map(s=>({doc:s,score:Bt(e,s.slug,s.title)})).filter(s=>s.score>0).sort((s,c)=>c.score-s.score||s.doc.slug.localeCompare(c.doc.slug)).slice(0,t).map(s=>s.doc)}const Gt=["adr","feature-spec","glossary-term","open-question","agent-instruction","wiki-page"],zt=["draft","proposed","accepted","superseded"];function Jt(e){return`
|
|
110
|
-
<h2 class="page-info-title">Page properties</h2>
|
|
111
|
-
<div class="workspace-badges editor-badges">
|
|
112
|
-
<span class="badge badge-draft">draft</span>
|
|
113
|
-
${e.forkedFrom?`<span class="badge">fork: ${k(e.forkedFrom)}</span>`:""}
|
|
114
|
-
</div>
|
|
115
|
-
<div class="props-section">
|
|
116
|
-
<div class="props-label">Status</div>
|
|
117
|
-
<div class="props-chip-row">
|
|
118
|
-
<button type="button" id="ed-status-chip" class="status-chip props-chip-trigger" aria-haspopup="listbox"></button>
|
|
119
|
-
<div id="ed-status-menu" class="props-dropdown hidden" role="listbox"></div>
|
|
120
|
-
</div>
|
|
121
|
-
</div>
|
|
122
|
-
<div class="props-section">
|
|
123
|
-
<div class="props-label">Type</div>
|
|
124
|
-
<div class="props-chip-row">
|
|
125
|
-
<button type="button" id="ed-type-chip" class="props-chip props-chip-trigger" aria-haspopup="listbox"></button>
|
|
126
|
-
<div id="ed-type-menu" class="props-dropdown hidden" role="listbox"></div>
|
|
127
|
-
</div>
|
|
128
|
-
<div class="props-hint" id="ed-catalog-hint"></div>
|
|
129
|
-
</div>
|
|
130
|
-
<div class="props-section">
|
|
131
|
-
<div class="props-label">Slug</div>
|
|
132
|
-
<input id="ed-slug" class="props-slug-input" spellcheck="false" />
|
|
133
|
-
</div>
|
|
134
|
-
<div class="props-section">
|
|
135
|
-
<div class="props-label">Tags</div>
|
|
136
|
-
<div id="ed-tags-chips" class="props-chip-list"></div>
|
|
137
|
-
<input id="ed-tags-input" class="props-add-input" placeholder="Add tag…" />
|
|
138
|
-
</div>
|
|
139
|
-
<div class="props-section">
|
|
140
|
-
<div class="props-label">Related</div>
|
|
141
|
-
<div id="ed-related-chips" class="props-chip-list"></div>
|
|
142
|
-
<input id="ed-related-input" class="props-add-input" placeholder="Add related slug…" autocomplete="off" />
|
|
143
|
-
<div id="ed-related-menu" class="props-dropdown hidden" role="listbox"></div>
|
|
144
|
-
</div>
|
|
145
|
-
`}function Vt(e,n,t,s){const c=e.querySelector("#ed-slug"),a=e.querySelector("#ed-status-chip"),o=e.querySelector("#ed-status-menu"),v=e.querySelector("#ed-type-chip"),S=e.querySelector("#ed-type-menu"),P=e.querySelector("#ed-catalog-hint"),E=e.querySelector("#ed-tags-chips"),T=e.querySelector("#ed-tags-input"),w=e.querySelector("#ed-related-chips"),L=e.querySelector("#ed-related-input"),$=e.querySelector("#ed-related-menu");let p=[...n.tags],i=[...n.related],g=n.status,d=n.type;c.value=n.slug,r(),l(),f(),y();function h(){s()}function r(){a.textContent=g,a.className=`status-chip props-chip-trigger status-${g}`,o.innerHTML=zt.map(m=>`<button type="button" class="props-dropdown-item" data-value="${m}" role="option">${m}</button>`).join("")}function l(){v.textContent=d,P.textContent=J(d),S.innerHTML=Gt.map(m=>`<button type="button" class="props-dropdown-item" data-value="${m}" role="option">${m}</button>`).join("")}function f(){E.innerHTML=p.map(m=>`<span class="tag-chip props-removable-chip">${k(m)}<button type="button" class="chip-remove" data-tag="${k(m)}" aria-label="Remove tag">×</button></span>`).join(""),E.querySelectorAll(".chip-remove").forEach(m=>{m.addEventListener("click",()=>{const C=m.dataset.tag;p=p.filter(M=>M!==C),f(),h()})})}function y(){w.innerHTML=i.map(m=>`<span class="related-chip props-removable-chip">${k(m)}<button type="button" class="chip-remove" data-slug="${k(m)}" aria-label="Remove related">×</button></span>`).join(""),w.querySelectorAll(".chip-remove").forEach(m=>{m.addEventListener("click",()=>{const C=m.dataset.slug;i=i.filter(M=>M!==C),y(),h()})})}function q(){o.classList.add("hidden"),S.classList.add("hidden"),$.classList.add("hidden")}a.addEventListener("click",()=>{o.classList.toggle("hidden")||(S.classList.add("hidden"),$.classList.add("hidden"))}),o.addEventListener("click",m=>{const C=m.target.closest("[data-value]");C&&(g=C.dataset.value??g,r(),o.classList.add("hidden"),h())}),v.addEventListener("click",()=>{S.classList.toggle("hidden")||(o.classList.add("hidden"),$.classList.add("hidden"))}),S.addEventListener("click",m=>{const C=m.target.closest("[data-value]");C&&(d=C.dataset.value??d,l(),S.classList.add("hidden"),h())}),c.addEventListener("input",h),T.addEventListener("keydown",m=>{if(m.key!=="Enter"&&m.key!==",")return;m.preventDefault();const C=T.value.trim().replace(/,$/,"");if(!C||p.includes(C)){T.value="";return}p.push(C),T.value="",f(),h()});function b(m){const C=Kt(m,t).filter(M=>!i.includes(M.slug));if(C.length===0){$.classList.add("hidden");return}$.innerHTML=C.map(M=>`<button type="button" class="props-dropdown-item" data-slug="${k(M.slug)}" role="option">
|
|
146
|
-
<span class="wikilink-option-slug">${k(M.slug)}</span>
|
|
147
|
-
<span class="wikilink-option-title">${k(M.title)}</span>
|
|
148
|
-
</button>`).join(""),$.classList.remove("hidden")}return L.addEventListener("input",()=>{b(L.value.trim())}),L.addEventListener("keydown",m=>{if(m.key==="Enter"){m.preventDefault();const C=L.value.trim();C&&!i.includes(C)&&(i.push(C),L.value="",y(),$.classList.add("hidden"),h())}}),$.addEventListener("mousedown",m=>{m.preventDefault();const C=m.target.closest("[data-slug]");if(!C)return;const M=C.dataset.slug??"";M&&!i.includes(M)&&(i.push(M),L.value="",y(),$.classList.add("hidden"),h())}),document.addEventListener("click",m=>{const C=m.target;!a.contains(C)&&!o.contains(C)&&!v.contains(C)&&!S.contains(C)&&!L.contains(C)&&!$.contains(C)&&q()}),{getState:()=>({slug:c.value.trim(),type:d,status:g,tags:[...p],related:[...i]}),setRelated(m){i=[...new Set(m)],y(),h()}}}let N=null,I=null;function Xt(e,n,t,s=[]){var Z,ee,te,ne,se,re,ie,ae,oe,le,de,ce;const c=s.map(u=>({slug:u.slug,title:u.title}));let a=null,o=n.body;const v=Q(),S=Ae(e,{rootClass:"workspace-main workspace-editor",breadcrumbs:[{label:"Knowledge"},{label:"Drafts"},{label:n.title||n.slug,current:!0}],titleHtml:'<input id="ed-title" class="title-input doc-title" type="text" placeholder="Document title" />',actionsHtml:`
|
|
149
|
-
<span id="ed-save-status" class="save-status" aria-live="polite"></span>
|
|
150
|
-
<button type="button" id="toggle-focus" class="btn-ghost" aria-pressed="${v}">
|
|
151
|
-
${v?"Show info":"Hide info"}
|
|
152
|
-
</button>
|
|
153
|
-
<div class="publish-split">
|
|
154
|
-
<button type="button" id="ed-publish" class="btn-primary publish-main">Publish</button>
|
|
155
|
-
<button type="button" id="ed-publish-menu-btn" class="btn-primary publish-menu-trigger" aria-haspopup="true" aria-expanded="false">▾</button>
|
|
156
|
-
<div id="ed-publish-menu" class="publish-menu hidden" role="menu">
|
|
157
|
-
<button type="button" id="ed-publish-review" role="menuitem">Review changes</button>
|
|
158
|
-
</div>
|
|
159
|
-
</div>
|
|
160
|
-
<button type="button" id="ed-view-md" class="btn-ghost">View markdown</button>
|
|
161
|
-
<button type="button" id="ed-close" class="btn-ghost">Close</button>
|
|
162
|
-
<button type="button" id="ed-discard" class="btn-ghost">Discard draft</button>
|
|
163
|
-
`,mainHtml:'<div id="ed-visual-canvas"></div>',railHtml:Jt({forkedFrom:n.forked_from}),focusMode:v});xe(e,v);const P=e.querySelector("#ed-title"),E=e.querySelector("#ed-save-status"),T=S.bodySlot.querySelector("#ed-visual-canvas"),w=document.createElement("div");w.id="publish-modal",w.className="modal hidden",w.innerHTML=`
|
|
164
|
-
<div class="modal-card modal-card-wide">
|
|
165
|
-
<p>Publish to git as markdown?</p>
|
|
166
|
-
<code id="publish-target"></code>
|
|
167
|
-
<pre id="publish-diff" class="diff-preview"></pre>
|
|
168
|
-
<div id="publish-related" class="publish-related hidden">
|
|
169
|
-
<p id="publish-related-prompt"></p>
|
|
170
|
-
<ul id="publish-related-list" class="publish-related-list"></ul>
|
|
171
|
-
<div class="editor-actions">
|
|
172
|
-
<button type="button" id="publish-related-apply" class="btn-primary">Add to related</button>
|
|
173
|
-
<button type="button" id="publish-related-skip" class="btn-ghost">Skip</button>
|
|
174
|
-
</div>
|
|
175
|
-
</div>
|
|
176
|
-
<div class="editor-actions">
|
|
177
|
-
<button type="button" id="publish-confirm" class="btn-primary">Confirm</button>
|
|
178
|
-
<button type="button" id="publish-cancel" class="btn-ghost">Cancel</button>
|
|
179
|
-
</div>
|
|
180
|
-
</div>
|
|
181
|
-
`,e.appendChild(w);const L=document.createElement("div");L.id="view-md-modal",L.className="modal hidden",L.innerHTML=`
|
|
182
|
-
<div class="modal-card modal-card-wide">
|
|
183
|
-
<h3 class="modal-title">Markdown source</h3>
|
|
184
|
-
<pre id="view-md-content" class="md-source"></pre>
|
|
185
|
-
<div class="editor-actions">
|
|
186
|
-
<button type="button" id="view-md-copy" class="btn-primary">Copy</button>
|
|
187
|
-
<button type="button" id="view-md-close" class="btn-ghost">Close</button>
|
|
188
|
-
</div>
|
|
189
|
-
</div>
|
|
190
|
-
`,e.appendChild(L);const $=e.querySelector("#ed-publish-menu");P.value=n.title;const p=Vt(S.railSlot,{slug:n.slug,type:n.type,status:n.status,tags:n.tags,related:n.related},c,()=>l());$e(async()=>{const{mountVisualEditor:u}=await import("./visual-editor-D1uYYGOW.js");return{mountVisualEditor:u}},__vite__mapDeps([3,2,4,5])).then(({mountVisualEditor:u})=>{a=u(T,{initialMarkdown:n.body,docCandidates:c,onBodyChange:()=>l(),onError:t.onError})});let i=[];function g(){return(a==null?void 0:a.getMarkdownBody())??o}function d(){const u=p.getState();return{title:P.value,slug:u.slug,type:u.type,status:u.status,tags:u.tags,related:u.related,body:g()}}function h(u){E.textContent=u}async function r(){h("Saving…");const u=d();o=u.body,await Ve(n.id,u),h("Saved")}function l(){N&&clearTimeout(N),N=setTimeout(()=>{N=null,I=r().catch(u=>{h(""),t.onError(u instanceof Error?u.message:"Autosave failed")})},800)}async function f(){N&&(clearTimeout(N),N=null,I=r().catch(u=>{throw h(""),t.onError(u instanceof Error?u.message:"Autosave failed"),u})),I&&(await I,I=null)}P.addEventListener("input",()=>l()),P.addEventListener("change",()=>l());function y(){const u=e.querySelector("#publish-related"),A=e.querySelector("#publish-related-prompt"),U=e.querySelector("#publish-related-list"),R=p.getState();if(i=Ot(g(),R.related,c),i.length===0){u.classList.add("hidden");return}A.textContent=`Add ${i.length} body link(s) to related?`,U.innerHTML=i.map(K=>{var ue;const Ue=((ue=c.find(_e=>_e.slug===K))==null?void 0:ue.title)??K;return`<li><code>${k(K)}</code> — ${k(Ue)}</li>`}).join(""),u.classList.remove("hidden")}function q(){var A;if(i.length===0)return;const u=p.getState();p.setRelated([...new Set([...u.related,...i])]),i=[],(A=e.querySelector("#publish-related"))==null||A.classList.add("hidden")}(Z=e.querySelector("#publish-related-apply"))==null||Z.addEventListener("click",()=>{q()}),(ee=e.querySelector("#publish-related-skip"))==null||ee.addEventListener("click",()=>{var u;i=[],(u=e.querySelector("#publish-related"))==null||u.classList.add("hidden")});let b=null;function m(){w.classList.add("hidden"),b&&(document.removeEventListener("keydown",b),b=null)}function C(){w.classList.remove("hidden"),b||(b=u=>{u.key==="Escape"&&m()},document.addEventListener("keydown",b))}function M(){L.classList.add("hidden")}function He(){const u=L.querySelector("#view-md-content");u.textContent=g(),L.classList.remove("hidden")}async function Ne(){await f(),C(),y();const u=e.querySelector("#publish-target"),A=e.querySelector("#publish-diff"),U=p.getState();u.textContent=`docs/.../${U.slug}.md`,A.textContent="Loading diff…";try{const R=await Xe(n.id);R.targetPath&&(u.textContent=R.targetPath),A.textContent=R.diff}catch(R){A.textContent=R instanceof Error?R.message:"Diff unavailable"}}async function We(){const u=e.querySelector("#ed-publish");u.setAttribute("aria-busy","true"),u.disabled=!0;try{await f();const{result:A}=await z(n.id);t.onPublished(A.path)}finally{u.removeAttribute("aria-busy"),u.disabled=!1}}(te=e.querySelector("#ed-publish"))==null||te.addEventListener("click",()=>{We().catch(u=>{t.onError(u instanceof Error?u.message:"Publish failed")})}),(ne=e.querySelector("#ed-publish-review"))==null||ne.addEventListener("click",()=>{$.classList.add("hidden"),Ne().catch(u=>{t.onError(u instanceof Error?u.message:"Failed to prepare publish")})}),(se=e.querySelector("#ed-publish-menu-btn"))==null||se.addEventListener("click",()=>{var A;const u=$.classList.toggle("hidden");(A=e.querySelector("#ed-publish-menu-btn"))==null||A.setAttribute("aria-expanded",u?"false":"true")}),document.addEventListener("click",u=>{var U,R;const A=u.target;!$.contains(A)&&!((U=e.querySelector("#ed-publish-menu-btn"))!=null&&U.contains(A))&&($.classList.add("hidden"),(R=e.querySelector("#ed-publish-menu-btn"))==null||R.setAttribute("aria-expanded","false"))}),(re=e.querySelector("#ed-view-md"))==null||re.addEventListener("click",()=>{He()}),(ie=L.querySelector("#view-md-close"))==null||ie.addEventListener("click",()=>{M()}),L.addEventListener("click",u=>{u.target===L&&M()}),(ae=L.querySelector("#view-md-copy"))==null||ae.addEventListener("click",()=>{navigator.clipboard.writeText(g()).catch(u=>{t.onError(u instanceof Error?u.message:"Copy failed")})}),(oe=e.querySelector("#publish-cancel"))==null||oe.addEventListener("click",()=>{m()}),w.addEventListener("click",u=>{u.target===w&&m()}),(le=e.querySelector("#publish-confirm"))==null||le.addEventListener("click",()=>{(async()=>{await f();const{result:u}=await z(n.id);m(),t.onPublished(u.path)})().catch(u=>{t.onError(u instanceof Error?u.message:"Publish failed")})}),(de=e.querySelector("#ed-close"))==null||de.addEventListener("click",()=>{a==null||a.destroy(),t.onClosed()}),(ce=e.querySelector("#ed-discard"))==null||ce.addEventListener("click",()=>{confirm("Discard this draft?")&&(a==null||a.destroy(),Je(n.id).then(()=>t.onDeleted()).catch(u=>{t.onError(u instanceof Error?u.message:"Delete failed")}))})}function ye(e){const n=[];function t(s){s.indexPageSlug&&n.push(s.indexPageSlug);for(const c of s.children)c.kind==="page"?n.push(c.slug):t(c)}return t(e),n}function Yt(e){if(!(e instanceof HTMLElement))return!1;const n=e.tagName;return n==="INPUT"||n==="TEXTAREA"||n==="SELECT"?!0:e.isContentEditable}function Qt(e){const n=t=>{if(t.metaKey||t.ctrlKey||t.altKey)return;const s=Yt(t.target);if(t.key==="/"&&!s){t.preventDefault(),e.onFocusSearch();return}if(!s)switch(t.key){case"j":t.preventDefault(),e.onNext();break;case"k":t.preventDefault(),e.onPrev();break;case"e":e.onEdit();break}};return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)}const De="repomind-tree-expanded";function Zt(){try{const e=localStorage.getItem(De);return e?new Set(JSON.parse(e)):new Set([""])}catch{return new Set([""])}}function G(e){localStorage.setItem(De,JSON.stringify([...e]))}function en(e){return e.emoji?e.emoji:"📁"}function tn(e,n){if(n==="json")return"{ }";if(n==="yaml")return"Y";const t=ut(e);return t.length===1?t:"📄"}function nn(){document.querySelectorAll(".tree-context-menu").forEach(e=>e.remove())}function Re(e){const n=[e.relativePath];for(const t of e.children??[])t.kind==="folder"&&n.push(...Re(t));return n}function be(){const e=window.prompt("Page name (without .md):");return e!=null&&e.trim()?e.trim():null}function Se(e,n,t,s){nt(e,n,void 0,t).then(({draft:c})=>{var a,o;(a=s.onTreeChanged)==null||a.call(s),(o=s.onSelectDraft)==null||o.call(s,c)}).catch(c=>{var a;(a=s.onError)==null||a.call(s,c instanceof Error?c.message:"Create page failed")})}function sn(e,n,t){var $,p,i,g,d,h;nn();const{kind:s,parentPath:c,folderPath:a,page:o,tree:v,templates:S}=n,P=s==="page"&&o?Re(v).filter(r=>{const l=o.relativePath.includes("/")?o.relativePath.slice(0,o.relativePath.lastIndexOf("/")):"";return r!==l}):[],E=document.createElement("div");E.className="tree-create-menu tree-context-menu",E.innerHTML=`
|
|
191
|
-
<div class="tree-menu-label">Create</div>
|
|
192
|
-
<button type="button" data-action="page">New page</button>
|
|
193
|
-
${S.map(r=>`<button type="button" data-action="template" data-template="${we(r.id)}">From template: ${F(r.label)}</button>`).join("")}
|
|
194
|
-
<button type="button" data-action="folder">New folder</button>
|
|
195
|
-
${s==="folder"&&a?'<button type="button" data-action="emoji">Set emoji</button>':""}
|
|
196
|
-
${s==="page"&&o?`
|
|
197
|
-
<div class="tree-menu-label">Page</div>
|
|
198
|
-
<button type="button" data-action="rename">Rename…</button>
|
|
199
|
-
${P.length>0?'<div class="tree-menu-label">Move to</div>':""}
|
|
200
|
-
${P.map(r=>`<button type="button" data-action="move" data-folder="${we(r)}">${F(r||"(root)")}</button>`).join("")}
|
|
201
|
-
<button type="button" data-action="delete-page" class="tree-menu-danger">Delete page</button>
|
|
202
|
-
`:""}
|
|
203
|
-
${s==="folder"&&a?'<button type="button" data-action="delete-folder" class="tree-menu-danger">Delete folder</button>':""}
|
|
204
|
-
`;const T=e.getBoundingClientRect();E.style.top=`${T.bottom+4}px`,E.style.left=`${Math.max(8,T.left-160)}px`,document.body.appendChild(E);const w=()=>E.remove(),L=r=>{E.contains(r.target)||(w(),document.removeEventListener("click",L))};setTimeout(()=>document.addEventListener("click",L),0),($=E.querySelector('[data-action="page"]'))==null||$.addEventListener("click",()=>{w();const r=be();r&&Se(c,r,void 0,t)}),E.querySelectorAll('[data-action="template"]').forEach(r=>{r.addEventListener("click",()=>{w();const l=be();l&&Se(c,l,r.dataset.template,t)})}),(p=E.querySelector('[data-action="folder"]'))==null||p.addEventListener("click",()=>{w();const r=window.prompt("Folder name:");r!=null&&r.trim()&&Qe(c,r.trim()).then(()=>{var l;return(l=t.onTreeChanged)==null?void 0:l.call(t)}).catch(l=>{var f;(f=t.onError)==null||f.call(t,l instanceof Error?l.message:"Create folder failed")})}),(i=E.querySelector('[data-action="emoji"]'))==null||i.addEventListener("click",()=>{w();const r=window.prompt("Emoji for this folder:");r!==null&&Ze(a,r).then(()=>{var l;return(l=t.onTreeChanged)==null?void 0:l.call(t)}).catch(l=>{var f;(f=t.onError)==null||f.call(t,l instanceof Error?l.message:"Set emoji failed")})}),(g=E.querySelector('[data-action="rename"]'))==null||g.addEventListener("click",()=>{var f;if(w(),!o)return;const r=((f=o.relativePath.split("/").pop())==null?void 0:f.replace(/\.md$/,""))??o.name,l=window.prompt("New page name (without .md):",r);!(l!=null&&l.trim())||l.trim()===r||et(o.relativePath,l.trim()).then(({result:y})=>{var q,b,m;(q=t.onTreeChanged)==null||q.call(t),y.cascadeUpdated.length>0?(b=t.onNotify)==null||b.call(t,`Renamed to ${y.slug}; updated links in ${y.cascadeUpdated.length} file(s).`):y.slugChanged&&y.inboundWarnings.length>0&&((m=t.onError)==null||m.call(t,`Renamed to ${y.slug}; ${y.inboundWarnings.length} page(s) may still reference the old slug.`)),t.onSelectSlug(y.slug)}).catch(y=>{var q;(q=t.onError)==null||q.call(t,y instanceof Error?y.message:"Rename failed")})}),E.querySelectorAll('[data-action="move"]').forEach(r=>{r.addEventListener("click",()=>{if(w(),!o)return;const l=r.dataset.folder??"";tt(o.relativePath,l).then(({result:f})=>{var y,q,b;(y=t.onTreeChanged)==null||y.call(t),f.cascadeUpdated.length>0?(q=t.onNotify)==null||q.call(t,`Moved to ${f.relativePath}; updated links in ${f.cascadeUpdated.length} file(s).`):f.slugChanged&&f.inboundWarnings.length>0&&((b=t.onError)==null||b.call(t,`Moved; slug is now ${f.slug}. ${f.inboundWarnings.length} page(s) still reference the old slug.`)),t.onSelectSlug(f.slug)}).catch(f=>{var y;(y=t.onError)==null||y.call(t,f instanceof Error?f.message:"Move failed")})})}),(d=E.querySelector('[data-action="delete-page"]'))==null||d.addEventListener("click",()=>{w(),o&&window.confirm(`Delete page "${o.title}"?`)&&pe(o.relativePath,"page").then(({result:r})=>{var l,f,y,q;(l=t.onFsDeleted)==null||l.call(t,[r.slug]),(f=t.onTreeChanged)==null||f.call(t),r.cascadeUpdated.length>0?(y=t.onNotify)==null||y.call(t,`Deleted ${r.slug}; cleaned links in ${r.cascadeUpdated.length} file(s).`):r.inboundWarnings.length>0&&((q=t.onError)==null||q.call(t,`${r.inboundWarnings.length} page(s) still reference deleted slug "${r.slug}".`))}).catch(r=>{var l;(l=t.onError)==null||l.call(t,r instanceof Error?r.message:"Delete failed")})}),(h=E.querySelector('[data-action="delete-folder"]'))==null||h.addEventListener("click",()=>{w(),a&&window.confirm(`Delete folder "${a}" and all pages inside?`)&&pe(a,"folder").then(({result:r})=>{var l,f,y,q;(l=t.onFsDeleted)==null||l.call(t,r.deletedSlugs),(f=t.onTreeChanged)==null||f.call(t),r.cascadeUpdated.length>0?(y=t.onNotify)==null||y.call(t,`Deleted folder; cleaned links in ${r.cascadeUpdated.length} file(s).`):r.inboundWarnings.length>0&&((q=t.onError)==null||q.call(t,`${r.inboundWarnings.length} page(s) still reference deleted page(s).`))}).catch(r=>{var l;(l=t.onError)==null||l.call(t,r instanceof Error?r.message:"Delete folder failed")})})}function rn(e,n,t,s){var p;e.innerHTML=`
|
|
205
|
-
<nav id="docs-tree" class="docs-tree" aria-label="Documentation tree"></nav>
|
|
206
|
-
<section class="catalog-section catalog-drafts">
|
|
207
|
-
<button type="button" class="catalog-header" data-catalog="__drafts__" aria-expanded="true">
|
|
208
|
-
<span class="catalog-chevron" aria-hidden="true">▾</span>
|
|
209
|
-
<span class="catalog-icon catalog-icon--draft" aria-hidden="true">✎</span>
|
|
210
|
-
<span class="catalog-label">Drafts</span>
|
|
211
|
-
<span class="catalog-count">${t.length}</span>
|
|
212
|
-
</button>
|
|
213
|
-
<ul id="draft-list" class="catalog-pages"></ul>
|
|
214
|
-
</section>
|
|
215
|
-
`;const c=e.querySelector("#docs-tree"),a=e.querySelector("#draft-list"),o=Zt();let v=null,S=null,P=null;async function E(i,g){var d;try{v||(v=(await Ye()).templates),sn(i,{...g,templates:v},s)}catch(h){(d=s.onError)==null||d.call(s,h instanceof Error?h.message:"Failed to open menu")}}function T(i,g){var r,l;const d=document.createElement("div");d.className="tree-row",d.style.paddingLeft=`${g*12+8}px`,i.slug===S&&d.classList.add("active"),d.innerHTML=`
|
|
216
|
-
<span class="tree-spacer" aria-hidden="true"></span>
|
|
217
|
-
<button type="button" class="tree-label">
|
|
218
|
-
<span class="tree-icon tree-icon--page">${tn(i.type,i.contentKind)}</span>
|
|
219
|
-
<span class="tree-title">${F(i.title)}</span>
|
|
220
|
-
</button>
|
|
221
|
-
<button type="button" class="tree-menu" title="Actions">⋯</button>
|
|
222
|
-
`;const h=i.relativePath.includes("/")?i.relativePath.slice(0,i.relativePath.lastIndexOf("/")):"";return(r=d.querySelector(".tree-menu"))==null||r.addEventListener("click",f=>{f.stopPropagation(),E(f.currentTarget,{kind:"page",parentPath:h,folderPath:h,page:i,tree:n})}),(l=d.querySelector(".tree-label"))==null||l.addEventListener("click",()=>{S=i.slug,P=null,L(),$(),s.onSelectSlug(i.slug)}),d}function w(i,g){var l,f,y;const d=document.createElement("div");d.className="tree-folder";const h=o.has(i.relativePath),r=document.createElement("div");if(r.className="tree-row",r.style.paddingLeft=`${g*12+8}px`,r.innerHTML=`
|
|
223
|
-
<button type="button" class="tree-toggle" aria-expanded="${h}">${h?"▾":"▸"}</button>
|
|
224
|
-
<button type="button" class="tree-label">
|
|
225
|
-
<span class="tree-icon tree-icon--folder">${en(i)}</span>
|
|
226
|
-
<span class="tree-title">${F(i.name)}</span>
|
|
227
|
-
</button>
|
|
228
|
-
<button type="button" class="tree-menu" title="Actions">⋯</button>
|
|
229
|
-
`,(l=r.querySelector(".tree-toggle"))==null||l.addEventListener("click",q=>{q.stopPropagation(),o.has(i.relativePath)?o.delete(i.relativePath):o.add(i.relativePath),G(o),L()}),(f=r.querySelector(".tree-label"))==null||f.addEventListener("click",()=>{if(i.indexPageSlug){S=i.indexPageSlug,P=null,L(),$(),s.onSelectSlug(i.indexPageSlug);return}o.has(i.relativePath)?o.delete(i.relativePath):o.add(i.relativePath),G(o),L()}),(y=r.querySelector(".tree-menu"))==null||y.addEventListener("click",q=>{q.stopPropagation(),E(q.currentTarget,{kind:"folder",parentPath:i.relativePath,folderPath:i.relativePath,tree:n})}),d.appendChild(r),h){const q=document.createElement("div");q.className="tree-children";for(const b of i.children??[])b.kind==="folder"?q.appendChild(w(b,g+1)):q.appendChild(T(b,g+1));d.appendChild(q)}return d}function L(){c.innerHTML="",c.appendChild(w(n,0))}function $(){if(a.innerHTML="",t.length===0){a.innerHTML='<li class="placeholder page-item">No drafts</li>';return}for(const i of t){const g=document.createElement("li");g.className="page-item",i.id===P&&g.classList.add("active"),g.innerHTML=`<span class="page-title">${F(i.title||i.slug)}</span><span class="status-chip status-draft">draft</span>`,g.addEventListener("click",()=>{var d;P=i.id,S=null,L(),$(),(d=s.onSelectDraft)==null||d.call(s,i)}),a.appendChild(g)}}L(),$(),(p=e.querySelector('[data-catalog="__drafts__"]'))==null||p.addEventListener("click",()=>{const i=e.querySelector("#draft-list"),g=e.querySelector('[data-catalog="__drafts__"]'),d=(i==null?void 0:i.classList.toggle("hidden"))===!1;g==null||g.setAttribute("aria-expanded",String(d));const h=g==null?void 0:g.querySelector(".catalog-chevron");h&&(h.textContent=d?"▾":"▸")}),e.setActiveSlug=i=>{S=i,P=null,o.add(""),G(o),L(),$()},e.setActiveDraft=i=>{P=i,S=null,L(),$()},e.refreshDrafts=i=>{t.length=0,t.push(...i),$();const g=e.querySelector(".catalog-drafts .catalog-count");g&&(g.textContent=String(t.length))},e.refreshTree=(i,g)=>{n.children=i.children??[],n.emoji=i.emoji,n.indexPageSlug=i.indexPageSlug,n.name=i.name,t.length=0,t.push(...g??[]),L(),$()}}function F(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function we(e){return F(e)}function an(e){const n=new EventSource("/api/events");return n.onmessage=()=>{e()},()=>{n.close()}}At();st();function on(e){return new Map(e.map(n=>[n.relativePath,n.slug]))}function ln(e,n){var t;return(t=e.find(s=>s.slug===n))==null?void 0:t.relativePath}function x(e,n=!1){const t=document.querySelector("#banner");t&&(t.textContent=e,t.classList.toggle("error",n),t.classList.remove("hidden"),setTimeout(()=>t.classList.add("hidden"),5e3))}async function dn(e){var t;const{drafts:n}=await O();return(t=e.refreshDrafts)==null||t.call(e,n),n}async function cn(){var h;rt(document.querySelector("#theme-toggle"));const e=document.querySelector("#sidebar"),n=document.querySelector("#workspace"),t=document.querySelector("#health-toggle"),s=document.querySelector("#stats"),c=document.querySelector("#global-search"),a=document.querySelector("#search-dropdown");let o=[],v=null,S=[],P="workspace",E=null,T=null;async function w(r){var y;const[{tree:l},{drafts:f}]=await Promise.all([fe(),O()]);return(y=r.refreshTree)==null||y.call(r,l,f),S=ye(l),l}function L(r){if(P=r,t.setAttribute("aria-pressed",String(r==="dashboard")),r==="dashboard"){E=pt(n,{onOpenDraft:f=>{L("workspace"),i(f)},onPublished:f=>{(async()=>(await w(e),await $(),x(`Published: ${f}`)))()},onNotify:(f,y)=>x(f,y)}).refresh;return}E=null,H(n,null)}t.addEventListener("click",()=>{L(P==="dashboard"?"workspace":"dashboard")}),Qt({onNext:()=>{if(P!=="workspace"||!v)return;const r=S.indexOf(v);r>=0&&r<S.length-1&&d(S[r+1])},onPrev:()=>{if(P!=="workspace"||!v)return;const r=S.indexOf(v);r>0&&d(S[r-1])},onFocusSearch:()=>{c.focus(),c.select()},onEdit:()=>{P==="workspace"&&v&&g(v)}});async function $(){const r=await ot(),f=await(await fetch("/api/stats")).json(),{drafts:y}=await O(),q=f.brokenRelatedCount>0?` · ${f.brokenRelatedCount} broken links`:"";s.textContent=`v${r.version} · ${r.docCount} pages · ${y.length} drafts${q}`}function p(r){if(r.length===0){a.innerHTML='<p class="search-empty">No matches</p>',a.classList.remove("hidden");return}const l=document.createElement("ul");l.className="search-results";for(const f of r){const y=o.find(b=>b.slug===f.slug),q=document.createElement("li");q.innerHTML=`
|
|
230
|
-
<div class="search-result-title">${f.title}</div>
|
|
231
|
-
<div class="search-result-meta">${J((y==null?void 0:y.type)??"")} · ${f.snippet}</div>
|
|
232
|
-
`,q.addEventListener("click",()=>{a.classList.add("hidden"),c.value="",d(f.slug)}),l.appendChild(q)}a.innerHTML="",a.appendChild(l),a.classList.remove("hidden")}c.addEventListener("input",()=>{const r=c.value.trim();if(T&&clearTimeout(T),!r){a.classList.add("hidden"),a.innerHTML="";return}T=setTimeout(()=>{it(r).then(({results:l})=>p(l)).catch(l=>x(l instanceof Error?l.message:"Search failed",!0))},300)}),document.addEventListener("click",r=>{!a.contains(r.target)&&r.target!==c&&a.classList.add("hidden")});function i(r){var l;L("workspace"),(l=e.setActiveDraft)==null||l.call(e,r.id),Xt(n,r,{onPublished:f=>{(async()=>(o=(await j()).docs,await w(e),await $(),E==null||E(),x(`Published: ${f}`),await d(r.slug)))()},onClosed:()=>{d(r.forked_from??r.slug).catch(()=>{H(n,null)})},onDeleted:()=>{(async()=>(await w(e),H(n,null)))()},onError:f=>x(f,!0)},o)}async function g(r){try{const{draft:l}=await lt(r);await dn(e),i(l)}catch(l){x(l instanceof Error?l.message:"Edit failed",!0)}}async function d(r,l={}){var q;const f=l.updateUrl??!0,y=l.urlMode??"push";P==="dashboard"&&L("workspace"),v=r,(q=e.setActiveSlug)==null||q.call(e,r);try{const b=await at(r),m=ln(o,r);H(n,b,{onEdit:C=>{g(C)},docRelativePath:m,slugByRelative:on(o),onCopyLink:()=>x("Link copied")}),f&&Dt(r,y)}catch(b){x(b instanceof Error?b.message:"Failed to load doc",!0)}}n.addEventListener("navigate-slug",(r=>{d(r.detail.slug)}));try{await $();const[r,{tree:l},{drafts:f}]=await Promise.all([j(),fe(),O()]);o=r.docs,S=ye(l),rn(e,l,f,{onSelectSlug:b=>{d(b)},onSelectDraft:b=>i(b),onTreeChanged:()=>{(async()=>(o=(await j()).docs,await w(e),await $()))()},onFsDeleted:b=>{(async()=>(o=(await j()).docs,v&&b.includes(v)&&(v=null,H(n,null)),await w(e),await $()))()},onError:b=>x(b,!0),onNotify:b=>x(b)}),an(()=>{(async()=>{try{o=(await j()).docs,await w(e),await $(),v&&!o.some(m=>m.slug===v)&&(v=null,H(n,null))}catch{}})()}),Rt(b=>{if(!b){v=null,H(n,null);return}o.some(m=>m.slug===b)&&d(b,{updateUrl:!1})}),H(n,null);const y=Y(),q=Mt();if(q){const b=f.find(m=>m.id===q);b?i(b):x(`Unknown draft: ${q}`,!0)}else if(y)o.some(b=>b.slug===y)?await d(y,{updateUrl:!1}):x(`Unknown page: ${y}`,!0);else{const b=kt(),m=b?(h=o.find(C=>C.relativePath===b))==null?void 0:h.slug:void 0;b&&m?await d(m,{updateUrl:!1}):b?x(`Unknown path: ${b}`,!0):l.indexPageSlug?await d(l.indexPageSlug,{urlMode:"replace"}):o.length>0&&o[0]&&await d(o[0].slug,{urlMode:"replace"})}}catch(r){x(r instanceof Error?r.message:"Failed to load workspace",!0)}}cn();export{$e as _,Kt as a,Lt as e,fn as f,Pe as p};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as r,b as e,a,S as s}from"./chunk-AQP2D5EJ-CSvrR8rQ.js";import{_ as i}from"./mermaid.core-C2wn2wM5.js";import"./transform-BwXaE9hv.js";import"./chunk-55IACEB6-TcrLDHYx.js";import"./chunk-2J33WTMH-CxWSQi5S.js";import"./main-Io6jccwi.js";import"./theme-Dl8H1UuW.js";import"./editor-DZbRkvnr.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
|
-
(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,t){return n("/api/fs/move",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fromPath:e,toDir:t})})}function j(e,t){return n("/api/fs/rename",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e,newName:t})})}function k(e,t){return n("/api/fs/delete",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e,kind:t})})}function N(){return n("/api/templates")}function A(e,t){return n("/api/catalog-meta",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e,emoji:t})})}function L(){return n("/api/drafts")}function E(e,t){return n(`/api/drafts/${encodeURIComponent(e)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}function $(e){return n(`/api/drafts/${encodeURIComponent(e)}/publish`,{method:"POST"})}function J(e){return n(`/api/drafts/${encodeURIComponent(e)}`,{method:"DELETE"})}function U(){return n("/api/check")}function R(e){return n(`/api/drafts/${encodeURIComponent(e)}/diff`)}function I(){return n("/api/export",{method:"POST"})}function v(){return n("/api/unprepared")}function F(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,b as C,y as D,P as a,v as b,F as c,$ as d,I as e,O as f,U as g,J as h,E as i,R as j,N as k,L as l,C as m,A as n,D as o,x as p,k as q,j as r,q as s,w as t,H as u,M as v,B as w,g as x,m as y,S as z};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root,[data-theme=light]{--bg: #ffffff;--panel: #f4f5f7;--border: #dfe1e6;--text: #172b4d;--muted: #626f86;--accent: #0c66e4;--accent-subtle: #e9f2ff;--link: #0c66e4;--link-hover: #0055cc;--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-subtle: rgba(91, 159, 212, .15);--link: #9ec5f0;--link-hover: #c2dbf7;--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:280px 1fr;flex:1;min-height:0}.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-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:hidden;display:flex;flex-direction:column;background:var(--bg)}.visual-canvas .visual-editor-mount{flex:1;min-height:0;overflow:auto}.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-block{margin:.75rem 0;border:1px solid var(--border);border-radius:6px;overflow:hidden}.mermaid-editor-block pre{margin:0;border-radius:0;border-bottom:1px solid var(--border)}.mermaid-editor-preview{padding:.75rem;background:var(--panel);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}.wikilink-chip{color:var(--link);background:var(--accent-subtle);padding:.1rem .35rem;border-radius:4px;font-size:.9em}.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}.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-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;font-size:.85rem}.tree-icon--page{width:16px;height:16px;border-radius:3px;background:var(--panel);border:1px solid var(--border);color:var(--accent);font-size:.6rem;font-weight:700}.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}.editor-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem;margin-bottom:.35rem}.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}.editor-toolbar button:hover{border-color:var(--accent);color:var(--accent)}.editor-toolbar-sep{width:1px;height:1rem;background:var(--border);margin:0 .15rem}.wikilink-menu{position:fixed;z-index:400;max-height:240px;overflow-y:auto;background:var(--panel);border:1px solid var(--border);border-radius:6px;box-shadow:0 8px 24px #00000026;display:flex;flex-direction:column}.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{background:var(--accent-subtle)}.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:color-mix(in srgb,var(--link) 45%,transparent);text-underline-offset:2px}.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 dashed color-mix(in srgb,var(--link) 65%,transparent)}.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}.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:#05c}.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,#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:100}.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}.modal-title{margin:0 0 .75rem;font-size:1.1rem}.field-hint{font-size:.75rem;color:#e07a7a;margin:.25rem 0 0}.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{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,47 +0,0 @@
|
|
|
1
|
-
import{m as H,N as I,a as C,E as B,T as S,b as A,c as j,I as R,d as N,S as q,C as W,e as z,L as _,P,f as D}from"./editor-DZbRkvnr.js";import{u as U}from"./theme-Dl8H1UuW.js";import{f as O,p as F,e as J,a as K}from"./main-Io6jccwi.js";const V=/(\*\*[^*]+\*\*|_[^_]+_|`[^`]+`|\[[^\]]+\]\([^)]+\)|!\[[^\]]*\]\([^)]+\)|\[\[[^\]]+\]\])/g;function x(e){if(!e)return[];const t=/^\[\[([^\]|]+)(?:\|([^\]]+))?\]\]$/.exec(e);if(t){const{display:f,slug:u}=F(t[1]??"",t[2]);return[{type:"wikilink",attrs:{slug:u,label:f}}]}const a=/^\*\*([^*]+)\*\*$/.exec(e);if(a)return[{type:"text",text:a[1]??"",marks:[{type:"bold"}]}];const s=/^_([^_]+)_$/.exec(e);if(s)return[{type:"text",text:s[1]??"",marks:[{type:"italic"}]}];const n=/^`([^`]+)`$/.exec(e);if(n)return[{type:"text",text:n[1]??"",marks:[{type:"code"}]}];const r=/^!\[([^\]]*)\]\(([^)]+)\)$/.exec(e);if(r)return[{type:"image",attrs:{src:r[2]??"",alt:r[1]??""}}];const i=/^\[([^\]]+)\]\(([^)]+)\)$/.exec(e);return i?[{type:"text",text:i[1]??"",marks:[{type:"link",attrs:{href:i[2]??""}}]}]:[{type:"text",text:e}]}function E(e){var s;const t=[];let a=0;for(const n of e.matchAll(V)){const r=n.index??0;r>a&&t.push(...x(e.slice(a,r))),t.push(...x(n[0]??"")),a=r+(((s=n[0])==null?void 0:s.length)??0)}return a<e.length&&t.push(...x(e.slice(a))),t.length===0?[{type:"text",text:""}]:t}function G(e){const t=e.trimEnd();return t?{type:"paragraph",content:E(t)}:{type:"paragraph"}}function b(e){const t=[];for(const a of e)switch(a.type){case"text":t.push(...E(a.text));break;case"strong":{const s=b(a.tokens);for(const n of s)n.type==="text"?t.push({type:"text",text:n.text??"",marks:[...n.marks??[],{type:"bold"}]}):t.push(n);break}case"em":{const s=b(a.tokens);for(const n of s)n.type==="text"?t.push({type:"text",text:n.text??"",marks:[...n.marks??[],{type:"italic"}]}):t.push(n);break}case"codespan":t.push({type:"text",text:a.text,marks:[{type:"code"}]});break;case"link":{const s=a,n=b(s.tokens);for(const r of n)r.type==="text"?t.push({type:"text",text:r.text??"",marks:[...r.marks??[],{type:"link",attrs:{href:s.href}}]}):t.push(r);break}case"image":t.push({type:"image",attrs:{src:a.href,alt:a.text??""}});break}return t}function Q(e){if(e.task)return{type:"taskItem",attrs:{checked:e.checked??!1},content:[{type:"paragraph",content:b(e.tokens)}]};const t=[];let a=[];const s=()=>{a.length!==0&&(t.push({type:"paragraph",content:b(a)}),a=[])};for(const n of e.tokens){if(n.type==="text"||n.type==="strong"||n.type==="em"||n.type==="codespan"||n.type==="link"||n.type==="image"){a.push(n);continue}s(),t.push(...T(n))}return s(),t.length===0?{type:"listItem",content:[{type:"paragraph"}]}:{type:"listItem",content:t}}function T(e){switch(e.type){case"heading":{const t=e;return[{type:"heading",attrs:{level:t.depth},content:b(t.tokens)}]}case"paragraph":{const t=e;return t.tokens.length>0?[{type:"paragraph",content:b(t.tokens)}]:[G(t.text)]}case"code":{const t=e;return[{type:"codeBlock",attrs:t.lang?{language:t.lang}:void 0,content:t.text?[{type:"text",text:t.text}]:void 0}]}case"blockquote":{const t=e,a=[];for(const s of t.tokens)a.push(...T(s));return[{type:"blockquote",content:a.length>0?a:[{type:"paragraph"}]}]}case"hr":return[{type:"horizontalRule"}];case"list":{const t=e;return[{type:t.items.some(s=>s.task)?"taskList":t.ordered?"orderedList":"bulletList",content:t.items.map(s=>Q(s))}]}case"table":{const t=e,a=[];t.header.length>0&&a.push({type:"tableRow",content:t.header.map(s=>({type:"tableHeader",content:[{type:"paragraph",content:b(s.tokens)}]}))});for(const s of t.rows)a.push({type:"tableRow",content:s.map(n=>({type:"tableCell",content:[{type:"paragraph",content:b(n.tokens)}]}))});return a.length>0?[{type:"table",content:a}]:[]}case"space":return[];default:return[]}}function X(e){const t=H.lexer(e,{gfm:!0}),a=[];for(const s of t)a.push(...T(s));return a.length===0?{type:"doc",content:[{type:"paragraph"}]}:{type:"doc",content:a}}function Y(e){var s,n,r,i,f;if(e.type==="wikilink"){const u=String(((s=e.attrs)==null?void 0:s.slug)??""),k=String(((n=e.attrs)==null?void 0:n.label)??u);return O(k,u)}if(e.type==="image"){const u=String(((r=e.attrs)==null?void 0:r.src)??"");return``}if(e.type==="hardBreak")return`
|
|
2
|
-
`;if(e.type!=="text")return"";let t=e.text??"";const a=e.marks??[];for(const u of a)switch(u.type){case"bold":t=`**${t}**`;break;case"italic":t=`_${t}_`;break;case"code":t=`\`${t}\``;break;case"link":t=`[${t}](${String(((f=u.attrs)==null?void 0:f.href)??"")})`;break}return t}function v(e){return!e||e.length===0?"":e.map(t=>Y(t)).join("")}function Z(e){return e.replace(/\|/g,"\\|")}function ee(e){var a;const t=(a=e.content)==null?void 0:a[0];return Z(v(t==null?void 0:t.content))}function te(e){const t=e.content??[],a=[];return t.forEach((s,n)=>{const r=(s.content??[]).map(i=>ee(i));a.push(`| ${r.join(" | ")} |`),n===0&&a.push(`| ${r.map(()=>"---").join(" | ")} |`)}),a.join(`
|
|
3
|
-
`)}function y(e){var t,a,s;switch(e.type){case"table":return te(e);case"paragraph":return v(e.content);case"heading":{const n=Number(((t=e.attrs)==null?void 0:t.level)??1);return`${"#".repeat(Math.min(3,Math.max(1,n)))} ${v(e.content)}`}case"codeBlock":{const n=String(((a=e.attrs)==null?void 0:a.language)??""),r=((s=e.content)==null?void 0:s.map(i=>i.text??"").join(""))??"";return`\`\`\`${n}
|
|
4
|
-
${r}
|
|
5
|
-
\`\`\``}case"blockquote":return(e.content??[]).map(r=>y(r)).join(`
|
|
6
|
-
`).split(`
|
|
7
|
-
`).map(r=>`> ${r}`).join(`
|
|
8
|
-
`);case"horizontalRule":return"---";case"bulletList":return(e.content??[]).map(n=>L(n,"- ")).join(`
|
|
9
|
-
`);case"orderedList":return(e.content??[]).map((n,r)=>L(n,`${r+1}. `)).join(`
|
|
10
|
-
`);case"taskList":return(e.content??[]).map(n=>ne(n)).join(`
|
|
11
|
-
`);case"listItem":return(e.content??[]).map(n=>y(n)).join(`
|
|
12
|
-
`);default:return""}}function L(e,t){const s=(e.content??[]).map(i=>y(i)).join(`
|
|
13
|
-
`).split(`
|
|
14
|
-
`),n=s[0]??"",r=s.slice(1).map(i=>` ${i}`).join(`
|
|
15
|
-
`);return r?`${t}${n}
|
|
16
|
-
${r}`:`${t}${n}`}function ne(e){var n;const a=!!((n=e.attrs)!=null&&n.checked)?"- [x]":"- [ ]",s=(e.content??[]).map(r=>y(r)).join(`
|
|
17
|
-
`);return`${a} ${s}`}function ae(e){return(e.content??[]).map(a=>y(a)).filter(a=>a.length>0).join(`
|
|
18
|
-
|
|
19
|
-
`)}function se(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function re(e,t){let a=null;function s(){var f,u;const i=t.querySelectorAll("pre code");for(const k of i){const d=(f=k.className.match(/language-(\S+)/))==null?void 0:f[1],p=k.parentElement;if(!p||d!=="mermaid")continue;const c=p.closest(".mermaid-editor-block")??(()=>{var h;const m=document.createElement("div");return m.className="mermaid-editor-block",(h=p.parentElement)==null||h.insertBefore(m,p),m.appendChild(p),m})();let o=c.querySelector(".mermaid-editor-preview");o||(o=document.createElement("div"),o.className="mermaid-editor-preview mermaid-wrapper",c.appendChild(o));const l=((u=k.textContent)==null?void 0:u.trim())??"";if(!l){o.innerHTML='<p class="mermaid-placeholder">Mermaid preview</p>';continue}o.innerHTML=`<pre class="mermaid">${se(l)}</pre>`,J(o)}}function n(){a&&clearTimeout(a),a=setTimeout(()=>{a=null,s()},350)}e.on("update",n),e.on("create",n),n();const r=()=>{n()};return window.addEventListener("repomind-theme-change",r),()=>{a&&clearTimeout(a),e.off("update",n),e.off("create",n),window.removeEventListener("repomind-theme-change",r)}}const M=[{id:"h1",label:"Heading 1",keywords:"h1 heading"},{id:"h2",label:"Heading 2",keywords:"h2 heading"},{id:"h3",label:"Heading 3",keywords:"h3 heading"},{id:"bullet",label:"Bullet list",keywords:"bullet list ul"},{id:"todo",label:"Task list",keywords:"todo task checkbox"},{id:"code",label:"Code block",keywords:"code fence"},{id:"mermaid",label:"Mermaid diagram",keywords:"mermaid diagram chart"},{id:"table",label:"Table",keywords:"table grid"},{id:"image",label:"Image",keywords:"image upload"},{id:"link",label:"Wikilink",keywords:"link wikilink"}];function oe(e){const t=e.toLowerCase().trim();return t?M.filter(a=>a.id.includes(t)||a.label.toLowerCase().includes(t)||a.keywords.includes(t)):M}function ie(e,t,a,s={}){const n=document.createElement("div");n.className="slash-menu hidden",n.setAttribute("role","listbox"),document.body.appendChild(n);let r=-1;function i(){n.classList.add("hidden"),n.innerHTML="",r=-1}function f(){const c=e.view.coordsAtPos(e.state.selection.from);n.style.top=`${c.bottom+4}px`,n.style.left=`${c.left}px`,n.style.minWidth="220px"}function u(c){var l,m;if(r<0)return;const o=e.state.selection.from;switch(e.chain().focus().deleteRange({from:r,to:o}).run(),c){case"h1":e.chain().focus().toggleHeading({level:1}).run();break;case"h2":e.chain().focus().toggleHeading({level:2}).run();break;case"h3":e.chain().focus().toggleHeading({level:3}).run();break;case"bullet":e.chain().focus().toggleBulletList().run();break;case"todo":e.chain().focus().toggleTaskList().run();break;case"code":e.chain().focus().toggleCodeBlock().run();break;case"mermaid":(l=s.onMermaid)==null||l.call(s);break;case"table":(m=s.onTable)==null||m.call(s);break;case"image":t();break;case"link":a();break}i()}function k(c){const o=oe(c);if(o.length===0){i();return}n.innerHTML=o.map(l=>`<button type="button" class="slash-option" data-id="${l.id}" role="option">
|
|
20
|
-
<span class="slash-option-id">/${l.id}</span>
|
|
21
|
-
<span class="slash-option-label">${l.label}</span>
|
|
22
|
-
</button>`).join(""),f(),n.classList.remove("hidden"),n.querySelectorAll(".slash-option").forEach(l=>{l.addEventListener("mousedown",m=>{m.preventDefault(),u(l.dataset.id??"")})})}function d(){var m;const{from:c}=e.state.selection,o=e.state.doc.textBetween(Math.max(0,c-40),c,`
|
|
23
|
-
`,"\0"),l=/(?:^|\s)\/([^\s/]*)$/.exec(o);if(!l){i();return}r=c-(((m=l[1])==null?void 0:m.length)??0)-1,k(l[1]??"")}e.on("update",d),e.on("selectionUpdate",d);const p=()=>{setTimeout(i,120)};return e.view.dom.addEventListener("blur",p),()=>{e.off("update",d),e.off("selectionUpdate",d),e.view.dom.removeEventListener("blur",p),n.remove()}}const ce=I.create({name:"wikilink",group:"inline",inline:!0,atom:!0,selectable:!0,addOptions(){return{HTMLAttributes:{}}},addAttributes(){return{slug:{default:""},label:{default:""}}},parseHTML(){return[{tag:"span[data-wikilink-slug]"}]},renderHTML({node:e,HTMLAttributes:t}){const a=String(e.attrs.label||e.attrs.slug);return["span",C(this.options.HTMLAttributes,t,{"data-wikilink-slug":e.attrs.slug,class:"wikilink-chip"}),a]},renderText({node:e}){const t=String(e.attrs.slug??""),a=String(e.attrs.label??t);return a===t?`[[${t}]]`:`[[${a}|${t}]]`},addCommands(){return{insertWikilink:e=>({commands:t})=>t.insertContent({type:this.name,attrs:e})}}});function $(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function le(e){return $(e).replace(/"/g,""")}function ue(e,t){const a=document.createElement("div");a.className="wikilink-menu hidden",document.body.appendChild(a);let s=-1;function n(){a.classList.add("hidden"),a.innerHTML="",s=-1}function r(){const p=e.view.coordsAtPos(e.state.selection.from);a.style.top=`${p.bottom+4}px`,a.style.left=`${p.left}px`,a.style.minWidth="220px"}function i(d){if(s<0)return;const p=e.state.selection.from;e.chain().focus().deleteRange({from:s,to:p}).insertWikilink({slug:d,label:d}).run(),n()}function f(d){const p=K(d,t);if(p.length===0){n();return}a.innerHTML=p.map(c=>`<button type="button" class="wikilink-option" data-slug="${le(c.slug)}">
|
|
24
|
-
<span class="wikilink-option-slug">${$(c.slug)}</span>
|
|
25
|
-
<span class="wikilink-option-title">${$(c.title)}</span>
|
|
26
|
-
</button>`).join(""),r(),a.classList.remove("hidden"),a.querySelectorAll(".wikilink-option").forEach(c=>{c.addEventListener("mousedown",o=>{o.preventDefault(),i(c.dataset.slug??"")})})}function u(){const{from:d}=e.state.selection,p=e.state.doc.textBetween(Math.max(0,d-80),d,`
|
|
27
|
-
`,"\0"),c=/\[\[([^\]]*)$/.exec(p);if(!c){n();return}s=d-c[0].length,f(c[1]??"")}e.on("update",u),e.on("selectionUpdate",u);const k=()=>{setTimeout(n,120)};return e.view.dom.addEventListener("blur",k),()=>{e.off("update",u),e.off("selectionUpdate",u),e.view.dom.removeEventListener("blur",k),a.remove()}}function g(e,t,a){const s=a?` title="${a}"`:"";return`<button type="button" class="toolbar-btn" data-action="${t}"${s}>${e}</button>`}function pe(){return`
|
|
28
|
-
<div class="editor-toolbar visual-toolbar" role="toolbar" aria-label="Formatting">
|
|
29
|
-
${g("H1","h1")}
|
|
30
|
-
${g("H2","h2")}
|
|
31
|
-
${g("H3","h3")}
|
|
32
|
-
<span class="editor-toolbar-sep"></span>
|
|
33
|
-
${g("B","bold","Bold")}
|
|
34
|
-
${g("I","italic","Italic")}
|
|
35
|
-
${g("Link","link")}
|
|
36
|
-
<span class="editor-toolbar-sep"></span>
|
|
37
|
-
${g("• List","bullet")}
|
|
38
|
-
${g("1. List","ordered")}
|
|
39
|
-
${g("☐ Task","task")}
|
|
40
|
-
${g("Table","table")}
|
|
41
|
-
<span class="editor-toolbar-sep"></span>
|
|
42
|
-
${g("[[","wikilink","Insert wikilink")}
|
|
43
|
-
${g("Image","image")}
|
|
44
|
-
${g("Mermaid","mermaid","Insert mermaid diagram")}
|
|
45
|
-
</div>
|
|
46
|
-
`}const de=`graph LR
|
|
47
|
-
A --> B`;function ge(e,t){e.className="visual-canvas",e.innerHTML=`${pe()}<div class="visual-editor-mount"></div>`;const a=e.querySelector(".visual-editor-mount"),s=X(t.initialMarkdown),n=new B({element:a,extensions:[q.configure({heading:{levels:[1,2,3]},codeBlock:!1}),W.configure({languageClassPrefix:"language-"}),z.configure({resizable:!1}),S,A,j,_.configure({openOnClick:!1,autolink:!0}),R,P.configure({placeholder:"Start writing, or type / for headings, lists, and links…"}),N,D.configure({nested:!0}),ce],content:s,onUpdate:()=>{t.onBodyChange()}}),r=ue(n,t.docCandidates),i=re(n,a);function f(){const o=document.createElement("input");o.type="file",o.accept="image/png,image/jpeg,image/gif,image/webp,image/svg+xml",o.addEventListener("change",()=>{var m;const l=(m=o.files)==null?void 0:m[0];l&&U(l,"assets").then(({relativePath:h})=>{n.chain().focus().setImage({src:h}).run()}).catch(h=>{t.onError(h instanceof Error?h.message:"Image upload failed")})}),o.click()}function u(){const o=window.prompt("Wikilink slug");if(!(o!=null&&o.trim()))return;const l=o.trim();n.chain().focus().insertWikilink({slug:l,label:l}).run()}function k(){n.chain().focus().insertContent({type:"codeBlock",attrs:{language:"mermaid"},content:[{type:"text",text:de}]}).run()}function d(){n.chain().focus().insertTable({rows:3,cols:3,withHeaderRow:!0}).run()}const p=ie(n,f,u,{onMermaid:k,onTable:d});return e.querySelector(".visual-toolbar").addEventListener("click",o=>{const l=o.target.closest("[data-action]");if(!l)return;switch(l.dataset.action){case"h1":n.chain().focus().toggleHeading({level:1}).run();break;case"h2":n.chain().focus().toggleHeading({level:2}).run();break;case"h3":n.chain().focus().toggleHeading({level:3}).run();break;case"bold":n.chain().focus().toggleBold().run();break;case"italic":n.chain().focus().toggleItalic().run();break;case"link":{const h=n.getAttributes("link").href,w=window.prompt("URL",h??"https://");if(w===null)break;if(w===""){n.chain().focus().extendMarkRange("link").unsetLink().run();break}n.chain().focus().extendMarkRange("link").setLink({href:w}).run();break}case"bullet":n.chain().focus().toggleBulletList().run();break;case"ordered":n.chain().focus().toggleOrderedList().run();break;case"task":n.chain().focus().toggleTaskList().run();break;case"table":d();break;case"wikilink":u();break;case"image":f();break;case"mermaid":k();break}}),{getMarkdownBody:()=>ae(n.getJSON()),destroy:()=>{i(),p(),r(),n.destroy()}}}export{ge as mountVisualEditor};
|