UNPKG

@neosjs/vitepress-theme

Version:

NeosJS VitePress theme

6 lines (5 loc) 4.38 kB
import $ from"markdown-it-footnote";import f from"markdown-it-container";import b from"node:fs";import k from"node:path";import v from"markdown-it";import{resolve as d}from"path";const y=n=>({success:"<i-ne-icons:check-circle />",danger:"<i-ne-icons:danger />",info:"<i-ne-icons:info />",warning:"<i-ne-icons:warning />",tip:"<i-ne-icons:info />"})[n],u=(n,e,t)=>[f,n,{render(s,c,o,r){const i=s[c],a=i.info.trim().slice(n.length).trim(),l=t.renderer.renderAttrs(i);if(i.nesting===1){const p=t.renderInline(a||e,{references:r.references});return`<div class="${n} custom-block"${l}> ${y(n)} <p class="custom-block-title">${p}</p> `}else return`</div> `}}],_=(n,e,t)=>{n.use(...u("success",t?.successLabel||"SUCCESS",n)).use(...u("danger",t?.dangerLabel||"DANGER",n)).use(...u("info",t?.infoLabel||"INFO",n)).use(...u("warning",t?.warningLabel||"WARNING",n)).use(...u("tip",t?.tipLabel||"TIP",n))},m=d(__dirname,"..",".."),x=d(m,"packages");d(x,"components");const R="./src",I=d(m,R);d(m,".vitepress"),d(m,"./dist");const w=d(I,"./examples"),C=v({}),L=async n=>{n.use(f,"demo",{validate(e){return!!e.trim().match(/^demo\s*(.*)$/)},render(e,t){const s=e[t].info.trim().match(/^demo\s*(.*)$/);if(e[t].nesting===1){const c=s&&s.length>1?s[1]:"",o=e[t+2];let r=e[t+1].type==="fence"?e[t+1].content:"";const i=o.children?.[0].content??"";if(!r&&i&&o.type==="inline"&&(r=b.readFileSync(k.resolve(w,`${i}.vue`),"utf-8")),!r)throw new Error(`Incorrect source file: ${i}`);return`<Demo :demos="demos" source="${encodeURIComponent(n.options.highlight(r,"vue",""))}" path="${i}" raw-source="${encodeURIComponent(r)}" description="${encodeURIComponent(C.render(c))}">`}else return"</Demo>"}})},N=n=>{const e=(o,r,i,a,l)=>l.renderToken(o,r,i),t=n.renderer.rules.link_open||e,s=n.renderer.rules.link_close||e;let c=!1;n.renderer.rules.link_open=(o,r,i,a,l)=>{const p=o[r],g=p.attrGet("href");return g&&(p.attrJoin("class","ne-link"),/^(?:ht|f)tps?:\/\/?/.test(g)&&(c=!0)),t(o,r,i,a,l)},n.renderer.rules.link_close=(o,r,i,a,l)=>c?(c=!1,`<i-ri-external-link-line class="ne-link-icon" />${l.renderToken(o,r,i)}`):s(o,r,i,a,l)},h=n=>{for(const e of n)e.title.endsWith("*")&&(e.title.endsWith("**")?e.compositionOnly=!0:e.optionsOnly=!0,e.title=e.title.replace(/\s*\*+$/,"")),e.children&&h(e.children)},T=n=>{n.renderer.rules.heading_open=(t,s,c,o,r)=>{for(const i of t[s+1].children)i.type==="text"&&i.content.endsWith("*")&&(i.content=i.content.replace(/\s*\*+$/,""));return r.renderToken(t,s,c)};const e=n.render;n.render=(t,s)=>{const c=e(t,s);return s&&s.headers&&h(s.headers),c}},D=["guide/introduction.md","guide/quick-start.md","guide/essentials/computed.md","guide/essentials/conditional.md","guide/essentials/list.md","guide/essentials/event-handling.md","guide/essentials/forms.md","guide/components/registration.md","guide/components/props.md","guide/components/events.md","guide/components/slots.md","guide/built-ins/teleport.md","about/faq.md","about/team.md","about/releases.md","about/community-guide.md","about/coc.md","sponsor/index.md","translations/index.md"],S=n=>{n.renderer.rules.heading_close=(e,t,s,c,o)=>{const r=c.relativePath,i=o.renderToken(e,t,s);return D.includes(r)?i:i.replace(/<\/h1>/,"</h1><VueJobs/>")}},U=async n=>{n.renderer.rules.table_open=()=>'<div class="ne-table"><table>',n.renderer.rules.table_close=()=>"</table></div>"},W=n=>{n.renderer.rules.tooltip=(e,t)=>{const s=e[t];return`<api-typing type="${s.content}" details="${s.info}" />`},n.inline.ruler.before("emphasis","tooltip",(e,t)=>{const s=/^\^\[([^\]]*)\](`[^`]*`)?/,c=e.src.slice(e.pos,e.posMax);if(!s.test(c))return!1;if(t)return!0;const o=c.match(s);if(!o)return!1;const r=e.push("tooltip","tooltip",0);return r.content=o[1].replace(/\\\|/g,"|"),r.info=(o[2]||"").replace(/^`(.*)`$/,"$1"),r.level=e.level,e.pos+=o[0].length,!0})},q=n=>{n.renderer.rules.tag=(e,t)=>{const s=e[t].content;return`<span class="vp-tag ${["beta","deprecated","required"].includes(s)?s:""}">${s}</span>`},n.inline.ruler.before("emphasis","tag",(e,t)=>{const s=/^\^\(([^)]*)\)/,c=e.src.slice(e.pos,e.posMax);if(!s.test(c))return!1;if(t)return!0;const o=c.match(s);if(!o)return!1;const r=e.push("tag","tag",0);return r.content=o[1].trim(),r.level=e.level,e.pos+=o[0].length,!0})},A=async n=>{n.use(U).use(T).use(S).use(_).use(L).use(W).use(N).use(q).use($)};export{A as default};