robindoc 0.0.0-experimental-1f8a4f9 → 0.0.0-experimental-b4da39d

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.
@@ -1 +1 @@
1
- {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../../src/components/elements/article/document.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAElE,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,EAAE,KAAK,YAAY,EAAE,qCAAiC;AAC7D,OAAO,EAAE,KAAK,UAAU,EAAmB,oCAAgC;AAE3E,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAOH,KAAK,UAAU,EAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAgEtC,MAAM,MAAM,aAAa,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACrC,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,YAAY,CAAC,CAAC;CACvC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAsV5C,CAAC"}
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../../src/components/elements/article/document.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAElE,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,EAAE,KAAK,YAAY,EAAE,qCAAiC;AAC7D,OAAO,EAAE,KAAK,UAAU,EAAmB,oCAAgC;AAE3E,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAOH,KAAK,UAAU,EAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAgEtC,MAAM,MAAM,aAAa,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACrC,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,YAAY,CAAC,CAAC;CACvC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAuV5C,CAAC"}
@@ -1,2 +1,2 @@
1
- import e from"react";import t,{Text as n,domToReact as r,attributesToProps as a}from"html-react-parser";import o from"clsx";import{parseCodeLang as s,validateComponentName as c,formatId as l,parseBlockqoute as i,formatLinkHref as m,parseMarkdown as u}from"./utils.js";import{DEFAULT_TAGS as k}from"./tags.js";const p=({raw:o,components:s,tags:l,...i})=>{const k={replace(t){if(t instanceof n&&t.data){const{headings:n,tokens:r}=u(t.data);return e.createElement(d,{headings:n,tokens:r,components:s,tags:l,subtree:!0,...i})}if(!("name"in t))return e.createElement(e.Fragment,null);if("a"===t.name&&"attribs"in t){const{href:n,external:o}=m(t.attribs.href,i.pathname,i.pages);return""===n?r(t.children,k):e.createElement(l.ContentLink,{...a(t.attribs),href:n,external:o},r(t.children,k))}if(!c(t.name))return t;if(!s||!(t.name in s))return console.warn(`Unknown component: "${t.name}"`),e.createElement(e.Fragment,null);const o="attribs"in t?a(t.attribs):{},p=s[t.name],h="children"in t?t.children:null;return e.createElement(p,{...o},h?r(h,k):null)},htmlparser2:{lowerCaseTags:!1,lowerCaseAttributeNames:!1}};return t(o,k)},d=({pathname:t,components:n,tags:r={},uri:a,targetProvider:u,tokens:d,headings:h,config:E={},subtree:g,pages:y})=>{const{publicDirs:f}=E,w={...k,...r};let b=null;const x=new Set,T=({token:r})=>{if(!r)return null;if(b){if(Array.isArray(r)||"html"!==r.type||"\x3c!---/robin--\x3e"!==r.raw.trim())return"dummy"===b.type||(Array.isArray(r)?b.childTokens.push(...r):b.childTokens.push(r)),null;{if("dummy"===b.type)return b=null,null;const{componentName:t,childTokens:r,props:a}=b,o=n[t];return b=null,e.createElement(o,{...a},e.createElement(T,{token:r}))}}if(Array.isArray(r))return r.reduce((t,n,r)=>{if("code"===n.type&&s(n.lang).configuration.switcher)return t.codeQueue.push(n),t;if(t.codeQueue.length>0&&"space"!==n.type){const n=t.codeQueue.map(e=>e.raw).join("");t.list.push(e.createElement(T,{token:{type:"code-group",tabs:t.codeQueue,raw:n},key:n+r})),t.codeQueue=[]}return t.list.push(e.createElement(T,{token:n,key:n.raw+r})),t},{list:[],codeQueue:[]}).list;switch(r.type){case"heading":const k=`h${r.depth}`,d=h.find(e=>e.token===r);return d?.id?e.createElement(w.AnchorHeading,{component:k,id:d.id},r.tokens?e.createElement(T,{token:r.tokens}):r.raw):e.createElement(w.Heading,{component:k,id:1===r.depth?"main-content":void 0},r.tokens?e.createElement(T,{token:r.tokens}):r.raw);case"table":return e.createElement(w.Block,null,e.createElement(w.Table,null,e.createElement(w.Thead,null,e.createElement(w.Tr,null,r.header.map((t,n)=>e.createElement(w.Th,{key:t.text+n,align:t.align},t.tokens?e.createElement(T,{token:t.tokens}):t.text)))),e.createElement(w.Tbody,null,r.rows.map((t,n)=>e.createElement(w.Tr,{key:n},t.map((t,n)=>e.createElement(w.Td,{key:t.text+n,align:t.align},t.tokens?e.createElement(T,{token:t.tokens}):t.text)))))));case"link":const{href:$,external:C}=m(r.href,t,y);return""===$?r.tokens?e.createElement(T,{token:r.tokens}):r.raw:e.createElement(w.ContentLink,{href:$,external:C},r.tokens?e.createElement(T,{token:r.tokens}):r.raw);case"hr":return e.createElement(w.Hr,null);case"image":return e.createElement(w.Img,{src:r.href,publicDirs:f,provider:u,uri:a,alt:r.title||""});case"paragraph":return g?r.tokens?e.createElement(T,{token:r.tokens}):r.raw:r.tokens?.some(e=>"html"===e.type)&&r.tokens?.every(e=>"html"===e.type||"text"===e.type||"\n"===e.raw)?e.createElement(T,{token:{...r,type:"html"}}):e.createElement(w.Paragraph,null,r.tokens?e.createElement(T,{token:r.tokens}):r.raw);case"strong":return e.createElement(w.Strong,null,r.tokens?e.createElement(T,{token:r.tokens}):r.raw);case"del":return e.createElement(w.Del,null,r.tokens?e.createElement(T,{token:r.tokens}):r.raw);case"em":return e.createElement(w.Em,null,r.tokens?e.createElement(T,{token:r.tokens}):r.raw);case"blockquote":const{token:A,type:L}=i(r);return e.createElement(w.Blockquote,{type:L},A.tokens?e.createElement(T,{token:A.tokens}):A.raw);case"codespan":const S=r.raw.replace(/^`|`$/g,""),v=S.match(/(.+){:([a-zA-Z]+)}$/);if(v){const[,t,n]=v;return e.createElement(w.CodeBlock,{code:t,lang:n,inline:!0})}return e.createElement(w.CodeSpan,null,S);case"code-group":const N=r.tabs.reduce((t,n)=>{const{lang:r,configuration:a}=s(n.lang||""),o="string"==typeof a.tab?l(a.tab):r;if(t[o]={tabName:(a.tab||r).toString(),element:e.createElement(T,{token:n,key:n.raw})},"string"==typeof a.clone){a.clone.split(",").forEach(o=>{const[s,c,i]=o.split("|"),m="string"==typeof c?l(c):s;t[m]={tabName:(a.tab||r).toString(),element:e.createElement(T,{token:{...n,lang:`${s} switcher tab="${m}" filename="${i}"`},key:n.raw})}})}return t},[]),Q=Object.keys(N).sort().join("-");return x.add(Q),e.createElement(w.Tabs,{type:"code",tabsData:N,insertStyles:!x.has(Q)||"useState"in e,blockKey:Q});case"code":const{lang:U,configuration:j}=s(r.lang);return e.createElement(w.CodeSection,{code:r.text,...j},e.createElement(w.CodeBlock,{className:o("r-code-section-block",!j.filename&&"_space-right"),code:r.text,lang:U}));case"escape":return r.text;case"list":if(r.items.every(e=>e.task)){const t=r.ordered?w.TaskOrderedList:w.TaskUnorderedList;return e.createElement(t,{start:r.start},r.items.map((t,n)=>e.createElement(w.TaskListItem,{key:t.raw+n,defaultChecked:t.checked},t.tokens?e.createElement(T,{token:t.tokens}):t.raw)))}const B=r.ordered?w.OrderedList:w.UnorderedList;return e.createElement(B,{start:r.start},r.items.map((t,n)=>e.createElement(w.ListItem,{key:t.raw+n},t.tokens?e.createElement(T,{token:t.tokens}):t.raw)));case"html":const D=r.raw.trim();if(D.startsWith("\x3c!---robin")&&D.endsWith("--\x3e")){const t=D.endsWith("/--\x3e"),r=D.match(/<!---robin ([\w]+)/)?.[1];if(!r)return t||(b={type:"dummy"}),null;if(!c(r))return console.warn(`"${r}" is using incorrect casing. Use PascalCase for Robin components`),t||(b={type:"dummy"}),null;if(!n||!(r in n))return console.warn(`Unknown component: "${r}"`),t||(b={type:"dummy"}),null;const a=D.split(/\r?\n/).slice(1,-1).reduce((e,t)=>{const[n,r,a]=t.match(/^([\w]+)(?:="(.+)")?$/)||[];return n?(e[r]=a??!0,e):(console.warn(`Invalid component attribute: "${t}"`),e)},{});if(t){const t=n[r];return e.createElement(t,{...a})}return b={props:a,componentName:r,childTokens:[],type:"base"},null}return e.createElement(p,{raw:r.raw,components:n,config:E,targetProvider:u,pathname:t,uri:a,pages:y,tags:w});case"text":return"tokens"in r?e.createElement(T,{token:r.tokens||[]}):r.raw;case"space":case"def":case"br":case"checkbox":return null;default:return!r.type&&"raw"in r?r.raw:(console.warn(`Unknown token ${r.type}`,r),null)}};return e.createElement(T,{token:[...d,{type:"text",raw:""}]})};export{d as Document};
1
+ import e from"react";import t,{Text as n,domToReact as r,attributesToProps as a}from"html-react-parser";import o from"clsx";import{parseCodeLang as s,validateComponentName as c,formatId as l,parseBlockqoute as i,formatLinkHref as m,parseMarkdown as u}from"./utils.js";import{DEFAULT_TAGS as k}from"./tags.js";const p=({raw:o,components:s,tags:l,...i})=>{const k={replace(t){if(t instanceof n&&t.data){const{headings:n,tokens:r}=u(t.data);return e.createElement(d,{headings:n,tokens:r,components:s,tags:l,subtree:!0,...i})}if(!("name"in t))return e.createElement(e.Fragment,null);if("a"===t.name&&"attribs"in t){const{href:n,external:o}=m(t.attribs.href,i.pathname,i.pages);return""===n?r(t.children,k):e.createElement(l.ContentLink,{...a(t.attribs),href:n,external:o},r(t.children,k))}if(!c(t.name))return t;if(!s||!(t.name in s))return console.warn(`Unknown component: "${t.name}"`),e.createElement(e.Fragment,null);const o="attribs"in t?a(t.attribs):{},p=s[t.name],h="children"in t?t.children:null;return e.createElement(p,{...o},h?r(h,k):null)},htmlparser2:{lowerCaseTags:!1,lowerCaseAttributeNames:!1}};return t(o,k)},d=({pathname:t,components:n,tags:r={},uri:a,targetProvider:u,tokens:d,headings:h,config:E={},subtree:g,pages:y})=>{const{publicDirs:f}=E,w={...k,...r};let b=null;const x=new Set,T=({token:r})=>{if(!r)return null;if(b){if(Array.isArray(r)||"html"!==r.type||"\x3c!---/robin--\x3e"!==r.raw.trim())return"dummy"===b.type||(Array.isArray(r)?b.childTokens.push(...r):b.childTokens.push(r)),null;{if("dummy"===b.type)return b=null,null;const{componentName:t,childTokens:r,props:a}=b,o=n[t];return b=null,e.createElement(o,{...a},e.createElement(T,{token:r}))}}if(Array.isArray(r))return r.reduce((t,n,r)=>{if("code"===n.type&&s(n.lang).configuration.switcher)return t.codeQueue.push(n),t;if(t.codeQueue.length>0&&"space"!==n.type){const n=t.codeQueue.map(e=>e.raw).join("");t.list.push(e.createElement(T,{token:{type:"code-group",tabs:t.codeQueue,raw:n},key:n+r})),t.codeQueue=[]}return t.list.push(e.createElement(T,{token:n,key:n.raw+r})),t},{list:[],codeQueue:[]}).list;switch(r.type){case"heading":const k=`h${r.depth}`,d=h.find(e=>e.token===r);return d?.id?e.createElement(w.AnchorHeading,{component:k,id:d.id},r.tokens?e.createElement(T,{token:r.tokens}):r.raw):e.createElement(w.Heading,{component:k,id:1===r.depth?"main-content":void 0},r.tokens?e.createElement(T,{token:r.tokens}):r.raw);case"table":return e.createElement(w.Block,null,e.createElement(w.Table,null,e.createElement(w.Thead,null,e.createElement(w.Tr,null,r.header.map((t,n)=>e.createElement(w.Th,{key:t.text+n,align:t.align},t.tokens?e.createElement(T,{token:t.tokens}):t.text)))),e.createElement(w.Tbody,null,r.rows.map((t,n)=>e.createElement(w.Tr,{key:n},t.map((t,n)=>e.createElement(w.Td,{key:t.text+n,align:t.align},t.tokens?e.createElement(T,{token:t.tokens}):t.text)))))));case"link":const{href:$,external:C}=m(r.href,t,y);return""===$?r.tokens?e.createElement(T,{token:r.tokens}):r.raw:e.createElement(w.ContentLink,{href:$,external:C},r.tokens?e.createElement(T,{token:r.tokens}):r.raw);case"hr":return e.createElement(w.Hr,null);case"image":return e.createElement(w.Img,{src:r.href,publicDirs:f,provider:u,uri:a,alt:r.title||""});case"paragraph":return g?r.tokens?e.createElement(T,{token:r.tokens}):r.raw:r.tokens?.some(e=>"html"===e.type)&&r.tokens?.every(e=>"html"===e.type||"text"===e.type||"\n"===e.raw)?e.createElement(T,{token:{...r,type:"html"}}):e.createElement(w.Paragraph,null,r.tokens?e.createElement(T,{token:r.tokens}):r.raw);case"strong":return e.createElement(w.Strong,null,r.tokens?e.createElement(T,{token:r.tokens}):r.raw);case"del":return e.createElement(w.Del,null,r.tokens?e.createElement(T,{token:r.tokens}):r.raw);case"em":return e.createElement(w.Em,null,r.tokens?e.createElement(T,{token:r.tokens}):r.raw);case"blockquote":const{token:A,type:L}=i(r);return e.createElement(w.Blockquote,{type:L},A.tokens?e.createElement(T,{token:A.tokens}):A.raw);case"codespan":const S=r.raw.replace(/^`|`$/g,""),v=S.match(/(.+){:([a-zA-Z]+)}$/);if(v){const[,t,n]=v;return e.createElement(w.CodeBlock,{code:t,lang:n,inline:!0})}return e.createElement(w.CodeSpan,null,S);case"code-group":const N=r.tabs.reduce((t,n)=>{const{lang:r,configuration:a}=s(n.lang||""),o="string"==typeof a.tab?l(a.tab):r;if(t[o]={tabName:(a.tab||r).toString(),element:e.createElement(T,{token:n,key:n.raw})},"string"==typeof a.clone){a.clone.split(",").forEach(o=>{const[s,c,i]=o.split("|"),m="string"==typeof c?l(c):s;t[m]={tabName:(a.tab||r).toString(),element:e.createElement(T,{token:{...n,lang:`${s} switcher tab="${m}" filename="${i}"`},key:n.raw})}})}return t},[]),Q=Object.keys(N).sort().join("-"),U=x.has(Q);return x.add(Q),e.createElement(w.Tabs,{type:"code",tabsData:N,insertStyles:!U||"useState"in e,blockKey:Q});case"code":const{lang:j,configuration:B}=s(r.lang);return e.createElement(w.CodeSection,{code:r.text,...B},e.createElement(w.CodeBlock,{className:o("r-code-section-block",!B.filename&&"_space-right"),code:r.text,lang:j}));case"escape":return r.text;case"list":if(r.items.every(e=>e.task)){const t=r.ordered?w.TaskOrderedList:w.TaskUnorderedList;return e.createElement(t,{start:r.start},r.items.map((t,n)=>e.createElement(w.TaskListItem,{key:t.raw+n,defaultChecked:t.checked},t.tokens?e.createElement(T,{token:t.tokens}):t.raw)))}const D=r.ordered?w.OrderedList:w.UnorderedList;return e.createElement(D,{start:r.start},r.items.map((t,n)=>e.createElement(w.ListItem,{key:t.raw+n},t.tokens?e.createElement(T,{token:t.tokens}):t.raw)));case"html":const I=r.raw.trim();if(I.startsWith("\x3c!---robin")&&I.endsWith("--\x3e")){const t=I.endsWith("/--\x3e"),r=I.match(/<!---robin ([\w]+)/)?.[1];if(!r)return t||(b={type:"dummy"}),null;if(!c(r))return console.warn(`"${r}" is using incorrect casing. Use PascalCase for Robin components`),t||(b={type:"dummy"}),null;if(!n||!(r in n))return console.warn(`Unknown component: "${r}"`),t||(b={type:"dummy"}),null;const a=I.split(/\r?\n/).slice(1,-1).reduce((e,t)=>{const[n,r,a]=t.match(/^([\w]+)(?:="(.+)")?$/)||[];return n?(e[r]=a??!0,e):(console.warn(`Invalid component attribute: "${t}"`),e)},{});if(t){const t=n[r];return e.createElement(t,{...a})}return b={props:a,componentName:r,childTokens:[],type:"base"},null}return e.createElement(p,{raw:r.raw,components:n,config:E,targetProvider:u,pathname:t,uri:a,pages:y,tags:w});case"text":return"tokens"in r?e.createElement(T,{token:r.tokens||[]}):r.raw;case"space":case"def":case"br":case"checkbox":return null;default:return!r.type&&"raw"in r?r.raw:(console.warn(`Unknown token ${r.type}`,r),null)}};return e.createElement(T,{token:[...d,{type:"text",raw:""}]})};export{d as Document};
2
2
  //# sourceMappingURL=document.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"document.js","sources":["../../../../src/components/elements/article/document.tsx"],"sourcesContent":["import { type Token, type Tokens, type TokensList } from \"marked\";\nimport { type BundledLanguage } from \"shiki\";\nimport React from \"react\";\nimport parse, {\n attributesToProps,\n domToReact,\n Text,\n type DOMNode,\n type HTMLReactParserOptions,\n} from \"html-react-parser\";\nimport clsx from \"clsx\";\n\nimport { type BaseProvider } from \"@src/core/providers/base\";\nimport { type Components, type RobinProps } from \"@src/core/types/content\";\n\nimport { type PagesType } from \"./types\";\nimport {\n formatId,\n formatLinkHref,\n parseBlockqoute,\n parseCodeLang,\n parseMarkdown,\n validateComponentName,\n type AnchorData,\n} from \"./utils\";\nimport { DEFAULT_TAGS } from \"./tags\";\nimport { TabsProps } from \"@src/components/ui/tabs\";\n\ninterface DocumentJSXProps extends Omit<DocumentProps, \"tokens\" | \"headings\"> {\n raw: string;\n pages?: PagesType;\n tags: typeof DEFAULT_TAGS;\n}\n\nconst DocumentJSX: React.FC<DocumentJSXProps> = ({ raw, components, tags: Tags, ...baseProps }) => {\n const parseOptions: HTMLReactParserOptions = {\n replace(domNode) {\n if (domNode instanceof Text && domNode.data) {\n const { headings, tokens } = parseMarkdown(domNode.data);\n\n return (\n <Document\n headings={headings}\n tokens={tokens}\n components={components}\n tags={Tags}\n subtree\n {...baseProps}\n />\n );\n }\n\n if (!(\"name\" in domNode)) return <></>;\n\n if (domNode.name === \"a\" && \"attribs\" in domNode) {\n const { href, external } = formatLinkHref(domNode.attribs.href, baseProps.pathname, baseProps.pages);\n\n if (href === \"\") return domToReact(domNode.children as DOMNode[], parseOptions);\n\n return (\n <Tags.ContentLink {...attributesToProps(domNode.attribs)} href={href} external={external}>\n {domToReact(domNode.children as DOMNode[], parseOptions)}\n </Tags.ContentLink>\n );\n }\n\n if (!validateComponentName(domNode.name)) return domNode;\n\n if (!components || !(domNode.name in components)) {\n console.warn(`Unknown component: \"${domNode.name}\"`);\n return <></>;\n }\n\n const props = \"attribs\" in domNode ? attributesToProps(domNode.attribs) : {};\n const Component = components[domNode.name];\n const children = \"children\" in domNode ? domNode.children : null;\n\n return (\n <Component {...props}>{children ? domToReact(children as DOMNode[], parseOptions) : null}</Component>\n );\n },\n htmlparser2: {\n lowerCaseTags: false,\n lowerCaseAttributeNames: false,\n },\n };\n return parse(raw, parseOptions);\n};\n\nexport type DocumentProps = {\n pathname: string;\n components?: Components;\n config?: {\n publicDirs?: string[];\n };\n uri?: string;\n targetProvider?: BaseProvider | null;\n tokens: TokensList;\n headings: AnchorData[];\n subtree?: boolean;\n pages?: PagesType;\n tags?: Partial<typeof DEFAULT_TAGS>;\n};\n\nexport const Document: React.FC<DocumentProps> = ({\n pathname,\n components,\n tags: userTags = {},\n uri,\n targetProvider,\n tokens,\n headings,\n config = {},\n subtree,\n pages,\n}) => {\n const { publicDirs } = config;\n const Tags = { ...DEFAULT_TAGS, ...userTags };\n\n let robin:\n | null\n | { props: RobinProps; childTokens: Token[]; componentName: string; type: \"base\" }\n | { type: \"dummy\" } = null;\n const insertedCodeKeys = new Set();\n const DocumentToken: React.FC<{ token: Token | Token[] }> = ({ token }) => {\n if (!token) return null;\n\n if (robin) {\n if (!Array.isArray(token) && token.type === \"html\" && token.raw.trim() === \"<!---/robin-->\") {\n if (robin.type === \"dummy\") {\n robin = null;\n return null;\n }\n\n const { componentName, childTokens, props } = robin;\n const RobinComponent = components![componentName];\n robin = null;\n return (\n <RobinComponent {...props}>\n <DocumentToken token={childTokens} />\n </RobinComponent>\n );\n } else {\n if (robin.type === \"dummy\") return null;\n\n if (Array.isArray(token)) {\n robin.childTokens.push(...token);\n } else {\n robin.childTokens.push(token);\n }\n return null;\n }\n }\n\n if (Array.isArray(token)) {\n return token.reduce<{ list: React.ReactNode[]; codeQueue: Token[] }>(\n (acc, t, index) => {\n if (t.type === \"code\" && parseCodeLang(t.lang).configuration.switcher) {\n acc.codeQueue.push(t);\n return acc;\n }\n if (acc.codeQueue.length > 0 && t.type !== \"space\") {\n const collectedRaw = acc.codeQueue.map((t) => t.raw).join(\"\");\n acc.list.push(\n <DocumentToken\n token={{ type: \"code-group\", tabs: acc.codeQueue, raw: collectedRaw }}\n key={collectedRaw + index}\n />,\n );\n acc.codeQueue = [];\n }\n acc.list.push(<DocumentToken token={t} key={(t as Tokens.Text).raw + index} />);\n return acc;\n },\n { list: [], codeQueue: [] },\n ).list;\n }\n\n switch (token.type) {\n case \"heading\":\n const Component = `h${token.depth}` as \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n const predefinedData = headings.find((heading) => heading.token === token);\n if (predefinedData?.id) {\n return (\n <Tags.AnchorHeading component={Component} id={predefinedData.id}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </Tags.AnchorHeading>\n );\n }\n\n return (\n <Tags.Heading component={Component} id={token.depth === 1 ? \"main-content\" : undefined}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </Tags.Heading>\n );\n case \"table\":\n return (\n <Tags.Block>\n <Tags.Table>\n <Tags.Thead>\n <Tags.Tr>\n {token.header.map((t: Tokens.TableCell, index: number) => (\n <Tags.Th key={t.text + index} align={t.align}>\n {t.tokens ? <DocumentToken token={t.tokens} /> : t.text}\n </Tags.Th>\n ))}\n </Tags.Tr>\n </Tags.Thead>\n <Tags.Tbody>\n {token.rows.map((row: Tokens.TableCell[], rowIndex: number) => (\n <Tags.Tr key={rowIndex}>\n {row.map((elem, elemIndex) => (\n <Tags.Td key={elem.text + elemIndex} align={elem.align}>\n {elem.tokens ? <DocumentToken token={elem.tokens} /> : elem.text}\n </Tags.Td>\n ))}\n </Tags.Tr>\n ))}\n </Tags.Tbody>\n </Tags.Table>\n </Tags.Block>\n );\n case \"link\":\n const { href, external } = formatLinkHref(token.href, pathname, pages);\n\n if (href === \"\") return token.tokens ? <DocumentToken token={token.tokens} /> : token.raw;\n\n return (\n <Tags.ContentLink href={href} external={external}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </Tags.ContentLink>\n );\n case \"hr\":\n return <Tags.Hr />;\n case \"image\":\n return (\n <Tags.Img\n src={token.href}\n publicDirs={publicDirs}\n provider={targetProvider}\n uri={uri}\n alt={token.title || \"\"}\n />\n );\n case \"paragraph\":\n if (subtree) return token.tokens ? <DocumentToken token={token.tokens} /> : token.raw;\n if (\n token.tokens?.some((t) => t.type === \"html\") &&\n token.tokens?.every((t) => t.type === \"html\" || t.type === \"text\" || t.raw === \"\\n\")\n ) {\n return <DocumentToken token={{ ...token, type: \"html\" }} />;\n }\n\n return (\n <Tags.Paragraph>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Tags.Paragraph>\n );\n case \"strong\":\n return <Tags.Strong>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Tags.Strong>;\n case \"del\":\n return <Tags.Del>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Tags.Del>;\n case \"em\":\n return <Tags.Em>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Tags.Em>;\n case \"blockquote\":\n const { token: blockquoteToken, type } = parseBlockqoute(token);\n\n return (\n <Tags.Blockquote type={type}>\n {blockquoteToken.tokens ? (\n <DocumentToken token={blockquoteToken.tokens} />\n ) : (\n blockquoteToken.raw\n )}\n </Tags.Blockquote>\n );\n case \"codespan\":\n const inlineCode = token.raw.replace(/^`|`$/g, \"\");\n const hightlightMatch = inlineCode.match(/(.+){:([a-zA-Z]+)}$/);\n if (hightlightMatch) {\n const [, raw, lang] = hightlightMatch;\n return <Tags.CodeBlock code={raw} lang={lang as BundledLanguage} inline />;\n }\n\n return <Tags.CodeSpan>{inlineCode}</Tags.CodeSpan>;\n case \"code-group\":\n const tabsData = token.tabs.reduce((acc: TabsProps[\"tabsData\"], t: Tokens.Code) => {\n const { lang, configuration } = parseCodeLang(t.lang || \"\");\n const tabKey = typeof configuration.tab === \"string\" ? formatId(configuration.tab) : lang;\n acc[tabKey] = {\n tabName: (configuration.tab || lang).toString(),\n element: <DocumentToken token={t} key={t.raw} />,\n };\n if (typeof configuration.clone === \"string\") {\n const copies = configuration.clone.split(\",\");\n\n copies.forEach((copy) => {\n const [copyLang, copyTab, filename] = copy.split(\"|\");\n const copyTabKey = typeof copyTab === \"string\" ? formatId(copyTab) : copyLang;\n acc[copyTabKey] = {\n tabName: (configuration.tab || lang).toString(),\n element: (\n <DocumentToken\n token={{\n ...t,\n lang: `${copyLang} switcher tab=\"${copyTabKey}\" filename=\"${filename}\"`,\n }}\n key={t.raw}\n />\n ),\n };\n });\n }\n return acc;\n }, []);\n const tabsKey = Object.keys(tabsData).sort().join(\"-\");\n insertedCodeKeys.add(tabsKey);\n return (\n <Tags.Tabs\n type=\"code\"\n tabsData={tabsData}\n insertStyles={!insertedCodeKeys.has(tabsKey) || \"useState\" in React}\n blockKey={tabsKey}\n />\n );\n case \"code\":\n const { lang, configuration } = parseCodeLang(token.lang);\n\n return (\n <Tags.CodeSection code={token.text} {...configuration}>\n <Tags.CodeBlock\n className={clsx(\"r-code-section-block\", !configuration.filename && \"_space-right\")}\n code={token.text}\n lang={lang as BundledLanguage}\n />\n </Tags.CodeSection>\n );\n case \"escape\":\n return token.text;\n case \"list\":\n const isTaskList = token.items.every((i: Tokens.ListItem) => i.task);\n if (isTaskList) {\n const ListComponent = token.ordered ? Tags.TaskOrderedList : Tags.TaskUnorderedList;\n return (\n <ListComponent start={token.start}>\n {token.items.map((elem: Tokens.ListItem, index: number) => (\n <Tags.TaskListItem key={elem.raw + index} defaultChecked={elem.checked}>\n {elem.tokens ? <DocumentToken token={elem.tokens} /> : elem.raw}\n </Tags.TaskListItem>\n ))}\n </ListComponent>\n );\n }\n\n const ListComponent = token.ordered ? Tags.OrderedList : Tags.UnorderedList;\n return (\n <ListComponent start={token.start}>\n {token.items.map((elem: Tokens.ListItem, index: number) => (\n <Tags.ListItem key={elem.raw + index}>\n {elem.tokens ? <DocumentToken token={elem.tokens} /> : elem.raw}\n </Tags.ListItem>\n ))}\n </ListComponent>\n );\n case \"html\":\n const text = token.raw.trim();\n\n if (text.startsWith(\"<!---robin\") && text.endsWith(\"-->\")) {\n const selfClosed = text.endsWith(\"/-->\");\n const componentName = text.match(/<!---robin ([\\w]+)/)?.[1];\n\n if (!componentName) {\n if (!selfClosed) robin = { type: \"dummy\" };\n return null;\n }\n\n if (!validateComponentName(componentName)) {\n console.warn(\n `\"${componentName}\" is using incorrect casing. Use PascalCase for Robin components`,\n );\n if (!selfClosed) robin = { type: \"dummy\" };\n return null;\n }\n\n if (!components || !(componentName in components)) {\n console.warn(`Unknown component: \"${componentName}\"`);\n if (!selfClosed) robin = { type: \"dummy\" };\n return null;\n }\n const propRows = text.split(/\\r?\\n/).slice(1, -1);\n const props = propRows.reduce<{ [key: string]: string | true }>((acc, cur) => {\n const [_match, key, value] = cur.match(/^([\\w]+)(?:=\"(.+)\")?$/) || [];\n\n if (!_match) {\n console.warn(`Invalid component attribute: \"${cur}\"`);\n return acc;\n }\n\n acc[key] = value ?? true;\n return acc;\n }, {});\n\n if (selfClosed) {\n const Component = components[componentName as keyof typeof components];\n return <Component {...props} />;\n }\n\n robin = { props, componentName, childTokens: [], type: \"base\" };\n return null;\n }\n\n return (\n <DocumentJSX\n raw={token.raw}\n components={components}\n config={config}\n targetProvider={targetProvider}\n pathname={pathname}\n uri={uri}\n pages={pages}\n tags={Tags}\n />\n );\n case \"text\":\n if (\"tokens\" in token) {\n return <DocumentToken token={token.tokens || []} />;\n }\n return token.raw;\n case \"space\":\n return null;\n // Definitions should not be rendered, they are used only as comments or meta data\n case \"def\":\n return null;\n // br are inserted between elements. In our case, sufficient indentation is set everywhere, so we ignore them\n case \"br\":\n return null;\n // checkbox are rendered as part of the task list item, so we ignore them\n case \"checkbox\":\n return null;\n default:\n if (!token.type && \"raw\" in token) return token.raw;\n\n console.warn(`Unknown token ${token.type}`, token);\n return null;\n }\n };\n\n return <DocumentToken token={[...tokens, { type: \"text\", raw: \"\" }]} />;\n};\n"],"names":["DocumentJSX","raw","components","tags","Tags","baseProps","parseOptions","replace","domNode","Text","data","headings","tokens","parseMarkdown","React","createElement","Document","subtree","name","href","external","formatLinkHref","attribs","pathname","pages","domToReact","children","ContentLink","attributesToProps","validateComponentName","console","warn","props","Component","htmlparser2","lowerCaseTags","lowerCaseAttributeNames","parse","userTags","uri","targetProvider","config","publicDirs","DEFAULT_TAGS","robin","insertedCodeKeys","Set","DocumentToken","token","Array","isArray","type","trim","childTokens","push","componentName","RobinComponent","reduce","acc","t","index","parseCodeLang","lang","configuration","switcher","codeQueue","length","collectedRaw","map","join","list","tabs","key","depth","predefinedData","find","heading","id","AnchorHeading","component","Heading","undefined","Block","Table","Thead","Tr","header","Th","text","align","Tbody","rows","row","rowIndex","elem","elemIndex","Td","Hr","Img","src","provider","alt","title","some","every","Paragraph","Strong","Del","Em","blockquoteToken","parseBlockqoute","Blockquote","inlineCode","hightlightMatch","match","CodeBlock","code","inline","CodeSpan","tabsData","tabKey","tab","formatId","tabName","toString","element","clone","split","forEach","copy","copyLang","copyTab","filename","copyTabKey","tabsKey","Object","keys","sort","add","Tabs","insertStyles","has","blockKey","CodeSection","className","clsx","items","i","task","ListComponent","ordered","TaskOrderedList","TaskUnorderedList","start","TaskListItem","defaultChecked","checked","OrderedList","UnorderedList","ListItem","startsWith","endsWith","selfClosed","slice","cur","_match","value"],"mappings":"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"}
1
+ {"version":3,"file":"document.js","sources":["../../../../src/components/elements/article/document.tsx"],"sourcesContent":["import { type Token, type Tokens, type TokensList } from \"marked\";\nimport { type BundledLanguage } from \"shiki\";\nimport React from \"react\";\nimport parse, {\n attributesToProps,\n domToReact,\n Text,\n type DOMNode,\n type HTMLReactParserOptions,\n} from \"html-react-parser\";\nimport clsx from \"clsx\";\n\nimport { type BaseProvider } from \"@src/core/providers/base\";\nimport { type Components, type RobinProps } from \"@src/core/types/content\";\n\nimport { type PagesType } from \"./types\";\nimport {\n formatId,\n formatLinkHref,\n parseBlockqoute,\n parseCodeLang,\n parseMarkdown,\n validateComponentName,\n type AnchorData,\n} from \"./utils\";\nimport { DEFAULT_TAGS } from \"./tags\";\nimport { TabsProps } from \"@src/components/ui/tabs\";\n\ninterface DocumentJSXProps extends Omit<DocumentProps, \"tokens\" | \"headings\"> {\n raw: string;\n pages?: PagesType;\n tags: typeof DEFAULT_TAGS;\n}\n\nconst DocumentJSX: React.FC<DocumentJSXProps> = ({ raw, components, tags: Tags, ...baseProps }) => {\n const parseOptions: HTMLReactParserOptions = {\n replace(domNode) {\n if (domNode instanceof Text && domNode.data) {\n const { headings, tokens } = parseMarkdown(domNode.data);\n\n return (\n <Document\n headings={headings}\n tokens={tokens}\n components={components}\n tags={Tags}\n subtree\n {...baseProps}\n />\n );\n }\n\n if (!(\"name\" in domNode)) return <></>;\n\n if (domNode.name === \"a\" && \"attribs\" in domNode) {\n const { href, external } = formatLinkHref(domNode.attribs.href, baseProps.pathname, baseProps.pages);\n\n if (href === \"\") return domToReact(domNode.children as DOMNode[], parseOptions);\n\n return (\n <Tags.ContentLink {...attributesToProps(domNode.attribs)} href={href} external={external}>\n {domToReact(domNode.children as DOMNode[], parseOptions)}\n </Tags.ContentLink>\n );\n }\n\n if (!validateComponentName(domNode.name)) return domNode;\n\n if (!components || !(domNode.name in components)) {\n console.warn(`Unknown component: \"${domNode.name}\"`);\n return <></>;\n }\n\n const props = \"attribs\" in domNode ? attributesToProps(domNode.attribs) : {};\n const Component = components[domNode.name];\n const children = \"children\" in domNode ? domNode.children : null;\n\n return (\n <Component {...props}>{children ? domToReact(children as DOMNode[], parseOptions) : null}</Component>\n );\n },\n htmlparser2: {\n lowerCaseTags: false,\n lowerCaseAttributeNames: false,\n },\n };\n return parse(raw, parseOptions);\n};\n\nexport type DocumentProps = {\n pathname: string;\n components?: Components;\n config?: {\n publicDirs?: string[];\n };\n uri?: string;\n targetProvider?: BaseProvider | null;\n tokens: TokensList;\n headings: AnchorData[];\n subtree?: boolean;\n pages?: PagesType;\n tags?: Partial<typeof DEFAULT_TAGS>;\n};\n\nexport const Document: React.FC<DocumentProps> = ({\n pathname,\n components,\n tags: userTags = {},\n uri,\n targetProvider,\n tokens,\n headings,\n config = {},\n subtree,\n pages,\n}) => {\n const { publicDirs } = config;\n const Tags = { ...DEFAULT_TAGS, ...userTags };\n\n let robin:\n | null\n | { props: RobinProps; childTokens: Token[]; componentName: string; type: \"base\" }\n | { type: \"dummy\" } = null;\n const insertedCodeKeys = new Set();\n const DocumentToken: React.FC<{ token: Token | Token[] }> = ({ token }) => {\n if (!token) return null;\n\n if (robin) {\n if (!Array.isArray(token) && token.type === \"html\" && token.raw.trim() === \"<!---/robin-->\") {\n if (robin.type === \"dummy\") {\n robin = null;\n return null;\n }\n\n const { componentName, childTokens, props } = robin;\n const RobinComponent = components![componentName];\n robin = null;\n return (\n <RobinComponent {...props}>\n <DocumentToken token={childTokens} />\n </RobinComponent>\n );\n } else {\n if (robin.type === \"dummy\") return null;\n\n if (Array.isArray(token)) {\n robin.childTokens.push(...token);\n } else {\n robin.childTokens.push(token);\n }\n return null;\n }\n }\n\n if (Array.isArray(token)) {\n return token.reduce<{ list: React.ReactNode[]; codeQueue: Token[] }>(\n (acc, t, index) => {\n if (t.type === \"code\" && parseCodeLang(t.lang).configuration.switcher) {\n acc.codeQueue.push(t);\n return acc;\n }\n if (acc.codeQueue.length > 0 && t.type !== \"space\") {\n const collectedRaw = acc.codeQueue.map((t) => t.raw).join(\"\");\n acc.list.push(\n <DocumentToken\n token={{ type: \"code-group\", tabs: acc.codeQueue, raw: collectedRaw }}\n key={collectedRaw + index}\n />,\n );\n acc.codeQueue = [];\n }\n acc.list.push(<DocumentToken token={t} key={(t as Tokens.Text).raw + index} />);\n return acc;\n },\n { list: [], codeQueue: [] },\n ).list;\n }\n\n switch (token.type) {\n case \"heading\":\n const Component = `h${token.depth}` as \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n const predefinedData = headings.find((heading) => heading.token === token);\n if (predefinedData?.id) {\n return (\n <Tags.AnchorHeading component={Component} id={predefinedData.id}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </Tags.AnchorHeading>\n );\n }\n\n return (\n <Tags.Heading component={Component} id={token.depth === 1 ? \"main-content\" : undefined}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </Tags.Heading>\n );\n case \"table\":\n return (\n <Tags.Block>\n <Tags.Table>\n <Tags.Thead>\n <Tags.Tr>\n {token.header.map((t: Tokens.TableCell, index: number) => (\n <Tags.Th key={t.text + index} align={t.align}>\n {t.tokens ? <DocumentToken token={t.tokens} /> : t.text}\n </Tags.Th>\n ))}\n </Tags.Tr>\n </Tags.Thead>\n <Tags.Tbody>\n {token.rows.map((row: Tokens.TableCell[], rowIndex: number) => (\n <Tags.Tr key={rowIndex}>\n {row.map((elem, elemIndex) => (\n <Tags.Td key={elem.text + elemIndex} align={elem.align}>\n {elem.tokens ? <DocumentToken token={elem.tokens} /> : elem.text}\n </Tags.Td>\n ))}\n </Tags.Tr>\n ))}\n </Tags.Tbody>\n </Tags.Table>\n </Tags.Block>\n );\n case \"link\":\n const { href, external } = formatLinkHref(token.href, pathname, pages);\n\n if (href === \"\") return token.tokens ? <DocumentToken token={token.tokens} /> : token.raw;\n\n return (\n <Tags.ContentLink href={href} external={external}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </Tags.ContentLink>\n );\n case \"hr\":\n return <Tags.Hr />;\n case \"image\":\n return (\n <Tags.Img\n src={token.href}\n publicDirs={publicDirs}\n provider={targetProvider}\n uri={uri}\n alt={token.title || \"\"}\n />\n );\n case \"paragraph\":\n if (subtree) return token.tokens ? <DocumentToken token={token.tokens} /> : token.raw;\n if (\n token.tokens?.some((t) => t.type === \"html\") &&\n token.tokens?.every((t) => t.type === \"html\" || t.type === \"text\" || t.raw === \"\\n\")\n ) {\n return <DocumentToken token={{ ...token, type: \"html\" }} />;\n }\n\n return (\n <Tags.Paragraph>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Tags.Paragraph>\n );\n case \"strong\":\n return <Tags.Strong>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Tags.Strong>;\n case \"del\":\n return <Tags.Del>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Tags.Del>;\n case \"em\":\n return <Tags.Em>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Tags.Em>;\n case \"blockquote\":\n const { token: blockquoteToken, type } = parseBlockqoute(token);\n\n return (\n <Tags.Blockquote type={type}>\n {blockquoteToken.tokens ? (\n <DocumentToken token={blockquoteToken.tokens} />\n ) : (\n blockquoteToken.raw\n )}\n </Tags.Blockquote>\n );\n case \"codespan\":\n const inlineCode = token.raw.replace(/^`|`$/g, \"\");\n const hightlightMatch = inlineCode.match(/(.+){:([a-zA-Z]+)}$/);\n if (hightlightMatch) {\n const [, raw, lang] = hightlightMatch;\n return <Tags.CodeBlock code={raw} lang={lang as BundledLanguage} inline />;\n }\n\n return <Tags.CodeSpan>{inlineCode}</Tags.CodeSpan>;\n case \"code-group\":\n const tabsData = token.tabs.reduce((acc: TabsProps[\"tabsData\"], t: Tokens.Code) => {\n const { lang, configuration } = parseCodeLang(t.lang || \"\");\n const tabKey = typeof configuration.tab === \"string\" ? formatId(configuration.tab) : lang;\n acc[tabKey] = {\n tabName: (configuration.tab || lang).toString(),\n element: <DocumentToken token={t} key={t.raw} />,\n };\n if (typeof configuration.clone === \"string\") {\n const copies = configuration.clone.split(\",\");\n\n copies.forEach((copy) => {\n const [copyLang, copyTab, filename] = copy.split(\"|\");\n const copyTabKey = typeof copyTab === \"string\" ? formatId(copyTab) : copyLang;\n acc[copyTabKey] = {\n tabName: (configuration.tab || lang).toString(),\n element: (\n <DocumentToken\n token={{\n ...t,\n lang: `${copyLang} switcher tab=\"${copyTabKey}\" filename=\"${filename}\"`,\n }}\n key={t.raw}\n />\n ),\n };\n });\n }\n return acc;\n }, []);\n const tabsKey = Object.keys(tabsData).sort().join(\"-\");\n const isInsertedBefore = insertedCodeKeys.has(tabsKey);\n insertedCodeKeys.add(tabsKey);\n return (\n <Tags.Tabs\n type=\"code\"\n tabsData={tabsData}\n insertStyles={!isInsertedBefore || \"useState\" in React}\n blockKey={tabsKey}\n />\n );\n case \"code\":\n const { lang, configuration } = parseCodeLang(token.lang);\n\n return (\n <Tags.CodeSection code={token.text} {...configuration}>\n <Tags.CodeBlock\n className={clsx(\"r-code-section-block\", !configuration.filename && \"_space-right\")}\n code={token.text}\n lang={lang as BundledLanguage}\n />\n </Tags.CodeSection>\n );\n case \"escape\":\n return token.text;\n case \"list\":\n const isTaskList = token.items.every((i: Tokens.ListItem) => i.task);\n if (isTaskList) {\n const ListComponent = token.ordered ? Tags.TaskOrderedList : Tags.TaskUnorderedList;\n return (\n <ListComponent start={token.start}>\n {token.items.map((elem: Tokens.ListItem, index: number) => (\n <Tags.TaskListItem key={elem.raw + index} defaultChecked={elem.checked}>\n {elem.tokens ? <DocumentToken token={elem.tokens} /> : elem.raw}\n </Tags.TaskListItem>\n ))}\n </ListComponent>\n );\n }\n\n const ListComponent = token.ordered ? Tags.OrderedList : Tags.UnorderedList;\n return (\n <ListComponent start={token.start}>\n {token.items.map((elem: Tokens.ListItem, index: number) => (\n <Tags.ListItem key={elem.raw + index}>\n {elem.tokens ? <DocumentToken token={elem.tokens} /> : elem.raw}\n </Tags.ListItem>\n ))}\n </ListComponent>\n );\n case \"html\":\n const text = token.raw.trim();\n\n if (text.startsWith(\"<!---robin\") && text.endsWith(\"-->\")) {\n const selfClosed = text.endsWith(\"/-->\");\n const componentName = text.match(/<!---robin ([\\w]+)/)?.[1];\n\n if (!componentName) {\n if (!selfClosed) robin = { type: \"dummy\" };\n return null;\n }\n\n if (!validateComponentName(componentName)) {\n console.warn(\n `\"${componentName}\" is using incorrect casing. Use PascalCase for Robin components`,\n );\n if (!selfClosed) robin = { type: \"dummy\" };\n return null;\n }\n\n if (!components || !(componentName in components)) {\n console.warn(`Unknown component: \"${componentName}\"`);\n if (!selfClosed) robin = { type: \"dummy\" };\n return null;\n }\n const propRows = text.split(/\\r?\\n/).slice(1, -1);\n const props = propRows.reduce<{ [key: string]: string | true }>((acc, cur) => {\n const [_match, key, value] = cur.match(/^([\\w]+)(?:=\"(.+)\")?$/) || [];\n\n if (!_match) {\n console.warn(`Invalid component attribute: \"${cur}\"`);\n return acc;\n }\n\n acc[key] = value ?? true;\n return acc;\n }, {});\n\n if (selfClosed) {\n const Component = components[componentName as keyof typeof components];\n return <Component {...props} />;\n }\n\n robin = { props, componentName, childTokens: [], type: \"base\" };\n return null;\n }\n\n return (\n <DocumentJSX\n raw={token.raw}\n components={components}\n config={config}\n targetProvider={targetProvider}\n pathname={pathname}\n uri={uri}\n pages={pages}\n tags={Tags}\n />\n );\n case \"text\":\n if (\"tokens\" in token) {\n return <DocumentToken token={token.tokens || []} />;\n }\n return token.raw;\n case \"space\":\n return null;\n // Definitions should not be rendered, they are used only as comments or meta data\n case \"def\":\n return null;\n // br are inserted between elements. In our case, sufficient indentation is set everywhere, so we ignore them\n case \"br\":\n return null;\n // checkbox are rendered as part of the task list item, so we ignore them\n case \"checkbox\":\n return null;\n default:\n if (!token.type && \"raw\" in token) return token.raw;\n\n console.warn(`Unknown token ${token.type}`, token);\n return null;\n }\n };\n\n return <DocumentToken token={[...tokens, { type: \"text\", raw: \"\" }]} />;\n};\n"],"names":["DocumentJSX","raw","components","tags","Tags","baseProps","parseOptions","replace","domNode","Text","data","headings","tokens","parseMarkdown","React","createElement","Document","subtree","name","href","external","formatLinkHref","attribs","pathname","pages","domToReact","children","ContentLink","attributesToProps","validateComponentName","console","warn","props","Component","htmlparser2","lowerCaseTags","lowerCaseAttributeNames","parse","userTags","uri","targetProvider","config","publicDirs","DEFAULT_TAGS","robin","insertedCodeKeys","Set","DocumentToken","token","Array","isArray","type","trim","childTokens","push","componentName","RobinComponent","reduce","acc","t","index","parseCodeLang","lang","configuration","switcher","codeQueue","length","collectedRaw","map","join","list","tabs","key","depth","predefinedData","find","heading","id","AnchorHeading","component","Heading","undefined","Block","Table","Thead","Tr","header","Th","text","align","Tbody","rows","row","rowIndex","elem","elemIndex","Td","Hr","Img","src","provider","alt","title","some","every","Paragraph","Strong","Del","Em","blockquoteToken","parseBlockqoute","Blockquote","inlineCode","hightlightMatch","match","CodeBlock","code","inline","CodeSpan","tabsData","tabKey","tab","formatId","tabName","toString","element","clone","split","forEach","copy","copyLang","copyTab","filename","copyTabKey","tabsKey","Object","keys","sort","isInsertedBefore","has","add","Tabs","insertStyles","blockKey","CodeSection","className","clsx","items","i","task","ListComponent","ordered","TaskOrderedList","TaskUnorderedList","start","TaskListItem","defaultChecked","checked","OrderedList","UnorderedList","ListItem","startsWith","endsWith","selfClosed","slice","cur","_match","value"],"mappings":"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"}