robindoc 0.0.0-experimental-27006f2 → 0.0.0-experimental-36b79c8

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":"AAkBA,OAAO,EAAE,KAAK,YAAY,EAAE,qCAAiC;AAC7D,OAAO,EAAE,KAAK,UAAU,EAAmB,oCAAgC;AAE3E,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAClE,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAQH,KAAK,UAAU,EAClB,MAAM,SAAS,CAAC;AAEjB,UAAU,gBAAiB,SAAQ,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,UAAU,CAAC;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAyClD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB,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;CACrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAkU3C,CAAC"}
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../../src/components/elements/article/document.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAAE,KAAK,YAAY,EAAE,qCAAiC;AAC7D,OAAO,EAAE,KAAK,UAAU,EAAmB,oCAAgC;AAE3E,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAClE,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAQH,KAAK,UAAU,EAClB,MAAM,SAAS,CAAC;AAEjB,UAAU,gBAAiB,SAAQ,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,UAAU,CAAC;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAyClD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB,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;CACrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAsU3C,CAAC"}
@@ -1,2 +1,2 @@
1
- import{AnchorHeading as e}from"../../blocks/anchor-heading/index.js";import{CodeSection as t}from"../../blocks/code-section/index.js";import{NavContentLink as n}from"../../blocks/nav-content-link/index.js";import{Block as r}from"../../ui/block/index.js";import{Blockquote as o}from"../../ui/blockquote/index.js";import{CodeBlock as a}from"../../ui/code-block/index.js";import{CodeSpan as s}from"../../ui/code-span/index.js";import{Del as i}from"../../ui/del/index.js";import{Em as l}from"../../ui/em/index.js";import{Heading as m}from"../../ui/heading/index.js";import{Hr as c}from"../../ui/hr/index.js";import{Img as u}from"../../ui/img/index.js";import{ListItem as p}from"../../ui/list/list-item/index.js";import{OrderedList as d}from"../../ui/list/ordered-list/index.js";import{UnorderedList as k}from"../../ui/list/unordered-list/index.js";import{Paragraph as f}from"../../ui/paragraph/index.js";import{Strong as h}from"../../ui/strong/index.js";import{Table as E}from"../../ui/table/table/index.js";import{Tbody as x}from"../../ui/table/tbody/index.js";import{Td as y}from"../../ui/table/td/index.js";import{Th as g}from"../../ui/table/th/index.js";import{Thead as b}from"../../ui/table/thead/index.js";import{Tr as w}from"../../ui/table/tr/index.js";import{Tabs as j}from"../../ui/tabs/index.js";import{TaskListItem as $}from"../../ui/task-list/task-list-item/index.js";import{TaskOrderedList as v}from"../../ui/task-list/task-ordered-list/index.js";import{TaskUnorderedList as A}from"../../ui/task-list/task-unordered-list/index.js";import N,{Text as T,attributesToProps as C,domToReact as U}from"html-react-parser";import D from"react";import{isNewCodeToken as F,validateComponentName as P,parseCodeLang as S,formatId as W,parseBlockqoute as q,formatLinkHref as z,parseMarkdown as I}from"./utils.js";const K=({raw:e,components:t,...r})=>{const o={replace(e){if(e instanceof T&&e.data){const{headings:n,tokens:o}=I(e.data);return D.createElement(O,{headings:n,tokens:o,components:t,subtree:!0,...r})}if(!("name"in e))return D.createElement(D.Fragment,null);if("a"===e.name&&"attribs"in e){const{href:t,external:a}=z(e.attribs.href,r.pathname,r.pages);return D.createElement(n,{...C(e.attribs),href:t,external:a},U(e.children,o))}if(!P(e.name))return e;if(!t||!(e.name in t))return console.warn(`Unknown component: "${e.name}"`),D.createElement(D.Fragment,null);const a="attribs"in e?C(e.attribs):{},s=t[e.name],i="children"in e?e.children:null;return D.createElement(s,{...a},i?U(i,o):null)},htmlparser2:{lowerCaseTags:!1,lowerCaseAttributeNames:!1}};return N(e,o)},O=({pathname:N,components:T,uri:C,targetProvider:U,tokens:I,headings:O,config:R={},subtree:Z,pages:B})=>{const{publicDirs:G}=R;let H=null,J={};const L=[],M=({token:I})=>{if(!I)return null;if(F(I,J)){const e=J;J={};const t=Object.keys(e).sort().join("-"),n=L.includes(t);return n||L.push(t),D.createElement(D.Fragment,null,D.createElement(j,{type:"code",tabsData:e,insertStyles:!n,blockKey:t}),D.createElement(M,{token:I}))}if(H){if(Array.isArray(I)||"html"!==I.type||"\x3c!---/robin--\x3e"!==I.raw.trim())return"dummy"===H.type||(Array.isArray(I)?H.childTokens.push(...I):H.childTokens.push(I)),null;{if("dummy"===H.type)return H=null,null;const{componentName:e,childTokens:t,props:n}=H,r=T[e];return H=null,D.createElement(r,{...n},D.createElement(M,{token:t}))}}if(Array.isArray(I))return I.map((e,t)=>D.createElement(M,{token:e,key:e.raw+t}));switch(I.type){case"heading":const j=`h${I.depth}`,F=O.find(e=>e.token===I);return F?.id?D.createElement(e,{component:j,id:F.id},I.tokens?D.createElement(M,{token:I.tokens}):I.raw):D.createElement(m,{component:j,id:1===I.depth?"main-content":void 0},I.tokens?D.createElement(M,{token:I.tokens}):I.raw);case"table":return D.createElement(r,null,D.createElement(E,null,D.createElement(b,null,D.createElement(w,null,I.header.map((e,t)=>D.createElement(g,{key:e.text+t},e.tokens?D.createElement(M,{token:e.tokens}):e.text)))),D.createElement(x,null,I.rows.map((e,t)=>D.createElement(w,{key:t},e.map((e,t)=>D.createElement(y,{key:e.text+t},e.tokens?D.createElement(M,{token:e.tokens}):e.text)))))));case"link":const{href:L,external:Q}=z(I.href,N,B);return D.createElement(n,{href:L,external:Q},I.tokens?D.createElement(M,{token:I.tokens}):I.raw);case"space":case"def":return null;case"hr":return D.createElement(c,null);case"image":return D.createElement(u,{src:I.href,publicDirs:G,provider:U,uri:C,alt:I.title||""});case"paragraph":return Z?I.tokens?D.createElement(M,{token:I.tokens}):I.raw:I.tokens?.some(e=>"html"===e.type)&&I.tokens?.every(e=>"html"===e.type||"text"===e.type||"\n"===e.raw)?D.createElement(M,{token:{...I,type:"html"}}):D.createElement(f,null,I.tokens?D.createElement(M,{token:I.tokens}):I.raw);case"strong":return D.createElement(h,null,I.tokens?D.createElement(M,{token:I.tokens}):I.raw);case"del":return D.createElement(i,null,I.tokens?D.createElement(M,{token:I.tokens}):I.raw);case"em":return D.createElement(l,null,I.tokens?D.createElement(M,{token:I.tokens}):I.raw);case"blockquote":const{token:V,type:X}=q(I);return D.createElement(o,{type:X},V.tokens?D.createElement(M,{token:V.tokens}):V.raw);case"codespan":const Y=I.raw.replace(/^`|`$/g,""),_=Y.match(/(.+){:([a-zA-Z]+)}$/);if(_){const[,e,t]=_;return D.createElement(a,{code:e,lang:t,inline:!0})}return D.createElement(s,{code:Y});case"code":const{lang:ee,configuration:te}=S(I.lang);if(te.switcher&&ee){const e="string"==typeof te.tab?W(te.tab):ee;if(J[e]={tabName:(te.tab||ee).toString(),element:D.createElement(t,{lang:ee,code:I.text,...te})},"string"==typeof te.clone){te.clone.split(",").forEach(e=>{const[n,r,o]=e.split("|"),a="string"==typeof r?W(r):n;J[a]={tabName:(r||n).toString(),element:D.createElement(t,{lang:n,code:I.text,...te,filename:o||te.filename})}})}return null}return D.createElement(t,{lang:ee,code:I.text,...te});case"escape":return I.text;case"list":if(I.items.every(e=>e.task)){const e=I.ordered?v:A;return D.createElement(e,{start:I.start},I.items.map((e,t)=>{const n=1===e.tokens?.length&&"paragraph"===e.tokens[0].type?e.tokens[0].tokens:e.tokens;return D.createElement($,{key:e.raw+t,defaultChecked:e.checked},n?D.createElement(M,{token:n}):e.raw)}))}const ne=I.ordered?d:k;return D.createElement(ne,{start:I.start},I.items.map((e,t)=>{const n=1===e.tokens?.length&&"paragraph"===e.tokens[0].type?e.tokens[0].tokens:e.tokens;return D.createElement(p,{key:e.raw+t},n?D.createElement(M,{token:n}):e.raw)}));case"html":const re=I.raw.trim();if(re.startsWith("\x3c!---robin")&&re.endsWith("--\x3e")){const e=re.endsWith("/--\x3e"),t=re.match(/<!---robin ([\w]+)/)?.[1];if(!t)return e||(H={type:"dummy"}),null;if(!P(t))return console.warn(`"${t}" is using incorrect casing. Use PascalCase for Robin components`),e||(H={type:"dummy"}),null;if(!T||!(t in T))return console.warn(`Unknown component: "${t}"`),e||(H={type:"dummy"}),null;const n=re.split(/\r?\n/).slice(1,-1).reduce((e,t)=>{const[n,r,o]=t.match(/^([\w]+)(?:="(.+)")?$/)||[];return n?(e[r]=o??!0,e):(console.warn(`Invalid component attribute: "${t}"`),e)},{});if(e){const e=T[t];return D.createElement(e,{...n})}return H={props:n,componentName:t,childTokens:[],type:"base"},null}return D.createElement(K,{raw:I.raw,components:T,config:R,targetProvider:U,pathname:N,uri:C,pages:B});case"text":return"tokens"in I?D.createElement(M,{token:I.tokens||[]}):I.raw;default:return!I.type&&"raw"in I?I.raw:(console.warn(`Unknown token ${I.type}`,I),null)}};return I.push({type:"text",raw:""}),D.createElement(M,{token:I})};export{O as Document,K as DocumentJSX};
1
+ import{AnchorHeading as e}from"../../blocks/anchor-heading/index.js";import{CodeSection as t}from"../../blocks/code-section/index.js";import{NavContentLink as n}from"../../blocks/nav-content-link/index.js";import{Block as r}from"../../ui/block/index.js";import{Blockquote as o}from"../../ui/blockquote/index.js";import{CodeBlock as a}from"../../ui/code-block/index.js";import{CodeSpan as s}from"../../ui/code-span/index.js";import{Del as i}from"../../ui/del/index.js";import{Em as l}from"../../ui/em/index.js";import{Heading as m}from"../../ui/heading/index.js";import{Hr as c}from"../../ui/hr/index.js";import{Img as u}from"../../ui/img/index.js";import{ListItem as p}from"../../ui/list/list-item/index.js";import{OrderedList as d}from"../../ui/list/ordered-list/index.js";import{UnorderedList as k}from"../../ui/list/unordered-list/index.js";import{Paragraph as f}from"../../ui/paragraph/index.js";import{Strong as h}from"../../ui/strong/index.js";import{Table as E}from"../../ui/table/table/index.js";import{Tbody as x}from"../../ui/table/tbody/index.js";import{Td as y}from"../../ui/table/td/index.js";import{Th as b}from"../../ui/table/th/index.js";import{Thead as g}from"../../ui/table/thead/index.js";import{Tr as w}from"../../ui/table/tr/index.js";import{Tabs as j}from"../../ui/tabs/index.js";import{TaskListItem as $}from"../../ui/task-list/task-list-item/index.js";import{TaskOrderedList as v}from"../../ui/task-list/task-ordered-list/index.js";import{TaskUnorderedList as A}from"../../ui/task-list/task-unordered-list/index.js";import N,{Text as T,attributesToProps as C,domToReact as U}from"html-react-parser";import D from"react";import{isNewCodeToken as F,validateComponentName as P,parseCodeLang as S,formatId as W,parseBlockqoute as q,formatLinkHref as z,parseMarkdown as I}from"./utils.js";const K=({raw:e,components:t,...r})=>{const o={replace(e){if(e instanceof T&&e.data){const{headings:n,tokens:o}=I(e.data);return D.createElement(O,{headings:n,tokens:o,components:t,subtree:!0,...r})}if(!("name"in e))return D.createElement(D.Fragment,null);if("a"===e.name&&"attribs"in e){const{href:t,external:a}=z(e.attribs.href,r.pathname,r.pages);return D.createElement(n,{...C(e.attribs),href:t,external:a},U(e.children,o))}if(!P(e.name))return e;if(!t||!(e.name in t))return console.warn(`Unknown component: "${e.name}"`),D.createElement(D.Fragment,null);const a="attribs"in e?C(e.attribs):{},s=t[e.name],i="children"in e?e.children:null;return D.createElement(s,{...a},i?U(i,o):null)},htmlparser2:{lowerCaseTags:!1,lowerCaseAttributeNames:!1}};return N(e,o)},O=({pathname:N,components:T,uri:C,targetProvider:U,tokens:I,headings:O,config:R={},subtree:Z,pages:B})=>{const{publicDirs:G}=R;let H=null,J={};const L=[],M=({token:I})=>{if(!I)return null;if(F(I,J)){const e=J;J={};const t=Object.keys(e).sort().join("-"),n=L.includes(t);return n||L.push(t),D.createElement(D.Fragment,null,D.createElement(j,{type:"code",tabsData:e,insertStyles:!n,blockKey:t}),D.createElement(M,{token:I}))}if(H){if(Array.isArray(I)||"html"!==I.type||"\x3c!---/robin--\x3e"!==I.raw.trim())return"dummy"===H.type||(Array.isArray(I)?H.childTokens.push(...I):H.childTokens.push(I)),null;{if("dummy"===H.type)return H=null,null;const{componentName:e,childTokens:t,props:n}=H,r=T[e];return H=null,D.createElement(r,{...n},D.createElement(M,{token:t}))}}if(Array.isArray(I))return I.map((e,t)=>D.createElement(M,{token:e,key:e.raw+t}));switch(I.type){case"heading":const j=`h${I.depth}`,F=O.find(e=>e.token===I);return F?.id?D.createElement(e,{component:j,id:F.id},I.tokens?D.createElement(M,{token:I.tokens}):I.raw):D.createElement(m,{component:j,id:1===I.depth?"main-content":void 0},I.tokens?D.createElement(M,{token:I.tokens}):I.raw);case"table":return D.createElement(r,null,D.createElement(E,null,D.createElement(g,null,D.createElement(w,null,I.header.map((e,t)=>D.createElement(b,{key:e.text+t},e.tokens?D.createElement(M,{token:e.tokens}):e.text)))),D.createElement(x,null,I.rows.map((e,t)=>D.createElement(w,{key:t},e.map((e,t)=>D.createElement(y,{key:e.text+t},e.tokens?D.createElement(M,{token:e.tokens}):e.text)))))));case"link":const{href:L,external:Q}=z(I.href,N,B);return D.createElement(n,{href:L,external:Q},I.tokens?D.createElement(M,{token:I.tokens}):I.raw);case"space":case"def":case"br":return null;case"hr":return D.createElement(c,null);case"image":return D.createElement(u,{src:I.href,publicDirs:G,provider:U,uri:C,alt:I.title||""});case"paragraph":return Z?I.tokens?D.createElement(M,{token:I.tokens}):I.raw:I.tokens?.some(e=>"html"===e.type)&&I.tokens?.every(e=>"html"===e.type||"text"===e.type||"\n"===e.raw)?D.createElement(M,{token:{...I,type:"html"}}):D.createElement(f,null,I.tokens?D.createElement(M,{token:I.tokens}):I.raw);case"strong":return D.createElement(h,null,I.tokens?D.createElement(M,{token:I.tokens}):I.raw);case"del":return D.createElement(i,null,I.tokens?D.createElement(M,{token:I.tokens}):I.raw);case"em":return D.createElement(l,null,I.tokens?D.createElement(M,{token:I.tokens}):I.raw);case"blockquote":const{token:V,type:X}=q(I);return D.createElement(o,{type:X},V.tokens?D.createElement(M,{token:V.tokens}):V.raw);case"codespan":const Y=I.raw.replace(/^`|`$/g,""),_=Y.match(/(.+){:([a-zA-Z]+)}$/);if(_){const[,e,t]=_;return D.createElement(a,{code:e,lang:t,inline:!0})}return D.createElement(s,{code:Y});case"code":const{lang:ee,configuration:te}=S(I.lang);if(te.switcher&&ee){const e="string"==typeof te.tab?W(te.tab):ee;if(J[e]={tabName:(te.tab||ee).toString(),element:D.createElement(t,{lang:ee,code:I.text,...te})},"string"==typeof te.clone){te.clone.split(",").forEach(e=>{const[n,r,o]=e.split("|"),a="string"==typeof r?W(r):n;J[a]={tabName:(r||n).toString(),element:D.createElement(t,{lang:n,code:I.text,...te,filename:o||te.filename})}})}return null}return D.createElement(t,{lang:ee,code:I.text,...te});case"escape":return I.text;case"list":if(I.items.every(e=>e.task)){const e=I.ordered?v:A;return D.createElement(e,{start:I.start},I.items.map((e,t)=>{const n=1===e.tokens?.length&&"paragraph"===e.tokens[0].type?e.tokens[0].tokens:e.tokens;return D.createElement($,{key:e.raw+t,defaultChecked:e.checked},n?D.createElement(M,{token:n}):e.raw)}))}const ne=I.ordered?d:k;return D.createElement(ne,{start:I.start},I.items.map((e,t)=>{const n=1===e.tokens?.length&&"paragraph"===e.tokens[0].type?e.tokens[0].tokens:e.tokens;return D.createElement(p,{key:e.raw+t},n?D.createElement(M,{token:n}):e.raw)}));case"html":const re=I.raw.trim();if(re.startsWith("\x3c!---robin")&&re.endsWith("--\x3e")){const e=re.endsWith("/--\x3e"),t=re.match(/<!---robin ([\w]+)/)?.[1];if(!t)return e||(H={type:"dummy"}),null;if(!P(t))return console.warn(`"${t}" is using incorrect casing. Use PascalCase for Robin components`),e||(H={type:"dummy"}),null;if(!T||!(t in T))return console.warn(`Unknown component: "${t}"`),e||(H={type:"dummy"}),null;const n=re.split(/\r?\n/).slice(1,-1).reduce((e,t)=>{const[n,r,o]=t.match(/^([\w]+)(?:="(.+)")?$/)||[];return n?(e[r]=o??!0,e):(console.warn(`Invalid component attribute: "${t}"`),e)},{});if(e){const e=T[t];return D.createElement(e,{...n})}return H={props:n,componentName:t,childTokens:[],type:"base"},null}return D.createElement(K,{raw:I.raw,components:T,config:R,targetProvider:U,pathname:N,uri:C,pages:B});case"text":return"tokens"in I?D.createElement(M,{token:I.tokens||[]}):I.raw;default:return!I.type&&"raw"in I?I.raw:(console.warn(`Unknown token ${I.type}`,I),null)}};return I.push({type:"text",raw:""}),D.createElement(M,{token:I})};export{O as Document,K as DocumentJSX};
2
2
  //# sourceMappingURL=document.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"document.js","sources":["../../../../src/components/elements/article/document.tsx"],"sourcesContent":["import { AnchorHeading } from \"@src/components/blocks/anchor-heading\";\nimport { CodeSection } from \"@src/components/blocks/code-section\";\nimport { NavContentLink } from \"@src/components/blocks/nav-content-link\";\nimport { Block } from \"@src/components/ui/block\";\nimport { Blockquote } from \"@src/components/ui/blockquote\";\nimport { CodeBlock } from \"@src/components/ui/code-block\";\nimport { CodeSpan } from \"@src/components/ui/code-span\";\nimport { Del } from \"@src/components/ui/del\";\nimport { Em } from \"@src/components/ui/em\";\nimport { Heading } from \"@src/components/ui/heading\";\nimport { Hr } from \"@src/components/ui/hr\";\nimport { Img } from \"@src/components/ui/img\";\nimport { ListItem, OrderedList, UnorderedList } from \"@src/components/ui/list\";\nimport { Paragraph } from \"@src/components/ui/paragraph\";\nimport { Strong } from \"@src/components/ui/strong\";\nimport { Table, Tbody, Td, Th, Thead, Tr } from \"@src/components/ui/table\";\nimport { Tabs } from \"@src/components/ui/tabs\";\nimport { TaskListItem, TaskOrderedList, TaskUnorderedList } from \"@src/components/ui/task-list\";\nimport { type BaseProvider } from \"@src/core/providers/base\";\nimport { type Components, type RobinProps } from \"@src/core/types/content\";\nimport parse, { attributesToProps, DOMNode, domToReact, HTMLReactParserOptions, Text } from \"html-react-parser\";\nimport { type Token, type Tokens, type TokensList } from \"marked\";\nimport React from \"react\";\nimport { type BundledLanguage } from \"shiki\";\n\nimport { type PagesType } from \"./types\";\nimport {\n formatId,\n formatLinkHref,\n isNewCodeToken,\n parseBlockqoute,\n parseCodeLang,\n parseMarkdown,\n validateComponentName,\n type AnchorData,\n} from \"./utils\";\n\ninterface DocumentJSXProps extends Omit<ContentProps, \"tokens\" | \"headings\"> {\n raw: string;\n pages?: PagesType;\n}\n\nexport const DocumentJSX: React.FC<DocumentJSXProps> = ({ raw, components, ...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 <Document headings={headings} tokens={tokens} components={components} subtree {...baseProps} />;\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 return (\n <NavContentLink {...attributesToProps(domNode.attribs)} href={href} external={external}>\n {domToReact(domNode.children as DOMNode[], parseOptions)}\n </NavContentLink>\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 ContentProps = {\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};\n\nexport const Document: React.FC<ContentProps> = ({\n pathname,\n components,\n uri,\n targetProvider,\n tokens,\n headings,\n config = {},\n subtree,\n pages,\n}) => {\n const { publicDirs } = config;\n\n let robin:\n | null\n | { props: RobinProps; childTokens: Token[]; componentName: string; type: \"base\" }\n | { type: \"dummy\" } = null;\n let codeQueue: { [lang: string]: { element: React.ReactNode; tabName: string } } = {};\n const insertedCodeKeys: string[] = [];\n const DocumentToken: React.FC<{ token: Token | Token[] }> = ({ token }) => {\n if (!token) return null;\n\n if (isNewCodeToken(token, codeQueue)) {\n const tabsData = codeQueue;\n codeQueue = {};\n const tabsKey = Object.keys(tabsData).sort().join(\"-\");\n const isInsertedKey = insertedCodeKeys.includes(tabsKey);\n if (!isInsertedKey) insertedCodeKeys.push(tabsKey);\n\n return (\n <>\n <Tabs type=\"code\" tabsData={tabsData} insertStyles={!isInsertedKey} blockKey={tabsKey} />\n <DocumentToken token={token} />\n </>\n );\n }\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.map((t, index) => <DocumentToken token={t} key={(t as Tokens.Text).raw + index} />);\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 <AnchorHeading component={Component} id={predefinedData.id}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </AnchorHeading>\n );\n } else {\n return (\n <Heading component={Component} id={token.depth === 1 ? \"main-content\" : undefined}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </Heading>\n );\n }\n case \"table\":\n return (\n <Block>\n <Table>\n <Thead>\n <Tr>\n {token.header.map((t: Tokens.Text, index: number) => (\n <Th key={t.text + index}>\n {t.tokens ? <DocumentToken token={t.tokens} /> : t.text}\n </Th>\n ))}\n </Tr>\n </Thead>\n <Tbody>\n {token.rows.map((row: Tokens.Text[], rowIndex: number) => (\n <Tr key={rowIndex}>\n {row.map((elem, elemIndex) => (\n <Td key={elem.text + elemIndex}>\n {elem.tokens ? <DocumentToken token={elem.tokens} /> : elem.text}\n </Td>\n ))}\n </Tr>\n ))}\n </Tbody>\n </Table>\n </Block>\n );\n case \"link\":\n const { href, external } = formatLinkHref(token.href, pathname, pages);\n\n return (\n <NavContentLink href={href} external={external}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </NavContentLink>\n );\n case \"space\":\n return null;\n case \"hr\":\n return <Hr />;\n case \"image\":\n return (\n <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 <Paragraph>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Paragraph>;\n case \"strong\":\n return <Strong>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Strong>;\n case \"del\":\n return <Del>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Del>;\n case \"em\":\n return <Em>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Em>;\n case \"blockquote\":\n const { token: blockquoteToken, type } = parseBlockqoute(token);\n\n return (\n <Blockquote type={type}>\n {blockquoteToken.tokens ? (\n <DocumentToken token={blockquoteToken.tokens} />\n ) : (\n blockquoteToken.raw\n )}\n </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 <CodeBlock code={raw} lang={lang as BundledLanguage} inline />;\n }\n\n return <CodeSpan code={inlineCode} />;\n case \"code\":\n const { lang, configuration } = parseCodeLang(token.lang);\n if (configuration.switcher && lang) {\n const tabKey = typeof configuration.tab === \"string\" ? formatId(configuration.tab) : lang;\n codeQueue[tabKey] = {\n tabName: (configuration.tab || lang).toString(),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element: <CodeSection lang={lang as any} code={token.text} {...configuration} />,\n };\n\n if (typeof configuration.clone === \"string\") {\n const copies = configuration.clone.split(\",\");\n\n copies.forEach((copy) => {\n const [copyLang, copyTab, copyFileName] = copy.split(\"|\");\n const copyTabKey = typeof copyTab === \"string\" ? formatId(copyTab) : copyLang;\n\n codeQueue[copyTabKey] = {\n tabName: (copyTab || copyLang).toString(),\n element: (\n <CodeSection\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lang={copyLang as any}\n code={token.text}\n {...configuration}\n filename={copyFileName || (configuration.filename as string)}\n />\n ),\n };\n });\n }\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return <CodeSection lang={lang as any} code={token.text} {...configuration} />;\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 ? TaskOrderedList : TaskUnorderedList;\n return (\n <ListComponent start={token.start}>\n {token.items.map((elem: Tokens.ListItem, index: number) => {\n const childTokens =\n elem.tokens?.length === 1 && elem.tokens[0].type === \"paragraph\"\n ? elem.tokens[0].tokens\n : elem.tokens;\n\n return (\n <TaskListItem key={elem.raw + index} defaultChecked={elem.checked}>\n {childTokens ? <DocumentToken token={childTokens} /> : elem.raw}\n </TaskListItem>\n );\n })}\n </ListComponent>\n );\n }\n\n const ListComponent = token.ordered ? OrderedList : UnorderedList;\n return (\n <ListComponent start={token.start}>\n {token.items.map((elem: Tokens.ListItem, index: number) => {\n const childTokens =\n elem.tokens?.length === 1 && elem.tokens[0].type === \"paragraph\"\n ? elem.tokens[0].tokens\n : elem.tokens;\n return (\n <ListItem key={elem.raw + index}>\n {childTokens ? <DocumentToken token={childTokens} /> : elem.raw}\n </ListItem>\n );\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 />\n );\n case \"text\":\n if (\"tokens\" in token) {\n return <DocumentToken token={token.tokens || []} />;\n }\n return token.raw;\n case \"def\":\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 tokens.push({ type: \"text\", raw: \"\" });\n return <DocumentToken token={tokens} />;\n};\n"],"names":["DocumentJSX","raw","components","baseProps","parseOptions","replace","domNode","Text","data","headings","tokens","parseMarkdown","React","Document","subtree","name","href","external","formatLinkHref","attribs","pathname","pages","createElement","NavContentLink","attributesToProps","domToReact","children","validateComponentName","console","warn","props","Component","htmlparser2","lowerCaseTags","lowerCaseAttributeNames","parse","uri","targetProvider","config","publicDirs","robin","codeQueue","insertedCodeKeys","DocumentToken","token","isNewCodeToken","tabsData","tabsKey","Object","keys","sort","join","isInsertedKey","includes","push","Fragment","Tabs","type","insertStyles","blockKey","Array","isArray","trim","childTokens","componentName","RobinComponent","map","t","index","key","depth","predefinedData","find","heading","id","AnchorHeading","component","Heading","undefined","Block","Table","Thead","Tr","header","Th","text","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","lang","CodeBlock","code","inline","CodeSpan","configuration","parseCodeLang","switcher","tabKey","tab","formatId","tabName","toString","element","CodeSection","clone","split","forEach","copy","copyLang","copyTab","copyFileName","copyTabKey","filename","items","i","task","ListComponent","ordered","TaskOrderedList","TaskUnorderedList","start","length","TaskListItem","defaultChecked","checked","OrderedList","UnorderedList","ListItem","startsWith","endsWith","selfClosed","slice","reduce","acc","cur","_match","value"],"mappings":"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"}
1
+ {"version":3,"file":"document.js","sources":["../../../../src/components/elements/article/document.tsx"],"sourcesContent":["import { AnchorHeading } from \"@src/components/blocks/anchor-heading\";\nimport { CodeSection } from \"@src/components/blocks/code-section\";\nimport { NavContentLink } from \"@src/components/blocks/nav-content-link\";\nimport { Block } from \"@src/components/ui/block\";\nimport { Blockquote } from \"@src/components/ui/blockquote\";\nimport { CodeBlock } from \"@src/components/ui/code-block\";\nimport { CodeSpan } from \"@src/components/ui/code-span\";\nimport { Del } from \"@src/components/ui/del\";\nimport { Em } from \"@src/components/ui/em\";\nimport { Heading } from \"@src/components/ui/heading\";\nimport { Hr } from \"@src/components/ui/hr\";\nimport { Img } from \"@src/components/ui/img\";\nimport { ListItem, OrderedList, UnorderedList } from \"@src/components/ui/list\";\nimport { Paragraph } from \"@src/components/ui/paragraph\";\nimport { Strong } from \"@src/components/ui/strong\";\nimport { Table, Tbody, Td, Th, Thead, Tr } from \"@src/components/ui/table\";\nimport { Tabs } from \"@src/components/ui/tabs\";\nimport { TaskListItem, TaskOrderedList, TaskUnorderedList } from \"@src/components/ui/task-list\";\nimport { type BaseProvider } from \"@src/core/providers/base\";\nimport { type Components, type RobinProps } from \"@src/core/types/content\";\nimport parse, { attributesToProps, DOMNode, domToReact, HTMLReactParserOptions, Text } from \"html-react-parser\";\nimport { type Token, type Tokens, type TokensList } from \"marked\";\nimport React from \"react\";\nimport { type BundledLanguage } from \"shiki\";\n\nimport { type PagesType } from \"./types\";\nimport {\n formatId,\n formatLinkHref,\n isNewCodeToken,\n parseBlockqoute,\n parseCodeLang,\n parseMarkdown,\n validateComponentName,\n type AnchorData,\n} from \"./utils\";\n\ninterface DocumentJSXProps extends Omit<ContentProps, \"tokens\" | \"headings\"> {\n raw: string;\n pages?: PagesType;\n}\n\nexport const DocumentJSX: React.FC<DocumentJSXProps> = ({ raw, components, ...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 <Document headings={headings} tokens={tokens} components={components} subtree {...baseProps} />;\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 return (\n <NavContentLink {...attributesToProps(domNode.attribs)} href={href} external={external}>\n {domToReact(domNode.children as DOMNode[], parseOptions)}\n </NavContentLink>\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 ContentProps = {\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};\n\nexport const Document: React.FC<ContentProps> = ({\n pathname,\n components,\n uri,\n targetProvider,\n tokens,\n headings,\n config = {},\n subtree,\n pages,\n}) => {\n const { publicDirs } = config;\n\n let robin:\n | null\n | { props: RobinProps; childTokens: Token[]; componentName: string; type: \"base\" }\n | { type: \"dummy\" } = null;\n let codeQueue: { [lang: string]: { element: React.ReactNode; tabName: string } } = {};\n const insertedCodeKeys: string[] = [];\n const DocumentToken: React.FC<{ token: Token | Token[] }> = ({ token }) => {\n if (!token) return null;\n\n if (isNewCodeToken(token, codeQueue)) {\n const tabsData = codeQueue;\n codeQueue = {};\n const tabsKey = Object.keys(tabsData).sort().join(\"-\");\n const isInsertedKey = insertedCodeKeys.includes(tabsKey);\n if (!isInsertedKey) insertedCodeKeys.push(tabsKey);\n\n return (\n <>\n <Tabs type=\"code\" tabsData={tabsData} insertStyles={!isInsertedKey} blockKey={tabsKey} />\n <DocumentToken token={token} />\n </>\n );\n }\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.map((t, index) => <DocumentToken token={t} key={(t as Tokens.Text).raw + index} />);\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 <AnchorHeading component={Component} id={predefinedData.id}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </AnchorHeading>\n );\n } else {\n return (\n <Heading component={Component} id={token.depth === 1 ? \"main-content\" : undefined}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </Heading>\n );\n }\n case \"table\":\n return (\n <Block>\n <Table>\n <Thead>\n <Tr>\n {token.header.map((t: Tokens.Text, index: number) => (\n <Th key={t.text + index}>\n {t.tokens ? <DocumentToken token={t.tokens} /> : t.text}\n </Th>\n ))}\n </Tr>\n </Thead>\n <Tbody>\n {token.rows.map((row: Tokens.Text[], rowIndex: number) => (\n <Tr key={rowIndex}>\n {row.map((elem, elemIndex) => (\n <Td key={elem.text + elemIndex}>\n {elem.tokens ? <DocumentToken token={elem.tokens} /> : elem.text}\n </Td>\n ))}\n </Tr>\n ))}\n </Tbody>\n </Table>\n </Block>\n );\n case \"link\":\n const { href, external } = formatLinkHref(token.href, pathname, pages);\n\n return (\n <NavContentLink href={href} external={external}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </NavContentLink>\n );\n case \"space\":\n return null;\n case \"hr\":\n return <Hr />;\n case \"image\":\n return (\n <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 <Paragraph>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Paragraph>;\n case \"strong\":\n return <Strong>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Strong>;\n case \"del\":\n return <Del>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Del>;\n case \"em\":\n return <Em>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Em>;\n case \"blockquote\":\n const { token: blockquoteToken, type } = parseBlockqoute(token);\n\n return (\n <Blockquote type={type}>\n {blockquoteToken.tokens ? (\n <DocumentToken token={blockquoteToken.tokens} />\n ) : (\n blockquoteToken.raw\n )}\n </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 <CodeBlock code={raw} lang={lang as BundledLanguage} inline />;\n }\n\n return <CodeSpan code={inlineCode} />;\n case \"code\":\n const { lang, configuration } = parseCodeLang(token.lang);\n if (configuration.switcher && lang) {\n const tabKey = typeof configuration.tab === \"string\" ? formatId(configuration.tab) : lang;\n codeQueue[tabKey] = {\n tabName: (configuration.tab || lang).toString(),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element: <CodeSection lang={lang as any} code={token.text} {...configuration} />,\n };\n\n if (typeof configuration.clone === \"string\") {\n const copies = configuration.clone.split(\",\");\n\n copies.forEach((copy) => {\n const [copyLang, copyTab, copyFileName] = copy.split(\"|\");\n const copyTabKey = typeof copyTab === \"string\" ? formatId(copyTab) : copyLang;\n\n codeQueue[copyTabKey] = {\n tabName: (copyTab || copyLang).toString(),\n element: (\n <CodeSection\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lang={copyLang as any}\n code={token.text}\n {...configuration}\n filename={copyFileName || (configuration.filename as string)}\n />\n ),\n };\n });\n }\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return <CodeSection lang={lang as any} code={token.text} {...configuration} />;\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 ? TaskOrderedList : TaskUnorderedList;\n return (\n <ListComponent start={token.start}>\n {token.items.map((elem: Tokens.ListItem, index: number) => {\n const childTokens =\n elem.tokens?.length === 1 && elem.tokens[0].type === \"paragraph\"\n ? elem.tokens[0].tokens\n : elem.tokens;\n\n return (\n <TaskListItem key={elem.raw + index} defaultChecked={elem.checked}>\n {childTokens ? <DocumentToken token={childTokens} /> : elem.raw}\n </TaskListItem>\n );\n })}\n </ListComponent>\n );\n }\n\n const ListComponent = token.ordered ? OrderedList : UnorderedList;\n return (\n <ListComponent start={token.start}>\n {token.items.map((elem: Tokens.ListItem, index: number) => {\n const childTokens =\n elem.tokens?.length === 1 && elem.tokens[0].type === \"paragraph\"\n ? elem.tokens[0].tokens\n : elem.tokens;\n return (\n <ListItem key={elem.raw + index}>\n {childTokens ? <DocumentToken token={childTokens} /> : elem.raw}\n </ListItem>\n );\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 />\n );\n case \"text\":\n if (\"tokens\" in token) {\n return <DocumentToken token={token.tokens || []} />;\n }\n return token.raw;\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 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 tokens.push({ type: \"text\", raw: \"\" });\n return <DocumentToken token={tokens} />;\n};\n"],"names":["DocumentJSX","raw","components","baseProps","parseOptions","replace","domNode","Text","data","headings","tokens","parseMarkdown","React","Document","subtree","name","href","external","formatLinkHref","attribs","pathname","pages","createElement","NavContentLink","attributesToProps","domToReact","children","validateComponentName","console","warn","props","Component","htmlparser2","lowerCaseTags","lowerCaseAttributeNames","parse","uri","targetProvider","config","publicDirs","robin","codeQueue","insertedCodeKeys","DocumentToken","token","isNewCodeToken","tabsData","tabsKey","Object","keys","sort","join","isInsertedKey","includes","push","Fragment","Tabs","type","insertStyles","blockKey","Array","isArray","trim","childTokens","componentName","RobinComponent","map","t","index","key","depth","predefinedData","find","heading","id","AnchorHeading","component","Heading","undefined","Block","Table","Thead","Tr","header","Th","text","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","lang","CodeBlock","code","inline","CodeSpan","configuration","parseCodeLang","switcher","tabKey","tab","formatId","tabName","toString","element","CodeSection","clone","split","forEach","copy","copyLang","copyTab","copyFileName","copyTabKey","filename","items","i","task","ListComponent","ordered","TaskOrderedList","TaskUnorderedList","start","length","TaskListItem","defaultChecked","checked","OrderedList","UnorderedList","ListItem","startsWith","endsWith","selfClosed","slice","reduce","acc","cur","_match","value"],"mappings":"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"}
package/lib/styles.css CHANGED
@@ -1,4 +1,93 @@
1
- .r-footer {
1
+ .r-header {
2
+ position: sticky;
3
+ background-color: var(--r-body);
4
+ top: 0;
5
+ border-bottom: 1px solid var(--r-neutral-300);
6
+ height: 60px;
7
+ z-index: 1000;
8
+ box-sizing: border-box;
9
+ }
10
+
11
+ .r-header-body {
12
+ height: 100%;
13
+ display: flex;
14
+ justify-content: space-between;
15
+ align-items: center;
16
+ gap: 24px;
17
+ box-sizing: border-box;
18
+ }
19
+
20
+ .r-header-logo {
21
+ display: block;
22
+ margin-right: 24px;
23
+ color: var(--r-neutral-700);
24
+ transition: color 0.2s;
25
+ box-sizing: border-box;
26
+ }
27
+ .r-header-logo:hover, .r-header-logo:focus {
28
+ color: var(--r-neutral-950);
29
+ }
30
+
31
+ .r-header-nav {
32
+ display: flex;
33
+ flex-direction: column;
34
+ gap: 12px 16px;
35
+ }
36
+ @media screen and (width >= 1024px) {
37
+ .r-header-nav {
38
+ flex-direction: row;
39
+ }
40
+ }
41
+
42
+ .r-header-link {
43
+ color: var(--r-neutral-600);
44
+ text-decoration: none;
45
+ padding: 4px 0;
46
+ transition: color 0.2s;
47
+ box-sizing: border-box;
48
+ }
49
+ .r-header-link:hover, .r-header-link:focus-visible {
50
+ color: var(--r-neutral-950);
51
+ }
52
+
53
+ .r-header-link._target {
54
+ color: var(--r-primary-800);
55
+ }
56
+ .r-header-link._target:hover, .r-header-link._target:focus-visible {
57
+ color: var(--r-primary-700);
58
+ }
59
+
60
+ .r-header-actions {
61
+ display: flex;
62
+ flex-direction: column-reverse;
63
+ gap: 16px;
64
+ align-items: stretch;
65
+ }
66
+ @media screen and (width >= 1024px) {
67
+ .r-header-actions {
68
+ flex-direction: row;
69
+ align-items: center;
70
+ gap: 28px;
71
+ }
72
+ }
73
+
74
+ .r-header-sections {
75
+ display: flex;
76
+ align-items: center;
77
+ gap: 12px;
78
+ }
79
+ @media screen and (width < 768px) {
80
+ .r-header-sections .r-dropdown {
81
+ flex: 1;
82
+ }
83
+ }
84
+ @media screen and (width < 768px) {
85
+ .r-header-sections .r-dropdown-drop {
86
+ max-width: none;
87
+ width: 100%;
88
+ left: 0;
89
+ }
90
+ }.r-footer {
2
91
  border-top: 1px solid var(--r-neutral-300);
3
92
  padding-top: 24px;
4
93
  padding-bottom: 24px;
@@ -333,95 +422,6 @@
333
422
  --r-cl-60: #86181d;
334
423
  --r-cl-61: #144620;
335
424
  --r-cl-62: #c24e00;
336
- }.r-header {
337
- position: sticky;
338
- background-color: var(--r-body);
339
- top: 0;
340
- border-bottom: 1px solid var(--r-neutral-300);
341
- height: 60px;
342
- z-index: 1000;
343
- box-sizing: border-box;
344
- }
345
-
346
- .r-header-body {
347
- height: 100%;
348
- display: flex;
349
- justify-content: space-between;
350
- align-items: center;
351
- gap: 24px;
352
- box-sizing: border-box;
353
- }
354
-
355
- .r-header-logo {
356
- display: block;
357
- margin-right: 24px;
358
- color: var(--r-neutral-700);
359
- transition: color 0.2s;
360
- box-sizing: border-box;
361
- }
362
- .r-header-logo:hover, .r-header-logo:focus {
363
- color: var(--r-neutral-950);
364
- }
365
-
366
- .r-header-nav {
367
- display: flex;
368
- flex-direction: column;
369
- gap: 12px 16px;
370
- }
371
- @media screen and (width >= 1024px) {
372
- .r-header-nav {
373
- flex-direction: row;
374
- }
375
- }
376
-
377
- .r-header-link {
378
- color: var(--r-neutral-600);
379
- text-decoration: none;
380
- padding: 4px 0;
381
- transition: color 0.2s;
382
- box-sizing: border-box;
383
- }
384
- .r-header-link:hover, .r-header-link:focus-visible {
385
- color: var(--r-neutral-950);
386
- }
387
-
388
- .r-header-link._target {
389
- color: var(--r-primary-800);
390
- }
391
- .r-header-link._target:hover, .r-header-link._target:focus-visible {
392
- color: var(--r-primary-700);
393
- }
394
-
395
- .r-header-actions {
396
- display: flex;
397
- flex-direction: column-reverse;
398
- gap: 16px;
399
- align-items: stretch;
400
- }
401
- @media screen and (width >= 1024px) {
402
- .r-header-actions {
403
- flex-direction: row;
404
- align-items: center;
405
- gap: 28px;
406
- }
407
- }
408
-
409
- .r-header-sections {
410
- display: flex;
411
- align-items: center;
412
- gap: 12px;
413
- }
414
- @media screen and (width < 768px) {
415
- .r-header-sections .r-dropdown {
416
- flex: 1;
417
- }
418
- }
419
- @media screen and (width < 768px) {
420
- .r-header-sections .r-dropdown-drop {
421
- max-width: none;
422
- width: 100%;
423
- left: 0;
424
- }
425
425
  }.r-docs-container {
426
426
  min-height: calc(100dvh - var(--r-header-height));
427
427
  overflow-wrap: break-word;
@@ -444,6 +444,10 @@
444
444
  grid-template-columns: 1fr 640px 1fr;
445
445
  grid-template-rows: auto 1fr auto;
446
446
  }
447
+ }.r-page-container {
448
+ min-height: calc(100dvh - var(--r-header-height));
449
+ overflow-wrap: break-word;
450
+ box-sizing: border-box;
447
451
  }.r-blog-container {
448
452
  min-height: calc(100dvh - var(--r-header-height));
449
453
  overflow-wrap: break-word;
@@ -458,10 +462,6 @@
458
462
  grid-template-columns: 760px 220px;
459
463
  grid-template-rows: auto 1fr auto;
460
464
  }
461
- }.r-page-container {
462
- min-height: calc(100dvh - var(--r-header-height));
463
- overflow-wrap: break-word;
464
- box-sizing: border-box;
465
465
  }.keylink-to-content {
466
466
  position: absolute !important;
467
467
  top: 8px;
@@ -792,84 +792,6 @@
792
792
 
793
793
  .r-sidebar-drop[open] > .r-sidebar-drop-btn > .r-sidebar-drop-icon {
794
794
  transform: rotate(90deg);
795
- }.r-container {
796
- max-width: 1180px;
797
- padding-right: 12px;
798
- padding-left: 12px;
799
- margin-right: auto;
800
- margin-left: auto;
801
- box-sizing: border-box;
802
- }.r-theme-switcher {
803
- position: relative;
804
- display: flex;
805
- gap: 4px;
806
- width: 108px;
807
- height: 36px;
808
- padding: 2px;
809
- background-color: var(--r-neutral-950);
810
- border-radius: 14px;
811
- box-sizing: border-box;
812
- }
813
- .r-theme-switcher::before {
814
- content: "";
815
- position: absolute;
816
- display: block;
817
- height: 32px;
818
- width: 32px;
819
- top: 2px;
820
- left: 2px;
821
- background-color: var(--r-body);
822
- border-radius: 12px;
823
- transition: left 0.2s;
824
- box-sizing: border-box;
825
- }
826
-
827
- .r-theme-switcher-btn {
828
- padding: 8px;
829
- background: none;
830
- border: 0;
831
- border-radius: 12px;
832
- cursor: pointer;
833
- color: var(--r-neutral-50);
834
- fill: var(--r-neutral-950);
835
- z-index: 1;
836
- transition: color 0.2s 0.1s, fill 0.2s;
837
- }
838
- .r-theme-switcher-btn:hover {
839
- color: var(--r-neutral-50);
840
- fill: var(--r-neutral-50);
841
- }
842
-
843
- .r-theme-dark:not(.r-theme-system) .r-theme-switcher::before {
844
- left: 2px;
845
- }
846
-
847
- .r-theme-dark:not(.r-theme-system) .r-theme-switcher-btn__dark {
848
- color: var(--r-neutral-950);
849
- pointer-events: none;
850
- }
851
-
852
- .r-theme-switcher::before,
853
- .r-theme-system .r-theme-switcher::before {
854
- left: 38px;
855
- }
856
-
857
- .r-theme-system .r-theme-switcher-btn__system {
858
- color: var(--r-neutral-950);
859
- pointer-events: none;
860
- }
861
-
862
- .r-theme-light:not(.r-theme-system) .r-theme-switcher::before {
863
- left: 74px;
864
- }
865
-
866
- .r-theme-light:not(.r-theme-system) .r-theme-switcher-btn__light {
867
- color: var(--r-neutral-950);
868
- pointer-events: none;
869
- }
870
-
871
- .r-theme-switcher-svg {
872
- display: block;
873
795
  }.r-header-menu {
874
796
  display: flex;
875
797
  justify-content: flex-end;
@@ -1074,6 +996,24 @@
1074
996
  font-size: 14px;
1075
997
  color: var(--r-neutral-600);
1076
998
  margin: 12px 0 0;
999
+ }.r-header-social {
1000
+ display: flex;
1001
+ flex: 1;
1002
+ justify-content: flex-end;
1003
+ }
1004
+ @media screen and (width >= 1024px) {
1005
+ .r-header-social {
1006
+ flex: none;
1007
+ justify-content: unset;
1008
+ }
1009
+ }
1010
+
1011
+ .r-header-social-git {
1012
+ color: var(--r-neutral-700);
1013
+ transition: color 0.2s;
1014
+ }
1015
+ .r-header-social-git:hover, .r-header-social-git:focus {
1016
+ color: var(--r-neutral-950);
1077
1017
  }.r-dropdown {
1078
1018
  position: relative;
1079
1019
  color: var(--r-neutral-600);
@@ -1146,31 +1086,91 @@
1146
1086
  transition: background-color 0.2s;
1147
1087
  box-sizing: border-box;
1148
1088
  }
1149
- .r-dropdown-link:hover {
1150
- color: var(--r-neutral-900);
1151
- background-color: var(--r-neutral-100);
1089
+ .r-dropdown-link:hover {
1090
+ color: var(--r-neutral-900);
1091
+ background-color: var(--r-neutral-100);
1092
+ }
1093
+
1094
+ .r-dropdown-link._active {
1095
+ color: var(--r-primary-700);
1096
+ }.r-container {
1097
+ max-width: 1180px;
1098
+ padding-right: 12px;
1099
+ padding-left: 12px;
1100
+ margin-right: auto;
1101
+ margin-left: auto;
1102
+ box-sizing: border-box;
1103
+ }.r-theme-switcher {
1104
+ position: relative;
1105
+ display: flex;
1106
+ gap: 4px;
1107
+ width: 108px;
1108
+ height: 36px;
1109
+ padding: 2px;
1110
+ background-color: var(--r-neutral-950);
1111
+ border-radius: 14px;
1112
+ box-sizing: border-box;
1113
+ }
1114
+ .r-theme-switcher::before {
1115
+ content: "";
1116
+ position: absolute;
1117
+ display: block;
1118
+ height: 32px;
1119
+ width: 32px;
1120
+ top: 2px;
1121
+ left: 2px;
1122
+ background-color: var(--r-body);
1123
+ border-radius: 12px;
1124
+ transition: left 0.2s;
1125
+ box-sizing: border-box;
1126
+ }
1127
+
1128
+ .r-theme-switcher-btn {
1129
+ padding: 8px;
1130
+ background: none;
1131
+ border: 0;
1132
+ border-radius: 12px;
1133
+ cursor: pointer;
1134
+ color: var(--r-neutral-50);
1135
+ fill: var(--r-neutral-950);
1136
+ z-index: 1;
1137
+ transition: color 0.2s 0.1s, fill 0.2s;
1138
+ }
1139
+ .r-theme-switcher-btn:hover {
1140
+ color: var(--r-neutral-50);
1141
+ fill: var(--r-neutral-50);
1152
1142
  }
1153
1143
 
1154
- .r-dropdown-link._active {
1155
- color: var(--r-primary-700);
1156
- }.r-header-social {
1157
- display: flex;
1158
- flex: 1;
1159
- justify-content: flex-end;
1144
+ .r-theme-dark:not(.r-theme-system) .r-theme-switcher::before {
1145
+ left: 2px;
1160
1146
  }
1161
- @media screen and (width >= 1024px) {
1162
- .r-header-social {
1163
- flex: none;
1164
- justify-content: unset;
1165
- }
1147
+
1148
+ .r-theme-dark:not(.r-theme-system) .r-theme-switcher-btn__dark {
1149
+ color: var(--r-neutral-950);
1150
+ pointer-events: none;
1166
1151
  }
1167
1152
 
1168
- .r-header-social-git {
1169
- color: var(--r-neutral-700);
1170
- transition: color 0.2s;
1153
+ .r-theme-switcher::before,
1154
+ .r-theme-system .r-theme-switcher::before {
1155
+ left: 38px;
1171
1156
  }
1172
- .r-header-social-git:hover, .r-header-social-git:focus {
1157
+
1158
+ .r-theme-system .r-theme-switcher-btn__system {
1159
+ color: var(--r-neutral-950);
1160
+ pointer-events: none;
1161
+ }
1162
+
1163
+ .r-theme-light:not(.r-theme-system) .r-theme-switcher::before {
1164
+ left: 74px;
1165
+ }
1166
+
1167
+ .r-theme-light:not(.r-theme-system) .r-theme-switcher-btn__light {
1173
1168
  color: var(--r-neutral-950);
1169
+ pointer-events: none;
1170
+ }
1171
+
1172
+ .r-theme-switcher-svg {
1173
+ display: block;
1174
1174
  }.r-keylink {
1175
1175
  display: block;
1176
1176
  position: relative;
@@ -1191,6 +1191,47 @@
1191
1191
  user-select: none;
1192
1192
  pointer-events: none;
1193
1193
  box-sizing: border-box;
1194
+ }.r-breadcrumbs {
1195
+ grid-area: breadcrumbs;
1196
+ list-style: none;
1197
+ margin: 0;
1198
+ padding: 20px 0 0;
1199
+ line-height: 2;
1200
+ }
1201
+ @media screen and (width >= 768px) {
1202
+ .r-breadcrumbs {
1203
+ padding: 32px 0 0;
1204
+ }
1205
+ }
1206
+
1207
+ .r-breadcrumb {
1208
+ display: inline;
1209
+ }
1210
+
1211
+ .r-breadcrumb._previous::after {
1212
+ content: "/";
1213
+ font-weight: 600;
1214
+ margin-inline: 8px;
1215
+ }
1216
+
1217
+ .r-breadcrumb-link {
1218
+ color: var(--r-neutral-700);
1219
+ text-decoration: none;
1220
+ }
1221
+ .r-breadcrumb-link:hover {
1222
+ color: var(--r-primary-800);
1223
+ }
1224
+
1225
+ .r-breadcrumb-link,
1226
+ .r-breadcrumb-title {
1227
+ display: inline;
1228
+ padding: 6px 0;
1229
+ margin: 0;
1230
+ }
1231
+
1232
+ .r-breadcrumb-title {
1233
+ color: var(--r-neutral-950);
1234
+ font-weight: 600;
1194
1235
  }.r-contents {
1195
1236
  grid-area: contents;
1196
1237
  }
@@ -1424,47 +1465,6 @@
1424
1465
  }
1425
1466
  .r-contents-git:hover {
1426
1467
  color: var(--r-neutral-900);
1427
- }.r-breadcrumbs {
1428
- grid-area: breadcrumbs;
1429
- list-style: none;
1430
- margin: 0;
1431
- padding: 20px 0 0;
1432
- line-height: 2;
1433
- }
1434
- @media screen and (width >= 768px) {
1435
- .r-breadcrumbs {
1436
- padding: 32px 0 0;
1437
- }
1438
- }
1439
-
1440
- .r-breadcrumb {
1441
- display: inline;
1442
- }
1443
-
1444
- .r-breadcrumb._previous::after {
1445
- content: "/";
1446
- font-weight: 600;
1447
- margin-inline: 8px;
1448
- }
1449
-
1450
- .r-breadcrumb-link {
1451
- color: var(--r-neutral-700);
1452
- text-decoration: none;
1453
- }
1454
- .r-breadcrumb-link:hover {
1455
- color: var(--r-primary-800);
1456
- }
1457
-
1458
- .r-breadcrumb-link,
1459
- .r-breadcrumb-title {
1460
- display: inline;
1461
- padding: 6px 0;
1462
- margin: 0;
1463
- }
1464
-
1465
- .r-breadcrumb-title {
1466
- color: var(--r-neutral-950);
1467
- font-weight: 600;
1468
1468
  }.r-pagination {
1469
1469
  grid-area: pagination;
1470
1470
  display: grid;
@@ -1646,21 +1646,6 @@
1646
1646
  scrollbar-width: thin;
1647
1647
  scrollbar-color: var(--r-neutral-200) transparent;
1648
1648
  box-sizing: border-box;
1649
- }.r-code-block {
1650
- font-family: var(--monospace-font, monospace, monospace);
1651
- font-size: 16px;
1652
- line-height: 1.33;
1653
- border-radius: 6px;
1654
- padding: 16px 20px;
1655
- margin-block-start: 1.5em;
1656
- margin-block-end: 1.75em;
1657
- color: var(--r-primary-800);
1658
- background-color: var(--r-neutral-50);
1659
- border: 1px solid var(--r-neutral-300);
1660
- overflow-x: auto;
1661
- scrollbar-width: thin;
1662
- scrollbar-color: var(--r-neutral-200) transparent;
1663
- box-sizing: border-box;
1664
1649
  }.r-blockquote {
1665
1650
  background-color: var(--r-neutral-100);
1666
1651
  padding: 8px 12px 8px 20px;
@@ -1717,6 +1702,21 @@
1717
1702
  }
1718
1703
  .r-blockquote-caution .r-blockquote-title {
1719
1704
  color: var(--r-caution);
1705
+ }.r-code-block {
1706
+ font-family: var(--monospace-font, monospace, monospace);
1707
+ font-size: 16px;
1708
+ line-height: 1.33;
1709
+ border-radius: 6px;
1710
+ padding: 16px 20px;
1711
+ margin-block-start: 1.5em;
1712
+ margin-block-end: 1.75em;
1713
+ color: var(--r-primary-800);
1714
+ background-color: var(--r-neutral-50);
1715
+ border: 1px solid var(--r-neutral-300);
1716
+ overflow-x: auto;
1717
+ scrollbar-width: thin;
1718
+ scrollbar-color: var(--r-neutral-200) transparent;
1719
+ box-sizing: border-box;
1720
1720
  }.r-code-span {
1721
1721
  font-family: var(--monospace-font, monospace, monospace);
1722
1722
  background-color: var(--r-neutral-200);
@@ -1819,22 +1819,6 @@
1819
1819
 
1820
1820
  .r-tab-header-code {
1821
1821
  font-family: var(--monospace-font, monospace, monospace);
1822
- }.r-kbd-container {
1823
- display: flex;
1824
- gap: 4px;
1825
- font-size: 14px;
1826
- cursor: pointer;
1827
- }
1828
- .r-kbd-container:hover {
1829
- color: var(--r-neutral-950);
1830
- }.r-kbd-key {
1831
- background-color: var(--r-neutral-200);
1832
- font-size: 12px;
1833
- border-radius: 4px;
1834
- padding: 5px 8px;
1835
- min-width: 24px;
1836
- text-align: center;
1837
- box-sizing: border-box;
1838
1822
  }.r-modal {
1839
1823
  position: fixed;
1840
1824
  left: 0;
@@ -1870,6 +1854,22 @@
1870
1854
  .r-modal._visible {
1871
1855
  transform: translateX(-50%) scale(1);
1872
1856
  }
1857
+ }.r-kbd-container {
1858
+ display: flex;
1859
+ gap: 4px;
1860
+ font-size: 14px;
1861
+ cursor: pointer;
1862
+ }
1863
+ .r-kbd-container:hover {
1864
+ color: var(--r-neutral-950);
1865
+ }.r-kbd-key {
1866
+ background-color: var(--r-neutral-200);
1867
+ font-size: 12px;
1868
+ border-radius: 4px;
1869
+ padding: 5px 8px;
1870
+ min-width: 24px;
1871
+ text-align: center;
1872
+ box-sizing: border-box;
1873
1873
  }.r-copy-button {
1874
1874
  position: relative;
1875
1875
  padding: 8px;
@@ -1915,32 +1915,6 @@
1915
1915
 
1916
1916
  .r-copy-button-svg {
1917
1917
  display: block;
1918
- }.r-copy-text {
1919
- position: relative;
1920
- cursor: pointer;
1921
- background: none;
1922
- border: 0;
1923
- padding: 0;
1924
- font: inherit;
1925
- }
1926
- .r-copy-text:hover {
1927
- color: var(--r-neutral-950);
1928
- }
1929
- .r-copy-text::before {
1930
- content: "";
1931
- position: absolute;
1932
- bottom: -2px;
1933
- left: 0;
1934
- width: 100%;
1935
- height: 1px;
1936
- background: linear-gradient(to right, currentColor 30%, transparent 0%, transparent 80%, currentColor 80%) repeat-x 0px/8px;
1937
- transition: background 0.2s;
1938
- box-sizing: border-box;
1939
- }
1940
-
1941
- .r-copy-text:active,
1942
- .r-copy-text._active {
1943
- color: var(--r-success);
1944
1918
  }.r-content-link {
1945
1919
  text-decoration: none;
1946
1920
  color: var(--r-link);
@@ -1983,6 +1957,32 @@
1983
1957
  background-color: currentColor;
1984
1958
  border-radius: 0 0 0 4px;
1985
1959
  box-sizing: border-box;
1960
+ }.r-copy-text {
1961
+ position: relative;
1962
+ cursor: pointer;
1963
+ background: none;
1964
+ border: 0;
1965
+ padding: 0;
1966
+ font: inherit;
1967
+ }
1968
+ .r-copy-text:hover {
1969
+ color: var(--r-neutral-950);
1970
+ }
1971
+ .r-copy-text::before {
1972
+ content: "";
1973
+ position: absolute;
1974
+ bottom: -2px;
1975
+ left: 0;
1976
+ width: 100%;
1977
+ height: 1px;
1978
+ background: linear-gradient(to right, currentColor 30%, transparent 0%, transparent 80%, currentColor 80%) repeat-x 0px/8px;
1979
+ transition: background 0.2s;
1980
+ box-sizing: border-box;
1981
+ }
1982
+
1983
+ .r-copy-text:active,
1984
+ .r-copy-text._active {
1985
+ color: var(--r-success);
1986
1986
  }.r-li {
1987
1987
  line-height: 1.8;
1988
1988
  margin-block-start: 6px;
@@ -2009,17 +2009,19 @@
2009
2009
  text-align: left;
2010
2010
  border-collapse: collapse;
2011
2011
  box-sizing: border-box;
2012
- }.r-td {
2013
- padding: 6px 12px;
2014
- border-bottom: 1px solid var(--r-neutral-400);
2015
- border-collapse: collapse;
2016
2012
  }.r-th {
2017
2013
  padding: 6px 12px;
2018
2014
  border-top: 1px solid var(--r-neutral-500);
2019
2015
  border-bottom: 1px solid var(--r-neutral-500);
2020
2016
  border-collapse: collapse;
2017
+ }.r-td {
2018
+ padding: 6px 12px;
2019
+ border-bottom: 1px solid var(--r-neutral-400);
2020
+ border-collapse: collapse;
2021
2021
  }.r-thead {
2022
2022
  background-color: var(--r-neutral-100);
2023
+ }.r-task-ol {
2024
+ list-style: none;
2023
2025
  }.r-task-li.r-task-li {
2024
2026
  margin-block-start: 2px;
2025
2027
  margin-block-end: 2px;
@@ -2049,8 +2051,6 @@
2049
2051
 
2050
2052
  .r-task-label-text {
2051
2053
  vertical-align: middle;
2052
- }.r-task-ol {
2053
- list-style: none;
2054
2054
  }.r-task-ul {
2055
2055
  list-style: none;
2056
2056
  }.r-backdrop {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "robindoc",
3
- "version": "0.0.0-experimental-27006f2",
3
+ "version": "0.0.0-experimental-36b79c8",
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": {