@luutuankiet/gsd-reader 0.1.0
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/README.md +77 -0
- package/cli.cjs +215 -0
- package/dist/assets/_baseUniq-CIPUpMAZ.js +1 -0
- package/dist/assets/arc-Br99N0VK.js +1 -0
- package/dist/assets/architectureDiagram-VXUJARFQ-CnDgLlps.js +36 -0
- package/dist/assets/blockDiagram-VD42YOAC-DfC57oz9.js +122 -0
- package/dist/assets/c4Diagram-YG6GDRKO-CMOSglVb.js +10 -0
- package/dist/assets/channel-CQKYTGLH.js +1 -0
- package/dist/assets/chunk-4BX2VUAB-D6LBiRlQ.js +1 -0
- package/dist/assets/chunk-55IACEB6-BO539cu3.js +1 -0
- package/dist/assets/chunk-B4BG7PRW-D5sUsnig.js +165 -0
- package/dist/assets/chunk-DI55MBZ5-Bk_ryD3i.js +220 -0
- package/dist/assets/chunk-FMBD7UC4-Ra4v9gkm.js +15 -0
- package/dist/assets/chunk-QN33PNHL-t3oGvgwA.js +1 -0
- package/dist/assets/chunk-QZHKN3VN-auqEfnzi.js +1 -0
- package/dist/assets/chunk-TZMSLE5B-BJEML2bc.js +1 -0
- package/dist/assets/classDiagram-2ON5EDUG-iPflhCki.js +1 -0
- package/dist/assets/classDiagram-v2-WZHVMYZB-iPflhCki.js +1 -0
- package/dist/assets/clone-CBLy9m5M.js +1 -0
- package/dist/assets/cose-bilkent-S5V4N54A-Dnh7MK-o.js +1 -0
- package/dist/assets/cytoscape.esm-BQaXIfA_.js +331 -0
- package/dist/assets/dagre-6UL2VRFP-yqolbkxb.js +4 -0
- package/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/assets/diagram-PSM6KHXK-DNlswJeO.js +24 -0
- package/dist/assets/diagram-QEK2KX5R-DIhPPMly.js +43 -0
- package/dist/assets/diagram-S2PKOQOG-BpsQU6g-.js +24 -0
- package/dist/assets/erDiagram-Q2GNP2WA-ekvtRHZe.js +60 -0
- package/dist/assets/flowDiagram-NV44I4VS-BZVzZirk.js +162 -0
- package/dist/assets/ganttDiagram-JELNMOA3-ZL-Lvri5.js +267 -0
- package/dist/assets/gitGraphDiagram-NY62KEGX-CWINqymz.js +65 -0
- package/dist/assets/graph-BwuUgdUo.js +1 -0
- package/dist/assets/index-DBfOfu2r.js +584 -0
- package/dist/assets/infoDiagram-WHAUD3N6-DEWOExRO.js +2 -0
- package/dist/assets/init-Gi6I4Gst.js +1 -0
- package/dist/assets/journeyDiagram-XKPGCS4Q-DKXUBm8W.js +139 -0
- package/dist/assets/kanban-definition-3W4ZIXB7-BWGprGSC.js +89 -0
- package/dist/assets/katex-CBSAILhF.js +261 -0
- package/dist/assets/layout-CvO1_uww.js +1 -0
- package/dist/assets/linear-CEwiQp1W.js +1 -0
- package/dist/assets/mermaid.core-Bwyq-ixB.js +256 -0
- package/dist/assets/min-DoNrXYhX.js +1 -0
- package/dist/assets/mindmap-definition-VGOIOE7T-CM8WjOQr.js +68 -0
- package/dist/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/assets/pieDiagram-ADFJNKIX-C8s15H7H.js +30 -0
- package/dist/assets/quadrantDiagram-AYHSOK5B-D0g5wxCs.js +7 -0
- package/dist/assets/requirementDiagram-UZGBJVZJ-BZrk_Yop.js +64 -0
- package/dist/assets/sankeyDiagram-TZEHDZUN-DDmydxiD.js +10 -0
- package/dist/assets/sequenceDiagram-WL72ISMW-BFNOA8XU.js +145 -0
- package/dist/assets/stateDiagram-FKZM4ZOC-BWdtvbgT.js +1 -0
- package/dist/assets/stateDiagram-v2-4FDKWEC3-XQx3VZwI.js +1 -0
- package/dist/assets/timeline-definition-IT6M3QCI-D0HUIjfN.js +61 -0
- package/dist/assets/treemap-KMMF4GRG-B_Gv7V-c.js +128 -0
- package/dist/assets/xychartDiagram-PRI3JC2R-B8ImiHYg.js +7 -0
- package/dist/index.html +589 -0
- package/package.json +48 -0
|
@@ -0,0 +1,584 @@
|
|
|
1
|
+
(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))n(l);new MutationObserver(l=>{for(const o of l)if(o.type==="childList")for(const c of o.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&n(c)}).observe(document,{childList:!0,subtree:!0});function i(l){const o={};return l.integrity&&(o.integrity=l.integrity),l.referrerPolicy&&(o.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?o.credentials="include":l.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(l){if(l.ep)return;l.ep=!0;const o=i(l);fetch(l.href,o)}})();const Rn="modulepreload",On=function(t){return"/"+t},mt={},Ln=function(r,i,n){let l=Promise.resolve();if(i&&i.length>0){let c=function(p){return Promise.all(p.map(_=>Promise.resolve(_).then(m=>({status:"fulfilled",value:m}),m=>({status:"rejected",reason:m}))))};document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),u=(a==null?void 0:a.nonce)||(a==null?void 0:a.getAttribute("nonce"));l=c(i.map(p=>{if(p=On(p),p in mt)return;mt[p]=!0;const _=p.endsWith(".css"),m=_?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${p}"]${m}`))return;const b=document.createElement("link");if(b.rel=_?"stylesheet":Rn,_||(b.as="script"),b.crossOrigin="",b.href=p,u&&b.setAttribute("nonce",u),document.head.appendChild(b),_)return new Promise((N,k)=>{b.addEventListener("load",N),b.addEventListener("error",()=>k(new Error(`Unable to preload CSS for ${p}`)))})}))}function o(c){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=c,window.dispatchEvent(a),!a.defaultPrevented)throw c}return l.then(c=>{for(const a of c||[])a.status==="rejected"&&o(a.reason);return r().catch(o)})},Mn=/^### \[LOG-(\d+)\] - \[([A-Z_]+)\] - (.+)$/,In=/^(#{2,5}) (.+)$/,Cn=/~~.+~~/;function $n(t){const r=performance.now(),i=t.split(`
|
|
2
|
+
`),n=[],l=[];let o="GSD-Lite Worklog";for(let m=0;m<Math.min(10,i.length);m++)if(i[m].startsWith("# ")){o=i[m].slice(2).trim();break}let c=null,a=[],u=[],p=!1;for(let m=0;m<i.length;m++){const b=i[m],N=m+1,k=b.trim();if(k.startsWith("```")||k.startsWith("~~~")){p=!p,c&&a.push(b);continue}if(p){c&&a.push(b);continue}const S=b.match(Mn);if(S){c&&(c.content=a.join(`
|
|
3
|
+
`).trim());const I=`LOG-${S[1]}`,M=S[2],$=S[3],O=Cn.test($),D=$.match(/- Task: ([A-Z0-9-]+)/),H=D?D[1]:void 0,ae=D?$.replace(/\s*- Task: [A-Z0-9-]+/,"").trim():$;c={id:I,type:M,title:ae,task:H,superseded:O,lineNumber:N,level:3,content:"",children:[]},n.push(c),a=[],u=[{level:3,node:c}];continue}const C=b.match(In);if(C){const M=C[1].length,$=C[2],O={level:M,title:$,lineNumber:N,children:[]};if(M===2){c&&(c.content=a.join(`
|
|
4
|
+
`).trim()),l.push(O),u=[{level:2,node:O}],c=null,a=[];continue}if(M===3&&c===null){l.push(O),u=[{level:3,node:O}];continue}if(M===3&&c!==null&&!S){c.content=a.join(`
|
|
5
|
+
`).trim(),l.push(O),u=[{level:3,node:O}],c=null,a=[];continue}if(u.length>0){for(;u.length>0&&u[u.length-1].level>=M;)u.pop();u.length>0&&u[u.length-1].node.children.push(O),u.push({level:M,node:O})}c&&M>=4&&a.push(b);continue}c&&a.push(b)}c&&(c.content=a.join(`
|
|
6
|
+
`).trim());const _=Math.round(performance.now()-r);return{title:o,sections:l,logs:n,metadata:{totalLines:i.length,totalLogs:n.length,parseTime:_}}}function fe(t){let r=t;return r=r.replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>"),r=r.replace(/\*(.+?)\*/g,"<em>$1</em>"),r=r.replace(/`([^`]+)`/g,"<code>$1</code>"),r=r.replace(/~~(.+?)~~/g,"<del>$1</del>"),r=r.replace(/\[(.+?)\]\((.+?)\)/g,'<a href="$2" target="_blank" rel="noopener">$1</a>'),r}function se(t){const r={"&":"&","<":"<",">":">",'"':""","'":"'"};return t.replace(/[&<>"']/g,i=>r[i])}function bt(t,r){return t.length<=r?t:t.slice(0,r-1)+"…"}function Ue(t,r=!1){const i=`line-${t.lineNumber}`,n=t.children&&t.children.length>0;if(r){const l=t,o=l.superseded?" superseded":"",c=n?" has-children collapsed":"",a=n?'<span class="toggle-btn">▼</span>':"",u=n?`<ul class="outline-children">${l.children.map(p=>Ue(p,!1)).join("")}</ul>`:"";return`
|
|
7
|
+
<li class="outline-item log-item${o}${c}">
|
|
8
|
+
<div class="outline-row">
|
|
9
|
+
${a}
|
|
10
|
+
<a href="#${i}" class="outline-link">
|
|
11
|
+
<span class="badge badge-${l.type}">${l.type}</span>
|
|
12
|
+
<span class="log-id">${l.id}</span>
|
|
13
|
+
<span class="log-title">${se(bt(l.title,40))}</span>
|
|
14
|
+
</a>
|
|
15
|
+
</div>
|
|
16
|
+
${u}
|
|
17
|
+
</li>
|
|
18
|
+
`}else{const l=t,o=`indent-${l.level}`,c=n?" has-children collapsed":"",a=n?'<span class="toggle-btn">▼</span>':"",u=n?`<ul class="outline-children">${l.children.map(p=>Ue(p,!1)).join("")}</ul>`:"";return`
|
|
19
|
+
<li class="outline-item section-item ${o}${c}">
|
|
20
|
+
<div class="outline-row">
|
|
21
|
+
${a}
|
|
22
|
+
<a href="#${i}" class="outline-link">${se(bt(l.title,50))}</a>
|
|
23
|
+
</div>
|
|
24
|
+
${u}
|
|
25
|
+
</li>
|
|
26
|
+
`}}function Dn(t){const r=t.sections.map(n=>Ue(n,!1)).join(""),i=[...t.logs].reverse().map(n=>Ue(n,!0)).join("");return`
|
|
27
|
+
<nav class="outline" id="outline">
|
|
28
|
+
<div class="outline-header">
|
|
29
|
+
<span>📋 Outline</span>
|
|
30
|
+
<div class="outline-header-buttons">
|
|
31
|
+
<button class="expand-all-btn" id="expandAllBtn" title="Expand/Collapse All">⊞</button>
|
|
32
|
+
<button class="outline-close" id="outlineClose">✕</button>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="outline-content">
|
|
36
|
+
<h3 class="outline-section-title">Sections</h3>
|
|
37
|
+
<ul class="outline-list">${r}</ul>
|
|
38
|
+
<h3 class="outline-section-title">Logs (${t.logs.length})</h3>
|
|
39
|
+
<ul class="outline-list">${i}</ul>
|
|
40
|
+
</div>
|
|
41
|
+
</nav>
|
|
42
|
+
`}function Bn(t,r=1){const i=t.split(`
|
|
43
|
+
`),n=[];let l=!1,o="",c=[],a=!1,u=!1,p="ul";for(let _=0;_<i.length;_++){const m=i[_],b=r+_,N=`id="line-${b}"`,k=m.trim();if(k.startsWith("```")||k.startsWith("~~~")){if(!l)a&&(n.push("</tbody></table>"),a=!1),u&&(n.push(p==="ul"?"</ul>":"</ol>"),u=!1),l=!0,o=k.slice(3).trim(),c=[];else{l=!1;const $=se(c.join(`
|
|
44
|
+
`));if(o==="mermaid"){const O=b-c.length;n.push(`
|
|
45
|
+
<div class="mermaid-wrapper" data-start-line="${O}">
|
|
46
|
+
<pre class="mermaid-source" style="display:none">${$}</pre>
|
|
47
|
+
</div>
|
|
48
|
+
`)}else{const O=o?` class="language-${o}"`:"";n.push(`<pre><code${O}>${$}</code></pre>`)}}continue}if(l){c.push(m);continue}const S=m.match(/^(#{1,5}) (.+)$/);if(S){a&&(n.push("</tbody></table>"),a=!1),u&&(n.push(p==="ul"?"</ul>":"</ol>"),u=!1);const $=S[1].length,O=fe(se(S[2]));n.push(`<h${$} ${N}>${O}</h${$}>`);continue}if(/^---+$/.test(m)){a&&(n.push("</tbody></table>"),a=!1),u&&(n.push(p==="ul"?"</ul>":"</ol>"),u=!1),n.push("<hr>");continue}if(!m.trim()){a&&(n.push("</tbody></table>"),a=!1),u&&(n.push(p==="ul"?"</ul>":"</ol>"),u=!1);continue}if(m.includes("|")&&m.trim().startsWith("|")){const $=m.split("|").slice(1,-1).map(O=>O.trim());if($.every(O=>/^:?-+:?$/.test(O)))continue;if(a){const O=$.map(D=>`<td>${fe(se(D))}</td>`).join("");n.push(`<tr>${O}</tr>`)}else{u&&(n.push(p==="ul"?"</ul>":"</ol>"),u=!1),n.push("<table><thead><tr>");const O=$.map(D=>`<th>${fe(se(D))}</th>`).join("");n.push(`${O}</tr></thead><tbody>`),a=!0}continue}a&&(n.push("</tbody></table>"),a=!1);const C=m.match(/^(\s*)[-*+] (.+)$/);if(C){(!u||p!=="ul")&&(u&&n.push("</ol>"),n.push("<ul>"),u=!0,p="ul"),n.push(`<li>${fe(se(C[2]))}</li>`);continue}const I=m.match(/^(\s*)\d+\. (.+)$/);if(I){(!u||p!=="ol")&&(u&&n.push("</ul>"),n.push("<ol>"),u=!0,p="ol"),n.push(`<li>${fe(se(I[2]))}</li>`);continue}if(u&&(n.push(p==="ul"?"</ul>":"</ol>"),u=!1),m.startsWith("> ")){n.push(`<blockquote ${N}>${fe(se(m.slice(2)))}</blockquote>`);continue}const M=fe(se(m));n.push(`<p ${N}>${M}</p>`)}return a&&n.push("</tbody></table>"),u&&n.push(p==="ul"?"</ul>":"</ol>"),n.join(`
|
|
49
|
+
`)}function Pn(t){const r=Bn(t.content,t.lineNumber+1);return`
|
|
50
|
+
<article class="log-entry${t.superseded?" superseded":""}" id="line-${t.lineNumber}">
|
|
51
|
+
<header class="log-header">
|
|
52
|
+
<span class="log-badge">${t.id}</span>
|
|
53
|
+
<span class="log-type badge-${t.type}">${t.type}</span>
|
|
54
|
+
${t.task?`<span class="log-task">${t.task}</span>`:""}
|
|
55
|
+
</header>
|
|
56
|
+
<h2 class="log-title">${fe(se(t.title))}</h2>
|
|
57
|
+
<div class="log-content">
|
|
58
|
+
${r}
|
|
59
|
+
</div>
|
|
60
|
+
</article>
|
|
61
|
+
`}function Un(t){const r=Dn(t),i=t.logs.map(l=>Pn(l)).join("");return`
|
|
62
|
+
<!-- Top Bar -->
|
|
63
|
+
<header class="top-bar">
|
|
64
|
+
<button class="btn-outline-toggle" id="outlineToggle">📋</button>
|
|
65
|
+
<span class="top-bar-title">GSD-Lite Worklog</span>
|
|
66
|
+
<button class="btn-jump-latest" id="jumpLatest" data-line="${t.logs.length>0?t.logs[t.logs.length-1].lineNumber:1}">⬇ Latest</button>
|
|
67
|
+
</header>
|
|
68
|
+
|
|
69
|
+
<!-- Outline Panel -->
|
|
70
|
+
${r}
|
|
71
|
+
|
|
72
|
+
<!-- Overlay (mobile) -->
|
|
73
|
+
<div class="overlay" id="overlay"></div>
|
|
74
|
+
|
|
75
|
+
<!-- Main Content -->
|
|
76
|
+
<main class="content" id="content">
|
|
77
|
+
${i}
|
|
78
|
+
</main>
|
|
79
|
+
|
|
80
|
+
<!-- Mobile Scroll Thumb -->
|
|
81
|
+
<div class="scroll-thumb" id="scrollThumb">
|
|
82
|
+
<div class="thumb-icon">↕</div>
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<!-- Stats Footer -->
|
|
86
|
+
<div class="stats-footer">
|
|
87
|
+
${t.metadata.totalLogs} logs · ${t.metadata.totalLines} lines · ${t.metadata.parseTime}ms
|
|
88
|
+
</div>
|
|
89
|
+
`}function zn(){const t=document.getElementById("outline"),r=document.getElementById("overlay"),i=document.getElementById("content"),n=document.getElementById("outlineToggle"),l=document.getElementById("outlineClose"),o=document.getElementById("expandAllBtn"),c=document.getElementById("jumpLatest"),a=document.getElementById("scrollThumb");if(!t||!r||!i)return;let u=!1;function p(){window.innerWidth>=768?(t.classList.toggle("hidden"),i.classList.toggle("full-width")):(t.classList.toggle("open"),r.classList.toggle("visible"))}if(n==null||n.addEventListener("click",p),l==null||l.addEventListener("click",p),r==null||r.addEventListener("click",p),c==null||c.addEventListener("click",()=>{var m;const _=c.dataset.line;_&&((m=document.getElementById(`line-${_}`))==null||m.scrollIntoView({behavior:"smooth"}))}),o==null||o.addEventListener("click",()=>{const _=document.querySelectorAll(".outline-item.has-children");u?(_.forEach(m=>m.classList.add("collapsed")),o.textContent="⊞",o.title="Expand All"):(_.forEach(m=>m.classList.remove("collapsed")),o.textContent="⊟",o.title="Collapse All"),u=!u}),document.querySelectorAll(".toggle-btn").forEach(_=>{_.addEventListener("click",m=>{m.stopPropagation();const b=_.closest(".outline-item");if(!b)return;b.classList.contains("collapsed")?b.classList.remove("collapsed"):(b.classList.add("collapsed"),b.querySelectorAll(".outline-item.has-children").forEach(k=>{k.classList.add("collapsed")}))}),_.addEventListener("dblclick",m=>{m.stopPropagation();const b=_.closest(".outline-item");b&&(b.classList.remove("collapsed"),b.querySelectorAll(".outline-item.has-children").forEach(N=>{N.classList.remove("collapsed")}))})}),document.querySelectorAll(".outline-link").forEach(_=>{_.addEventListener("click",()=>{window.innerWidth<768&&(t.classList.remove("open"),r.classList.remove("visible"))})}),a){let _=function(){if(!a)return;const k=window.scrollY,S=document.documentElement.scrollHeight-window.innerHeight,C=window.innerHeight-120,I=60+k/S*C;a.style.top=`${I}px`},m=!1,b=0,N=0;a.addEventListener("touchstart",k=>{m=!0,b=k.touches[0].clientY,N=window.scrollY,a.style.background="rgba(26, 26, 46, 0.95)"}),document.addEventListener("touchmove",k=>{if(!m)return;const S=k.touches[0].clientY-b,C=document.documentElement.scrollHeight-window.innerHeight,I=window.innerHeight-120,M=S/I*C;window.scrollTo(0,N+M)}),document.addEventListener("touchend",()=>{m=!1,a.style.background="rgba(26, 26, 46, 0.8)"}),window.addEventListener("scroll",_),_()}}const w={isOpen:!1,zoom:1,panX:0,panY:0,isDragging:!1,dragStartX:0,dragStartY:0,lastPanX:0,lastPanY:0},_t=.25,yt=4,Pe=.25;let J=null,K=null,Oe=null,Ve=null;function Hn(){J||(J=document.createElement("div"),J.id="diagram-overlay",J.innerHTML=`
|
|
90
|
+
<style>
|
|
91
|
+
#diagram-overlay {
|
|
92
|
+
position: fixed;
|
|
93
|
+
top: 0;
|
|
94
|
+
left: 0;
|
|
95
|
+
right: 0;
|
|
96
|
+
bottom: 0;
|
|
97
|
+
background: rgba(0, 0, 0, 0.9);
|
|
98
|
+
z-index: 3000;
|
|
99
|
+
display: none;
|
|
100
|
+
flex-direction: column;
|
|
101
|
+
opacity: 0;
|
|
102
|
+
transition: opacity 0.2s ease;
|
|
103
|
+
}
|
|
104
|
+
#diagram-overlay.visible {
|
|
105
|
+
display: flex;
|
|
106
|
+
opacity: 1;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* Header bar */
|
|
110
|
+
.diagram-overlay-header {
|
|
111
|
+
display: flex;
|
|
112
|
+
align-items: center;
|
|
113
|
+
justify-content: space-between;
|
|
114
|
+
padding: 12px 16px;
|
|
115
|
+
background: rgba(0, 0, 0, 0.5);
|
|
116
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
|
117
|
+
}
|
|
118
|
+
.diagram-overlay-title {
|
|
119
|
+
color: white;
|
|
120
|
+
font-size: 14px;
|
|
121
|
+
font-weight: 500;
|
|
122
|
+
display: flex;
|
|
123
|
+
align-items: center;
|
|
124
|
+
gap: 8px;
|
|
125
|
+
}
|
|
126
|
+
.diagram-overlay-controls {
|
|
127
|
+
display: flex;
|
|
128
|
+
align-items: center;
|
|
129
|
+
gap: 8px;
|
|
130
|
+
}
|
|
131
|
+
.diagram-overlay-btn {
|
|
132
|
+
background: rgba(255, 255, 255, 0.1);
|
|
133
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
134
|
+
color: white;
|
|
135
|
+
padding: 8px 12px;
|
|
136
|
+
border-radius: 6px;
|
|
137
|
+
cursor: pointer;
|
|
138
|
+
font-size: 14px;
|
|
139
|
+
transition: background 0.15s ease;
|
|
140
|
+
display: flex;
|
|
141
|
+
align-items: center;
|
|
142
|
+
gap: 4px;
|
|
143
|
+
}
|
|
144
|
+
.diagram-overlay-btn:hover {
|
|
145
|
+
background: rgba(255, 255, 255, 0.2);
|
|
146
|
+
}
|
|
147
|
+
.diagram-overlay-btn:active {
|
|
148
|
+
background: rgba(255, 255, 255, 0.3);
|
|
149
|
+
}
|
|
150
|
+
.diagram-overlay-btn.close {
|
|
151
|
+
background: rgba(233, 69, 96, 0.3);
|
|
152
|
+
border-color: rgba(233, 69, 96, 0.5);
|
|
153
|
+
}
|
|
154
|
+
.diagram-overlay-btn.close:hover {
|
|
155
|
+
background: rgba(233, 69, 96, 0.5);
|
|
156
|
+
}
|
|
157
|
+
.zoom-display {
|
|
158
|
+
color: rgba(255, 255, 255, 0.7);
|
|
159
|
+
font-size: 12px;
|
|
160
|
+
min-width: 50px;
|
|
161
|
+
text-align: center;
|
|
162
|
+
font-family: monospace;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/* Container */
|
|
166
|
+
.diagram-overlay-container {
|
|
167
|
+
flex: 1;
|
|
168
|
+
overflow: hidden;
|
|
169
|
+
cursor: grab;
|
|
170
|
+
display: flex;
|
|
171
|
+
align-items: center;
|
|
172
|
+
justify-content: center;
|
|
173
|
+
}
|
|
174
|
+
.diagram-overlay-container.dragging {
|
|
175
|
+
cursor: grabbing;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/* SVG Wrapper */
|
|
179
|
+
.diagram-svg-wrapper {
|
|
180
|
+
transform-origin: center center;
|
|
181
|
+
transition: transform 0.1s ease;
|
|
182
|
+
background: white;
|
|
183
|
+
border-radius: 8px;
|
|
184
|
+
padding: 20px;
|
|
185
|
+
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.3);
|
|
186
|
+
}
|
|
187
|
+
.diagram-svg-wrapper svg {
|
|
188
|
+
display: block;
|
|
189
|
+
max-width: none !important;
|
|
190
|
+
max-height: none !important;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/* Help text */
|
|
194
|
+
.diagram-overlay-help {
|
|
195
|
+
position: absolute;
|
|
196
|
+
bottom: 16px;
|
|
197
|
+
left: 50%;
|
|
198
|
+
transform: translateX(-50%);
|
|
199
|
+
color: rgba(255, 255, 255, 0.5);
|
|
200
|
+
font-size: 12px;
|
|
201
|
+
pointer-events: none;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/* Mobile adjustments */
|
|
205
|
+
@media (max-width: 600px) {
|
|
206
|
+
.diagram-overlay-header {
|
|
207
|
+
padding: 8px 12px;
|
|
208
|
+
}
|
|
209
|
+
.diagram-overlay-btn {
|
|
210
|
+
padding: 6px 10px;
|
|
211
|
+
font-size: 12px;
|
|
212
|
+
}
|
|
213
|
+
.diagram-overlay-help {
|
|
214
|
+
font-size: 10px;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
</style>
|
|
218
|
+
|
|
219
|
+
<div class="diagram-overlay-header">
|
|
220
|
+
<div class="diagram-overlay-title">
|
|
221
|
+
📊 Diagram Viewer
|
|
222
|
+
</div>
|
|
223
|
+
<div class="diagram-overlay-controls">
|
|
224
|
+
<button class="diagram-overlay-btn" id="diagram-zoom-out" title="Zoom Out">−</button>
|
|
225
|
+
<span class="zoom-display" id="diagram-zoom-display">100%</span>
|
|
226
|
+
<button class="diagram-overlay-btn" id="diagram-zoom-in" title="Zoom In">+</button>
|
|
227
|
+
<button class="diagram-overlay-btn" id="diagram-reset" title="Reset View">⟲</button>
|
|
228
|
+
<button class="diagram-overlay-btn close" id="diagram-close" title="Close (ESC)">✕</button>
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
|
|
232
|
+
<div class="diagram-overlay-container" id="diagram-container">
|
|
233
|
+
<div class="diagram-svg-wrapper" id="diagram-svg-wrapper"></div>
|
|
234
|
+
</div>
|
|
235
|
+
|
|
236
|
+
<div class="diagram-overlay-help">
|
|
237
|
+
Scroll to zoom · Drag to pan · ESC to close
|
|
238
|
+
</div>
|
|
239
|
+
`,document.body.appendChild(J),K=document.getElementById("diagram-container"),Oe=document.getElementById("diagram-svg-wrapper"),Ve=document.getElementById("diagram-zoom-display"),Gn())}function Gn(){var r,i,n,l;if(!J||!K)return;(r=document.getElementById("diagram-close"))==null||r.addEventListener("click",Xe),(i=document.getElementById("diagram-zoom-in"))==null||i.addEventListener("click",()=>Ze(Pe)),(n=document.getElementById("diagram-zoom-out"))==null||n.addEventListener("click",()=>Ze(-Pe)),(l=document.getElementById("diagram-reset"))==null||l.addEventListener("click",Kn),document.addEventListener("keydown",o=>{o.key==="Escape"&&w.isOpen&&Xe()}),J.addEventListener("click",o=>{o.target===K&&Xe()}),K.addEventListener("wheel",o=>{o.preventDefault();const c=o.deltaY>0?-Pe:Pe;Ze(c)},{passive:!1}),K.addEventListener("mousedown",jn),document.addEventListener("mousemove",Fn),document.addEventListener("mouseup",Wn);let t=0;K.addEventListener("touchstart",o=>{if(o.touches.length===1){const c=o.touches[0];w.isDragging=!0,w.dragStartX=c.clientX,w.dragStartY=c.clientY,w.lastPanX=w.panX,w.lastPanY=w.panY,K==null||K.classList.add("dragging")}else if(o.touches.length===2){const c=o.touches[0].clientX-o.touches[1].clientX,a=o.touches[0].clientY-o.touches[1].clientY;t=Math.sqrt(c*c+a*a),(o.touches[0].clientX+o.touches[1].clientX)/2,(o.touches[0].clientY+o.touches[1].clientY)/2}},{passive:!0}),K.addEventListener("touchmove",o=>{if(o.touches.length===1&&w.isDragging){const c=o.touches[0],a=c.clientX-w.dragStartX,u=c.clientY-w.dragStartY;w.panX=w.lastPanX+a,w.panY=w.lastPanY+u,xe()}else if(o.touches.length===2){o.preventDefault();const c=o.touches[0].clientX-o.touches[1].clientX,a=o.touches[0].clientY-o.touches[1].clientY,u=Math.sqrt(c*c+a*a);if(t>0){const p=u/t,_=Math.max(_t,Math.min(yt,w.zoom*p));w.zoom=_,xe()}t=u}},{passive:!1}),K.addEventListener("touchend",()=>{w.isDragging=!1,t=0,K==null||K.classList.remove("dragging")})}function jn(t){t.button===0&&(w.isDragging=!0,w.dragStartX=t.clientX,w.dragStartY=t.clientY,w.lastPanX=w.panX,w.lastPanY=w.panY,K==null||K.classList.add("dragging"))}function Fn(t){if(!w.isDragging)return;const r=t.clientX-w.dragStartX,i=t.clientY-w.dragStartY;w.panX=w.lastPanX+r,w.panY=w.lastPanY+i,xe()}function Wn(){w.isDragging=!1,K==null||K.classList.remove("dragging")}function Ze(t){const r=Math.max(_t,Math.min(yt,w.zoom+t));w.zoom=r,xe()}function Kn(){w.zoom=1,w.panX=0,w.panY=0,xe()}function xe(){!Oe||!Ve||(Oe.style.transform=`translate(${w.panX}px, ${w.panY}px) scale(${w.zoom})`,Ve.textContent=`${Math.round(w.zoom*100)}%`)}function Yn(t){Hn(),!(!J||!Oe)&&(w.zoom=1,w.panX=0,w.panY=0,w.isDragging=!1,Oe.innerHTML=t,xe(),J.style.display="flex",J.offsetHeight,J.classList.add("visible"),w.isOpen=!0,document.body.style.overflow="hidden")}function Xe(){J&&(J.classList.remove("visible"),w.isOpen=!1,document.body.style.overflow="",setTimeout(()=>{J&&(J.style.display="none")},200))}function Zn(){document.querySelectorAll(".mermaid-container").forEach(r=>{r.style.cursor="zoom-in",r.setAttribute("title","Click to expand"),r.addEventListener("click",()=>{const i=r.querySelector("svg");i&&Yn(i.outerHTML)})})}function Xn(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var qe,ht;function qn(){if(ht)return qe;ht=1;function t(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach(s=>{const g=e[s],T=typeof g;(T==="object"||T==="function")&&!Object.isFrozen(g)&&t(g)}),e}class r{constructor(s){s.data===void 0&&(s.data={}),this.data=s.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function i(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function n(e,...s){const g=Object.create(null);for(const T in e)g[T]=e[T];return s.forEach(function(T){for(const G in T)g[G]=T[G]}),g}const l="</span>",o=e=>!!e.scope,c=(e,{prefix:s})=>{if(e.startsWith("language:"))return e.replace("language:","language-");if(e.includes(".")){const g=e.split(".");return[`${s}${g.shift()}`,...g.map((T,G)=>`${T}${"_".repeat(G+1)}`)].join(" ")}return`${s}${e}`};class a{constructor(s,g){this.buffer="",this.classPrefix=g.classPrefix,s.walk(this)}addText(s){this.buffer+=i(s)}openNode(s){if(!o(s))return;const g=c(s.scope,{prefix:this.classPrefix});this.span(g)}closeNode(s){o(s)&&(this.buffer+=l)}value(){return this.buffer}span(s){this.buffer+=`<span class="${s}">`}}const u=(e={})=>{const s={children:[]};return Object.assign(s,e),s};class p{constructor(){this.rootNode=u(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(s){this.top.children.push(s)}openNode(s){const g=u({scope:s});this.add(g),this.stack.push(g)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(s){return this.constructor._walk(s,this.rootNode)}static _walk(s,g){return typeof g=="string"?s.addText(g):g.children&&(s.openNode(g),g.children.forEach(T=>this._walk(s,T)),s.closeNode(g)),s}static _collapse(s){typeof s!="string"&&s.children&&(s.children.every(g=>typeof g=="string")?s.children=[s.children.join("")]:s.children.forEach(g=>{p._collapse(g)}))}}class _ extends p{constructor(s){super(),this.options=s}addText(s){s!==""&&this.add(s)}startScope(s){this.openNode(s)}endScope(){this.closeNode()}__addSublanguage(s,g){const T=s.root;g&&(T.scope=`language:${g}`),this.add(T)}toHTML(){return new a(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function m(e){return e?typeof e=="string"?e:e.source:null}function b(e){return S("(?=",e,")")}function N(e){return S("(?:",e,")*")}function k(e){return S("(?:",e,")?")}function S(...e){return e.map(g=>m(g)).join("")}function C(e){const s=e[e.length-1];return typeof s=="object"&&s.constructor===Object?(e.splice(e.length-1,1),s):{}}function I(...e){return"("+(C(e).capture?"":"?:")+e.map(T=>m(T)).join("|")+")"}function M(e){return new RegExp(e.toString()+"|").exec("").length-1}function $(e,s){const g=e&&e.exec(s);return g&&g.index===0}const O=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function D(e,{joinWith:s}){let g=0;return e.map(T=>{g+=1;const G=g;let j=m(T),E="";for(;j.length>0;){const h=O.exec(j);if(!h){E+=j;break}E+=j.substring(0,h.index),j=j.substring(h.index+h[0].length),h[0][0]==="\\"&&h[1]?E+="\\"+String(Number(h[1])+G):(E+=h[0],h[0]==="("&&g++)}return E}).map(T=>`(${T})`).join(s)}const H=/\b\B/,ae="[a-zA-Z]\\w*",ne="[a-zA-Z_]\\w*",Q="\\b\\d+(\\.\\d+)?",ye="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",ve="\\b(0b[01]+)",Ne="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",Te=(e={})=>{const s=/^#![ ]*\//;return e.binary&&(e.begin=S(s,/.*\b/,e.binary,/\b.*/)),n({scope:"meta",begin:s,end:/$/,relevance:0,"on:begin":(g,T)=>{g.index!==0&&T.ignoreMatch()}},e)},le={begin:"\\\\[\\s\\S]",relevance:0},Ae={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[le]},me={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[le]},ke={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},B=function(e,s,g={}){const T=n({scope:"comment",begin:e,end:s,contains:[]},g);T.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const G=I("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return T.contains.push({begin:S(/[ ]+/,"(",G,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),T},V=B("//","$"),ee=B("/\\*","\\*/"),re=B("#","$"),de={scope:"number",begin:Q,relevance:0},be={scope:"number",begin:ye,relevance:0},Ut={scope:"number",begin:ve,relevance:0},zt={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[le,{begin:/\[/,end:/\]/,relevance:0,contains:[le]}]},Ht={scope:"title",begin:ae,relevance:0},Gt={scope:"title",begin:ne,relevance:0},jt={begin:"\\.\\s*"+ne,relevance:0};var Le=Object.freeze({__proto__:null,APOS_STRING_MODE:Ae,BACKSLASH_ESCAPE:le,BINARY_NUMBER_MODE:Ut,BINARY_NUMBER_RE:ve,COMMENT:B,C_BLOCK_COMMENT_MODE:ee,C_LINE_COMMENT_MODE:V,C_NUMBER_MODE:be,C_NUMBER_RE:ye,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(s,g)=>{g.data._beginMatch=s[1]},"on:end":(s,g)=>{g.data._beginMatch!==s[1]&&g.ignoreMatch()}})},HASH_COMMENT_MODE:re,IDENT_RE:ae,MATCH_NOTHING_RE:H,METHOD_GUARD:jt,NUMBER_MODE:de,NUMBER_RE:Q,PHRASAL_WORDS_MODE:ke,QUOTE_STRING_MODE:me,REGEXP_MODE:zt,RE_STARTERS_RE:Ne,SHEBANG:Te,TITLE_MODE:Ht,UNDERSCORE_IDENT_RE:ne,UNDERSCORE_TITLE_MODE:Gt});function Ft(e,s){e.input[e.index-1]==="."&&s.ignoreMatch()}function Wt(e,s){e.className!==void 0&&(e.scope=e.className,delete e.className)}function Kt(e,s){s&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=Ft,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,e.relevance===void 0&&(e.relevance=0))}function Yt(e,s){Array.isArray(e.illegal)&&(e.illegal=I(...e.illegal))}function Zt(e,s){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function Xt(e,s){e.relevance===void 0&&(e.relevance=1)}const qt=(e,s)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error("beforeMatch cannot be used with starts");const g=Object.assign({},e);Object.keys(e).forEach(T=>{delete e[T]}),e.keywords=g.keywords,e.begin=S(g.beforeMatch,b(g.begin)),e.starts={relevance:0,contains:[Object.assign(g,{endsParent:!0})]},e.relevance=0,delete g.beforeMatch},Vt=["of","and","for","in","not","or","if","then","parent","list","value"],Jt="keyword";function Qe(e,s,g=Jt){const T=Object.create(null);return typeof e=="string"?G(g,e.split(" ")):Array.isArray(e)?G(g,e):Object.keys(e).forEach(function(j){Object.assign(T,Qe(e[j],s,j))}),T;function G(j,E){s&&(E=E.map(h=>h.toLowerCase())),E.forEach(function(h){const x=h.split("|");T[x[0]]=[j,Qt(x[0],x[1])]})}}function Qt(e,s){return s?Number(s):en(e)?0:1}function en(e){return Vt.includes(e.toLowerCase())}const et={},he=e=>{console.error(e)},tt=(e,...s)=>{console.log(`WARN: ${e}`,...s)},we=(e,s)=>{et[`${e}/${s}`]||(console.log(`Deprecated as of ${e}. ${s}`),et[`${e}/${s}`]=!0)},Me=new Error;function nt(e,s,{key:g}){let T=0;const G=e[g],j={},E={};for(let h=1;h<=s.length;h++)E[h+T]=G[h],j[h+T]=!0,T+=M(s[h-1]);e[g]=E,e[g]._emit=j,e[g]._multi=!0}function tn(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw he("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),Me;if(typeof e.beginScope!="object"||e.beginScope===null)throw he("beginScope must be object"),Me;nt(e,e.begin,{key:"beginScope"}),e.begin=D(e.begin,{joinWith:""})}}function nn(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw he("skip, excludeEnd, returnEnd not compatible with endScope: {}"),Me;if(typeof e.endScope!="object"||e.endScope===null)throw he("endScope must be object"),Me;nt(e,e.end,{key:"endScope"}),e.end=D(e.end,{joinWith:""})}}function rn(e){e.scope&&typeof e.scope=="object"&&e.scope!==null&&(e.beginScope=e.scope,delete e.scope)}function sn(e){rn(e),typeof e.beginScope=="string"&&(e.beginScope={_wrap:e.beginScope}),typeof e.endScope=="string"&&(e.endScope={_wrap:e.endScope}),tn(e),nn(e)}function an(e){function s(E,h){return new RegExp(m(E),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(h?"g":""))}class g{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(h,x){x.position=this.position++,this.matchIndexes[this.matchAt]=x,this.regexes.push([x,h]),this.matchAt+=M(h)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const h=this.regexes.map(x=>x[1]);this.matcherRe=s(D(h,{joinWith:"|"}),!0),this.lastIndex=0}exec(h){this.matcherRe.lastIndex=this.lastIndex;const x=this.matcherRe.exec(h);if(!x)return null;const Z=x.findIndex((Re,Ge)=>Ge>0&&Re!==void 0),W=this.matchIndexes[Z];return x.splice(0,Z),Object.assign(x,W)}}class T{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(h){if(this.multiRegexes[h])return this.multiRegexes[h];const x=new g;return this.rules.slice(h).forEach(([Z,W])=>x.addRule(Z,W)),x.compile(),this.multiRegexes[h]=x,x}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(h,x){this.rules.push([h,x]),x.type==="begin"&&this.count++}exec(h){const x=this.getMatcher(this.regexIndex);x.lastIndex=this.lastIndex;let Z=x.exec(h);if(this.resumingScanAtSamePosition()&&!(Z&&Z.index===this.lastIndex)){const W=this.getMatcher(0);W.lastIndex=this.lastIndex+1,Z=W.exec(h)}return Z&&(this.regexIndex+=Z.position+1,this.regexIndex===this.count&&this.considerAll()),Z}}function G(E){const h=new T;return E.contains.forEach(x=>h.addRule(x.begin,{rule:x,type:"begin"})),E.terminatorEnd&&h.addRule(E.terminatorEnd,{type:"end"}),E.illegal&&h.addRule(E.illegal,{type:"illegal"}),h}function j(E,h){const x=E;if(E.isCompiled)return x;[Wt,Zt,sn,qt].forEach(W=>W(E,h)),e.compilerExtensions.forEach(W=>W(E,h)),E.__beforeBegin=null,[Kt,Yt,Xt].forEach(W=>W(E,h)),E.isCompiled=!0;let Z=null;return typeof E.keywords=="object"&&E.keywords.$pattern&&(E.keywords=Object.assign({},E.keywords),Z=E.keywords.$pattern,delete E.keywords.$pattern),Z=Z||/\w+/,E.keywords&&(E.keywords=Qe(E.keywords,e.case_insensitive)),x.keywordPatternRe=s(Z,!0),h&&(E.begin||(E.begin=/\B|\b/),x.beginRe=s(x.begin),!E.end&&!E.endsWithParent&&(E.end=/\B|\b/),E.end&&(x.endRe=s(x.end)),x.terminatorEnd=m(x.end)||"",E.endsWithParent&&h.terminatorEnd&&(x.terminatorEnd+=(E.end?"|":"")+h.terminatorEnd)),E.illegal&&(x.illegalRe=s(E.illegal)),E.contains||(E.contains=[]),E.contains=[].concat(...E.contains.map(function(W){return on(W==="self"?E:W)})),E.contains.forEach(function(W){j(W,x)}),E.starts&&j(E.starts,h),x.matcher=G(x),x}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=n(e.classNameAliases||{}),j(e)}function rt(e){return e?e.endsWithParent||rt(e.starts):!1}function on(e){return e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map(function(s){return n(e,{variants:null},s)})),e.cachedVariants?e.cachedVariants:rt(e)?n(e,{starts:e.starts?n(e.starts):null}):Object.isFrozen(e)?n(e):e}var cn="11.11.1";class ln extends Error{constructor(s,g){super(s),this.name="HTMLInjectionError",this.html=g}}const He=i,it=n,st=Symbol("nomatch"),dn=7,at=function(e){const s=Object.create(null),g=Object.create(null),T=[];let G=!0;const j="Could not find the language '{}', did you forget to load/include a language module?",E={disableAutodetect:!0,name:"Plain text",contains:[]};let h={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:_};function x(d){return h.noHighlightRe.test(d)}function Z(d){let v=d.className+" ";v+=d.parentNode?d.parentNode.className:"";const L=h.languageDetectRe.exec(v);if(L){const U=ge(L[1]);return U||(tt(j.replace("{}",L[1])),tt("Falling back to no-highlight mode for this block.",d)),U?L[1]:"no-highlight"}return v.split(/\s+/).find(U=>x(U)||ge(U))}function W(d,v,L){let U="",Y="";typeof v=="object"?(U=d,L=v.ignoreIllegals,Y=v.language):(we("10.7.0","highlight(lang, code, ...args) has been deprecated."),we("10.7.0",`Please use highlight(code, options) instead.
|
|
240
|
+
https://github.com/highlightjs/highlight.js/issues/2277`),Y=d,U=v),L===void 0&&(L=!0);const ie={code:U,language:Y};Ce("before:highlight",ie);const pe=ie.result?ie.result:Re(ie.language,ie.code,L);return pe.code=ie.code,Ce("after:highlight",pe),pe}function Re(d,v,L,U){const Y=Object.create(null);function ie(f,y){return f.keywords[y]}function pe(){if(!A.keywords){X.addText(z);return}let f=0;A.keywordPatternRe.lastIndex=0;let y=A.keywordPatternRe.exec(z),R="";for(;y;){R+=z.substring(f,y.index);const P=ce.case_insensitive?y[0].toLowerCase():y[0],q=ie(A,P);if(q){const[ue,An]=q;if(X.addText(R),R="",Y[P]=(Y[P]||0)+1,Y[P]<=dn&&(Be+=An),ue.startsWith("_"))R+=y[0];else{const kn=ce.classNameAliases[ue]||ue;oe(y[0],kn)}}else R+=y[0];f=A.keywordPatternRe.lastIndex,y=A.keywordPatternRe.exec(z)}R+=z.substring(f),X.addText(R)}function $e(){if(z==="")return;let f=null;if(typeof A.subLanguage=="string"){if(!s[A.subLanguage]){X.addText(z);return}f=Re(A.subLanguage,z,!0,ft[A.subLanguage]),ft[A.subLanguage]=f._top}else f=je(z,A.subLanguage.length?A.subLanguage:null);A.relevance>0&&(Be+=f.relevance),X.__addSublanguage(f._emitter,f.language)}function te(){A.subLanguage!=null?$e():pe(),z=""}function oe(f,y){f!==""&&(X.startScope(y),X.addText(f),X.endScope())}function dt(f,y){let R=1;const P=y.length-1;for(;R<=P;){if(!f._emit[R]){R++;continue}const q=ce.classNameAliases[f[R]]||f[R],ue=y[R];q?oe(ue,q):(z=ue,pe(),z=""),R++}}function ut(f,y){return f.scope&&typeof f.scope=="string"&&X.openNode(ce.classNameAliases[f.scope]||f.scope),f.beginScope&&(f.beginScope._wrap?(oe(z,ce.classNameAliases[f.beginScope._wrap]||f.beginScope._wrap),z=""):f.beginScope._multi&&(dt(f.beginScope,y),z="")),A=Object.create(f,{parent:{value:A}}),A}function gt(f,y,R){let P=$(f.endRe,R);if(P){if(f["on:end"]){const q=new r(f);f["on:end"](y,q),q.isMatchIgnored&&(P=!1)}if(P){for(;f.endsParent&&f.parent;)f=f.parent;return f}}if(f.endsWithParent)return gt(f.parent,y,R)}function wn(f){return A.matcher.regexIndex===0?(z+=f[0],1):(Ye=!0,0)}function Sn(f){const y=f[0],R=f.rule,P=new r(R),q=[R.__beforeBegin,R["on:begin"]];for(const ue of q)if(ue&&(ue(f,P),P.isMatchIgnored))return wn(y);return R.skip?z+=y:(R.excludeBegin&&(z+=y),te(),!R.returnBegin&&!R.excludeBegin&&(z=y)),ut(R,f),R.returnBegin?0:y.length}function xn(f){const y=f[0],R=v.substring(f.index),P=gt(A,f,R);if(!P)return st;const q=A;A.endScope&&A.endScope._wrap?(te(),oe(y,A.endScope._wrap)):A.endScope&&A.endScope._multi?(te(),dt(A.endScope,f)):q.skip?z+=y:(q.returnEnd||q.excludeEnd||(z+=y),te(),q.excludeEnd&&(z=y));do A.scope&&X.closeNode(),!A.skip&&!A.subLanguage&&(Be+=A.relevance),A=A.parent;while(A!==P.parent);return P.starts&&ut(P.starts,f),q.returnEnd?0:y.length}function Nn(){const f=[];for(let y=A;y!==ce;y=y.parent)y.scope&&f.unshift(y.scope);f.forEach(y=>X.openNode(y))}let De={};function pt(f,y){const R=y&&y[0];if(z+=f,R==null)return te(),0;if(De.type==="begin"&&y.type==="end"&&De.index===y.index&&R===""){if(z+=v.slice(y.index,y.index+1),!G){const P=new Error(`0 width match regex (${d})`);throw P.languageName=d,P.badRule=De.rule,P}return 1}if(De=y,y.type==="begin")return Sn(y);if(y.type==="illegal"&&!L){const P=new Error('Illegal lexeme "'+R+'" for mode "'+(A.scope||"<unnamed>")+'"');throw P.mode=A,P}else if(y.type==="end"){const P=xn(y);if(P!==st)return P}if(y.type==="illegal"&&R==="")return z+=`
|
|
241
|
+
`,1;if(Ke>1e5&&Ke>y.index*3)throw new Error("potential infinite loop, way more iterations than matches");return z+=R,R.length}const ce=ge(d);if(!ce)throw he(j.replace("{}",d)),new Error('Unknown language: "'+d+'"');const Tn=an(ce);let We="",A=U||Tn;const ft={},X=new h.__emitter(h);Nn();let z="",Be=0,Ee=0,Ke=0,Ye=!1;try{if(ce.__emitTokens)ce.__emitTokens(v,X);else{for(A.matcher.considerAll();;){Ke++,Ye?Ye=!1:A.matcher.considerAll(),A.matcher.lastIndex=Ee;const f=A.matcher.exec(v);if(!f)break;const y=v.substring(Ee,f.index),R=pt(y,f);Ee=f.index+R}pt(v.substring(Ee))}return X.finalize(),We=X.toHTML(),{language:d,value:We,relevance:Be,illegal:!1,_emitter:X,_top:A}}catch(f){if(f.message&&f.message.includes("Illegal"))return{language:d,value:He(v),illegal:!0,relevance:0,_illegalBy:{message:f.message,index:Ee,context:v.slice(Ee-100,Ee+100),mode:f.mode,resultSoFar:We},_emitter:X};if(G)return{language:d,value:He(v),illegal:!1,relevance:0,errorRaised:f,_emitter:X,_top:A};throw f}}function Ge(d){const v={value:He(d),illegal:!1,relevance:0,_top:E,_emitter:new h.__emitter(h)};return v._emitter.addText(d),v}function je(d,v){v=v||h.languages||Object.keys(s);const L=Ge(d),U=v.filter(ge).filter(lt).map(te=>Re(te,d,!1));U.unshift(L);const Y=U.sort((te,oe)=>{if(te.relevance!==oe.relevance)return oe.relevance-te.relevance;if(te.language&&oe.language){if(ge(te.language).supersetOf===oe.language)return 1;if(ge(oe.language).supersetOf===te.language)return-1}return 0}),[ie,pe]=Y,$e=ie;return $e.secondBest=pe,$e}function un(d,v,L){const U=v&&g[v]||L;d.classList.add("hljs"),d.classList.add(`language-${U}`)}function Fe(d){let v=null;const L=Z(d);if(x(L))return;if(Ce("before:highlightElement",{el:d,language:L}),d.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",d);return}if(d.children.length>0&&(h.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(d)),h.throwUnescapedHTML))throw new ln("One of your code blocks includes unescaped HTML.",d.innerHTML);v=d;const U=v.textContent,Y=L?W(U,{language:L,ignoreIllegals:!0}):je(U);d.innerHTML=Y.value,d.dataset.highlighted="yes",un(d,L,Y.language),d.result={language:Y.language,re:Y.relevance,relevance:Y.relevance},Y.secondBest&&(d.secondBest={language:Y.secondBest.language,relevance:Y.secondBest.relevance}),Ce("after:highlightElement",{el:d,result:Y,text:U})}function gn(d){h=it(h,d)}const pn=()=>{Ie(),we("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function fn(){Ie(),we("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let ot=!1;function Ie(){function d(){Ie()}if(document.readyState==="loading"){ot||window.addEventListener("DOMContentLoaded",d,!1),ot=!0;return}document.querySelectorAll(h.cssSelector).forEach(Fe)}function mn(d,v){let L=null;try{L=v(e)}catch(U){if(he("Language definition for '{}' could not be registered.".replace("{}",d)),G)he(U);else throw U;L=E}L.name||(L.name=d),s[d]=L,L.rawDefinition=v.bind(null,e),L.aliases&&ct(L.aliases,{languageName:d})}function bn(d){delete s[d];for(const v of Object.keys(g))g[v]===d&&delete g[v]}function hn(){return Object.keys(s)}function ge(d){return d=(d||"").toLowerCase(),s[d]||s[g[d]]}function ct(d,{languageName:v}){typeof d=="string"&&(d=[d]),d.forEach(L=>{g[L.toLowerCase()]=v})}function lt(d){const v=ge(d);return v&&!v.disableAutodetect}function En(d){d["before:highlightBlock"]&&!d["before:highlightElement"]&&(d["before:highlightElement"]=v=>{d["before:highlightBlock"](Object.assign({block:v.el},v))}),d["after:highlightBlock"]&&!d["after:highlightElement"]&&(d["after:highlightElement"]=v=>{d["after:highlightBlock"](Object.assign({block:v.el},v))})}function _n(d){En(d),T.push(d)}function yn(d){const v=T.indexOf(d);v!==-1&&T.splice(v,1)}function Ce(d,v){const L=d;T.forEach(function(U){U[L]&&U[L](v)})}function vn(d){return we("10.7.0","highlightBlock will be removed entirely in v12.0"),we("10.7.0","Please use highlightElement now."),Fe(d)}Object.assign(e,{highlight:W,highlightAuto:je,highlightAll:Ie,highlightElement:Fe,highlightBlock:vn,configure:gn,initHighlighting:pn,initHighlightingOnLoad:fn,registerLanguage:mn,unregisterLanguage:bn,listLanguages:hn,getLanguage:ge,registerAliases:ct,autoDetection:lt,inherit:it,addPlugin:_n,removePlugin:yn}),e.debugMode=function(){G=!1},e.safeMode=function(){G=!0},e.versionString=cn,e.regex={concat:S,lookahead:b,either:I,optional:k,anyNumberOfTimes:N};for(const d in Le)typeof Le[d]=="object"&&t(Le[d]);return Object.assign(e,Le),e},Se=at({});return Se.newInstance=()=>at({}),qe=Se,Se.HighlightJS=Se,Se.default=Se,qe}var Vn=qn();const F=Xn(Vn),ze="[A-Za-z$_][0-9A-Za-z$_]*",vt=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],wt=["true","false","null","undefined","NaN","Infinity"],St=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],xt=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],Nt=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],Tt=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],At=[].concat(Nt,St,xt);function Jn(t){const r=t.regex,i=(B,{after:V})=>{const ee="</"+B[0].slice(1);return B.input.indexOf(ee,V)!==-1},n=ze,l={begin:"<>",end:"</>"},o=/<[A-Za-z0-9\\._:-]+\s*\/>/,c={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(B,V)=>{const ee=B[0].length+B.index,re=B.input[ee];if(re==="<"||re===","){V.ignoreMatch();return}re===">"&&(i(B,{after:ee})||V.ignoreMatch());let de;const be=B.input.substring(ee);if(de=be.match(/^\s*=/)){V.ignoreMatch();return}if((de=be.match(/^\s+extends\s+/))&&de.index===0){V.ignoreMatch();return}}},a={$pattern:ze,keyword:vt,literal:wt,built_in:At,"variable.language":Tt},u="[0-9](_?[0-9])*",p=`\\.(${u})`,_="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",m={className:"number",variants:[{begin:`(\\b(${_})((${p})|\\.)?|(${p}))[eE][+-]?(${u})\\b`},{begin:`\\b(${_})\\b((${p})\\b|\\.)?|(${p})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},b={className:"subst",begin:"\\$\\{",end:"\\}",keywords:a,contains:[]},N={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,b],subLanguage:"xml"}},k={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,b],subLanguage:"css"}},S={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,b],subLanguage:"graphql"}},C={className:"string",begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,b]},M={className:"comment",variants:[t.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:n+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]},$=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,N,k,S,C,{match:/\$\d+/},m];b.contains=$.concat({begin:/\{/,end:/\}/,keywords:a,contains:["self"].concat($)});const O=[].concat(M,b.contains),D=O.concat([{begin:/(\s*)\(/,end:/\)/,keywords:a,contains:["self"].concat(O)}]),H={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:D},ae={variants:[{match:[/class/,/\s+/,n,/\s+/,/extends/,/\s+/,r.concat(n,"(",r.concat(/\./,n),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,n],scope:{1:"keyword",3:"title.class"}}]},ne={relevance:0,match:r.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...St,...xt]}},Q={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},ye={variants:[{match:[/function/,/\s+/,n,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[H],illegal:/%/},ve={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function Ne(B){return r.concat("(?!",B.join("|"),")")}const Te={match:r.concat(/\b/,Ne([...Nt,"super","import"].map(B=>`${B}\\s*\\(`)),n,r.lookahead(/\s*\(/)),className:"title.function",relevance:0},le={begin:r.concat(/\./,r.lookahead(r.concat(n,/(?![0-9A-Za-z$_(])/))),end:n,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},Ae={match:[/get|set/,/\s+/,n,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},H]},me="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+t.UNDERSCORE_IDENT_RE+")\\s*=>",ke={match:[/const|var|let/,/\s+/,n,/\s*/,/=\s*/,/(async\s*)?/,r.lookahead(me)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[H]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:a,exports:{PARAMS_CONTAINS:D,CLASS_REFERENCE:ne},illegal:/#(?![$_A-z])/,contains:[t.SHEBANG({label:"shebang",binary:"node",relevance:5}),Q,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,N,k,S,C,M,{match:/\$\d+/},m,ne,{scope:"attr",match:n+r.lookahead(":"),relevance:0},ke,{begin:"("+t.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[M,t.REGEXP_MODE,{className:"function",begin:me,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:D}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:l.begin,end:l.end},{match:o},{begin:c.begin,"on:begin":c.isTrulyOpeningTag,end:c.end}],subLanguage:"xml",contains:[{begin:c.begin,end:c.end,skip:!0,contains:["self"]}]}]},ye,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+t.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[H,t.inherit(t.TITLE_MODE,{begin:n,className:"title.function"})]},{match:/\.\.\./,relevance:0},le,{match:"\\$"+n,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[H]},Te,ve,ae,Ae,{match:/\$[(.]/}]}}function kt(t){const r=t.regex,i=Jn(t),n=ze,l=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],o={begin:[/namespace/,/\s+/,t.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},c={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:l},contains:[i.exports.CLASS_REFERENCE]},a={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},u=["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"],p={$pattern:ze,keyword:vt.concat(u),literal:wt,built_in:At.concat(l),"variable.language":Tt},_={className:"meta",begin:"@"+n},m=(S,C,I)=>{const M=S.contains.findIndex($=>$.label===C);if(M===-1)throw new Error("can not find mode to replace");S.contains.splice(M,1,I)};Object.assign(i.keywords,p),i.exports.PARAMS_CONTAINS.push(_);const b=i.contains.find(S=>S.scope==="attr"),N=Object.assign({},b,{match:r.concat(n,r.lookahead(/\s*\?:/))});i.exports.PARAMS_CONTAINS.push([i.exports.CLASS_REFERENCE,b,N]),i.contains=i.contains.concat([_,o,c,N]),m(i,"shebang",t.SHEBANG()),m(i,"use_strict",a);const k=i.contains.find(S=>S.label==="func.def");return k.relevance=0,Object.assign(i,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),i}const Et="[A-Za-z$_][0-9A-Za-z$_]*",Qn=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],er=["true","false","null","undefined","NaN","Infinity"],Rt=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],Ot=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],Lt=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],tr=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],nr=[].concat(Lt,Rt,Ot);function Mt(t){const r=t.regex,i=(B,{after:V})=>{const ee="</"+B[0].slice(1);return B.input.indexOf(ee,V)!==-1},n=Et,l={begin:"<>",end:"</>"},o=/<[A-Za-z0-9\\._:-]+\s*\/>/,c={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(B,V)=>{const ee=B[0].length+B.index,re=B.input[ee];if(re==="<"||re===","){V.ignoreMatch();return}re===">"&&(i(B,{after:ee})||V.ignoreMatch());let de;const be=B.input.substring(ee);if(de=be.match(/^\s*=/)){V.ignoreMatch();return}if((de=be.match(/^\s+extends\s+/))&&de.index===0){V.ignoreMatch();return}}},a={$pattern:Et,keyword:Qn,literal:er,built_in:nr,"variable.language":tr},u="[0-9](_?[0-9])*",p=`\\.(${u})`,_="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",m={className:"number",variants:[{begin:`(\\b(${_})((${p})|\\.)?|(${p}))[eE][+-]?(${u})\\b`},{begin:`\\b(${_})\\b((${p})\\b|\\.)?|(${p})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},b={className:"subst",begin:"\\$\\{",end:"\\}",keywords:a,contains:[]},N={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,b],subLanguage:"xml"}},k={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,b],subLanguage:"css"}},S={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,b],subLanguage:"graphql"}},C={className:"string",begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,b]},M={className:"comment",variants:[t.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:n+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]},$=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,N,k,S,C,{match:/\$\d+/},m];b.contains=$.concat({begin:/\{/,end:/\}/,keywords:a,contains:["self"].concat($)});const O=[].concat(M,b.contains),D=O.concat([{begin:/(\s*)\(/,end:/\)/,keywords:a,contains:["self"].concat(O)}]),H={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:D},ae={variants:[{match:[/class/,/\s+/,n,/\s+/,/extends/,/\s+/,r.concat(n,"(",r.concat(/\./,n),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,n],scope:{1:"keyword",3:"title.class"}}]},ne={relevance:0,match:r.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...Rt,...Ot]}},Q={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},ye={variants:[{match:[/function/,/\s+/,n,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[H],illegal:/%/},ve={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function Ne(B){return r.concat("(?!",B.join("|"),")")}const Te={match:r.concat(/\b/,Ne([...Lt,"super","import"].map(B=>`${B}\\s*\\(`)),n,r.lookahead(/\s*\(/)),className:"title.function",relevance:0},le={begin:r.concat(/\./,r.lookahead(r.concat(n,/(?![0-9A-Za-z$_(])/))),end:n,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},Ae={match:[/get|set/,/\s+/,n,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},H]},me="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+t.UNDERSCORE_IDENT_RE+")\\s*=>",ke={match:[/const|var|let/,/\s+/,n,/\s*/,/=\s*/,/(async\s*)?/,r.lookahead(me)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[H]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:a,exports:{PARAMS_CONTAINS:D,CLASS_REFERENCE:ne},illegal:/#(?![$_A-z])/,contains:[t.SHEBANG({label:"shebang",binary:"node",relevance:5}),Q,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,N,k,S,C,M,{match:/\$\d+/},m,ne,{scope:"attr",match:n+r.lookahead(":"),relevance:0},ke,{begin:"("+t.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[M,t.REGEXP_MODE,{className:"function",begin:me,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:D}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:l.begin,end:l.end},{match:o},{begin:c.begin,"on:begin":c.isTrulyOpeningTag,end:c.end}],subLanguage:"xml",contains:[{begin:c.begin,end:c.end,skip:!0,contains:["self"]}]}]},ye,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+t.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[H,t.inherit(t.TITLE_MODE,{begin:n,className:"title.function"})]},{match:/\.\.\./,relevance:0},le,{match:"\\$"+n,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[H]},Te,ve,ae,Ae,{match:/\$[(.]/}]}}function It(t){const r=t.regex,i=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),n=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],a={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:n,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},u={className:"meta",begin:/^(>>>|\.\.\.) /},p={className:"subst",begin:/\{/,end:/\}/,keywords:a,illegal:/#/},_={begin:/\{\{/,relevance:0},m={className:"string",contains:[t.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,u],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,u],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,u,_,p]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,u,_,p]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[t.BACKSLASH_ESCAPE,_,p]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,_,p]},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},b="[0-9](_?[0-9])*",N=`(\\b(${b}))?\\.(${b})|\\b(${b})\\.`,k=`\\b|${n.join("|")}`,S={className:"number",relevance:0,variants:[{begin:`(\\b(${b})|(${N}))[eE][+-]?(${b})[jJ]?(?=${k})`},{begin:`(${N})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${k})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${k})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${k})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${k})`},{begin:`\\b(${b})[jJ](?=${k})`}]},C={className:"comment",begin:r.lookahead(/# type:/),end:/$/,keywords:a,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},I={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:["self",u,S,m,t.HASH_COMMENT_MODE]}]};return p.contains=[m,S,u],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:a,illegal:/(<\/|\?)|=>/,contains:[u,S,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},m,C,t.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,i],scope:{1:"keyword",3:"title.function"},contains:[I]},{variants:[{match:[/\bclass/,/\s+/,i,/\s*/,/\(\s*/,i,/\s*\)/]},{match:[/\bclass/,/\s+/,i]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[S,I,m]}]}}function rr(t){const r=t.regex,i=t.COMMENT("--","$"),n={scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},l={begin:/"/,end:/"/,contains:[{match:/""/}]},o=["true","false","unknown"],c=["double precision","large object","with timezone","without timezone"],a=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],u=["add","asc","collation","desc","final","first","last","view"],p=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year"],_=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],m=["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"],b=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],N=_,k=[...p,...u].filter(D=>!_.includes(D)),S={scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},C={scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},I={match:r.concat(/\b/,r.either(...N),/\s*\(/),relevance:0,keywords:{built_in:N}};function M(D){return r.concat(/\b/,r.either(...D.map(H=>H.replace(/\s+/,"\\s+"))),/\b/)}const $={scope:"keyword",match:M(b),relevance:0};function O(D,{exceptions:H,when:ae}={}){const ne=ae;return H=H||[],D.map(Q=>Q.match(/\|\d+$/)||H.includes(Q)?Q:ne(Q)?`${Q}|0`:Q)}return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:O(k,{when:D=>D.length<3}),literal:o,type:a,built_in:m},contains:[{scope:"type",match:M(c)},$,I,S,n,l,t.C_NUMBER_MODE,t.C_BLOCK_COMMENT_MODE,i,C]}}function ir(t){const r={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},i={match:/[{}[\],:]/,className:"punctuation",relevance:0},n=["true","false","null"],l={scope:"literal",beginKeywords:n.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{literal:n},contains:[r,i,t.QUOTE_STRING_MODE,l,t.C_NUMBER_MODE,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}function Ct(t){const r="true false yes no null",i="[\\w#;/?:@&=+$,.~*'()[\\]]+",n={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},l={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},o={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},c={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[t.BACKSLASH_ESCAPE,l]},a=t.inherit(c,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),b={className:"number",begin:"\\b"+"[0-9]{4}(-[0-9][0-9]){0,2}"+"([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?"+"(\\.[0-9]*)?"+"([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?"+"\\b"},N={end:",",endsWithParent:!0,excludeEnd:!0,keywords:r,relevance:0},k={begin:/\{/,end:/\}/,contains:[N],illegal:"\\n",relevance:0},S={begin:"\\[",end:"\\]",contains:[N],illegal:"\\n",relevance:0},C=[n,{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+i},{className:"type",begin:"!<"+i+">"},{className:"type",begin:"!"+i},{className:"type",begin:"!!"+i},{className:"meta",begin:"&"+t.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+t.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},t.HASH_COMMENT_MODE,{beginKeywords:r,keywords:{literal:r}},b,{className:"number",begin:t.C_NUMBER_RE+"\\b",relevance:0},k,S,o,c],I=[...C];return I.pop(),I.push(a),N.contains=I,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:C}}function $t(t){const r=t.regex,i={},n={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[i]}]};Object.assign(i,{className:"variable",variants:[{begin:r.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},n]});const l={className:"subst",begin:/\$\(/,end:/\)/,contains:[t.BACKSLASH_ESCAPE]},o=t.inherit(t.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),c={begin:/<<-?\s*(?=\w+)/,starts:{contains:[t.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},a={className:"string",begin:/"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,i,l]};l.contains.push(a);const u={match:/\\"/},p={className:"string",begin:/'/,end:/'/},_={match:/\\'/},m={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},t.NUMBER_MODE,i]},b=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],N=t.SHEBANG({binary:`(${b.join("|")})`,relevance:10}),k={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[t.inherit(t.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},S=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],C=["true","false"],I={match:/(\/[a-z._-]+)+/},M=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],$=["alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias"],O=["autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp"],D=["chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"];return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:S,literal:C,built_in:[...M,...$,"set","shopt",...O,...D]},contains:[N,t.SHEBANG(),k,m,o,c,I,a,u,p,_,i]}}function sr(t){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}function Dt(t){const r=t.regex,i={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},n={begin:"^[-\\*]{3,}",end:"$"},l={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},o={className:"bullet",begin:"^[ ]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},c={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},a=/[A-Za-z][A-Za-z0-9+.-]*/,u={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:r.concat(/\[.+?\]\(/,a,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},p={className:"strong",contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},_={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},m=t.inherit(p,{contains:[]}),b=t.inherit(_,{contains:[]});p.contains.push(b),_.contains.push(m);let N=[i,u];return[p,_,m,b].forEach(I=>{I.contains=I.contains.concat(N)}),N=N.concat(p,_),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:N},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:N}]}]},i,o,p,_,{className:"quote",begin:"^>\\s+",contains:N,end:"$"},l,n,u,c,{scope:"literal",match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}function Bt(t){const r=t.regex,i=r.concat(/[\p{L}_]/u,r.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),n=/[\p{L}0-9._:-]+/u,l={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},o={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},c=t.inherit(o,{begin:/\(/,end:/\)/}),a=t.inherit(t.APOS_STRING_MODE,{className:"string"}),u=t.inherit(t.QUOTE_STRING_MODE,{className:"string"}),p={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:n,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[l]},{begin:/'/,end:/'/,contains:[l]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,relevance:10,contains:[o,u,a,c,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,contains:[o,c,u,a]}]}]},t.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},l,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[u]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[p],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[p],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:r.concat(/</,r.lookahead(r.concat(i,r.either(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:i,relevance:0,starts:p}]},{className:"tag",begin:r.concat(/<\//,r.lookahead(r.concat(i,/>/))),contains:[{className:"name",begin:i,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}const ar=t=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:t.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:t.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),or=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],cr=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],lr=[...or,...cr],dr=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),ur=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),gr=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),pr=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function fr(t){const r=t.regex,i=ar(t),n={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},l="and or not only",o=/@-?\w[\w]*(-\w+)*/,c="[a-zA-Z-][a-zA-Z0-9_-]*",a=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[i.BLOCK_COMMENT,n,i.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+c,relevance:0},i.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+ur.join("|")+")"},{begin:":(:)?("+gr.join("|")+")"}]},i.CSS_VARIABLE,{className:"attribute",begin:"\\b("+pr.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[i.BLOCK_COMMENT,i.HEXCOLOR,i.IMPORTANT,i.CSS_NUMBER_MODE,...a,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...a,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},i.FUNCTION_DISPATCH]},{begin:r.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:o},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:l,attribute:dr.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...a,i.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+lr.join("|")+")\\b"}]}}function mr(t){const r=t.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:r.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:r.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}F.registerLanguage("typescript",kt);F.registerLanguage("ts",kt);F.registerLanguage("javascript",Mt);F.registerLanguage("js",Mt);F.registerLanguage("python",It);F.registerLanguage("py",It);F.registerLanguage("sql",rr);F.registerLanguage("json",ir);F.registerLanguage("yaml",Ct);F.registerLanguage("yml",Ct);F.registerLanguage("bash",$t);F.registerLanguage("sh",$t);F.registerLanguage("shell",sr);F.registerLanguage("markdown",Dt);F.registerLanguage("md",Dt);F.registerLanguage("xml",Bt);F.registerLanguage("html",Bt);F.registerLanguage("css",fr);F.registerLanguage("diff",mr);function br(){if(document.getElementById("hljs-styles"))return;const t=document.createElement("style");t.id="hljs-styles",t.textContent=`
|
|
242
|
+
/*
|
|
243
|
+
* Semantic Light Theme - High contrast with distinct token colors
|
|
244
|
+
* Designed for readability across all languages (TS, Python, YAML, SQL, etc.)
|
|
245
|
+
*/
|
|
246
|
+
.hljs {
|
|
247
|
+
background: #fafafa !important;
|
|
248
|
+
color: #383a42 !important;
|
|
249
|
+
padding: 1rem;
|
|
250
|
+
border-radius: 6px;
|
|
251
|
+
border: 1px solid #e1e4e8 !important;
|
|
252
|
+
font-family: 'JetBrains Mono', 'Fira Code', 'SF Mono', 'Consolas', monospace;
|
|
253
|
+
font-size: 0.875rem;
|
|
254
|
+
line-height: 1.6;
|
|
255
|
+
overflow-x: auto;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/* Comments - muted italic gray */
|
|
259
|
+
.hljs-comment,
|
|
260
|
+
.hljs-quote {
|
|
261
|
+
color: #a0a1a7;
|
|
262
|
+
font-style: italic;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/* Keywords (if, else, return, const, let, from, import) - BOLD PURPLE */
|
|
266
|
+
.hljs-keyword,
|
|
267
|
+
.hljs-selector-tag {
|
|
268
|
+
color: #a626a4;
|
|
269
|
+
font-weight: 600;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/* Types & Built-ins - ORANGE */
|
|
273
|
+
.hljs-type,
|
|
274
|
+
.hljs-built_in,
|
|
275
|
+
.hljs-builtin-name,
|
|
276
|
+
.hljs-class .hljs-title {
|
|
277
|
+
color: #c18401;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/* Strings - GREEN */
|
|
281
|
+
.hljs-string,
|
|
282
|
+
.hljs-doctag,
|
|
283
|
+
.hljs-regexp {
|
|
284
|
+
color: #50a14f;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/* Numbers - DARK ORANGE */
|
|
288
|
+
.hljs-number {
|
|
289
|
+
color: #986801;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/* Booleans (true/false/null) - MAGENTA (distinct!) */
|
|
293
|
+
.hljs-literal {
|
|
294
|
+
color: #e45649;
|
|
295
|
+
font-weight: 600;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/* Variables - RED */
|
|
299
|
+
.hljs-variable,
|
|
300
|
+
.hljs-template-variable {
|
|
301
|
+
color: #e45649;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/* Functions - BLUE */
|
|
305
|
+
.hljs-title,
|
|
306
|
+
.hljs-title.function_,
|
|
307
|
+
.hljs-section {
|
|
308
|
+
color: #4078f2;
|
|
309
|
+
font-weight: 600;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/* Keys/Attributes (YAML keys, HTML attrs, JSON keys) - DARK BLUE */
|
|
313
|
+
.hljs-attr,
|
|
314
|
+
.hljs-attribute {
|
|
315
|
+
color: #4078f2;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/* Names/Tags (HTML tags, XML) - RED */
|
|
319
|
+
.hljs-name,
|
|
320
|
+
.hljs-tag {
|
|
321
|
+
color: #e45649;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/* Classes/Selectors - ORANGE */
|
|
325
|
+
.hljs-selector-id,
|
|
326
|
+
.hljs-selector-class {
|
|
327
|
+
color: #c18401;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/* Meta (decorators, preprocessor) - PURPLE */
|
|
331
|
+
.hljs-meta,
|
|
332
|
+
.hljs-meta .hljs-keyword {
|
|
333
|
+
color: #a626a4;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/* Symbols/Bullets/Punctuation - TEAL */
|
|
337
|
+
.hljs-symbol,
|
|
338
|
+
.hljs-bullet {
|
|
339
|
+
color: #0184bc;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/* Links - BLUE underlined */
|
|
343
|
+
.hljs-link {
|
|
344
|
+
color: #4078f2;
|
|
345
|
+
text-decoration: underline;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/* Additions (diff) - GREEN bg */
|
|
349
|
+
.hljs-addition {
|
|
350
|
+
color: #50a14f;
|
|
351
|
+
background-color: #e6ffec;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/* Deletions (diff) - RED bg */
|
|
355
|
+
.hljs-deletion {
|
|
356
|
+
color: #e45649;
|
|
357
|
+
background-color: #ffebe9;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/* Emphasis */
|
|
361
|
+
.hljs-emphasis {
|
|
362
|
+
font-style: italic;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/* Strong */
|
|
366
|
+
.hljs-strong {
|
|
367
|
+
font-weight: bold;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/* Code blocks in log entries - light subtle container */
|
|
371
|
+
.log-content pre {
|
|
372
|
+
margin: 1rem 0;
|
|
373
|
+
border: none !important;
|
|
374
|
+
background: transparent !important;
|
|
375
|
+
box-shadow: 0 1px 3px rgba(0,0,0,0.08);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
.log-content pre code {
|
|
379
|
+
display: block;
|
|
380
|
+
padding: 0;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/* Language badge */
|
|
384
|
+
.log-content pre {
|
|
385
|
+
position: relative;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
.log-content pre[data-language]::before {
|
|
389
|
+
content: attr(data-language);
|
|
390
|
+
position: absolute;
|
|
391
|
+
top: 0;
|
|
392
|
+
right: 0;
|
|
393
|
+
padding: 2px 8px;
|
|
394
|
+
font-size: 0.7rem;
|
|
395
|
+
color: #57606a;
|
|
396
|
+
background: #eaeef2;
|
|
397
|
+
border-bottom-left-radius: 4px;
|
|
398
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
399
|
+
text-transform: uppercase;
|
|
400
|
+
}
|
|
401
|
+
`,document.head.appendChild(t)}function hr(){br(),document.querySelectorAll("pre code:not(.mermaid-source)").forEach(r=>{const i=r,n=i.parentElement;if(i.classList.contains("hljs"))return;const l=Array.from(i.classList).find(c=>c.startsWith("language-")),o=l?l.replace("language-",""):null;if(o!=="mermaid")try{o&&F.getLanguage(o)?(F.highlightElement(i),n&&n.setAttribute("data-language",o)):(i.classList.add("hljs"),n&&o&&n.setAttribute("data-language",o))}catch(c){console.warn("[Syntax Highlight] Failed to highlight block:",c)}})}const Er="/_worklog";let _e=[];async function Pt(){const t=document.getElementById("app");if(!t)return;_e=[];const r=window.scrollY;console.log(`[GSD-Lite Reader] Saving scroll position: ${r}px`);try{const i=await fetch(Er);if(!i.ok)throw new Error(`Failed to load WORK.md: ${i.status} ${i.statusText}`);const n=await i.text(),l=$n(n);t.innerHTML=Un(l),zn(),await wr(),Zn(),hr(),_r(),requestAnimationFrame(()=>{window.scrollTo(0,r),console.log(`[GSD-Lite Reader] Restored scroll to ${r}px`)}),console.log(`[GSD-Lite Reader] Loaded ${l.metadata.totalLogs} logs in ${l.metadata.parseTime}ms`)}catch(i){t.innerHTML=`
|
|
402
|
+
<div class="loading">
|
|
403
|
+
<div>⚠️ Failed to load worklog</div>
|
|
404
|
+
<div style="font-size: 0.875rem; color: #888;">
|
|
405
|
+
${i instanceof Error?i.message:"Unknown error"}
|
|
406
|
+
</div>
|
|
407
|
+
<div style="font-size: 0.75rem; color: #aaa;">
|
|
408
|
+
Check that WORK.md exists and the dev server is running.
|
|
409
|
+
</div>
|
|
410
|
+
</div>
|
|
411
|
+
`}}function _r(){const t=document.getElementById("mermaid-error-panel");if(t&&t.remove(),_e.length===0)return;const r=document.createElement("div");r.id="mermaid-error-panel",r.innerHTML=`
|
|
412
|
+
<style>
|
|
413
|
+
#mermaid-error-panel {
|
|
414
|
+
position: fixed;
|
|
415
|
+
top: 50px;
|
|
416
|
+
right: 16px;
|
|
417
|
+
width: 400px;
|
|
418
|
+
max-width: calc(100vw - 32px);
|
|
419
|
+
max-height: 60vh;
|
|
420
|
+
background: #fff5f5;
|
|
421
|
+
border: 2px solid #e94560;
|
|
422
|
+
border-radius: 8px;
|
|
423
|
+
box-shadow: 0 4px 20px rgba(0,0,0,0.15);
|
|
424
|
+
z-index: 2000;
|
|
425
|
+
overflow: hidden;
|
|
426
|
+
display: flex;
|
|
427
|
+
flex-direction: column;
|
|
428
|
+
}
|
|
429
|
+
#mermaid-error-panel.collapsed {
|
|
430
|
+
max-height: none;
|
|
431
|
+
height: auto;
|
|
432
|
+
}
|
|
433
|
+
#mermaid-error-panel.collapsed .error-panel-body {
|
|
434
|
+
display: none;
|
|
435
|
+
}
|
|
436
|
+
.error-panel-header {
|
|
437
|
+
display: flex;
|
|
438
|
+
align-items: center;
|
|
439
|
+
justify-content: space-between;
|
|
440
|
+
padding: 12px 16px;
|
|
441
|
+
background: #e94560;
|
|
442
|
+
color: white;
|
|
443
|
+
font-weight: 600;
|
|
444
|
+
cursor: pointer;
|
|
445
|
+
}
|
|
446
|
+
.error-panel-header:hover {
|
|
447
|
+
background: #d63050;
|
|
448
|
+
}
|
|
449
|
+
.error-panel-title {
|
|
450
|
+
display: flex;
|
|
451
|
+
align-items: center;
|
|
452
|
+
gap: 8px;
|
|
453
|
+
}
|
|
454
|
+
.error-panel-badge {
|
|
455
|
+
background: white;
|
|
456
|
+
color: #e94560;
|
|
457
|
+
padding: 2px 8px;
|
|
458
|
+
border-radius: 12px;
|
|
459
|
+
font-size: 12px;
|
|
460
|
+
}
|
|
461
|
+
.error-panel-actions {
|
|
462
|
+
display: flex;
|
|
463
|
+
gap: 8px;
|
|
464
|
+
}
|
|
465
|
+
.error-panel-btn {
|
|
466
|
+
background: rgba(255,255,255,0.2);
|
|
467
|
+
border: none;
|
|
468
|
+
color: white;
|
|
469
|
+
padding: 6px 12px;
|
|
470
|
+
border-radius: 4px;
|
|
471
|
+
cursor: pointer;
|
|
472
|
+
font-size: 12px;
|
|
473
|
+
display: flex;
|
|
474
|
+
align-items: center;
|
|
475
|
+
gap: 4px;
|
|
476
|
+
}
|
|
477
|
+
.error-panel-btn:hover {
|
|
478
|
+
background: rgba(255,255,255,0.3);
|
|
479
|
+
}
|
|
480
|
+
.error-panel-btn.copied {
|
|
481
|
+
background: #4CAF50;
|
|
482
|
+
}
|
|
483
|
+
.error-panel-body {
|
|
484
|
+
overflow-y: auto;
|
|
485
|
+
padding: 12px;
|
|
486
|
+
flex: 1;
|
|
487
|
+
}
|
|
488
|
+
.error-item {
|
|
489
|
+
background: white;
|
|
490
|
+
border: 1px solid #ffcccc;
|
|
491
|
+
border-radius: 6px;
|
|
492
|
+
padding: 12px;
|
|
493
|
+
margin-bottom: 8px;
|
|
494
|
+
}
|
|
495
|
+
.error-item:last-child {
|
|
496
|
+
margin-bottom: 0;
|
|
497
|
+
}
|
|
498
|
+
.error-item-header {
|
|
499
|
+
display: flex;
|
|
500
|
+
align-items: center;
|
|
501
|
+
justify-content: space-between;
|
|
502
|
+
margin-bottom: 8px;
|
|
503
|
+
}
|
|
504
|
+
.error-item-line {
|
|
505
|
+
font-weight: 600;
|
|
506
|
+
color: #e94560;
|
|
507
|
+
}
|
|
508
|
+
.error-item-jump {
|
|
509
|
+
background: #e94560;
|
|
510
|
+
color: white;
|
|
511
|
+
border: none;
|
|
512
|
+
padding: 4px 8px;
|
|
513
|
+
border-radius: 4px;
|
|
514
|
+
cursor: pointer;
|
|
515
|
+
font-size: 11px;
|
|
516
|
+
}
|
|
517
|
+
.error-item-jump:hover {
|
|
518
|
+
background: #d63050;
|
|
519
|
+
}
|
|
520
|
+
.error-item-msg {
|
|
521
|
+
font-size: 13px;
|
|
522
|
+
color: #333;
|
|
523
|
+
word-break: break-word;
|
|
524
|
+
}
|
|
525
|
+
@media (max-width: 500px) {
|
|
526
|
+
#mermaid-error-panel {
|
|
527
|
+
right: 8px;
|
|
528
|
+
width: calc(100vw - 16px);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
</style>
|
|
532
|
+
<div class="error-panel-header" onclick="toggleErrorPanel()">
|
|
533
|
+
<div class="error-panel-title">
|
|
534
|
+
⚠️ Mermaid Errors
|
|
535
|
+
<span class="error-panel-badge">${_e.length}</span>
|
|
536
|
+
</div>
|
|
537
|
+
<div class="error-panel-actions">
|
|
538
|
+
<button class="error-panel-btn" onclick="event.stopPropagation(); copyAllErrors();" id="copy-errors-btn">
|
|
539
|
+
📋 Copy All
|
|
540
|
+
</button>
|
|
541
|
+
<span style="font-size: 12px;">▼</span>
|
|
542
|
+
</div>
|
|
543
|
+
</div>
|
|
544
|
+
<div class="error-panel-body">
|
|
545
|
+
${_e.map((i,n)=>`
|
|
546
|
+
<div class="error-item">
|
|
547
|
+
<div class="error-item-header">
|
|
548
|
+
<span class="error-item-line">📍 Line ~${i.line}</span>
|
|
549
|
+
<button class="error-item-jump" onclick="jumpToLine(${i.line})">Jump</button>
|
|
550
|
+
</div>
|
|
551
|
+
<div class="error-item-msg">${vr(i.error)}</div>
|
|
552
|
+
</div>
|
|
553
|
+
`).join("")}
|
|
554
|
+
</div>
|
|
555
|
+
`,document.body.appendChild(r),window.toggleErrorPanel=()=>{r.classList.toggle("collapsed")},window.copyAllErrors=()=>{const i=yr();navigator.clipboard.writeText(i).then(()=>{const n=document.getElementById("copy-errors-btn");n&&(n.classList.add("copied"),n.innerHTML="✓ Copied!",setTimeout(()=>{n.classList.remove("copied"),n.innerHTML="📋 Copy All"},2e3))})},window.jumpToLine=i=>{const n=document.querySelector(`[id^="line-${i}"], [data-start-line="${i}"]`);n&&(n.scrollIntoView({behavior:"smooth",block:"center"}),n.style.outline="3px solid #e94560",setTimeout(()=>{n.style.outline=""},2e3))}}function yr(){const t=`## Mermaid Diagram Errors in WORK.md
|
|
556
|
+
|
|
557
|
+
Found ${_e.length} broken diagram(s). Please fix:
|
|
558
|
+
`,r=_e.map((i,n)=>`### Error ${n+1}: Line ~${i.line}
|
|
559
|
+
|
|
560
|
+
**Error:** ${i.error}
|
|
561
|
+
|
|
562
|
+
**Broken code:**
|
|
563
|
+
\`\`\`mermaid
|
|
564
|
+
${i.code}
|
|
565
|
+
\`\`\`
|
|
566
|
+
`).join(`
|
|
567
|
+
---
|
|
568
|
+
|
|
569
|
+
`);return t+`
|
|
570
|
+
`+r}function vr(t){const r=document.createElement("div");return r.textContent=t,r.innerHTML}async function wr(){const t=document.querySelectorAll(".mermaid-wrapper");if(t.length===0)return;const{default:r}=await Ln(async()=>{const{default:i}=await import("./mermaid.core-Bwyq-ixB.js").then(n=>n.bA);return{default:i}},[]);r.initialize({startOnLoad:!1,theme:"default",suppressErrorRendering:!0,themeVariables:{primaryColor:"#e94560",primaryTextColor:"#1a1a2e",primaryBorderColor:"#6f42c1",lineColor:"#6c757d",secondaryColor:"#f8f9fa",tertiaryColor:"#ffffff"},flowchart:{useMaxWidth:!0,htmlLabels:!0},sequence:{useMaxWidth:!0}});for(let i=0;i<t.length;i++){const n=t[i],l=n.querySelector(".mermaid-source");if(!l)continue;const o=l.textContent||"",c=n.dataset.startLine||"?";try{const{svg:a}=await r.render(`mermaid-${i}`,o);n.innerHTML=`<div class="mermaid-container">${a}</div>`}catch(a){const u=a instanceof Error?a.message:"Unknown error";_e.push({line:c,error:u,code:o}),console.error(`[Mermaid] Error at WORK.md line ~${c}:`,u),n.innerHTML=`
|
|
571
|
+
<div class="mermaid-error">
|
|
572
|
+
<strong>⚠️ Mermaid syntax error</strong>
|
|
573
|
+
<div style="margin-top: 0.25rem; font-size: 0.75rem; color: #666;">
|
|
574
|
+
📍 WORK.md line ~${c}
|
|
575
|
+
</div>
|
|
576
|
+
<div style="margin-top: 0.5rem; font-size: 0.875rem; color: #c62828;">
|
|
577
|
+
${u}
|
|
578
|
+
</div>
|
|
579
|
+
<details style="margin-top: 0.5rem;">
|
|
580
|
+
<summary style="cursor: pointer; font-size: 0.75rem; color: #666;">Show diagram source</summary>
|
|
581
|
+
<pre style="margin-top: 0.5rem; font-size: 0.75rem; background: #f5f5f5; padding: 0.5rem; border-radius: 4px; overflow-x: auto; white-space: pre-wrap;">${o}</pre>
|
|
582
|
+
</details>
|
|
583
|
+
</div>
|
|
584
|
+
`}}}function Je(){const r=`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}`;try{const i=new WebSocket(r);i.onopen=()=>{console.log("[GSD-Lite Reader] WebSocket connected")},i.onmessage=n=>{n.data==="reload"&&(console.log("[GSD-Lite Reader] WORK.md changed (WebSocket), reloading..."),Pt())},i.onclose=()=>{console.log("[GSD-Lite Reader] WebSocket disconnected, reconnecting in 2s..."),setTimeout(Je,2e3)},i.onerror=()=>{}}catch{console.warn("[GSD-Lite Reader] WebSocket connection failed, will retry"),setTimeout(Je,2e3)}}Pt();Je();export{Ln as _,Xn as g};
|