robindoc 0.0.0-experimental-a217ca0 → 0.0.0-experimental-b7218c1

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,2 +1,2 @@
1
- import{readFile as t}from"fs/promises";import{glob as e}from"glob";import s from"path";import{BaseProvider as o}from"./base.js";import{extensionsMap as r}from"../data/contents.js";import{getFileUrl as i,normalizePathname as a}from"../utils/path-tools.js";class c extends o{type="local";sourceRoot;constructor(t=process.cwd()){super(t),this.sourceRoot=t.replaceAll("\\","/"),this.filesPromise=this.loadFiles("")}async getPageSourcePathname(t){if(this.sourceRoot.endsWith(".md")||this.sourceRoot.endsWith(".mdx"))return this.sourceRoot;const e=s.posix.join(this.sourceRoot,t).replaceAll("\\","/").replace(/\/$/,"");return super.getPageSourcePathname(t,e)}async load(e){const s=await this.getPageSourcePathname(e);if(!s)throw new Error(`Can not find file for "${e}"`);return await t(s,"utf-8")}async getFileSrc(e,o,i){if(o.match(/https?:\/\//))return o;const a=s.posix.join(process.cwd(),e?.replace(/^\//,"./")||"",o.replace(/^\//,"./")),c=s.posix.relative(process.cwd(),a),{dir:n,ext:l}=s.parse(c),p=i&&new RegExp(`^(${i?.join("|")})(/|$)`),u=p&&n.match(p);let h=o;if(u)h=`${c.replace(u[1],"")}`;else if(l in r){const e=await t(c,"base64");h=`data:${r[l]};base64,${e}`}return h}async loadFiles(t){const o=t?.replace(/^\//,""),r=(await e(["**/*.{md,mdx}","**/structure.json"],{cwd:this.sourceRoot,posix:!0})).reduce((t,e)=>{if(!o||o&&e.startsWith(o)){const r=s.relative(process.cwd(),(this.sourceRoot||".")+"/"+e).replace(/\\/g,"/");if(e.match(/\.mdx?$/)){const s=i("/"+e),c=a(s.substring(o?.length||0)),n=c.replace(/\/[0-9]+[-_](.)/g,"/$1");t.docs.push({origPath:r,clientPath:n,origClientPath:c})}else t.structures.push(r)}return t},{docs:[],structures:[]});return r.docs.sort((t,e)=>t.origClientPath.localeCompare(e.origClientPath)),this.filesPromise=r,r}}export{c as FileSystemProvider};
1
+ import{readFile as t}from"fs/promises";import{glob as e}from"tinyglobby";import s from"path";import{BaseProvider as o}from"./base.js";import{extensionsMap as r}from"../data/contents.js";import{getFileUrl as i,normalizePathname as a}from"../utils/path-tools.js";class c extends o{type="local";sourceRoot;constructor(t=process.cwd()){super(t),this.sourceRoot=t.replaceAll("\\","/"),this.filesPromise=this.loadFiles("")}async getPageSourcePathname(t){if(this.sourceRoot.endsWith(".md")||this.sourceRoot.endsWith(".mdx"))return this.sourceRoot;const e=s.posix.join(this.sourceRoot,t).replaceAll("\\","/").replace(/\/$/,"");return super.getPageSourcePathname(t,e)}async load(e){const s=await this.getPageSourcePathname(e);if(!s)throw new Error(`Can not find file for "${e}"`);return await t(s,"utf-8")}async getFileSrc(e,o,i){if(o.match(/https?:\/\//))return o;const a=s.posix.join(process.cwd(),e?.replace(/^\//,"./")||"",o.replace(/^\//,"./")),c=s.posix.relative(process.cwd(),a),{dir:n,ext:l}=s.parse(c),p=i&&new RegExp(`^(${i?.join("|")})(/|$)`),u=p&&n.match(p);let h=o;if(u)h=`${c.replace(u[1],"")}`;else if(l in r){const e=await t(c,"base64");h=`data:${r[l]};base64,${e}`}return h}async loadFiles(t){const o=t?.replace(/^\//,""),r=(await e(["**/*.{md,mdx}","**/structure.json"],{cwd:this.sourceRoot})).reduce((t,e)=>{if(!o||o&&e.startsWith(o)){const r=s.relative(process.cwd(),(this.sourceRoot||".")+"/"+e).replace(/\\/g,"/");if(e.match(/\.mdx?$/)){const s=i("/"+e),c=a(s.substring(o?.length||0)),n=c.replace(/\/[0-9]+[-_](.)/g,"/$1");t.docs.push({origPath:r,clientPath:n,origClientPath:c})}else t.structures.push(r)}return t},{docs:[],structures:[]});return r.docs.sort((t,e)=>t.origClientPath.localeCompare(e.origClientPath)),this.filesPromise=r,r}}export{c as FileSystemProvider};
2
2
  //# sourceMappingURL=file-system.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-system.js","sources":["../../../src/core/providers/file-system.ts"],"sourcesContent":["import { readFile } from \"fs/promises\";\nimport { glob } from \"glob\";\nimport path from \"path\";\n\nimport { type BranchFiles } from \"../types/content\";\nimport { BaseProvider } from \"./base\";\nimport { extensionsMap } from \"../data/contents\";\nimport { getFileUrl, normalizePathname } from \"../utils/path-tools\";\n\nexport class FileSystemProvider extends BaseProvider {\n readonly type = \"local\";\n\n sourceRoot: string;\n\n constructor(sourceRoot: string = process.cwd()) {\n super(sourceRoot);\n this.sourceRoot = sourceRoot.replaceAll(\"\\\\\", \"/\");\n this.filesPromise = this.loadFiles(\"\");\n }\n\n async getPageSourcePathname(uri: string) {\n if (this.sourceRoot.endsWith(\".md\") || this.sourceRoot.endsWith(\".mdx\")) {\n return this.sourceRoot;\n }\n const fullUri = path.posix.join(this.sourceRoot, uri).replaceAll(\"\\\\\", \"/\").replace(/\\/$/, \"\");\n return super.getPageSourcePathname(uri, fullUri);\n }\n\n async load(uri: string) {\n const filePath = await this.getPageSourcePathname(uri);\n if (!filePath) {\n throw new Error(`Can not find file for \"${uri}\"`);\n }\n const content = await readFile(filePath, \"utf-8\");\n return content;\n }\n\n async getFileSrc(uri: string, href: string, publicDirs?: string[]) {\n if (href.match(/https?:\\/\\//)) return href;\n\n const assetPath = path.posix.join(process.cwd(), uri?.replace(/^\\//, \"./\") || \"\", href.replace(/^\\//, \"./\"));\n const relativePath = path.posix.relative(process.cwd(), assetPath);\n const { dir, ext } = path.parse(relativePath);\n const publicDirsRule = publicDirs && new RegExp(`^(${publicDirs?.join(\"|\")})(\\/|$)`);\n const publicDirMatch = publicDirsRule && dir.match(publicDirsRule);\n\n let src = href;\n if (publicDirMatch) {\n src = `${relativePath.replace(publicDirMatch[1], \"\")}`;\n } else if (ext in extensionsMap) {\n const base64Image = await readFile(relativePath, \"base64\");\n src = `data:${extensionsMap[ext as keyof typeof extensionsMap]};base64,${base64Image}`;\n }\n return src;\n }\n\n private async loadFiles(pathname?: string) {\n const pathnameClean = pathname?.replace(/^\\//, \"\");\n const files = await glob([\"**/*.{md,mdx}\", \"**/structure.json\"], { cwd: this.sourceRoot, posix: true });\n\n const fileTree = files.reduce<BranchFiles>(\n (acc, item) => {\n if (!pathnameClean || (pathnameClean && item.startsWith(pathnameClean))) {\n const origPath = path\n .relative(process.cwd(), (this.sourceRoot || \".\") + \"/\" + item)\n .replace(/\\\\/g, \"/\");\n\n if (item.match(/\\.mdx?$/)) {\n const clientUrl = getFileUrl(\"/\" + item);\n const origClientPath = normalizePathname(clientUrl.substring(pathnameClean?.length || 0));\n const clientPath = origClientPath.replace(/\\/[0-9]+[-_](.)/g, \"/$1\");\n\n acc.docs.push({\n origPath,\n clientPath,\n origClientPath,\n });\n } else {\n acc.structures.push(origPath);\n }\n }\n return acc;\n },\n { docs: [], structures: [] },\n );\n fileTree.docs.sort((a, b) => a.origClientPath.localeCompare(b.origClientPath));\n this.filesPromise = fileTree;\n return fileTree;\n }\n}\n"],"names":["FileSystemProvider","BaseProvider","type","sourceRoot","constructor","process","cwd","super","this","replaceAll","filesPromise","loadFiles","getPageSourcePathname","uri","endsWith","fullUri","path","posix","join","replace","load","filePath","Error","readFile","getFileSrc","href","publicDirs","match","assetPath","relativePath","relative","dir","ext","parse","publicDirsRule","RegExp","publicDirMatch","src","extensionsMap","base64Image","pathname","pathnameClean","fileTree","glob","reduce","acc","item","startsWith","origPath","clientUrl","getFileUrl","origClientPath","normalizePathname","substring","length","clientPath","docs","push","structures","sort","a","b","localeCompare"],"mappings":"+PASM,MAAOA,UAA2BC,EAC3BC,KAAO,QAEhBC,WAEA,WAAAC,CAAYD,EAAqBE,QAAQC,OACrCC,MAAMJ,GACNK,KAAKL,WAAaA,EAAWM,WAAW,KAAM,KAC9CD,KAAKE,aAAeF,KAAKG,UAAU,GACvC,CAEA,2BAAMC,CAAsBC,GACxB,GAAIL,KAAKL,WAAWW,SAAS,QAAUN,KAAKL,WAAWW,SAAS,QAC5D,OAAON,KAAKL,WAEhB,MAAMY,EAAUC,EAAKC,MAAMC,KAAKV,KAAKL,WAAYU,GAAKJ,WAAW,KAAM,KAAKU,QAAQ,MAAO,IAC3F,OAAOZ,MAAMK,sBAAsBC,EAAKE,EAC5C,CAEA,UAAMK,CAAKP,GACP,MAAMQ,QAAiBb,KAAKI,sBAAsBC,GAClD,IAAKQ,EACD,MAAM,IAAIC,MAAM,0BAA0BT,MAG9C,aADsBU,EAASF,EAAU,QAE7C,CAEA,gBAAMG,CAAWX,EAAaY,EAAcC,GACxC,GAAID,EAAKE,MAAM,eAAgB,OAAOF,EAEtC,MAAMG,EAAYZ,EAAKC,MAAMC,KAAKb,QAAQC,MAAOO,GAAKM,QAAQ,MAAO,OAAS,GAAIM,EAAKN,QAAQ,MAAO,OAChGU,EAAeb,EAAKC,MAAMa,SAASzB,QAAQC,MAAOsB,IAClDG,IAAEA,EAAGC,IAAEA,GAAQhB,EAAKiB,MAAMJ,GAC1BK,EAAiBR,GAAc,IAAIS,OAAO,KAAKT,GAAYR,KAAK,cAChEkB,EAAiBF,GAAkBH,EAAIJ,MAAMO,GAEnD,IAAIG,EAAMZ,EACV,GAAIW,EACAC,EAAM,GAAGR,EAAaV,QAAQiB,EAAe,GAAI,WAC9C,GAAIJ,KAAOM,EAAe,CAC7B,MAAMC,QAAoBhB,EAASM,EAAc,UACjDQ,EAAM,QAAQC,EAAcN,aAA6CO,GAC7E,CACA,OAAOF,CACX,CAEQ,eAAM1B,CAAU6B,GACpB,MAAMC,EAAgBD,GAAUrB,QAAQ,MAAO,IAGzCuB,SAFcC,EAAK,CAAC,gBAAiB,qBAAsB,CAAErC,IAAKE,KAAKL,WAAYc,OAAO,KAEzE2B,OACnB,CAACC,EAAKC,KACF,IAAKL,GAAkBA,GAAiBK,EAAKC,WAAWN,GAAiB,CACrE,MAAMO,EAAWhC,EACZc,SAASzB,QAAQC,OAAQE,KAAKL,YAAc,KAAO,IAAM2C,GACzD3B,QAAQ,MAAO,KAEpB,GAAI2B,EAAKnB,MAAM,WAAY,CACvB,MAAMsB,EAAYC,EAAW,IAAMJ,GAC7BK,EAAiBC,EAAkBH,EAAUI,UAAUZ,GAAea,QAAU,IAChFC,EAAaJ,EAAehC,QAAQ,mBAAoB,OAE9D0B,EAAIW,KAAKC,KAAK,CACVT,WACAO,aACAJ,kBAER,MACIN,EAAIa,WAAWD,KAAKT,EAE5B,CACA,OAAOH,GAEX,CAAEW,KAAM,GAAIE,WAAY,KAI5B,OAFAhB,EAASc,KAAKG,KAAK,CAACC,EAAGC,IAAMD,EAAET,eAAeW,cAAcD,EAAEV,iBAC9D3C,KAAKE,aAAegC,EACbA,CACX"}
1
+ {"version":3,"file":"file-system.js","sources":["../../../src/core/providers/file-system.ts"],"sourcesContent":["import { readFile } from \"fs/promises\";\nimport { glob } from \"tinyglobby\";\nimport path from \"path\";\n\nimport { type BranchFiles } from \"../types/content\";\nimport { BaseProvider } from \"./base\";\nimport { extensionsMap } from \"../data/contents\";\nimport { getFileUrl, normalizePathname } from \"../utils/path-tools\";\n\nexport class FileSystemProvider extends BaseProvider {\n readonly type = \"local\";\n\n sourceRoot: string;\n\n constructor(sourceRoot: string = process.cwd()) {\n super(sourceRoot);\n this.sourceRoot = sourceRoot.replaceAll(\"\\\\\", \"/\");\n this.filesPromise = this.loadFiles(\"\");\n }\n\n async getPageSourcePathname(uri: string) {\n if (this.sourceRoot.endsWith(\".md\") || this.sourceRoot.endsWith(\".mdx\")) {\n return this.sourceRoot;\n }\n const fullUri = path.posix.join(this.sourceRoot, uri).replaceAll(\"\\\\\", \"/\").replace(/\\/$/, \"\");\n return super.getPageSourcePathname(uri, fullUri);\n }\n\n async load(uri: string) {\n const filePath = await this.getPageSourcePathname(uri);\n if (!filePath) {\n throw new Error(`Can not find file for \"${uri}\"`);\n }\n const content = await readFile(filePath, \"utf-8\");\n return content;\n }\n\n async getFileSrc(uri: string, href: string, publicDirs?: string[]) {\n if (href.match(/https?:\\/\\//)) return href;\n\n const assetPath = path.posix.join(process.cwd(), uri?.replace(/^\\//, \"./\") || \"\", href.replace(/^\\//, \"./\"));\n const relativePath = path.posix.relative(process.cwd(), assetPath);\n const { dir, ext } = path.parse(relativePath);\n const publicDirsRule = publicDirs && new RegExp(`^(${publicDirs?.join(\"|\")})(\\/|$)`);\n const publicDirMatch = publicDirsRule && dir.match(publicDirsRule);\n\n let src = href;\n if (publicDirMatch) {\n src = `${relativePath.replace(publicDirMatch[1], \"\")}`;\n } else if (ext in extensionsMap) {\n const base64Image = await readFile(relativePath, \"base64\");\n src = `data:${extensionsMap[ext as keyof typeof extensionsMap]};base64,${base64Image}`;\n }\n return src;\n }\n\n private async loadFiles(pathname?: string) {\n const pathnameClean = pathname?.replace(/^\\//, \"\");\n const files = await glob([\"**/*.{md,mdx}\", \"**/structure.json\"], { cwd: this.sourceRoot });\n\n const fileTree = files.reduce<BranchFiles>(\n (acc, item) => {\n if (!pathnameClean || (pathnameClean && item.startsWith(pathnameClean))) {\n const origPath = path\n .relative(process.cwd(), (this.sourceRoot || \".\") + \"/\" + item)\n .replace(/\\\\/g, \"/\");\n\n if (item.match(/\\.mdx?$/)) {\n const clientUrl = getFileUrl(\"/\" + item);\n const origClientPath = normalizePathname(clientUrl.substring(pathnameClean?.length || 0));\n const clientPath = origClientPath.replace(/\\/[0-9]+[-_](.)/g, \"/$1\");\n\n acc.docs.push({\n origPath,\n clientPath,\n origClientPath,\n });\n } else {\n acc.structures.push(origPath);\n }\n }\n return acc;\n },\n { docs: [], structures: [] },\n );\n fileTree.docs.sort((a, b) => a.origClientPath.localeCompare(b.origClientPath));\n this.filesPromise = fileTree;\n return fileTree;\n }\n}\n"],"names":["FileSystemProvider","BaseProvider","type","sourceRoot","constructor","process","cwd","super","this","replaceAll","filesPromise","loadFiles","getPageSourcePathname","uri","endsWith","fullUri","path","posix","join","replace","load","filePath","Error","readFile","getFileSrc","href","publicDirs","match","assetPath","relativePath","relative","dir","ext","parse","publicDirsRule","RegExp","publicDirMatch","src","extensionsMap","base64Image","pathname","pathnameClean","fileTree","glob","reduce","acc","item","startsWith","origPath","clientUrl","getFileUrl","origClientPath","normalizePathname","substring","length","clientPath","docs","push","structures","sort","a","b","localeCompare"],"mappings":"qQASM,MAAOA,UAA2BC,EAC3BC,KAAO,QAEhBC,WAEA,WAAAC,CAAYD,EAAqBE,QAAQC,OACrCC,MAAMJ,GACNK,KAAKL,WAAaA,EAAWM,WAAW,KAAM,KAC9CD,KAAKE,aAAeF,KAAKG,UAAU,GACvC,CAEA,2BAAMC,CAAsBC,GACxB,GAAIL,KAAKL,WAAWW,SAAS,QAAUN,KAAKL,WAAWW,SAAS,QAC5D,OAAON,KAAKL,WAEhB,MAAMY,EAAUC,EAAKC,MAAMC,KAAKV,KAAKL,WAAYU,GAAKJ,WAAW,KAAM,KAAKU,QAAQ,MAAO,IAC3F,OAAOZ,MAAMK,sBAAsBC,EAAKE,EAC5C,CAEA,UAAMK,CAAKP,GACP,MAAMQ,QAAiBb,KAAKI,sBAAsBC,GAClD,IAAKQ,EACD,MAAM,IAAIC,MAAM,0BAA0BT,MAG9C,aADsBU,EAASF,EAAU,QAE7C,CAEA,gBAAMG,CAAWX,EAAaY,EAAcC,GACxC,GAAID,EAAKE,MAAM,eAAgB,OAAOF,EAEtC,MAAMG,EAAYZ,EAAKC,MAAMC,KAAKb,QAAQC,MAAOO,GAAKM,QAAQ,MAAO,OAAS,GAAIM,EAAKN,QAAQ,MAAO,OAChGU,EAAeb,EAAKC,MAAMa,SAASzB,QAAQC,MAAOsB,IAClDG,IAAEA,EAAGC,IAAEA,GAAQhB,EAAKiB,MAAMJ,GAC1BK,EAAiBR,GAAc,IAAIS,OAAO,KAAKT,GAAYR,KAAK,cAChEkB,EAAiBF,GAAkBH,EAAIJ,MAAMO,GAEnD,IAAIG,EAAMZ,EACV,GAAIW,EACAC,EAAM,GAAGR,EAAaV,QAAQiB,EAAe,GAAI,WAC9C,GAAIJ,KAAOM,EAAe,CAC7B,MAAMC,QAAoBhB,EAASM,EAAc,UACjDQ,EAAM,QAAQC,EAAcN,aAA6CO,GAC7E,CACA,OAAOF,CACX,CAEQ,eAAM1B,CAAU6B,GACpB,MAAMC,EAAgBD,GAAUrB,QAAQ,MAAO,IAGzCuB,SAFcC,EAAK,CAAC,gBAAiB,qBAAsB,CAAErC,IAAKE,KAAKL,cAEtDyC,OACnB,CAACC,EAAKC,KACF,IAAKL,GAAkBA,GAAiBK,EAAKC,WAAWN,GAAiB,CACrE,MAAMO,EAAWhC,EACZc,SAASzB,QAAQC,OAAQE,KAAKL,YAAc,KAAO,IAAM2C,GACzD3B,QAAQ,MAAO,KAEpB,GAAI2B,EAAKnB,MAAM,WAAY,CACvB,MAAMsB,EAAYC,EAAW,IAAMJ,GAC7BK,EAAiBC,EAAkBH,EAAUI,UAAUZ,GAAea,QAAU,IAChFC,EAAaJ,EAAehC,QAAQ,mBAAoB,OAE9D0B,EAAIW,KAAKC,KAAK,CACVT,WACAO,aACAJ,kBAER,MACIN,EAAIa,WAAWD,KAAKT,EAE5B,CACA,OAAOH,GAEX,CAAEW,KAAM,GAAIE,WAAY,KAI5B,OAFAhB,EAASc,KAAKG,KAAK,CAACC,EAAGC,IAAMD,EAAET,eAAeW,cAAcD,EAAEV,iBAC9D3C,KAAKE,aAAegC,EACbA,CACX"}
package/lib/styles.css CHANGED
@@ -398,184 +398,448 @@
398
398
  grid-template-columns: 760px 220px;
399
399
  grid-template-rows: auto 1fr auto;
400
400
  }
401
+ }.keylink-to-content {
402
+ position: absolute !important;
403
+ top: 8px;
404
+ left: 12px;
405
+ z-index: 1001;
401
406
  }.r-page-container {
402
407
  min-height: calc(100dvh - var(--r-header-height));
403
408
  overflow-wrap: break-word;
404
409
  box-sizing: border-box;
405
410
  }.r-keylink.keylink-to-navigation:focus {
406
411
  margin-top: -40px;
407
- }.keylink-to-content {
408
- position: absolute !important;
409
- top: 8px;
410
- left: 12px;
411
- z-index: 1001;
412
- }.r-header-menu {
413
- display: flex;
414
- justify-content: flex-end;
415
- order: 1;
412
+ }.r-article {
413
+ padding: 20px 0 40px;
414
+ grid-area: content;
416
415
  }
417
- @media screen and (width >= 1024px) {
418
- .r-header-menu {
419
- flex: 1;
420
- order: unset;
416
+ @media screen and (width >= 1180px) {
417
+ .r-article {
418
+ padding: 32px 0 40px;
421
419
  }
422
420
  }
421
+ .r-article > *:first-child {
422
+ margin-top: 0;
423
+ }
424
+ .r-article > *:last-child {
425
+ margin-bottom: 0;
426
+ }
423
427
 
424
- .r-header-input:checked ~ .r-header-burger ~ .r-header-responsive {
425
- display: flex;
428
+ .r-checkbox {
429
+ cursor: pointer;
430
+ width: 20px;
431
+ height: 20px;
432
+ margin: 4px;
433
+ vertical-align: middle;
434
+ box-sizing: border-box;
426
435
  }
427
436
 
428
- .r-header-responsive {
429
- display: none;
430
- justify-content: flex-end;
431
- flex: 1;
432
- gap: 24px;
433
- z-index: 1;
437
+ .r-label {
438
+ cursor: pointer;
434
439
  }
435
- @media screen and (width < 1024px) {
436
- .r-header-responsive {
437
- flex-direction: column-reverse;
438
- padding: 12px;
439
- background-color: var(--r-main-50);
440
- position: fixed;
441
- top: 60px;
442
- right: 0;
443
- bottom: 0;
444
- left: 0;
445
- }
440
+
441
+ .r-task-ol,
442
+ .r-task-ul {
443
+ list-style: none;
446
444
  }
447
- @media screen and (width >= 1024px) {
448
- .r-header-responsive {
449
- display: flex;
450
- justify-content: space-between;
451
- align-items: center;
452
- }
445
+
446
+ .r-task-label {
447
+ display: block;
448
+ width: 100%;
449
+ padding-top: 2px;
450
+ padding-bottom: 2px;
451
+ box-sizing: border-box;
452
+ }
453
+ .r-task-label:hover .r-checkbox {
454
+ filter: brightness(0.8);
453
455
  }
454
456
 
455
- .r-header-burger {
456
- position: relative;
457
- display: flex;
458
- align-items: center;
459
- justify-content: center;
460
- height: 32px;
461
- width: 32px;
462
- cursor: pointer;
463
- background: none;
464
- border: none;
457
+ .r-task-li.r-task-li {
458
+ margin-block-start: 2px;
459
+ margin-block-end: 2px;
460
+ }
461
+
462
+ .r-label-text {
463
+ vertical-align: middle;
464
+ }.r-sidebar {
465
+ grid-area: sidebar;
465
466
  box-sizing: border-box;
466
467
  }
467
- @media screen and (width >= 1024px) {
468
- .r-header-burger {
468
+ @media screen and (width < 768px) {
469
+ .r-sidebar {
470
+ position: sticky;
471
+ width: calc(100% + 24px);
472
+ top: var(--r-header-height);
473
+ left: 0;
474
+ margin: 0 -12px;
475
+ background-color: var(--r-main-50);
476
+ border-bottom: 1px solid var(--r-main-200);
477
+ z-index: 10;
478
+ opacity: 0.98;
479
+ padding: 0;
480
+ overflow: auto;
481
+ }
482
+ }
483
+
484
+ .r-sidebar-top-mock {
485
+ grid-row-start: 1;
486
+ grid-column-start: 1;
487
+ }
488
+
489
+ @media screen and (width < 768px) {
490
+ .r-sidebar-input:not(:checked) ~ .r-sidebar-btn ~ .r-sidebar-nav {
469
491
  display: none;
470
492
  }
471
493
  }
472
494
 
473
- .r-burger-line {
474
- display: block;
475
- width: 20px;
476
- height: 1.5px;
477
- position: absolute;
478
- background-color: var(--r-main-700);
479
- margin: auto;
480
- transition: transform 0.3s;
495
+ .r-sidebar-nav {
481
496
  box-sizing: border-box;
482
497
  }
498
+ @media screen and (width < 768px) {
499
+ .r-sidebar-nav {
500
+ overflow: auto;
501
+ max-height: calc(100dvh - var(--r-header-height) - 41px);
502
+ }
503
+ }
483
504
 
484
- .r-burger-line._top {
485
- transform: translateY(-3px);
505
+ .r-sidebar-drop {
506
+ margin-top: -4px;
507
+ padding-top: 4px;
486
508
  }
487
509
 
488
- .r-header-input:checked ~ .r-header-burger .r-burger-line._top {
489
- transform: translateY(0) rotate(45deg);
490
- margin-top: 0;
510
+ .r-sidebar-sublist {
511
+ position: relative;
512
+ padding-top: 2px;
513
+ }
514
+ .r-sidebar-sublist:hover::before {
515
+ background-color: var(--r-primary-800);
516
+ transition-delay: initial;
491
517
  }
492
518
 
493
- .r-burger-line._bottom {
494
- transform: translateY(3px);
519
+ .r-sidebar-sublist::before {
520
+ content: "";
521
+ position: absolute;
522
+ top: 0;
523
+ left: -12px;
524
+ right: 0;
525
+ height: 2px;
526
+ border-bottom-left-radius: 2px;
527
+ background-color: var(--r-main-200);
528
+ z-index: 1;
529
+ transition: background-color 0.2s cubic-bezier(0, 0.66, 0.58, 1) 0.05s;
530
+ box-sizing: border-box;
495
531
  }
496
532
 
497
- .r-header-input:checked ~ .r-header-burger .r-burger-line._bottom {
498
- transform: translateY(0) rotate(-45deg);
499
- margin-top: 0;
500
- }.r-dropdown {
501
- position: relative;
502
- color: var(--r-main-600);
503
- transition: color 0.2s 0.1s;
533
+ .r-sidebar-nav {
534
+ padding: 32px 4px 32px 2px;
535
+ box-sizing: border-box;
504
536
  }
505
- .r-dropdown:hover, .r-dropdown:focus-within {
506
- color: var(--r-main-950);
537
+ @media screen and (width < 768px) {
538
+ .r-sidebar-nav {
539
+ padding: 12px;
540
+ }
507
541
  }
508
- .r-dropdown:hover .r-dropdown-drop, .r-dropdown:focus-within .r-dropdown-drop {
509
- visibility: visible;
510
- pointer-events: all;
511
- transform: translateY(20px);
512
- opacity: 1;
542
+ @media screen and (width >= 768px) {
543
+ .r-sidebar-nav {
544
+ position: sticky;
545
+ top: var(--r-header-height);
546
+ overflow: auto;
547
+ scrollbar-width: thin;
548
+ scrollbar-color: var(--r-main-200) transparent;
549
+ scrollbar-gutter: stable;
550
+ max-height: calc(100dvh - var(--r-header-height));
551
+ }
513
552
  }
514
- .r-dropdown:hover .r-dropdown-chevron, .r-dropdown:focus-within .r-dropdown-chevron {
515
- transform: rotate(180deg);
553
+
554
+ .r-sidebar-space {
555
+ box-sizing: border-box;
556
+ }
557
+ @media screen and (width < 768px) {
558
+ .r-sidebar-space {
559
+ display: block;
560
+ height: 40px;
561
+ }
516
562
  }
517
563
 
518
- .r-dropdown-summary {
564
+ .r-sidebar-btn {
565
+ position: sticky;
566
+ top: 0;
519
567
  display: flex;
520
- justify-content: space-between;
521
- align-items: center;
522
568
  width: 100%;
523
- position: relative;
524
- color: inherit;
525
- cursor: pointer;
526
- padding: 10px 4px;
527
- font-size: 16px;
569
+ font-size: 14px;
528
570
  border: 0;
571
+ padding: 12px;
529
572
  background: none;
573
+ cursor: pointer;
574
+ color: var(--r-main-800);
575
+ background-color: var(--r-main-50);
530
576
  z-index: 1;
531
577
  box-sizing: border-box;
532
578
  }
579
+ @media screen and (width >= 768px) {
580
+ .r-sidebar-btn {
581
+ display: none;
582
+ }
583
+ }
533
584
 
534
- .r-dropdown-chevron {
535
- display: block;
536
- margin-left: 6px;
537
- transition: transform 0.3s 0.1s;
585
+ .r-sidebar-chevron {
586
+ display: inline;
587
+ margin-right: 6px;
588
+ transition: transform 0.2s;
538
589
  box-sizing: border-box;
539
590
  }
540
591
 
541
- .r-dropdown-drop {
542
- list-style: none;
543
- position: absolute;
544
- top: 16px;
545
- left: -12px;
546
- visibility: hidden;
547
- pointer-events: none;
548
- opacity: 0;
549
- transition: transform 0.3s 0.1s, opacity 0.3s 0.1s, visibility 0.3s 0.1s;
550
- background-color: var(--r-main-50);
551
- border: 1px solid var(--r-main-100);
552
- border-radius: 8px;
553
- margin: 0;
554
- padding: 2px 6px;
555
- min-width: 120px;
556
- max-width: 180px;
557
- box-sizing: border-box;
592
+ .r-sidebar-input:checked ~ .r-sidebar-btn .r-sidebar-chevron {
593
+ transform: rotate(90deg);
558
594
  }
559
595
 
560
- .r-dropdown-link {
561
- display: block;
562
- width: 100%;
563
- text-decoration: none;
596
+ .r-sidebar-list {
564
597
  color: var(--r-main-700);
565
- padding: 4px 8px;
566
- margin-top: 4px;
567
- margin-bottom: 4px;
568
- border-radius: 4px;
569
- transition: background-color 0.2s;
598
+ list-style: none;
599
+ padding: 0;
600
+ margin: 0;
601
+ font-size: 14px;
570
602
  box-sizing: border-box;
571
603
  }
572
- .r-dropdown-link:hover {
604
+
605
+ .r-sidebar-drop::details-content {
606
+ overflow: hidden;
607
+ transition: content-visibility 0.4s allow-discrete;
608
+ box-sizing: border-box;
609
+ }
610
+
611
+ .r-sidebar-sublist {
612
+ margin-left: 12px;
613
+ }
614
+
615
+ .r-sidebar-drop > .r-sidebar-sublist {
616
+ opacity: 0;
617
+ transition: opacity 0.2s ease;
618
+ }
619
+
620
+ .r-sidebar-drop[open] > .r-sidebar-sublist {
621
+ opacity: 1;
622
+ }
623
+
624
+ .r-sidebar-drop > .r-sidebar-sublist > .r-sidebar-li {
625
+ margin-top: -4rem;
626
+ transition: margin-top 0.3s ease;
627
+ }
628
+
629
+ @starting-style {
630
+ .r-sidebar-drop[open]._starting-style > .r-sidebar-sublist > .r-sidebar-li {
631
+ margin-top: -4rem;
632
+ }
633
+ }
634
+
635
+ .r-sidebar-drop[open] > .r-sidebar-sublist > .r-sidebar-li {
636
+ margin-top: 0;
637
+ }
638
+
639
+ .r-sidebar-sublist .r-sidebar-link {
640
+ position: relative;
641
+ border-top-left-radius: 0;
642
+ border-bottom-left-radius: 0;
643
+ box-sizing: border-box;
644
+ }
645
+ .r-sidebar-sublist .r-sidebar-link::before {
646
+ content: "";
647
+ position: absolute;
648
+ left: 0;
649
+ top: -1px;
650
+ width: 1px;
651
+ height: calc(100% + 4px);
652
+ background-color: var(--r-main-200);
653
+ transition: background-color 0.2s cubic-bezier(0, 0.66, 0.58, 1) 0.05s;
654
+ box-sizing: border-box;
655
+ }
656
+
657
+ .r-sidebar-li {
658
+ position: relative;
659
+ line-height: 1.5;
660
+ }
661
+
662
+ .r-sidebar-li._separator {
663
+ background: var(--r-main-200);
664
+ padding: 1px;
665
+ }
666
+
667
+ .r-sidebar-li._droppable > a {
668
+ padding-right: 32px;
669
+ }
670
+
671
+ .r-sidebar-li-d0 {
672
+ margin-left: -8px;
673
+ }
674
+
675
+ .r-sidebar-p {
676
+ margin: 0;
677
+ padding: 4px 10px;
678
+ }
679
+
680
+ .r-sidebar-heading {
573
681
  color: var(--r-main-900);
682
+ font-weight: 600;
683
+ margin-block-end: 4px;
684
+ }
685
+ .r-sidebar-heading:not(:first-child) {
686
+ margin-block-start: 12px;
687
+ }
688
+
689
+ .r-sidebar-link {
690
+ padding: 4px 10px;
691
+ color: inherit;
692
+ border-bottom: 2px solid transparent;
693
+ border-radius: 2px;
694
+ text-decoration: none;
695
+ display: -webkit-box;
696
+ -webkit-box-orient: vertical;
697
+ -webkit-line-clamp: 3;
698
+ overflow: hidden;
699
+ transition: background-color 0.2s cubic-bezier(0, 0.66, 0.58, 1) 0.05s, color 0.2s cubic-bezier(0, 0.66, 0.58, 1) 0.05s;
700
+ }
701
+
702
+ .r-sidebar-link._target {
703
+ color: var(--r-primary-950);
704
+ background-color: var(--r-main-50);
705
+ }
706
+
707
+ .r-sidebar-link:hover {
708
+ color: var(--r-primary-800);
574
709
  background-color: var(--r-main-100);
710
+ transition-delay: initial;
711
+ }
712
+ .r-sidebar-link:hover::before {
713
+ background-color: currentColor;
714
+ transition-delay: initial;
575
715
  }
576
716
 
577
- .r-dropdown-link._active {
717
+ .r-sidebar-link._active {
578
718
  color: var(--r-primary-700);
719
+ background-color: var(--r-main-50);
720
+ }
721
+ .r-sidebar-link._active::before {
722
+ background-color: currentColor;
723
+ }
724
+
725
+ .r-sidebar-drop-btn {
726
+ position: absolute;
727
+ right: 3px;
728
+ top: 5px;
729
+ border-radius: 4px;
730
+ padding: 4px;
731
+ list-style: none;
732
+ cursor: pointer;
733
+ transition: color 0.2s cubic-bezier(0, 0.66, 0.58, 1) 0.05s;
734
+ }
735
+ .r-sidebar-drop-btn:hover {
736
+ color: var(--r-primary-500);
737
+ transition-delay: initial;
738
+ }
739
+ .r-sidebar-drop-btn::before {
740
+ content: "";
741
+ position: absolute;
742
+ inset: -4px;
743
+ }
744
+ .r-sidebar-drop-btn::-webkit-details-marker {
745
+ display: none;
746
+ }
747
+
748
+ .r-sidebar-drop-icon {
749
+ display: block;
750
+ transition: transform 0.2s;
751
+ }
752
+
753
+ .r-sidebar-drop[open] > .r-sidebar-drop-btn > .r-sidebar-drop-icon {
754
+ transform: rotate(90deg);
755
+ }.r-header-menu {
756
+ display: flex;
757
+ justify-content: flex-end;
758
+ order: 1;
759
+ }
760
+ @media screen and (width >= 1024px) {
761
+ .r-header-menu {
762
+ flex: 1;
763
+ order: unset;
764
+ }
765
+ }
766
+
767
+ .r-header-input:checked ~ .r-header-burger ~ .r-header-responsive {
768
+ display: flex;
769
+ }
770
+
771
+ .r-header-responsive {
772
+ display: none;
773
+ justify-content: flex-end;
774
+ flex: 1;
775
+ gap: 24px;
776
+ z-index: 1;
777
+ }
778
+ @media screen and (width < 1024px) {
779
+ .r-header-responsive {
780
+ flex-direction: column-reverse;
781
+ padding: 12px;
782
+ background-color: var(--r-main-50);
783
+ position: fixed;
784
+ top: 60px;
785
+ right: 0;
786
+ bottom: 0;
787
+ left: 0;
788
+ }
789
+ }
790
+ @media screen and (width >= 1024px) {
791
+ .r-header-responsive {
792
+ display: flex;
793
+ justify-content: space-between;
794
+ align-items: center;
795
+ }
796
+ }
797
+
798
+ .r-header-burger {
799
+ position: relative;
800
+ display: flex;
801
+ align-items: center;
802
+ justify-content: center;
803
+ height: 32px;
804
+ width: 32px;
805
+ cursor: pointer;
806
+ background: none;
807
+ border: none;
808
+ box-sizing: border-box;
809
+ }
810
+ @media screen and (width >= 1024px) {
811
+ .r-header-burger {
812
+ display: none;
813
+ }
814
+ }
815
+
816
+ .r-burger-line {
817
+ display: block;
818
+ width: 20px;
819
+ height: 1.5px;
820
+ position: absolute;
821
+ background-color: var(--r-main-700);
822
+ margin: auto;
823
+ transition: transform 0.3s;
824
+ box-sizing: border-box;
825
+ }
826
+
827
+ .r-burger-line._top {
828
+ transform: translateY(-3px);
829
+ }
830
+
831
+ .r-header-input:checked ~ .r-header-burger .r-burger-line._top {
832
+ transform: translateY(0) rotate(45deg);
833
+ margin-top: 0;
834
+ }
835
+
836
+ .r-burger-line._bottom {
837
+ transform: translateY(3px);
838
+ }
839
+
840
+ .r-header-input:checked ~ .r-header-burger .r-burger-line._bottom {
841
+ transform: translateY(0) rotate(-45deg);
842
+ margin-top: 0;
579
843
  }.r-search-btn {
580
844
  position: relative;
581
845
  border-radius: 6px;
@@ -759,440 +1023,176 @@
759
1023
  font-size: 14px;
760
1024
  color: var(--r-main-600);
761
1025
  margin: 12px 0 0;
762
- }.r-container {
763
- max-width: 1180px;
764
- padding-right: 12px;
765
- padding-left: 12px;
766
- margin-right: auto;
767
- margin-left: auto;
768
- box-sizing: border-box;
769
- }.r-header-social {
770
- display: flex;
771
- flex: 1;
772
- justify-content: flex-end;
773
- }
774
- @media screen and (width >= 1024px) {
775
- .r-header-social {
776
- flex: none;
777
- justify-content: unset;
778
- }
779
- }
780
-
781
- .r-header-social-git {
782
- color: var(--r-main-700);
783
- transition: color 0.2s;
784
- }
785
- .r-header-social-git:hover, .r-header-social-git:focus {
786
- color: var(--r-main-950);
787
- }.r-theme-switcher {
1026
+ }.r-dropdown {
788
1027
  position: relative;
789
- display: flex;
790
- gap: 4px;
791
- width: 109px;
792
- height: 37px;
793
- padding: 2px;
794
- background-color: var(--r-main-100);
795
- border: 1px solid var(--r-main-200);
796
- border-radius: 100px;
797
- box-sizing: border-box;
798
- }
799
- .r-theme-switcher::before {
800
- content: "";
801
- position: absolute;
802
- display: block;
803
- height: 32px;
804
- width: 32px;
805
- top: 2px;
806
- left: 2px;
807
- background-color: var(--r-main-50);
808
- border: 1px solid var(--r-main-200);
809
- border-radius: 100px;
810
- transition: left 0.2s;
811
- box-sizing: border-box;
812
- }
813
-
814
- .r-theme-switcher-btn {
815
- padding: 8px;
816
- background: none;
817
- border: 0;
818
- border-radius: 100px;
819
- cursor: pointer;
820
- color: var(--r-main-700);
821
- fill: transparent;
822
- z-index: 1;
823
- transition: color 0.2s 0.1s, fill 0.2s;
824
- }
825
- .r-theme-switcher-btn:hover {
826
- color: var(--r-main-950);
827
- fill: var(--r-main-600);
828
- }
829
-
830
- .r-theme-dark:not(.r-theme-system) .r-theme-switcher::before {
831
- left: 2px;
1028
+ color: var(--r-main-600);
1029
+ transition: color 0.2s 0.1s;
832
1030
  }
833
-
834
- .r-theme-dark:not(.r-theme-system) .r-theme-switcher-btn__dark,
835
- .r-theme-system .r-theme-switcher-btn__system,
836
- .r-theme-light:not(.r-theme-system) .r-theme-switcher-btn__light {
1031
+ .r-dropdown:hover, .r-dropdown:focus-within {
837
1032
  color: var(--r-main-950);
838
- fill: var(--r-main-950);
839
- pointer-events: none;
840
- }
841
-
842
- .r-theme-switcher::before,
843
- .r-theme-system .r-theme-switcher::before {
844
- left: 38px;
845
- }
846
-
847
- .r-theme-light:not(.r-theme-system) .r-theme-switcher::before {
848
- left: 74px;
849
- }
850
-
851
- .r-theme-switcher-svg {
852
- display: block;
853
- }.r-article {
854
- padding: 20px 0 40px;
855
- grid-area: content;
856
- }
857
- @media screen and (width >= 1180px) {
858
- .r-article {
859
- padding: 32px 0 40px;
860
- }
861
- }
862
- .r-article > *:first-child {
863
- margin-top: 0;
864
- }
865
- .r-article > *:last-child {
866
- margin-bottom: 0;
867
- }
868
-
869
- .r-checkbox {
870
- cursor: pointer;
871
- width: 20px;
872
- height: 20px;
873
- margin: 4px;
874
- vertical-align: middle;
875
- box-sizing: border-box;
876
- }
877
-
878
- .r-label {
879
- cursor: pointer;
880
- }
881
-
882
- .r-task-ol,
883
- .r-task-ul {
884
- list-style: none;
885
- }
886
-
887
- .r-task-label {
888
- display: block;
889
- width: 100%;
890
- padding-top: 2px;
891
- padding-bottom: 2px;
892
- box-sizing: border-box;
893
- }
894
- .r-task-label:hover .r-checkbox {
895
- filter: brightness(0.8);
896
- }
897
-
898
- .r-task-li.r-task-li {
899
- margin-block-start: 2px;
900
- margin-block-end: 2px;
901
- }
902
-
903
- .r-label-text {
904
- vertical-align: middle;
905
- }.r-sidebar {
906
- grid-area: sidebar;
907
- box-sizing: border-box;
908
- }
909
- @media screen and (width < 768px) {
910
- .r-sidebar {
911
- position: sticky;
912
- width: calc(100% + 24px);
913
- top: var(--r-header-height);
914
- left: 0;
915
- margin: 0 -12px;
916
- background-color: var(--r-main-50);
917
- border-bottom: 1px solid var(--r-main-200);
918
- z-index: 10;
919
- opacity: 0.98;
920
- padding: 0;
921
- overflow: auto;
922
- }
923
- }
924
-
925
- .r-sidebar-top-mock {
926
- grid-row-start: 1;
927
- grid-column-start: 1;
928
- }
929
-
930
- @media screen and (width < 768px) {
931
- .r-sidebar-input:not(:checked) ~ .r-sidebar-btn ~ .r-sidebar-nav {
932
- display: none;
933
- }
934
- }
935
-
936
- .r-sidebar-nav {
937
- box-sizing: border-box;
938
- }
939
- @media screen and (width < 768px) {
940
- .r-sidebar-nav {
941
- overflow: auto;
942
- max-height: calc(100dvh - var(--r-header-height) - 41px);
943
- }
944
- }
945
-
946
- .r-sidebar-drop {
947
- margin-top: -4px;
948
- padding-top: 4px;
949
- }
950
-
951
- .r-sidebar-sublist {
952
- position: relative;
953
- padding-top: 2px;
954
- }
955
- .r-sidebar-sublist:hover::before {
956
- background-color: var(--r-primary-800);
957
- transition-delay: initial;
958
- }
959
-
960
- .r-sidebar-sublist::before {
961
- content: "";
962
- position: absolute;
963
- top: 0;
964
- left: -12px;
965
- right: 0;
966
- height: 2px;
967
- border-bottom-left-radius: 2px;
968
- background-color: var(--r-main-200);
969
- z-index: 1;
970
- transition: background-color 0.2s cubic-bezier(0, 0.66, 0.58, 1) 0.05s;
971
- box-sizing: border-box;
972
- }
973
-
974
- .r-sidebar-nav {
975
- padding: 32px 4px 32px 2px;
976
- box-sizing: border-box;
977
- }
978
- @media screen and (width < 768px) {
979
- .r-sidebar-nav {
980
- padding: 12px;
981
- }
982
- }
983
- @media screen and (width >= 768px) {
984
- .r-sidebar-nav {
985
- position: sticky;
986
- top: var(--r-header-height);
987
- overflow: auto;
988
- scrollbar-width: thin;
989
- scrollbar-color: var(--r-main-200) transparent;
990
- scrollbar-gutter: stable;
991
- max-height: calc(100dvh - var(--r-header-height));
992
- }
993
1033
  }
994
-
995
- .r-sidebar-space {
996
- box-sizing: border-box;
1034
+ .r-dropdown:hover .r-dropdown-drop, .r-dropdown:focus-within .r-dropdown-drop {
1035
+ visibility: visible;
1036
+ pointer-events: all;
1037
+ transform: translateY(20px);
1038
+ opacity: 1;
997
1039
  }
998
- @media screen and (width < 768px) {
999
- .r-sidebar-space {
1000
- display: block;
1001
- height: 40px;
1002
- }
1040
+ .r-dropdown:hover .r-dropdown-chevron, .r-dropdown:focus-within .r-dropdown-chevron {
1041
+ transform: rotate(180deg);
1003
1042
  }
1004
1043
 
1005
- .r-sidebar-btn {
1006
- position: sticky;
1007
- top: 0;
1044
+ .r-dropdown-summary {
1008
1045
  display: flex;
1046
+ justify-content: space-between;
1047
+ align-items: center;
1009
1048
  width: 100%;
1010
- font-size: 14px;
1049
+ position: relative;
1050
+ color: inherit;
1051
+ cursor: pointer;
1052
+ padding: 10px 4px;
1053
+ font-size: 16px;
1011
1054
  border: 0;
1012
- padding: 12px;
1013
1055
  background: none;
1014
- cursor: pointer;
1015
- color: var(--r-main-800);
1016
- background-color: var(--r-main-50);
1017
1056
  z-index: 1;
1018
1057
  box-sizing: border-box;
1019
1058
  }
1020
- @media screen and (width >= 768px) {
1021
- .r-sidebar-btn {
1022
- display: none;
1023
- }
1024
- }
1025
-
1026
- .r-sidebar-chevron {
1027
- display: inline;
1028
- margin-right: 6px;
1029
- transition: transform 0.2s;
1030
- box-sizing: border-box;
1031
- }
1032
-
1033
- .r-sidebar-input:checked ~ .r-sidebar-btn .r-sidebar-chevron {
1034
- transform: rotate(90deg);
1035
- }
1036
-
1037
- .r-sidebar-list {
1038
- color: var(--r-main-700);
1039
- list-style: none;
1040
- padding: 0;
1041
- margin: 0;
1042
- font-size: 14px;
1043
- box-sizing: border-box;
1044
- }
1045
-
1046
- .r-sidebar-drop::details-content {
1047
- overflow: hidden;
1048
- transition: content-visibility 0.4s allow-discrete;
1049
- box-sizing: border-box;
1050
- }
1051
-
1052
- .r-sidebar-sublist {
1053
- margin-left: 12px;
1054
- }
1055
-
1056
- .r-sidebar-drop > .r-sidebar-sublist {
1057
- opacity: 0;
1058
- transition: opacity 0.2s ease;
1059
- }
1060
-
1061
- .r-sidebar-drop[open] > .r-sidebar-sublist {
1062
- opacity: 1;
1063
- }
1064
-
1065
- .r-sidebar-drop > .r-sidebar-sublist > .r-sidebar-li {
1066
- margin-top: -4rem;
1067
- transition: margin-top 0.3s ease;
1068
- }
1069
-
1070
- @starting-style {
1071
- .r-sidebar-drop[open]._starting-style > .r-sidebar-sublist > .r-sidebar-li {
1072
- margin-top: -4rem;
1073
- }
1074
- }
1075
-
1076
- .r-sidebar-drop[open] > .r-sidebar-sublist > .r-sidebar-li {
1077
- margin-top: 0;
1078
- }
1079
1059
 
1080
- .r-sidebar-sublist .r-sidebar-link {
1081
- position: relative;
1082
- border-top-left-radius: 0;
1083
- border-bottom-left-radius: 0;
1084
- box-sizing: border-box;
1085
- }
1086
- .r-sidebar-sublist .r-sidebar-link::before {
1087
- content: "";
1088
- position: absolute;
1089
- left: 0;
1090
- top: -1px;
1091
- width: 1px;
1092
- height: calc(100% + 4px);
1093
- background-color: var(--r-main-200);
1094
- transition: background-color 0.2s cubic-bezier(0, 0.66, 0.58, 1) 0.05s;
1060
+ .r-dropdown-chevron {
1061
+ display: block;
1062
+ margin-left: 6px;
1063
+ transition: transform 0.3s 0.1s;
1095
1064
  box-sizing: border-box;
1096
1065
  }
1097
1066
 
1098
- .r-sidebar-li {
1099
- position: relative;
1100
- line-height: 1.5;
1101
- }
1102
-
1103
- .r-sidebar-li._separator {
1104
- background: var(--r-main-200);
1105
- padding: 1px;
1106
- }
1107
-
1108
- .r-sidebar-li._droppable > a {
1109
- padding-right: 32px;
1110
- }
1111
-
1112
- .r-sidebar-li-d0 {
1113
- margin-left: -8px;
1114
- }
1115
-
1116
- .r-sidebar-p {
1117
- margin: 0;
1118
- padding: 4px 10px;
1119
- }
1120
-
1121
- .r-sidebar-heading {
1122
- color: var(--r-main-900);
1123
- font-weight: 600;
1124
- margin-block-end: 4px;
1125
- }
1126
- .r-sidebar-heading:not(:first-child) {
1127
- margin-block-start: 12px;
1128
- }
1129
-
1130
- .r-sidebar-link {
1131
- padding: 4px 10px;
1132
- color: inherit;
1133
- border-bottom: 2px solid transparent;
1134
- border-radius: 2px;
1135
- text-decoration: none;
1136
- display: -webkit-box;
1137
- -webkit-box-orient: vertical;
1138
- -webkit-line-clamp: 3;
1139
- overflow: hidden;
1140
- transition: background-color 0.2s cubic-bezier(0, 0.66, 0.58, 1) 0.05s, color 0.2s cubic-bezier(0, 0.66, 0.58, 1) 0.05s;
1141
- }
1142
-
1143
- .r-sidebar-link._target {
1144
- color: var(--r-primary-950);
1067
+ .r-dropdown-drop {
1068
+ list-style: none;
1069
+ position: absolute;
1070
+ top: 16px;
1071
+ left: -12px;
1072
+ visibility: hidden;
1073
+ pointer-events: none;
1074
+ opacity: 0;
1075
+ transition: transform 0.3s 0.1s, opacity 0.3s 0.1s, visibility 0.3s 0.1s;
1145
1076
  background-color: var(--r-main-50);
1077
+ border: 1px solid var(--r-main-100);
1078
+ border-radius: 8px;
1079
+ margin: 0;
1080
+ padding: 2px 6px;
1081
+ min-width: 120px;
1082
+ max-width: 180px;
1083
+ box-sizing: border-box;
1146
1084
  }
1147
1085
 
1148
- .r-sidebar-link:hover {
1149
- color: var(--r-primary-800);
1150
- background-color: var(--r-main-100);
1151
- transition-delay: initial;
1086
+ .r-dropdown-link {
1087
+ display: block;
1088
+ width: 100%;
1089
+ text-decoration: none;
1090
+ color: var(--r-main-700);
1091
+ padding: 4px 8px;
1092
+ margin-top: 4px;
1093
+ margin-bottom: 4px;
1094
+ border-radius: 4px;
1095
+ transition: background-color 0.2s;
1096
+ box-sizing: border-box;
1152
1097
  }
1153
- .r-sidebar-link:hover::before {
1154
- background-color: currentColor;
1155
- transition-delay: initial;
1098
+ .r-dropdown-link:hover {
1099
+ color: var(--r-main-900);
1100
+ background-color: var(--r-main-100);
1156
1101
  }
1157
1102
 
1158
- .r-sidebar-link._active {
1103
+ .r-dropdown-link._active {
1159
1104
  color: var(--r-primary-700);
1160
- background-color: var(--r-main-50);
1105
+ }.r-header-social {
1106
+ display: flex;
1107
+ flex: 1;
1108
+ justify-content: flex-end;
1161
1109
  }
1162
- .r-sidebar-link._active::before {
1163
- background-color: currentColor;
1110
+ @media screen and (width >= 1024px) {
1111
+ .r-header-social {
1112
+ flex: none;
1113
+ justify-content: unset;
1114
+ }
1164
1115
  }
1165
1116
 
1166
- .r-sidebar-drop-btn {
1167
- position: absolute;
1168
- right: 3px;
1169
- top: 5px;
1170
- border-radius: 4px;
1171
- padding: 4px;
1172
- list-style: none;
1173
- cursor: pointer;
1174
- transition: color 0.2s cubic-bezier(0, 0.66, 0.58, 1) 0.05s;
1117
+ .r-header-social-git {
1118
+ color: var(--r-main-700);
1119
+ transition: color 0.2s;
1175
1120
  }
1176
- .r-sidebar-drop-btn:hover {
1177
- color: var(--r-primary-500);
1178
- transition-delay: initial;
1121
+ .r-header-social-git:hover, .r-header-social-git:focus {
1122
+ color: var(--r-main-950);
1123
+ }.r-container {
1124
+ max-width: 1180px;
1125
+ padding-right: 12px;
1126
+ padding-left: 12px;
1127
+ margin-right: auto;
1128
+ margin-left: auto;
1129
+ box-sizing: border-box;
1130
+ }.r-theme-switcher {
1131
+ position: relative;
1132
+ display: flex;
1133
+ gap: 4px;
1134
+ width: 109px;
1135
+ height: 37px;
1136
+ padding: 2px;
1137
+ background-color: var(--r-main-100);
1138
+ border: 1px solid var(--r-main-200);
1139
+ border-radius: 100px;
1140
+ box-sizing: border-box;
1179
1141
  }
1180
- .r-sidebar-drop-btn::before {
1142
+ .r-theme-switcher::before {
1181
1143
  content: "";
1182
1144
  position: absolute;
1183
- inset: -4px;
1145
+ display: block;
1146
+ height: 32px;
1147
+ width: 32px;
1148
+ top: 2px;
1149
+ left: 2px;
1150
+ background-color: var(--r-main-50);
1151
+ border: 1px solid var(--r-main-200);
1152
+ border-radius: 100px;
1153
+ transition: left 0.2s;
1154
+ box-sizing: border-box;
1184
1155
  }
1185
- .r-sidebar-drop-btn::-webkit-details-marker {
1186
- display: none;
1156
+
1157
+ .r-theme-switcher-btn {
1158
+ padding: 8px;
1159
+ background: none;
1160
+ border: 0;
1161
+ border-radius: 100px;
1162
+ cursor: pointer;
1163
+ color: var(--r-main-700);
1164
+ fill: transparent;
1165
+ z-index: 1;
1166
+ transition: color 0.2s 0.1s, fill 0.2s;
1167
+ }
1168
+ .r-theme-switcher-btn:hover {
1169
+ color: var(--r-main-950);
1170
+ fill: var(--r-main-600);
1187
1171
  }
1188
1172
 
1189
- .r-sidebar-drop-icon {
1190
- display: block;
1191
- transition: transform 0.2s;
1173
+ .r-theme-dark:not(.r-theme-system) .r-theme-switcher::before {
1174
+ left: 2px;
1192
1175
  }
1193
1176
 
1194
- .r-sidebar-drop[open] > .r-sidebar-drop-btn > .r-sidebar-drop-icon {
1195
- transform: rotate(90deg);
1177
+ .r-theme-dark:not(.r-theme-system) .r-theme-switcher-btn__dark,
1178
+ .r-theme-system .r-theme-switcher-btn__system,
1179
+ .r-theme-light:not(.r-theme-system) .r-theme-switcher-btn__light {
1180
+ color: var(--r-main-950);
1181
+ fill: var(--r-main-950);
1182
+ pointer-events: none;
1183
+ }
1184
+
1185
+ .r-theme-switcher::before,
1186
+ .r-theme-system .r-theme-switcher::before {
1187
+ left: 38px;
1188
+ }
1189
+
1190
+ .r-theme-light:not(.r-theme-system) .r-theme-switcher::before {
1191
+ left: 74px;
1192
+ }
1193
+
1194
+ .r-theme-switcher-svg {
1195
+ display: block;
1196
1196
  }.r-keylink {
1197
1197
  display: block;
1198
1198
  position: relative;
@@ -1213,55 +1213,6 @@
1213
1213
  user-select: none;
1214
1214
  pointer-events: none;
1215
1215
  box-sizing: border-box;
1216
- }.r-backdrop {
1217
- position: fixed;
1218
- top: 0;
1219
- right: 0;
1220
- bottom: 0;
1221
- left: 0;
1222
- opacity: 0;
1223
- visibility: hidden;
1224
- pointer-events: none;
1225
- z-index: 100;
1226
- }
1227
-
1228
- .r-backdrop._visible {
1229
- opacity: 1;
1230
- visibility: visible;
1231
- pointer-events: all;
1232
- }.r-external-mark {
1233
- position: relative;
1234
- vertical-align: text-top;
1235
- display: inline-block;
1236
- margin-left: -4px;
1237
- margin-right: 2px;
1238
- width: 6px;
1239
- height: 6px;
1240
- box-sizing: border-box;
1241
- }
1242
- .r-external-mark::after {
1243
- content: "";
1244
- position: absolute;
1245
- top: 0;
1246
- right: 0;
1247
- width: 100%;
1248
- height: 100%;
1249
- border-top: 1px solid currentColor;
1250
- border-right: 1px solid currentColor;
1251
- box-sizing: border-box;
1252
- }
1253
- .r-external-mark::before {
1254
- content: "";
1255
- position: absolute;
1256
- top: 0;
1257
- right: 0;
1258
- width: 3px;
1259
- height: 3px;
1260
- background-color: currentColor;
1261
- border-radius: 0 0 0 4px;
1262
- box-sizing: border-box;
1263
- }.r-git-logo {
1264
- display: block;
1265
1216
  }.r-contents {
1266
1217
  grid-area: contents;
1267
1218
  }
@@ -1542,9 +1493,6 @@
1542
1493
  .r-breadcrumb-title {
1543
1494
  color: var(--r-main-950);
1544
1495
  font-weight: 600;
1545
- }.r-last-modified {
1546
- color: var(--r-main-700);
1547
- margin-block-start: 16px;
1548
1496
  }.r-pagination {
1549
1497
  grid-area: pagination;
1550
1498
  display: grid;
@@ -1617,6 +1565,58 @@
1617
1565
 
1618
1566
  .r-pagination-svg {
1619
1567
  display: block;
1568
+ }.r-last-modified {
1569
+ color: var(--r-main-700);
1570
+ margin-block-start: 16px;
1571
+ }.r-backdrop {
1572
+ position: fixed;
1573
+ top: 0;
1574
+ right: 0;
1575
+ bottom: 0;
1576
+ left: 0;
1577
+ opacity: 0;
1578
+ visibility: hidden;
1579
+ pointer-events: none;
1580
+ z-index: 100;
1581
+ }
1582
+
1583
+ .r-backdrop._visible {
1584
+ opacity: 1;
1585
+ visibility: visible;
1586
+ pointer-events: all;
1587
+ }.r-git-logo {
1588
+ display: block;
1589
+ }.r-external-mark {
1590
+ position: relative;
1591
+ vertical-align: text-top;
1592
+ display: inline-block;
1593
+ margin-left: -4px;
1594
+ margin-right: 2px;
1595
+ width: 6px;
1596
+ height: 6px;
1597
+ box-sizing: border-box;
1598
+ }
1599
+ .r-external-mark::after {
1600
+ content: "";
1601
+ position: absolute;
1602
+ top: 0;
1603
+ right: 0;
1604
+ width: 100%;
1605
+ height: 100%;
1606
+ border-top: 1px solid currentColor;
1607
+ border-right: 1px solid currentColor;
1608
+ box-sizing: border-box;
1609
+ }
1610
+ .r-external-mark::before {
1611
+ content: "";
1612
+ position: absolute;
1613
+ top: 0;
1614
+ right: 0;
1615
+ width: 3px;
1616
+ height: 3px;
1617
+ background-color: currentColor;
1618
+ border-radius: 0 0 0 4px;
1619
+ box-sizing: border-box;
1620
1620
  }.r-kbd-container {
1621
1621
  display: flex;
1622
1622
  gap: 4px;
@@ -2017,15 +2017,15 @@
2017
2017
  padding-inline-start: 2rem;
2018
2018
  margin-block-start: 1em;
2019
2019
  margin-block-end: 1em;
2020
+ }.r-ul {
2021
+ padding-inline-start: 2rem;
2022
+ margin-block-start: 1em;
2023
+ margin-block-end: 1em;
2020
2024
  }.r-table {
2021
2025
  min-width: 100%;
2022
2026
  text-align: left;
2023
2027
  border-collapse: collapse;
2024
2028
  box-sizing: border-box;
2025
- }.r-ul {
2026
- padding-inline-start: 2rem;
2027
- margin-block-start: 1em;
2028
- margin-block-end: 1em;
2029
2029
  }.r-td {
2030
2030
  padding: 6px 12px;
2031
2031
  border-bottom: 1px solid var(--r-main-400);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "robindoc",
3
- "version": "0.0.0-experimental-a217ca0",
3
+ "version": "0.0.0-experimental-b7218c1",
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": {
@@ -36,7 +36,7 @@
36
36
  "clsx": "2.1.1",
37
37
  "dot-prop": "10.1.0",
38
38
  "github-slugger": "2.0.0",
39
- "glob": "13.0.0",
39
+ "tinyglobby": "0.2.15",
40
40
  "gray-matter": "4.0.3",
41
41
  "html-react-parser": "5.2.11",
42
42
  "marked": "17.0.1",