robindoc 0.0.0-experimental-abdf899 → 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,
|
|
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:!
|
|
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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"}
|
package/lib/styles.css
CHANGED
|
@@ -1491,6 +1491,9 @@
|
|
|
1491
1491
|
}
|
|
1492
1492
|
.r-contents-git:hover {
|
|
1493
1493
|
color: var(--r-main-900);
|
|
1494
|
+
}.r-last-modified {
|
|
1495
|
+
color: var(--r-main-700);
|
|
1496
|
+
margin-block-start: 16px;
|
|
1494
1497
|
}.r-breadcrumbs {
|
|
1495
1498
|
grid-area: breadcrumbs;
|
|
1496
1499
|
list-style: none;
|
|
@@ -1604,9 +1607,6 @@
|
|
|
1604
1607
|
|
|
1605
1608
|
.r-pagination-svg {
|
|
1606
1609
|
display: block;
|
|
1607
|
-
}.r-last-modified {
|
|
1608
|
-
color: var(--r-main-700);
|
|
1609
|
-
margin-block-start: 16px;
|
|
1610
1610
|
}.r-backdrop {
|
|
1611
1611
|
position: fixed;
|
|
1612
1612
|
top: 0;
|
|
@@ -1672,6 +1672,25 @@
|
|
|
1672
1672
|
min-width: 24px;
|
|
1673
1673
|
text-align: center;
|
|
1674
1674
|
box-sizing: border-box;
|
|
1675
|
+
}.r-anchor-heading:hover .r-anchor-heading-link {
|
|
1676
|
+
visibility: visible;
|
|
1677
|
+
opacity: 1;
|
|
1678
|
+
}
|
|
1679
|
+
|
|
1680
|
+
.r-anchor-heading-link {
|
|
1681
|
+
visibility: hidden;
|
|
1682
|
+
opacity: 0;
|
|
1683
|
+
transition: opacity 0.3s allow-discrete;
|
|
1684
|
+
padding-inline: 8px;
|
|
1685
|
+
margin-inline-start: -4px;
|
|
1686
|
+
color: var(--r-main-600);
|
|
1687
|
+
text-decoration: none;
|
|
1688
|
+
}
|
|
1689
|
+
.r-anchor-heading-link:hover {
|
|
1690
|
+
color: var(--r-primary-800);
|
|
1691
|
+
}
|
|
1692
|
+
.r-anchor-heading-link::after {
|
|
1693
|
+
content: "#";
|
|
1675
1694
|
}.r-code-section {
|
|
1676
1695
|
position: relative;
|
|
1677
1696
|
margin-block-start: 1.5em;
|
|
@@ -1723,25 +1742,6 @@
|
|
|
1723
1742
|
|
|
1724
1743
|
.r-code-section-filename {
|
|
1725
1744
|
font-family: var(--monospace-font, monospace, monospace);
|
|
1726
|
-
}.r-anchor-heading:hover .r-anchor-heading-link {
|
|
1727
|
-
visibility: visible;
|
|
1728
|
-
opacity: 1;
|
|
1729
|
-
}
|
|
1730
|
-
|
|
1731
|
-
.r-anchor-heading-link {
|
|
1732
|
-
visibility: hidden;
|
|
1733
|
-
opacity: 0;
|
|
1734
|
-
transition: opacity 0.3s allow-discrete;
|
|
1735
|
-
padding-inline: 8px;
|
|
1736
|
-
margin-inline-start: -4px;
|
|
1737
|
-
color: var(--r-main-600);
|
|
1738
|
-
text-decoration: none;
|
|
1739
|
-
}
|
|
1740
|
-
.r-anchor-heading-link:hover {
|
|
1741
|
-
color: var(--r-primary-800);
|
|
1742
|
-
}
|
|
1743
|
-
.r-anchor-heading-link::after {
|
|
1744
|
-
content: "#";
|
|
1745
1745
|
}.r-block {
|
|
1746
1746
|
position: relative;
|
|
1747
1747
|
width: 100%;
|
|
@@ -2017,6 +2017,10 @@
|
|
|
2017
2017
|
background-color: currentColor;
|
|
2018
2018
|
border-radius: 0 0 0 4px;
|
|
2019
2019
|
box-sizing: border-box;
|
|
2020
|
+
}.r-ol {
|
|
2021
|
+
padding-inline-start: 2rem;
|
|
2022
|
+
margin-block-start: 1em;
|
|
2023
|
+
margin-block-end: 1em;
|
|
2020
2024
|
}.r-li {
|
|
2021
2025
|
line-height: 1.8;
|
|
2022
2026
|
margin-block-start: 6px;
|
|
@@ -2028,10 +2032,6 @@
|
|
|
2028
2032
|
padding-inline-start: 20px;
|
|
2029
2033
|
margin-block-start: 6px;
|
|
2030
2034
|
margin-block-end: 6px;
|
|
2031
|
-
}.r-ol {
|
|
2032
|
-
padding-inline-start: 2rem;
|
|
2033
|
-
margin-block-start: 1em;
|
|
2034
|
-
margin-block-end: 1em;
|
|
2035
2035
|
}.r-ul {
|
|
2036
2036
|
padding-inline-start: 2rem;
|
|
2037
2037
|
margin-block-start: 1em;
|
|
@@ -2054,59 +2054,55 @@
|
|
|
2054
2054
|
z-index: -1;
|
|
2055
2055
|
border-radius: 8px;
|
|
2056
2056
|
border: 1px solid var(--r-main-200);
|
|
2057
|
-
}.r-
|
|
2057
|
+
}.r-td {
|
|
2058
2058
|
padding: 8px 12px;
|
|
2059
2059
|
border-collapse: collapse;
|
|
2060
|
-
background-color: var(--r-main-100);
|
|
2061
|
-
border-bottom: 1px solid var(--r-main-200);
|
|
2062
|
-
}
|
|
2063
|
-
.r-thead .r-th:first-child {
|
|
2064
|
-
border-top-left-radius: 6px;
|
|
2065
|
-
}
|
|
2066
|
-
.r-thead .r-th:last-child {
|
|
2067
|
-
border-top-right-radius: 6px;
|
|
2068
2060
|
}
|
|
2069
|
-
.r-
|
|
2061
|
+
.r-td:not(:last-child) {
|
|
2070
2062
|
border-right: 1px solid var(--r-main-200);
|
|
2071
2063
|
}
|
|
2072
2064
|
|
|
2073
|
-
.r-
|
|
2065
|
+
.r-td_left {
|
|
2074
2066
|
text-align: left;
|
|
2075
2067
|
}
|
|
2076
2068
|
|
|
2077
|
-
.r-
|
|
2069
|
+
.r-td_center {
|
|
2078
2070
|
text-align: center;
|
|
2079
2071
|
}
|
|
2080
2072
|
|
|
2081
|
-
.r-
|
|
2073
|
+
.r-td_right {
|
|
2082
2074
|
text-align: right;
|
|
2083
|
-
}.r-
|
|
2075
|
+
}.r-th {
|
|
2084
2076
|
padding: 8px 12px;
|
|
2085
2077
|
border-collapse: collapse;
|
|
2078
|
+
background-color: var(--r-main-100);
|
|
2079
|
+
border-bottom: 1px solid var(--r-main-200);
|
|
2086
2080
|
}
|
|
2087
|
-
.r-
|
|
2081
|
+
.r-thead .r-th:first-child {
|
|
2082
|
+
border-top-left-radius: 6px;
|
|
2083
|
+
}
|
|
2084
|
+
.r-thead .r-th:last-child {
|
|
2085
|
+
border-top-right-radius: 6px;
|
|
2086
|
+
}
|
|
2087
|
+
.r-th:not(:last-child) {
|
|
2088
2088
|
border-right: 1px solid var(--r-main-200);
|
|
2089
2089
|
}
|
|
2090
2090
|
|
|
2091
|
-
.r-
|
|
2091
|
+
.r-th_left {
|
|
2092
2092
|
text-align: left;
|
|
2093
2093
|
}
|
|
2094
2094
|
|
|
2095
|
-
.r-
|
|
2095
|
+
.r-th_center {
|
|
2096
2096
|
text-align: center;
|
|
2097
2097
|
}
|
|
2098
2098
|
|
|
2099
|
-
.r-
|
|
2099
|
+
.r-th_right {
|
|
2100
2100
|
text-align: right;
|
|
2101
2101
|
}.r-tr {
|
|
2102
2102
|
border-collapse: collapse;
|
|
2103
2103
|
}
|
|
2104
2104
|
.r-tr:not(:first-child) {
|
|
2105
2105
|
border-top: 1px solid var(--r-main-200);
|
|
2106
|
-
}.r-task-ol {
|
|
2107
|
-
list-style: none;
|
|
2108
|
-
}.r-task-ul {
|
|
2109
|
-
list-style: none;
|
|
2110
2106
|
}.r-task-li.r-task-li {
|
|
2111
2107
|
margin-block-start: 2px;
|
|
2112
2108
|
margin-block-end: 2px;
|
|
@@ -2136,6 +2132,10 @@
|
|
|
2136
2132
|
|
|
2137
2133
|
.r-task-label-text {
|
|
2138
2134
|
vertical-align: middle;
|
|
2135
|
+
}.r-task-ol {
|
|
2136
|
+
list-style: none;
|
|
2137
|
+
}.r-task-ul {
|
|
2138
|
+
list-style: none;
|
|
2139
2139
|
}.r-tooltip {
|
|
2140
2140
|
font-family: var(--monospace-font, monospace, monospace);
|
|
2141
2141
|
display: none;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "robindoc",
|
|
3
|
-
"version": "0.0.0-experimental-
|
|
3
|
+
"version": "0.0.0-experimental-b4da39d",
|
|
4
4
|
"description": "Robindoc is a framework for automatically creating documentation websites based on markdown files, built on React.js Server Components",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"scripts": {
|