🚀 Big News:Socket Has Acquired Secure Annex.Learn More
Socket
Book a DemoSign in
Socket

@mdit/plugin-tab

Package Overview
Dependencies
Maintainers
1
Versions
64
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mdit/plugin-tab - npm Package Compare versions

Comparing version
0.22.4-cjs.0
to
0.22.5-cjs.0
+3
-3
lib/index.js

@@ -1,2 +0,2 @@

"use strict";var y=require("@mdit/helper"),J=require("markdown-it/lib/common/utils.mjs");const j=3,x="@tab",T=x+":active",B=x.length,I=T.length,R=(r,c,t)=>{if(r.src.charCodeAt(c)!==64)return!1;let a=1;for(;a<I&&T.charCodeAt(a)===r.src.charCodeAt(c+a);a++);const f=a===I;if(!f&&a!==B)return!1;const h=c+a,o=r.skipSpaces(h);return o>h&&o<t?{isActive:f,pos:o}:!1},w=(r,c)=>(t,a,f,h)=>{if(c.state!==r)return!1;const o=t.bMarks[a]+t.tShift[a],u=t.eMarks[a],n=t.sCount[a],e=R(t,o,u);if(e===!1)return!1;if(h)return!0;let s=a+1,l=!1;for(;s<f;s++){const M=t.bMarks[s]+t.tShift[s];if(t.sCount[s]===n&&t.src[M]==="@"&&R(t,M,t.eMarks[s])){l=!0;break}}const v=t.parentType,i=t.lineMax,d=t.blkIndent;t.parentType="tab",t.lineMax=s-(l?1:0),t.blkIndent=n;const p=t.push(`${r}_tab_open`,"",1),b=e.pos,C=t.skipSpacesBack(u,b);let k=C,A;for(;k>b;){if(t.src.charCodeAt(k)===35){for(A=k-1;t.src.charCodeAt(A)===92;)A--;if((k-A)%2===1)break}k--}let $,S="";k!==b?(S=t.src.slice(t.skipSpaces(k+1),C),$=t.src.slice(b,t.skipSpacesBack(k,b))):$=t.src.slice(b,C),p.block=!0,p.markup=x,p.info=$,p.meta={active:e.isActive},S&&(p.meta.id=S),p.map=[a,s-(l?1:0)],t.md.block.tokenize(t,a+1,s+(l?0:1));const m=t.push(`${r}_tab_close`,"",-1);return m.block=!0,m.markup="",t.parentType=v,t.lineMax=i,t.blkIndent=d,t.line=s+(l?0:1),!0},z=(r,c)=>(t,a,f,h)=>{const o=t.bMarks[a]+t.tShift[a],u=t.eMarks[a],n=t.sCount[a];if(t.src.charCodeAt(o)!==58)return!1;let e=o+1;for(;e<=u&&t.src.charCodeAt(e)===58;)e++;const s=e-o;if(s<j)return!1;e=t.skipSpaces(e);for(let _=0;_<r.length;_++){if(t.src.charCodeAt(e)!==r.charCodeAt(_))return!1;e++}let l=!1,v;for(;e!==u;){if(v=t.src.charCodeAt(e++),v===35){l=!0;break}if(!J.isSpace(v))return!1}if(h)return!0;let i=a+1,d=!1,p=e;for(;i<f;i++){const _=t.bMarks[i]+t.tShift[i],g=t.eMarks[i];if(_<g&&t.sCount[i]<n)break;if(t.sCount[i]===n&&t.src.charCodeAt(_)===58){for(e=_+1;e<=g&&t.src.charCodeAt(e)===58;e++);if(e-_>=s&&(e=t.skipSpaces(e),e>=g)){d=!0;break}}}const b=t.parentType,C=t.lineMax,k=t.blkIndent,A=c.state;t.parentType=`${r}_tabs`,t.lineMax=i-(d?1:0),t.blkIndent=n;const $=":".repeat(s);let S="";if(l){p=t.skipSpaces(p);const _=t.skipSpacesBack(u,p);p<_&&(S=t.src.slice(p,_))}const m=t.push(`${r}_tabs_open`,"",1);m.markup=$,m.block=!0,m.info=r,m.meta={id:S},m.map=[a,i-(d?1:0)],c.state=r,t.md.block.tokenize(t,a+1,i-(d?1:0)),c.state=A;const M=t.push(`${r}_tabs_close`,"",-1);return M.markup=$,M.block=!0,t.parentType=b,t.lineMax=C,t.blkIndent=k,t.line=i+(d?1:0),!0},H=r=>(c,t)=>{const a=[];let f=-1,h=!1,o=0;for(let u=t+1;u<c.length;u++){const{block:n,meta:e,type:s,info:l}=c[u];if(n){if(s===`${r}_tabs_open`){o++;continue}if(s===`${r}_tabs_close`){if(o===0)break;o--;continue}if(o>0)continue;if(s===`${r}_tab_open`){h=!0,e.index=a.length,e.active&&(f===-1?f=a.length:e.active=!1),a.push({title:l,index:a.length,id:e.id,isActive:e.active});continue}if(s===`${r}_tab_close`)continue;h||(c[u].type=`${r}_tabs_empty`,c[u].hidden=!0)}}return{active:f,data:a}},O=(r,c)=>{const{info:t,meta:a}=r[c];return{title:t,index:a.index,id:a.id,isActive:a.active}},q={state:null},D=(r,c)=>{const{name:t="tabs",openRender:a=(n,e,s,l,v,i)=>{const{active:d,data:p}=n,b=e[s];b.attrJoin("class",`${t}-tabs-wrapper`),b.meta.id&&b.attrJoin("data-id",b.meta.id);const C=p.map(({title:k,id:A},$)=>`<button type="button" class="${t}-tab-button${d===$?" active":""}" data-tab="${$}"${A?` data-id="${y.escapeHtml(A)}"`:""}${d===$?" data-active":""}>${y.escapeHtml(r.renderInline(k))}</button>`);return`<div${i.renderAttrs(b)}>
"use strict";var y=require("@mdit/helper");function q(r){switch(r){case 9:case 32:return!0}return!1}const w=3,g="@tab",T=g+":active",B=g.length,I=T.length,R=(r,c,t)=>{if(r.src.charCodeAt(c)!==64)return!1;let a=1;for(;a<I&&T.charCodeAt(a)===r.src.charCodeAt(c+a);a++);const b=a===I;if(!b&&a!==B)return!1;const h=c+a,o=r.skipSpaces(h);return o>h&&o<t?{isActive:b,pos:o}:!1},j=(r,c)=>(t,a,b,h)=>{if(c.state!==r)return!1;const o=t.bMarks[a]+t.tShift[a],u=t.eMarks[a],n=t.sCount[a],e=R(t,o,u);if(e===!1)return!1;if(h)return!0;let s=a+1,l=!1;for(;s<b;s++){const x=t.bMarks[s]+t.tShift[s];if(t.sCount[s]===n&&t.src[x]==="@"&&R(t,x,t.eMarks[s])){l=!0;break}}const v=t.parentType,i=t.lineMax,d=t.blkIndent;t.parentType="tab",t.lineMax=s-(l?1:0),t.blkIndent=n;const p=t.push(`${r}_tab_open`,"",1),f=e.pos,C=t.skipSpacesBack(u,f);let k=C,A;for(;k>f;){if(t.src.charCodeAt(k)===35){for(A=k-1;t.src.charCodeAt(A)===92;)A--;if((k-A)%2===1)break}k--}let $,S="";k!==f?(S=t.src.slice(t.skipSpaces(k+1),C),$=t.src.slice(f,t.skipSpacesBack(k,f))):$=t.src.slice(f,C),p.block=!0,p.markup=g,p.info=$,p.meta={active:e.isActive},S&&(p.meta.id=S),p.map=[a,s-(l?1:0)],t.md.block.tokenize(t,a+1,s+(l?0:1));const m=t.push(`${r}_tab_close`,"",-1);return m.block=!0,m.markup="",t.parentType=v,t.lineMax=i,t.blkIndent=d,t.line=s+(l?0:1),!0},z=(r,c)=>(t,a,b,h)=>{const o=t.bMarks[a]+t.tShift[a],u=t.eMarks[a],n=t.sCount[a];if(t.src.charCodeAt(o)!==58)return!1;let e=o+1;for(;e<=u&&t.src.charCodeAt(e)===58;)e++;const s=e-o;if(s<w)return!1;e=t.skipSpaces(e);for(let _=0;_<r.length;_++){if(t.src.charCodeAt(e)!==r.charCodeAt(_))return!1;e++}let l=!1,v;for(;e!==u;){if(v=t.src.charCodeAt(e++),v===35){l=!0;break}if(!q(v))return!1}if(h)return!0;let i=a+1,d=!1,p=e;for(;i<b;i++){const _=t.bMarks[i]+t.tShift[i],M=t.eMarks[i];if(_<M&&t.sCount[i]<n)break;if(t.sCount[i]===n&&t.src.charCodeAt(_)===58){for(e=_+1;e<=M&&t.src.charCodeAt(e)===58;e++);if(e-_>=s&&(e=t.skipSpaces(e),e>=M)){d=!0;break}}}const f=t.parentType,C=t.lineMax,k=t.blkIndent,A=c.state;t.parentType=`${r}_tabs`,t.lineMax=i-(d?1:0),t.blkIndent=n;const $=":".repeat(s);let S="";if(l){p=t.skipSpaces(p);const _=t.skipSpacesBack(u,p);p<_&&(S=t.src.slice(p,_))}const m=t.push(`${r}_tabs_open`,"",1);m.markup=$,m.block=!0,m.info=r,m.meta={id:S},m.map=[a,i-(d?1:0)],c.state=r,t.md.block.tokenize(t,a+1,i-(d?1:0)),c.state=A;const x=t.push(`${r}_tabs_close`,"",-1);return x.markup=$,x.block=!0,t.parentType=f,t.lineMax=C,t.blkIndent=k,t.line=i+(d?1:0),!0},H=r=>(c,t)=>{const a=[];let b=-1,h=!1,o=0;for(let u=t+1;u<c.length;u++){const{block:n,meta:e,type:s,info:l}=c[u];if(n){if(s===`${r}_tabs_open`){o++;continue}if(s===`${r}_tabs_close`){if(o===0)break;o--;continue}if(o>0)continue;if(s===`${r}_tab_open`){h=!0,e.index=a.length,e.active&&(b===-1?b=a.length:e.active=!1),a.push({title:l,index:a.length,id:e.id,isActive:e.active});continue}if(s===`${r}_tab_close`)continue;h||(c[u].type=`${r}_tabs_empty`,c[u].hidden=!0)}}return{active:b,data:a}},O=(r,c)=>{const{info:t,meta:a}=r[c];return{title:t,index:a.index,id:a.id,isActive:a.active}},J={state:null},D=(r,c)=>{const{name:t="tabs",openRender:a=(n,e,s,l,v,i)=>{const{active:d,data:p}=n,f=e[s];f.attrJoin("class",`${t}-tabs-wrapper`),f.meta.id&&f.attrJoin("data-id",f.meta.id);const C=p.map(({title:k,id:A},$)=>`<button type="button" class="${t}-tab-button${d===$?" active":""}" data-tab="${$}"${A?` data-id="${y.escapeHtml(A)}"`:""}${d===$?" data-active":""}>${y.escapeHtml(r.renderInline(k))}</button>`);return`<div${i.renderAttrs(f)}>
<div class="${t}-tabs-header">

@@ -7,7 +7,7 @@ ${C.join(`

<div class="${t}-tabs-container">
`},closeRender:f=()=>` </div>
`},closeRender:b=()=>` </div>
</div>
`,tabOpenRender:h=(n,e,s,l,v,i)=>{const d=e[s];return d.attrJoin("class",`${t}-tab-content${n.isActive?" active":""}`),d.attrSet("data-index",n.index.toString()),n.id&&d.attrSet("data-id",n.id),n.isActive&&d.attrJoin("data-active",""),`<div${i.renderAttrs(e[s])}>
`},tabCloseRender:o=()=>`</div>
`}=c??{},u=H(t);r.block.ruler.before("fence",`${t}_tabs`,z(t,q),{alt:["paragraph","reference","blockquote","list"]}),r.block.ruler.before("paragraph",`${t}_tab`,w(t,q),{alt:["paragraph","reference","blockquote","list"]}),r.renderer.rules[`${t}_tabs_open`]=(n,e,s,l,v)=>{const i=u(n,e);return a(i,n,e,s,l,v)},r.renderer.rules[`${t}_tabs_close`]=f,r.renderer.rules[`${t}_tab_open`]=(n,e,...s)=>{const l=O(n,e);return h(l,n,e,...s)},r.renderer.rules[`${t}_tab_close`]=o};exports.tab=D;
`}=c??{},u=H(t);r.block.ruler.before("fence",`${t}_tabs`,z(t,J),{alt:["paragraph","reference","blockquote","list"]}),r.block.ruler.before("paragraph",`${t}_tab`,j(t,J),{alt:["paragraph","reference","blockquote","list"]}),r.renderer.rules[`${t}_tabs_open`]=(n,e,s,l,v)=>{const i=u(n,e);return a(i,n,e,s,l,v)},r.renderer.rules[`${t}_tabs_close`]=b,r.renderer.rules[`${t}_tab_open`]=(n,e,...s)=>{const l=O(n,e);return h(l,n,e,...s)},r.renderer.rules[`${t}_tab_close`]=o};exports.tab=D;
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sources":["../src/plugin.ts"],"sourcesContent":["import { escapeHtml } from \"@mdit/helper\";\nimport type { Options, PluginWithOptions } from \"markdown-it\";\nimport { isSpace } from \"markdown-it/lib/common/utils.mjs\";\nimport type { RuleBlock } from \"markdown-it/lib/parser_block.mjs\";\nimport type Renderer from \"markdown-it/lib/renderer.mjs\";\nimport type StateBlock from \"markdown-it/lib/rules_block/state_block.mjs\";\nimport type Token from \"markdown-it/lib/token.mjs\";\n\nimport type {\n MarkdownItTabData,\n MarkdownItTabInfo,\n MarkdownItTabOptions,\n} from \"./options.js\";\n\nconst MIN_MARKER_NUM = 3;\nconst TAB_MARKER = \"@tab\";\nconst ACTIVE_TAB_MARKER = TAB_MARKER + \":active\";\nconst TAB_MARKER_LENGTH = TAB_MARKER.length;\nconst ACTIVE_TAB_MARKER_LENGTH = ACTIVE_TAB_MARKER.length;\n\nconst checkTabMarker = (\n state: StateBlock,\n start: number,\n max: number,\n): false | { isActive: boolean; pos: number } => {\n /*\n * Check out the first character quickly,\n * this should filter out most of non-uml blocks\n */\n if (state.src.charCodeAt(start) !== 64 /* @ */) return false;\n\n let pos = 1;\n\n // Check out the rest of the marker string\n for (; pos < ACTIVE_TAB_MARKER_LENGTH; pos++)\n if (ACTIVE_TAB_MARKER.charCodeAt(pos) !== state.src.charCodeAt(start + pos))\n break;\n\n const isActive = pos === ACTIVE_TAB_MARKER_LENGTH;\n\n if (!isActive && pos !== TAB_MARKER_LENGTH) return false;\n\n const markerEnd = start + pos;\n const infoStart = state.skipSpaces(markerEnd);\n\n if (infoStart > markerEnd && infoStart < max)\n return { isActive, pos: infoStart };\n\n return false;\n};\n\nconst getTabRule =\n (name: string, store: { state: string | null }): RuleBlock =>\n (state, startLine, endLine, silent) => {\n if (store.state !== name) return false;\n\n const start = state.bMarks[startLine] + state.tShift[startLine];\n const max = state.eMarks[startLine];\n const indent = state.sCount[startLine];\n\n const tabMatch = checkTabMarker(state, start, max);\n\n if (tabMatch === false) return false;\n\n // Since start is found, we can report success here in validation mode\n if (silent) return true;\n\n let nextLine = startLine + 1;\n let autoClosed = false;\n\n // Search for the end of the block\n for (\n ;\n // nextLine should be accessible outside the loop,\n // unclosed block should be auto closed by end of document.\n // also block seems to be auto closed by end of parent\n nextLine < endLine;\n nextLine++\n ) {\n const nextLineStart = state.bMarks[nextLine] + state.tShift[nextLine];\n\n if (\n // marker should be indented same as opening one\n state.sCount[nextLine] === indent &&\n // match start\n state.src[nextLineStart] === \"@\"\n ) {\n if (checkTabMarker(state, nextLineStart, state.eMarks[nextLine])) {\n // found!\n autoClosed = true;\n break;\n }\n }\n }\n\n const oldParent = state.parentType;\n const oldLineMax = state.lineMax;\n const oldBlkIndent = state.blkIndent;\n\n // @ts-expect-error: We are creating a new type called \"tab\"\n state.parentType = `tab`;\n\n // this will prevent lazy continuations from ever going past our end marker\n state.lineMax = nextLine - (autoClosed ? 1 : 0);\n\n // this will update the block indent\n state.blkIndent = indent;\n\n const openToken = state.push(`${name}_tab_open`, \"\", 1);\n\n const infoStart = tabMatch.pos;\n const infoEnd = state.skipSpacesBack(max, infoStart);\n\n let pos = infoEnd;\n let escapePos: number;\n\n while (pos > infoStart) {\n /*\n * Found potential #, look for escapes, pos will point to\n * first non escape when complete\n */\n if (state.src.charCodeAt(pos) === 35 /* # */) {\n escapePos = pos - 1;\n\n while (state.src.charCodeAt(escapePos) === 92 /* \\ */) escapePos--;\n\n // Even number of escapes, potential closing delimiter found\n if ((pos - escapePos) % 2 === 1) break;\n }\n\n pos--;\n }\n\n let title;\n let id = \"\";\n\n const hasId = pos !== infoStart;\n\n if (hasId) {\n id = state.src.slice(state.skipSpaces(pos + 1), infoEnd);\n title = state.src.slice(infoStart, state.skipSpacesBack(pos, infoStart));\n } else {\n title = state.src.slice(infoStart, infoEnd);\n }\n\n openToken.block = true;\n openToken.markup = TAB_MARKER;\n openToken.info = title;\n openToken.meta = {\n active: tabMatch.isActive,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (id) openToken.meta.id = id;\n openToken.map = [startLine, nextLine - (autoClosed ? 1 : 0)];\n\n state.md.block.tokenize(\n state,\n startLine + 1,\n nextLine + (autoClosed ? 0 : 1),\n );\n\n const closeToken = state.push(`${name}_tab_close`, \"\", -1);\n\n closeToken.block = true;\n closeToken.markup = \"\";\n\n state.parentType = oldParent;\n state.lineMax = oldLineMax;\n state.blkIndent = oldBlkIndent;\n state.line = nextLine + (autoClosed ? 0 : 1);\n\n return true;\n };\n\nconst getTabsRule =\n (name: string, store: { state: string | null }): RuleBlock =>\n (state, startLine, endLine, silent) => {\n const start = state.bMarks[startLine] + state.tShift[startLine];\n const max = state.eMarks[startLine];\n const indent = state.sCount[startLine];\n\n // Check out the first character quickly,\n // this should filter out most of non-containers\n if (state.src.charCodeAt(start) !== 58 /* : */) return false;\n\n let pos = start + 1;\n\n // Check out the rest of the marker string\n while (pos <= max) {\n if (state.src.charCodeAt(pos) !== 58 /* : */) break;\n pos++;\n }\n\n const markerCount = pos - start;\n\n if (markerCount < MIN_MARKER_NUM) return false;\n\n pos = state.skipSpaces(pos);\n\n // check name is matched\n for (let i = 0; i < name.length; i++) {\n if (state.src.charCodeAt(pos) !== name.charCodeAt(i)) return false;\n pos++;\n }\n\n let hasId = false;\n let char: number;\n\n while (pos !== max) {\n char = state.src.charCodeAt(pos++);\n if (char === 35 /* # */) {\n hasId = true;\n break;\n }\n if (!isSpace(char)) return false;\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) return true;\n\n let nextLine = startLine + 1;\n let autoClosed = false;\n let idStart = pos;\n\n // Search for the end of the block\n for (\n ;\n // nextLine should be accessible outside the loop,\n // unclosed block should be auto closed by end of document.\n // also block seems to be auto closed by end of parent\n nextLine < endLine;\n nextLine++\n ) {\n const nextLineStart = state.bMarks[nextLine] + state.tShift[nextLine];\n const nextLineMax = state.eMarks[nextLine];\n\n if (nextLineStart < nextLineMax && state.sCount[nextLine] < indent)\n // non-empty line with negative indent should stop the list:\n // - :::\n // test\n break;\n\n if (\n // closing fence should be indented same as opening one\n state.sCount[nextLine] === indent &&\n // match start\n state.src.charCodeAt(nextLineStart) === 58 /* : */\n ) {\n // check rest of marker\n for (pos = nextLineStart + 1; pos <= nextLineMax; pos++)\n if (state.src.charCodeAt(pos) !== 58 /* : */) break;\n\n // closing code fence must be at least as long as the opening one\n if (pos - nextLineStart >= markerCount) {\n // make sure tail has spaces only\n pos = state.skipSpaces(pos);\n\n if (pos >= nextLineMax) {\n // found!\n autoClosed = true;\n break;\n }\n }\n }\n }\n\n const oldParent = state.parentType;\n const oldLineMax = state.lineMax;\n const oldBlkIndent = state.blkIndent;\n const oldState = store.state;\n\n // @ts-expect-error: We are creating a new type called \"${name}_tabs\"\n state.parentType = `${name}_tabs`;\n\n // this will prevent lazy continuations from ever going past our end marker\n state.lineMax = nextLine - (autoClosed ? 1 : 0);\n\n // this will update the block indent\n state.blkIndent = indent;\n\n const markup = \":\".repeat(markerCount);\n let id = \"\";\n\n if (hasId) {\n idStart = state.skipSpaces(idStart);\n const idEnd = state.skipSpacesBack(max, idStart);\n\n if (idStart < idEnd) id = state.src.slice(idStart, idEnd);\n }\n\n const openToken = state.push(`${name}_tabs_open`, \"\", 1);\n\n openToken.markup = markup;\n openToken.block = true;\n openToken.info = name;\n openToken.meta = { id };\n openToken.map = [startLine, nextLine - (autoClosed ? 1 : 0)];\n\n store.state = name;\n\n state.md.block.tokenize(\n state,\n startLine + 1,\n nextLine - (autoClosed ? 1 : 0),\n );\n\n store.state = oldState;\n\n const closeToken = state.push(`${name}_tabs_close`, \"\", -1);\n\n closeToken.markup = markup;\n closeToken.block = true;\n\n state.parentType = oldParent;\n state.lineMax = oldLineMax;\n state.blkIndent = oldBlkIndent;\n state.line = nextLine + (autoClosed ? 1 : 0);\n\n return true;\n };\n\nconst getTabsDataGetter =\n (name: string): ((tokens: Token[], index: number) => MarkdownItTabInfo) =>\n (tokens, index) => {\n const data: MarkdownItTabData[] = [];\n let activeIndex = -1;\n let isTabStart = false;\n let nestingDepth = 0;\n\n for (\n // skip the current tabs_open token\n let i = index + 1;\n i < tokens.length;\n i++\n ) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { block, meta, type, info } = tokens[i];\n\n if (block) {\n // record the nesting depth of tabs\n if (type === `${name}_tabs_open`) {\n nestingDepth++;\n continue;\n }\n\n if (type === `${name}_tabs_close`) {\n if (nestingDepth === 0) break;\n nestingDepth--;\n continue;\n }\n\n // if we are in a nesting tabs, skip processing\n if (nestingDepth > 0) continue;\n\n if (type === `${name}_tab_open`) {\n isTabStart = true;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n meta.index = data.length;\n // tab is active\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (meta.active)\n if (activeIndex === -1) activeIndex = data.length;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n else meta.active = false;\n\n data.push({\n title: info,\n index: data.length,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n id: meta.id as string | undefined,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n isActive: meta.active as boolean,\n });\n\n continue;\n }\n\n if (type === `${name}_tab_close`) continue;\n\n // hide contents before first tab\n if (!isTabStart) {\n tokens[i].type = `${name}_tabs_empty`;\n tokens[i].hidden = true;\n }\n }\n }\n\n return {\n active: activeIndex,\n data: data,\n };\n };\n\nconst tabDataGetter = (tokens: Token[], index: number): MarkdownItTabData => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { info, meta } = tokens[index];\n\n return {\n title: info,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n index: meta.index as number,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n id: meta.id as string | undefined,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n isActive: meta.active as boolean,\n };\n};\n\nconst store = { state: null };\n\nexport const tab: PluginWithOptions<MarkdownItTabOptions> = (md, options) => {\n const {\n name = \"tabs\",\n\n openRender = (\n info: MarkdownItTabInfo,\n tokens: Token[],\n index: number,\n _options: Options,\n _env: unknown,\n self: Renderer,\n ): string => {\n const { active, data } = info;\n const token = tokens[index];\n\n token.attrJoin(\"class\", `${name}-tabs-wrapper`);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (token.meta.id) token.attrJoin(\"data-id\", token.meta.id as string);\n\n const tabs = data.map(\n ({ title, id }, index) =>\n `<button type=\"button\" class=\"${name}-tab-button${\n active === index ? \" active\" : \"\"\n }\" data-tab=\"${index}\"${id ? ` data-id=\"${escapeHtml(id)}\"` : \"\"}${\n active === index ? \" data-active\" : \"\"\n }>${escapeHtml(md.renderInline(title))}</button>`,\n );\n\n return `\\\n<div${self.renderAttrs(token)}>\n <div class=\"${name}-tabs-header\">\n ${tabs.join(\"\\n \")}\n </div>\n <div class=\"${name}-tabs-container\">\n`;\n },\n\n closeRender = (): string => `\\\n </div>\n</div>\n`,\n\n tabOpenRender = (\n info: MarkdownItTabData,\n tokens: Token[],\n index: number,\n _options: Options,\n _env: unknown,\n self: Renderer,\n ): string => {\n const token = tokens[index];\n\n token.attrJoin(\n \"class\",\n `${name}-tab-content${info.isActive ? \" active\" : \"\"}`,\n );\n token.attrSet(\"data-index\", info.index.toString());\n if (info.id) token.attrSet(\"data-id\", info.id);\n\n if (info.isActive) token.attrJoin(\"data-active\", \"\");\n\n return `\\\n<div${self.renderAttrs(tokens[index])}>\n`;\n },\n\n tabCloseRender = (): string => `\\\n</div>\n`,\n } = options ?? {};\n\n const tabsDataGetter = getTabsDataGetter(name);\n\n md.block.ruler.before(\"fence\", `${name}_tabs`, getTabsRule(name, store), {\n alt: [\"paragraph\", \"reference\", \"blockquote\", \"list\"],\n });\n\n md.block.ruler.before(\"paragraph\", `${name}_tab`, getTabRule(name, store), {\n alt: [\"paragraph\", \"reference\", \"blockquote\", \"list\"],\n });\n\n md.renderer.rules[`${name}_tabs_open`] = (\n tokens,\n index,\n options,\n env,\n self,\n ): string => {\n const info = tabsDataGetter(tokens, index);\n\n return openRender(info, tokens, index, options, env, self);\n };\n\n md.renderer.rules[`${name}_tabs_close`] = closeRender;\n\n md.renderer.rules[`${name}_tab_open`] = (tokens, index, ...args): string => {\n const data = tabDataGetter(tokens, index);\n\n return tabOpenRender(data, tokens, index, ...args);\n };\n\n md.renderer.rules[`${name}_tab_close`] = tabCloseRender;\n};\n"],"names":["MIN_MARKER_NUM","TAB_MARKER","ACTIVE_TAB_MARKER","TAB_MARKER_LENGTH","ACTIVE_TAB_MARKER_LENGTH","checkTabMarker","state","start","max","pos","isActive","markerEnd","infoStart","getTabRule","name","store","startLine","endLine","silent","indent","tabMatch","nextLine","autoClosed","nextLineStart","oldParent","oldLineMax","oldBlkIndent","openToken","infoEnd","escapePos","title","id","closeToken","getTabsRule","markerCount","i","hasId","char","isSpace","idStart","nextLineMax","oldState","markup","idEnd","getTabsDataGetter","tokens","index","data","activeIndex","isTabStart","nestingDepth","block","meta","type","info","tabDataGetter","tab","md","options","openRender","_options","_env","self","active","token","tabs","escapeHtml","closeRender","tabOpenRender","tabCloseRender","tabsDataGetter","env","args"],"mappings":"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"}
{"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/common/utils.mjs","../src/plugin.ts"],"sourcesContent":["// Utilities\n//\n\nimport * as mdurl from 'mdurl'\nimport * as ucmicro from 'uc.micro'\nimport { decodeHTML } from 'entities'\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\n\nfunction isString (obj) { return _class(obj) === '[object String]' }\n\nconst _hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction has (object, key) {\n return _hasOwnProperty.call(object, key)\n}\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n const sources = Array.prototype.slice.call(arguments, 1)\n\n sources.forEach(function (source) {\n if (!source) { return }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object')\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key]\n })\n })\n\n return obj\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt (src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1))\n}\n\nfunction isValidEntityCode (c) {\n /* eslint no-bitwise:0 */\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false }\n if (c === 0x0B) { return false }\n if (c >= 0x0E && c <= 0x1F) { return false }\n if (c >= 0x7F && c <= 0x9F) { return false }\n // out of range\n if (c > 0x10FFFF) { return false }\n return true\n}\n\nfunction fromCodePoint (c) {\n /* eslint no-bitwise:0 */\n if (c > 0xffff) {\n c -= 0x10000\n const surrogate1 = 0xd800 + (c >> 10)\n const surrogate2 = 0xdc00 + (c & 0x3ff)\n\n return String.fromCharCode(surrogate1, surrogate2)\n }\n return String.fromCharCode(c)\n}\n\nconst UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g\nconst ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi\nconst UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi')\n\nconst DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i\n\nfunction replaceEntityPattern (match, name) {\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n const code = name[1].toLowerCase() === 'x'\n ? parseInt(name.slice(2), 16)\n : parseInt(name.slice(1), 10)\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code)\n }\n\n return match\n }\n\n const decoded = decodeHTML(match)\n if (decoded !== match) {\n return decoded\n }\n\n return match\n}\n\n/* function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n} */\n\nfunction unescapeMd (str) {\n if (str.indexOf('\\\\') < 0) { return str }\n return str.replace(UNESCAPE_MD_RE, '$1')\n}\n\nfunction unescapeAll (str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped }\n return replaceEntityPattern(match, entity)\n })\n}\n\nconst HTML_ESCAPE_TEST_RE = /[&<>\"]/\nconst HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g\nconst HTML_REPLACEMENTS = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;'\n}\n\nfunction replaceUnsafeChar (ch) {\n return HTML_REPLACEMENTS[ch]\n}\n\nfunction escapeHtml (str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar)\n }\n return str\n}\n\nconst REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g\n\nfunction escapeRE (str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&')\n}\n\nfunction isSpace (code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true\n }\n return false\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace (code) {\n if (code >= 0x2000 && code <= 0x200A) { return true }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true\n }\n return false\n}\n\n/* eslint-disable max-len */\n\n// Currently without astral characters support.\nfunction isPunctChar (ch) {\n return ucmicro.P.test(ch) || ucmicro.S.test(ch)\n}\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct (ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true\n default:\n return false\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference (str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ')\n\n // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('ẞ'.toLowerCase() === 'Ṿ') {\n str = str.replace(/ẞ/g, 'ß')\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change ϑ (it's already lowercase),\n // and .toUpperCase() doesn't change ϴ (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase()\n}\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nconst lib = { mdurl, ucmicro }\n\nexport {\n lib,\n assign,\n isString,\n has,\n unescapeMd,\n unescapeAll,\n isValidEntityCode,\n fromCodePoint,\n escapeHtml,\n arrayReplaceAt,\n isSpace,\n isWhiteSpace,\n isMdAsciiPunct,\n isPunctChar,\n escapeRE,\n normalizeReference\n}\n","import { escapeHtml } from \"@mdit/helper\";\nimport type { Options, PluginWithOptions } from \"markdown-it\";\nimport { isSpace } from \"markdown-it/lib/common/utils.mjs\";\nimport type { RuleBlock } from \"markdown-it/lib/parser_block.mjs\";\nimport type Renderer from \"markdown-it/lib/renderer.mjs\";\nimport type StateBlock from \"markdown-it/lib/rules_block/state_block.mjs\";\nimport type Token from \"markdown-it/lib/token.mjs\";\n\nimport type {\n MarkdownItTabData,\n MarkdownItTabInfo,\n MarkdownItTabOptions,\n} from \"./options.js\";\n\nconst MIN_MARKER_NUM = 3;\nconst TAB_MARKER = \"@tab\";\nconst ACTIVE_TAB_MARKER = TAB_MARKER + \":active\";\nconst TAB_MARKER_LENGTH = TAB_MARKER.length;\nconst ACTIVE_TAB_MARKER_LENGTH = ACTIVE_TAB_MARKER.length;\n\nconst checkTabMarker = (\n state: StateBlock,\n start: number,\n max: number,\n): false | { isActive: boolean; pos: number } => {\n /*\n * Check out the first character quickly,\n * this should filter out most of non-uml blocks\n */\n if (state.src.charCodeAt(start) !== 64 /* @ */) return false;\n\n let pos = 1;\n\n // Check out the rest of the marker string\n for (; pos < ACTIVE_TAB_MARKER_LENGTH; pos++)\n if (ACTIVE_TAB_MARKER.charCodeAt(pos) !== state.src.charCodeAt(start + pos))\n break;\n\n const isActive = pos === ACTIVE_TAB_MARKER_LENGTH;\n\n if (!isActive && pos !== TAB_MARKER_LENGTH) return false;\n\n const markerEnd = start + pos;\n const infoStart = state.skipSpaces(markerEnd);\n\n if (infoStart > markerEnd && infoStart < max)\n return { isActive, pos: infoStart };\n\n return false;\n};\n\nconst getTabRule =\n (name: string, store: { state: string | null }): RuleBlock =>\n (state, startLine, endLine, silent) => {\n if (store.state !== name) return false;\n\n const start = state.bMarks[startLine] + state.tShift[startLine];\n const max = state.eMarks[startLine];\n const indent = state.sCount[startLine];\n\n const tabMatch = checkTabMarker(state, start, max);\n\n if (tabMatch === false) return false;\n\n // Since start is found, we can report success here in validation mode\n if (silent) return true;\n\n let nextLine = startLine + 1;\n let autoClosed = false;\n\n // Search for the end of the block\n for (\n ;\n // nextLine should be accessible outside the loop,\n // unclosed block should be auto closed by end of document.\n // also block seems to be auto closed by end of parent\n nextLine < endLine;\n nextLine++\n ) {\n const nextLineStart = state.bMarks[nextLine] + state.tShift[nextLine];\n\n if (\n // marker should be indented same as opening one\n state.sCount[nextLine] === indent &&\n // match start\n state.src[nextLineStart] === \"@\"\n ) {\n if (checkTabMarker(state, nextLineStart, state.eMarks[nextLine])) {\n // found!\n autoClosed = true;\n break;\n }\n }\n }\n\n const oldParent = state.parentType;\n const oldLineMax = state.lineMax;\n const oldBlkIndent = state.blkIndent;\n\n // @ts-expect-error: We are creating a new type called \"tab\"\n state.parentType = `tab`;\n\n // this will prevent lazy continuations from ever going past our end marker\n state.lineMax = nextLine - (autoClosed ? 1 : 0);\n\n // this will update the block indent\n state.blkIndent = indent;\n\n const openToken = state.push(`${name}_tab_open`, \"\", 1);\n\n const infoStart = tabMatch.pos;\n const infoEnd = state.skipSpacesBack(max, infoStart);\n\n let pos = infoEnd;\n let escapePos: number;\n\n while (pos > infoStart) {\n /*\n * Found potential #, look for escapes, pos will point to\n * first non escape when complete\n */\n if (state.src.charCodeAt(pos) === 35 /* # */) {\n escapePos = pos - 1;\n\n while (state.src.charCodeAt(escapePos) === 92 /* \\ */) escapePos--;\n\n // Even number of escapes, potential closing delimiter found\n if ((pos - escapePos) % 2 === 1) break;\n }\n\n pos--;\n }\n\n let title;\n let id = \"\";\n\n const hasId = pos !== infoStart;\n\n if (hasId) {\n id = state.src.slice(state.skipSpaces(pos + 1), infoEnd);\n title = state.src.slice(infoStart, state.skipSpacesBack(pos, infoStart));\n } else {\n title = state.src.slice(infoStart, infoEnd);\n }\n\n openToken.block = true;\n openToken.markup = TAB_MARKER;\n openToken.info = title;\n openToken.meta = {\n active: tabMatch.isActive,\n };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (id) openToken.meta.id = id;\n openToken.map = [startLine, nextLine - (autoClosed ? 1 : 0)];\n\n state.md.block.tokenize(\n state,\n startLine + 1,\n nextLine + (autoClosed ? 0 : 1),\n );\n\n const closeToken = state.push(`${name}_tab_close`, \"\", -1);\n\n closeToken.block = true;\n closeToken.markup = \"\";\n\n state.parentType = oldParent;\n state.lineMax = oldLineMax;\n state.blkIndent = oldBlkIndent;\n state.line = nextLine + (autoClosed ? 0 : 1);\n\n return true;\n };\n\nconst getTabsRule =\n (name: string, store: { state: string | null }): RuleBlock =>\n (state, startLine, endLine, silent) => {\n const start = state.bMarks[startLine] + state.tShift[startLine];\n const max = state.eMarks[startLine];\n const indent = state.sCount[startLine];\n\n // Check out the first character quickly,\n // this should filter out most of non-containers\n if (state.src.charCodeAt(start) !== 58 /* : */) return false;\n\n let pos = start + 1;\n\n // Check out the rest of the marker string\n while (pos <= max) {\n if (state.src.charCodeAt(pos) !== 58 /* : */) break;\n pos++;\n }\n\n const markerCount = pos - start;\n\n if (markerCount < MIN_MARKER_NUM) return false;\n\n pos = state.skipSpaces(pos);\n\n // check name is matched\n for (let i = 0; i < name.length; i++) {\n if (state.src.charCodeAt(pos) !== name.charCodeAt(i)) return false;\n pos++;\n }\n\n let hasId = false;\n let char: number;\n\n while (pos !== max) {\n char = state.src.charCodeAt(pos++);\n if (char === 35 /* # */) {\n hasId = true;\n break;\n }\n if (!isSpace(char)) return false;\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) return true;\n\n let nextLine = startLine + 1;\n let autoClosed = false;\n let idStart = pos;\n\n // Search for the end of the block\n for (\n ;\n // nextLine should be accessible outside the loop,\n // unclosed block should be auto closed by end of document.\n // also block seems to be auto closed by end of parent\n nextLine < endLine;\n nextLine++\n ) {\n const nextLineStart = state.bMarks[nextLine] + state.tShift[nextLine];\n const nextLineMax = state.eMarks[nextLine];\n\n if (nextLineStart < nextLineMax && state.sCount[nextLine] < indent)\n // non-empty line with negative indent should stop the list:\n // - :::\n // test\n break;\n\n if (\n // closing fence should be indented same as opening one\n state.sCount[nextLine] === indent &&\n // match start\n state.src.charCodeAt(nextLineStart) === 58 /* : */\n ) {\n // check rest of marker\n for (pos = nextLineStart + 1; pos <= nextLineMax; pos++)\n if (state.src.charCodeAt(pos) !== 58 /* : */) break;\n\n // closing code fence must be at least as long as the opening one\n if (pos - nextLineStart >= markerCount) {\n // make sure tail has spaces only\n pos = state.skipSpaces(pos);\n\n if (pos >= nextLineMax) {\n // found!\n autoClosed = true;\n break;\n }\n }\n }\n }\n\n const oldParent = state.parentType;\n const oldLineMax = state.lineMax;\n const oldBlkIndent = state.blkIndent;\n const oldState = store.state;\n\n // @ts-expect-error: We are creating a new type called \"${name}_tabs\"\n state.parentType = `${name}_tabs`;\n\n // this will prevent lazy continuations from ever going past our end marker\n state.lineMax = nextLine - (autoClosed ? 1 : 0);\n\n // this will update the block indent\n state.blkIndent = indent;\n\n const markup = \":\".repeat(markerCount);\n let id = \"\";\n\n if (hasId) {\n idStart = state.skipSpaces(idStart);\n const idEnd = state.skipSpacesBack(max, idStart);\n\n if (idStart < idEnd) id = state.src.slice(idStart, idEnd);\n }\n\n const openToken = state.push(`${name}_tabs_open`, \"\", 1);\n\n openToken.markup = markup;\n openToken.block = true;\n openToken.info = name;\n openToken.meta = { id };\n openToken.map = [startLine, nextLine - (autoClosed ? 1 : 0)];\n\n store.state = name;\n\n state.md.block.tokenize(\n state,\n startLine + 1,\n nextLine - (autoClosed ? 1 : 0),\n );\n\n store.state = oldState;\n\n const closeToken = state.push(`${name}_tabs_close`, \"\", -1);\n\n closeToken.markup = markup;\n closeToken.block = true;\n\n state.parentType = oldParent;\n state.lineMax = oldLineMax;\n state.blkIndent = oldBlkIndent;\n state.line = nextLine + (autoClosed ? 1 : 0);\n\n return true;\n };\n\nconst getTabsDataGetter =\n (name: string): ((tokens: Token[], index: number) => MarkdownItTabInfo) =>\n (tokens, index) => {\n const data: MarkdownItTabData[] = [];\n let activeIndex = -1;\n let isTabStart = false;\n let nestingDepth = 0;\n\n for (\n // skip the current tabs_open token\n let i = index + 1;\n i < tokens.length;\n i++\n ) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { block, meta, type, info } = tokens[i];\n\n if (block) {\n // record the nesting depth of tabs\n if (type === `${name}_tabs_open`) {\n nestingDepth++;\n continue;\n }\n\n if (type === `${name}_tabs_close`) {\n if (nestingDepth === 0) break;\n nestingDepth--;\n continue;\n }\n\n // if we are in a nesting tabs, skip processing\n if (nestingDepth > 0) continue;\n\n if (type === `${name}_tab_open`) {\n isTabStart = true;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n meta.index = data.length;\n // tab is active\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (meta.active)\n if (activeIndex === -1) activeIndex = data.length;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n else meta.active = false;\n\n data.push({\n title: info,\n index: data.length,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n id: meta.id as string | undefined,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n isActive: meta.active as boolean,\n });\n\n continue;\n }\n\n if (type === `${name}_tab_close`) continue;\n\n // hide contents before first tab\n if (!isTabStart) {\n tokens[i].type = `${name}_tabs_empty`;\n tokens[i].hidden = true;\n }\n }\n }\n\n return {\n active: activeIndex,\n data: data,\n };\n };\n\nconst tabDataGetter = (tokens: Token[], index: number): MarkdownItTabData => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { info, meta } = tokens[index];\n\n return {\n title: info,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n index: meta.index as number,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n id: meta.id as string | undefined,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n isActive: meta.active as boolean,\n };\n};\n\nconst store = { state: null };\n\nexport const tab: PluginWithOptions<MarkdownItTabOptions> = (md, options) => {\n const {\n name = \"tabs\",\n\n openRender = (\n info: MarkdownItTabInfo,\n tokens: Token[],\n index: number,\n _options: Options,\n _env: unknown,\n self: Renderer,\n ): string => {\n const { active, data } = info;\n const token = tokens[index];\n\n token.attrJoin(\"class\", `${name}-tabs-wrapper`);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (token.meta.id) token.attrJoin(\"data-id\", token.meta.id as string);\n\n const tabs = data.map(\n ({ title, id }, index) =>\n `<button type=\"button\" class=\"${name}-tab-button${\n active === index ? \" active\" : \"\"\n }\" data-tab=\"${index}\"${id ? ` data-id=\"${escapeHtml(id)}\"` : \"\"}${\n active === index ? \" data-active\" : \"\"\n }>${escapeHtml(md.renderInline(title))}</button>`,\n );\n\n return `\\\n<div${self.renderAttrs(token)}>\n <div class=\"${name}-tabs-header\">\n ${tabs.join(\"\\n \")}\n </div>\n <div class=\"${name}-tabs-container\">\n`;\n },\n\n closeRender = (): string => `\\\n </div>\n</div>\n`,\n\n tabOpenRender = (\n info: MarkdownItTabData,\n tokens: Token[],\n index: number,\n _options: Options,\n _env: unknown,\n self: Renderer,\n ): string => {\n const token = tokens[index];\n\n token.attrJoin(\n \"class\",\n `${name}-tab-content${info.isActive ? \" active\" : \"\"}`,\n );\n token.attrSet(\"data-index\", info.index.toString());\n if (info.id) token.attrSet(\"data-id\", info.id);\n\n if (info.isActive) token.attrJoin(\"data-active\", \"\");\n\n return `\\\n<div${self.renderAttrs(tokens[index])}>\n`;\n },\n\n tabCloseRender = (): string => `\\\n</div>\n`,\n } = options ?? {};\n\n const tabsDataGetter = getTabsDataGetter(name);\n\n md.block.ruler.before(\"fence\", `${name}_tabs`, getTabsRule(name, store), {\n alt: [\"paragraph\", \"reference\", \"blockquote\", \"list\"],\n });\n\n md.block.ruler.before(\"paragraph\", `${name}_tab`, getTabRule(name, store), {\n alt: [\"paragraph\", \"reference\", \"blockquote\", \"list\"],\n });\n\n md.renderer.rules[`${name}_tabs_open`] = (\n tokens,\n index,\n options,\n env,\n self,\n ): string => {\n const info = tabsDataGetter(tokens, index);\n\n return openRender(info, tokens, index, options, env, self);\n };\n\n md.renderer.rules[`${name}_tabs_close`] = closeRender;\n\n md.renderer.rules[`${name}_tab_open`] = (tokens, index, ...args): string => {\n const data = tabDataGetter(tokens, index);\n\n return tabOpenRender(data, tokens, index, ...args);\n };\n\n md.renderer.rules[`${name}_tab_close`] = tabCloseRender;\n};\n"],"names":["isSpace","code","MIN_MARKER_NUM","TAB_MARKER","ACTIVE_TAB_MARKER","TAB_MARKER_LENGTH","ACTIVE_TAB_MARKER_LENGTH","checkTabMarker","state","start","max","pos","isActive","markerEnd","infoStart","getTabRule","name","store","startLine","endLine","silent","indent","tabMatch","nextLine","autoClosed","nextLineStart","oldParent","oldLineMax","oldBlkIndent","openToken","infoEnd","escapePos","title","id","closeToken","getTabsRule","markerCount","i","hasId","char","idStart","nextLineMax","oldState","markup","idEnd","getTabsDataGetter","tokens","index","data","activeIndex","isTabStart","nestingDepth","block","meta","type","info","tabDataGetter","tab","md","options","openRender","_options","_env","self","active","token","tabs","escapeHtml","closeRender","tabOpenRender","tabCloseRender","tabsDataGetter","env","args"],"mappings":"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","x_google_ignoreList":[0]}
{
"name": "@mdit/plugin-tab",
"version": "0.22.4-cjs.0",
"version": "0.22.5-cjs.0",
"description": "tab plugin for MarkdownIt",

@@ -45,3 +45,3 @@ "keywords": [

},
"gitHead": "3576665a17077f50c9013f0df2cba92845d9e44d"
"gitHead": "2599e080efa13aee60f9124bc9e9d1625b44e7b2"
}