robindoc 0.0.0-experimental-692c301 → 0.0.0-experimental-2c17c72

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.
@@ -3,5 +3,6 @@ export type StructureTemplate = Structure | (() => Structure | Promise<Structure
3
3
  export type Options = {
4
4
  processError?: (status: number, statusText: string) => void | null | never;
5
5
  matcher?: string[];
6
+ cache?: boolean;
6
7
  };
7
8
  //# sourceMappingURL=initialize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"initialize.d.ts","sourceRoot":"","sources":["../../../src/core/types/initialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AAEnF,MAAM,MAAM,OAAO,GAAG;IAClB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IAC3E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC"}
1
+ {"version":3,"file":"initialize.d.ts","sourceRoot":"","sources":["../../../src/core/types/initialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AAEnF,MAAM,MAAM,OAAO,GAAG;IAClB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IAC3E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC"}
@@ -1,7 +1,9 @@
1
1
  import React from "react";
2
+ import { type TreeItem } from "../../components/elements/sidebar/types";
2
3
  import { type ArticleProps as ArticlePropsBase } from "../../components/elements/article";
3
4
  import { type SidebarProps as SidebarPropsBase } from "../../components/elements/sidebar";
4
5
  import { type StructureTemplate, type Options } from "../types/initialize";
6
+ import { type Pages } from "../types/content";
5
7
  type PageProps = Omit<Partial<ArticlePropsBase>, "uri" | "content" | "provider" | "pathname" | "pages"> & {
6
8
  pathname: string;
7
9
  };
@@ -16,6 +18,10 @@ export declare const initializeRobindoc: (structureTemplate: StructureTemplate,
16
18
  raw: string;
17
19
  } | null>;
18
20
  getPageInstruction: (pathname: string) => Promise<import("../types/content").Page | null>;
21
+ revalidate: (background?: boolean) => Promise<{
22
+ pages: Pages;
23
+ tree: TreeItem[];
24
+ }>;
19
25
  };
20
26
  export {};
21
27
  //# sourceMappingURL=initialize-robindoc.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"initialize-robindoc.d.ts","sourceRoot":"","sources":["../../../src/core/utils/initialize-robindoc.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAA0B,KAAK,YAAY,IAAI,gBAAgB,EAAE,0CAAyC;AACjH,OAAO,EAA0B,KAAK,YAAY,IAAI,gBAAgB,EAAE,0CAAyC;AAEjH,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAO3E,KAAK,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,GAAG;IACtG,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAenD,eAAO,MAAM,kBAAkB,GAAI,mBAAmB,iBAAiB,EAAE,UAAS,OAAY;;;sBA0D3D,CAAC,SAAS,MAAM,wBACnC,MAAM,qBACI,CAAC;4BAiBc,MAAM;4BAwBN,MAAM;;;;mCAuBC,MAAM;CAqBrD,CAAC"}
1
+ {"version":3,"file":"initialize-robindoc.d.ts","sourceRoot":"","sources":["../../../src/core/utils/initialize-robindoc.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,KAAK,QAAQ,EAAE,gDAA+C;AACvE,OAAO,EAA0B,KAAK,YAAY,IAAI,gBAAgB,EAAE,0CAAyC;AACjH,OAAO,EAA0B,KAAK,YAAY,IAAI,gBAAgB,EAAE,0CAAyC;AAEjH,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAO9C,KAAK,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,GAAG;IACtG,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAiBnD,eAAO,MAAM,kBAAkB,GAAI,mBAAmB,iBAAiB,EAAE,UAAS,OAAY;;;sBAiE3D,CAAC,SAAS,MAAM,wBACnC,MAAM,qBACI,CAAC;4BAmBc,MAAM;4BA0BN,MAAM;;;;mCAyBC,MAAM;8BAsBX,OAAO;eA9KN,KAAK;cAAQ,QAAQ,EAAE;;CA8LlE,CAAC"}
@@ -1,2 +1,2 @@
1
- import r from"react";import{Article as t}from"../../components/elements/article/index.js";import{Sidebar as e}from"../../components/elements/sidebar/index.js";import{parseStructure as o}from"./parse-structure.js";import{getConfiguration as s}from"./get-configuration.js";import{getMetadata as n}from"./get-metadata.js";import{normalizePathname as a,removeTrailingSlash as c}from"./path-tools.js";import{loadContent as i}from"./load-content.js";const p=(p,u={})=>{const l=(async r=>{let t;t="function"==typeof r?await r():r;const e=s(t.configuration||{});return o(t.items||[],e)})(p),m=u.matcher?.map(r=>new RegExp(`^${r.replace(/^\^|\$$/g,"")}$`));return{Page:async({pathname:e,...o})=>{const s=a(e);if(m&&!m.every(r=>r.test(e))){const r=`Pathname "${s}" doesn't pass matcher rules check`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}const{pages:n}=await l,c=n[s];if(!c){const r=`Can not find data for "${s}". Please check structure`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}const i=Object.keys(n),p=i.indexOf(s),f=i[p-1],h=p<i.length-1&&i[p+1],d=f&&{pathname:f,title:n[f].title},g=h&&{pathname:h,title:n[h].title},w=c.crumbs.map(r=>({title:n[r].title,pathname:r})),E=Object.entries(n).reduce((r,[t,{origPath:e}])=>(e&&r.push({clientPath:t,origPath:e}),r),[]);return r.createElement(t,{pathname:s,provider:c.configuration.provider,uri:c.uri,title:c.title,breadcrumbs:w,prev:d||void 0,next:g||void 0,pages:E,...o})},Sidebar:async t=>{const{tree:o}=await l;return r.createElement(e,{tree:o,...t})},getStaticParams:async(r="",t="segments")=>{const{pages:e}=await l,o=Object.keys(e),s=c(r);return o.reduce((r,e)=>e.startsWith(s)?(r.push({[t]:e.substring(s.length+1).split("/")}),r):r,[])},getMetadata:async r=>{const t=a(r);if(m&&!m.every(t=>t.test(r))){const r=`Pathname "${t}" doesn't pass matcher rules check`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}const{pages:e}=await l,o=e[t];if(!o){const r=`Can not find data for "${t}". Please check structure`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}return await n({uri:o.uri,provider:o.configuration.provider})},getPageData:async r=>{const t=a(r);if(m&&!m.every(t=>t.test(r))){const r=`Pathname "${t}" doesn't pass matcher rules check`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}const{pages:e}=await l,o=e[t];if(!o){const r=`Can not find data for "${t}". Please check structure`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}const s=o.title,{data:n}=await i(o.uri,o.configuration.provider);return{title:s,raw:n}},getPageInstruction:async r=>{const t=a(r);if(m&&!m.every(t=>t.test(r))){const r=`Pathname "${t}" doesn't pass matcher rules check`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}const{pages:e}=await l,o=e[t];if(!o){const r=`Can not find data for "${t}". Please check structure`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}return o}}};export{p as initializeRobindoc};
1
+ import r from"react";import{Article as t}from"../../components/elements/article/index.js";import{Sidebar as e}from"../../components/elements/sidebar/index.js";import{parseStructure as a}from"./parse-structure.js";import{getConfiguration as o}from"./get-configuration.js";import{getMetadata as s}from"./get-metadata.js";import{normalizePathname as n,removeTrailingSlash as c}from"./path-tools.js";import{loadContent as i}from"./load-content.js";const u=async r=>{let t;t="function"==typeof r?await r():r;const e=o(t.configuration||{});return a(t.items||[],e)},p=(a,o={})=>{let p=u(a).then(r=>(p=r,r));const l=o.matcher?.map(r=>new RegExp(`^${r.replace(/^\^|\$$/g,"")}$`)),h=async r=>{if("then"in p)return p;if(r){const r=await u(a);p=r}else p=u(a).then(r=>(p=r,r));return p};return{Page:async({pathname:e,...a})=>{const s=n(e);if(l&&!l.every(r=>r.test(e))){const r=`Pathname "${s}" doesn't pass matcher rules check`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}o.cache||await h(!0);const{pages:c}=await p,i=c[s];if(!i){const r=`Can not find data for "${s}". Please check structure`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}const u=Object.keys(c),m=u.indexOf(s),f=u[m-1],w=m<u.length-1&&u[m+1],d=f&&{pathname:f,title:c[f].title},g=w&&{pathname:w,title:c[w].title},E=i.crumbs.map(r=>({title:c[r].title,pathname:r})),y=Object.entries(c).reduce((r,[t,{origPath:e}])=>(e&&r.push({clientPath:t,origPath:e}),r),[]);return r.createElement(t,{pathname:s,provider:i.configuration.provider,uri:i.uri,title:i.title,breadcrumbs:E,prev:d||void 0,next:g||void 0,pages:y,...a})},Sidebar:async t=>{o.cache||await h(!0);const{tree:a}=await p;return r.createElement(e,{tree:a,...t})},getStaticParams:async(r="",t="segments")=>{o.cache||await h(!0);const{pages:e}=await p,a=Object.keys(e),s=c(r);return a.reduce((r,e)=>e.startsWith(s)?(r.push({[t]:e.substring(s.length+1).split("/")}),r):r,[])},getMetadata:async r=>{const t=n(r);if(l&&!l.every(t=>t.test(r))){const r=`Pathname "${t}" doesn't pass matcher rules check`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}o.cache||await h(!0);const{pages:e}=await p,a=e[t];if(!a){const r=`Can not find data for "${t}". Please check structure`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}return await s({uri:a.uri,provider:a.configuration.provider})},getPageData:async r=>{const t=n(r);if(l&&!l.every(t=>t.test(r))){const r=`Pathname "${t}" doesn't pass matcher rules check`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}o.cache||await h(!0);const{pages:e}=await p,a=e[t];if(!a){const r=`Can not find data for "${t}". Please check structure`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}const s=a.title,{data:c}=await i(a.uri,a.configuration.provider);return{title:s,raw:c}},getPageInstruction:async r=>{const t=n(r);if(l&&!l.every(t=>t.test(r))){const r=`Pathname "${t}" doesn't pass matcher rules check`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}o.cache||await h(!0);const{pages:e}=await p,a=e[t];if(!a){const r=`Can not find data for "${t}". Please check structure`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}return a},revalidate:h}};export{p as initializeRobindoc};
2
2
  //# sourceMappingURL=initialize-robindoc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"initialize-robindoc.js","sources":["../../../src/core/utils/initialize-robindoc.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { Article as ArticleBase, type ArticleProps as ArticlePropsBase } from \"@src/components/elements/article\";\nimport { Sidebar as SidebarBase, type SidebarProps as SidebarPropsBase } from \"@src/components/elements/sidebar\";\n\nimport { type StructureTemplate, type Options } from \"../types/initialize\";\nimport { parseStructure } from \"./parse-structure\";\nimport { getConfiguration } from \"./get-configuration\";\nimport { getMetadata as getMetadataBase } from \"./get-metadata\";\nimport { normalizePathname, removeTrailingSlash } from \"./path-tools\";\nimport { loadContent } from \"./load-content\";\n\ntype PageProps = Omit<Partial<ArticlePropsBase>, \"uri\" | \"content\" | \"provider\" | \"pathname\" | \"pages\"> & {\n pathname: string;\n};\n\ntype SidebarProps = Omit<SidebarPropsBase, \"tree\">;\n\nconst loadStructure = async (structureTemplate: StructureTemplate) => {\n let structure;\n if (typeof structureTemplate === \"function\") {\n structure = await structureTemplate();\n } else {\n structure = structureTemplate;\n }\n\n const configuration = getConfiguration(structure.configuration || {});\n\n return parseStructure(structure.items || [], configuration);\n};\n\nexport const initializeRobindoc = (structureTemplate: StructureTemplate, options: Options = {}) => {\n const structureParsedPromise = loadStructure(structureTemplate);\n const matchingRules = options.matcher?.map((rule) => new RegExp(`^${rule.replace(/^\\^|\\$$/g, \"\")}$`));\n\n const Page: React.FC<PageProps> = async ({ pathname, ...props }) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const paths = Object.keys(pages);\n const targetPageIndex = paths.indexOf(pathnameNormalized);\n const prevPagePathname = paths[targetPageIndex - 1];\n const nextPagePathname = targetPageIndex < paths.length - 1 && paths[targetPageIndex + 1];\n const prev = prevPagePathname && { pathname: prevPagePathname, title: pages[prevPagePathname].title };\n const next = nextPagePathname && { pathname: nextPagePathname, title: pages[nextPagePathname].title };\n\n const breadcrumbs = pageInstruction.crumbs.map((crumb) => ({ title: pages[crumb].title, pathname: crumb }));\n const clientPages = Object.entries(pages).reduce<{ clientPath: string; origPath: string }[]>(\n (acc, [clientPath, { origPath }]) => {\n if (origPath) acc.push({ clientPath, origPath });\n return acc;\n },\n [],\n );\n\n return (\n <ArticleBase\n pathname={pathnameNormalized}\n provider={pageInstruction.configuration.provider}\n uri={pageInstruction.uri}\n title={pageInstruction.title}\n breadcrumbs={breadcrumbs}\n prev={prev || undefined}\n next={next || undefined}\n pages={clientPages}\n {...props}\n />\n );\n };\n\n const Sidebar: React.FC<SidebarProps> = async (props) => {\n const { tree } = await structureParsedPromise;\n\n return <SidebarBase tree={tree} {...props} />;\n };\n\n const getStaticParams = async <T extends string = \"segments\">(\n prefix: string = \"\",\n segmentsParamKey: T = \"segments\" as T,\n ) => {\n const { pages } = await structureParsedPromise;\n const pagesArr = Object.keys(pages);\n const prefixWithoutTrailingSlash = removeTrailingSlash(prefix);\n\n return pagesArr.reduce<Record<T, string[]>[]>((acc, cur) => {\n if (!cur.startsWith(prefixWithoutTrailingSlash)) return acc;\n\n acc.push({\n [segmentsParamKey]: cur.substring(prefixWithoutTrailingSlash.length + 1).split(\"/\"),\n } as Record<T, string[]>);\n\n return acc;\n }, []);\n };\n\n const getMetadata = async (pathname: string) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const metadata = await getMetadataBase({\n uri: pageInstruction.uri,\n provider: pageInstruction.configuration.provider,\n });\n return metadata;\n };\n\n const getPageData = async (pathname: string) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const title = pageInstruction.title;\n const { data } = await loadContent(pageInstruction.uri, pageInstruction.configuration.provider);\n\n return { title, raw: data };\n };\n\n const getPageInstruction = async (pathname: string) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n return pageInstruction;\n };\n\n return { Page, Sidebar, getStaticParams, getMetadata, getPageData, getPageInstruction };\n};\n"],"names":["initializeRobindoc","structureTemplate","options","structureParsedPromise","async","structure","configuration","getConfiguration","parseStructure","items","loadStructure","matchingRules","matcher","map","rule","RegExp","replace","Page","pathname","props","pathnameNormalized","normalizePathname","every","test","errorMessage","processError","Error","pages","pageInstruction","paths","Object","keys","targetPageIndex","indexOf","prevPagePathname","nextPagePathname","length","prev","title","next","breadcrumbs","crumbs","crumb","clientPages","entries","reduce","acc","clientPath","origPath","push","React","ArticleBase","provider","uri","undefined","Sidebar","tree","createElement","SidebarBase","getStaticParams","prefix","segmentsParamKey","pagesArr","prefixWithoutTrailingSlash","removeTrailingSlash","cur","startsWith","substring","split","getMetadata","getMetadataBase","getPageData","data","loadContent","raw","getPageInstruction"],"mappings":"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"}
1
+ {"version":3,"file":"initialize-robindoc.js","sources":["../../../src/core/utils/initialize-robindoc.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { type TreeItem } from \"@src/components/elements/sidebar/types\";\nimport { Article as ArticleBase, type ArticleProps as ArticlePropsBase } from \"@src/components/elements/article\";\nimport { Sidebar as SidebarBase, type SidebarProps as SidebarPropsBase } from \"@src/components/elements/sidebar\";\n\nimport { type StructureTemplate, type Options } from \"../types/initialize\";\nimport { type Pages } from \"../types/content\";\nimport { parseStructure } from \"./parse-structure\";\nimport { getConfiguration } from \"./get-configuration\";\nimport { getMetadata as getMetadataBase } from \"./get-metadata\";\nimport { normalizePathname, removeTrailingSlash } from \"./path-tools\";\nimport { loadContent } from \"./load-content\";\n\ntype PageProps = Omit<Partial<ArticlePropsBase>, \"uri\" | \"content\" | \"provider\" | \"pathname\" | \"pages\"> & {\n pathname: string;\n};\n\ntype SidebarProps = Omit<SidebarPropsBase, \"tree\">;\n\ntype StructureParsedData = Promise<{ pages: Pages; tree: TreeItem[] }> | { pages: Pages; tree: TreeItem[] };\n\nconst loadStructure = async (structureTemplate: StructureTemplate) => {\n let structure;\n if (typeof structureTemplate === \"function\") {\n structure = await structureTemplate();\n } else {\n structure = structureTemplate;\n }\n\n const configuration = getConfiguration(structure.configuration || {});\n\n return parseStructure(structure.items || [], configuration);\n};\n\nexport const initializeRobindoc = (structureTemplate: StructureTemplate, options: Options = {}) => {\n let structureParsedPromise: StructureParsedData = loadStructure(structureTemplate).then((data) => {\n structureParsedPromise = data;\n return data;\n });\n const matchingRules = options.matcher?.map((rule) => new RegExp(`^${rule.replace(/^\\^|\\$$/g, \"\")}$`));\n\n const Page: React.FC<PageProps> = async ({ pathname, ...props }) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n if (!options.cache) await revalidate(true);\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const paths = Object.keys(pages);\n const targetPageIndex = paths.indexOf(pathnameNormalized);\n const prevPagePathname = paths[targetPageIndex - 1];\n const nextPagePathname = targetPageIndex < paths.length - 1 && paths[targetPageIndex + 1];\n const prev = prevPagePathname && { pathname: prevPagePathname, title: pages[prevPagePathname].title };\n const next = nextPagePathname && { pathname: nextPagePathname, title: pages[nextPagePathname].title };\n\n const breadcrumbs = pageInstruction.crumbs.map((crumb) => ({ title: pages[crumb].title, pathname: crumb }));\n const clientPages = Object.entries(pages).reduce<{ clientPath: string; origPath: string }[]>(\n (acc, [clientPath, { origPath }]) => {\n if (origPath) acc.push({ clientPath, origPath });\n return acc;\n },\n [],\n );\n\n return (\n <ArticleBase\n pathname={pathnameNormalized}\n provider={pageInstruction.configuration.provider}\n uri={pageInstruction.uri}\n title={pageInstruction.title}\n breadcrumbs={breadcrumbs}\n prev={prev || undefined}\n next={next || undefined}\n pages={clientPages}\n {...props}\n />\n );\n };\n\n const Sidebar: React.FC<SidebarProps> = async (props) => {\n if (!options.cache) await revalidate(true);\n\n const { tree } = await structureParsedPromise;\n\n return <SidebarBase tree={tree} {...props} />;\n };\n\n const getStaticParams = async <T extends string = \"segments\">(\n prefix: string = \"\",\n segmentsParamKey: T = \"segments\" as T,\n ) => {\n if (!options.cache) await revalidate(true);\n\n const { pages } = await structureParsedPromise;\n const pagesArr = Object.keys(pages);\n const prefixWithoutTrailingSlash = removeTrailingSlash(prefix);\n\n return pagesArr.reduce<Record<T, string[]>[]>((acc, cur) => {\n if (!cur.startsWith(prefixWithoutTrailingSlash)) return acc;\n\n acc.push({\n [segmentsParamKey]: cur.substring(prefixWithoutTrailingSlash.length + 1).split(\"/\"),\n } as Record<T, string[]>);\n\n return acc;\n }, []);\n };\n\n const getMetadata = async (pathname: string) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n if (!options.cache) await revalidate(true);\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const metadata = await getMetadataBase({\n uri: pageInstruction.uri,\n provider: pageInstruction.configuration.provider,\n });\n return metadata;\n };\n\n const getPageData = async (pathname: string) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n if (!options.cache) await revalidate(true);\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const title = pageInstruction.title;\n const { data } = await loadContent(pageInstruction.uri, pageInstruction.configuration.provider);\n\n return { title, raw: data };\n };\n\n const getPageInstruction = async (pathname: string) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n if (!options.cache) await revalidate(true);\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n return pageInstruction;\n };\n\n const revalidate = async (background?: boolean) => {\n if (\"then\" in structureParsedPromise) return structureParsedPromise;\n\n if (background) {\n const newData = await loadStructure(structureTemplate);\n structureParsedPromise = newData;\n } else {\n structureParsedPromise = loadStructure(structureTemplate).then((data) => {\n structureParsedPromise = data;\n return data;\n });\n }\n return structureParsedPromise;\n };\n\n return { Page, Sidebar, getStaticParams, getMetadata, getPageData, getPageInstruction, revalidate };\n};\n"],"names":["loadStructure","async","structureTemplate","structure","configuration","getConfiguration","parseStructure","items","initializeRobindoc","options","structureParsedPromise","then","data","matchingRules","matcher","map","rule","RegExp","replace","revalidate","background","newData","Page","pathname","props","pathnameNormalized","normalizePathname","every","test","errorMessage","processError","Error","cache","pages","pageInstruction","paths","Object","keys","targetPageIndex","indexOf","prevPagePathname","nextPagePathname","length","prev","title","next","breadcrumbs","crumbs","crumb","clientPages","entries","reduce","acc","clientPath","origPath","push","React","ArticleBase","provider","uri","undefined","Sidebar","tree","createElement","SidebarBase","getStaticParams","prefix","segmentsParamKey","pagesArr","prefixWithoutTrailingSlash","removeTrailingSlash","cur","startsWith","substring","split","getMetadata","getMetadataBase","getPageData","loadContent","raw","getPageInstruction"],"mappings":"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"}
package/lib/styles.css CHANGED
@@ -362,20 +362,6 @@
362
362
  --r-cl-60: #86181d;
363
363
  --r-cl-61: #144620;
364
364
  --r-cl-62: #c24e00;
365
- }.r-blog-container {
366
- min-height: calc(100dvh - var(--r-header-height));
367
- overflow-wrap: break-word;
368
- box-sizing: border-box;
369
- }
370
- @media screen and (width >= 1180px) {
371
- .r-blog-container {
372
- display: grid;
373
- justify-content: space-between;
374
- column-gap: 40px;
375
- grid-template-areas: "breadcrumbs contents" "content contents" "pagination contents";
376
- grid-template-columns: 760px 220px;
377
- grid-template-rows: auto 1fr auto;
378
- }
379
365
  }.r-docs-container {
380
366
  min-height: calc(100dvh - var(--r-header-height));
381
367
  overflow-wrap: break-word;
@@ -402,6 +388,20 @@
402
388
  min-height: calc(100dvh - var(--r-header-height));
403
389
  overflow-wrap: break-word;
404
390
  box-sizing: border-box;
391
+ }.r-blog-container {
392
+ min-height: calc(100dvh - var(--r-header-height));
393
+ overflow-wrap: break-word;
394
+ box-sizing: border-box;
395
+ }
396
+ @media screen and (width >= 1180px) {
397
+ .r-blog-container {
398
+ display: grid;
399
+ justify-content: space-between;
400
+ column-gap: 40px;
401
+ grid-template-areas: "breadcrumbs contents" "content contents" "pagination contents";
402
+ grid-template-columns: 760px 220px;
403
+ grid-template-rows: auto 1fr auto;
404
+ }
405
405
  }.keylink-to-content {
406
406
  position: absolute !important;
407
407
  top: 8px;
@@ -840,110 +840,6 @@
840
840
  .r-header-input:checked ~ .r-header-burger .r-burger-line._bottom {
841
841
  transform: translateY(0) rotate(-45deg);
842
842
  margin-top: 0;
843
- }.r-dropdown {
844
- position: relative;
845
- color: var(--r-main-600);
846
- transition: color 0.2s 0.1s;
847
- }
848
- .r-dropdown:hover, .r-dropdown:focus-within {
849
- color: var(--r-main-950);
850
- }
851
- .r-dropdown:hover .r-dropdown-drop, .r-dropdown:focus-within .r-dropdown-drop {
852
- visibility: visible;
853
- pointer-events: all;
854
- transform: translateY(20px);
855
- opacity: 1;
856
- }
857
- .r-dropdown:hover .r-dropdown-chevron, .r-dropdown:focus-within .r-dropdown-chevron {
858
- transform: rotate(180deg);
859
- }
860
-
861
- .r-dropdown-summary {
862
- display: flex;
863
- justify-content: space-between;
864
- align-items: center;
865
- width: 100%;
866
- position: relative;
867
- color: inherit;
868
- cursor: pointer;
869
- padding: 10px 4px;
870
- font-size: 16px;
871
- border: 0;
872
- background: none;
873
- z-index: 1;
874
- box-sizing: border-box;
875
- }
876
-
877
- .r-dropdown-chevron {
878
- display: block;
879
- margin-left: 6px;
880
- transition: transform 0.3s 0.1s;
881
- box-sizing: border-box;
882
- }
883
-
884
- .r-dropdown-drop {
885
- list-style: none;
886
- position: absolute;
887
- top: 16px;
888
- left: -12px;
889
- visibility: hidden;
890
- pointer-events: none;
891
- opacity: 0;
892
- transition: transform 0.3s 0.1s, opacity 0.3s 0.1s, visibility 0.3s 0.1s;
893
- background-color: var(--r-main-50);
894
- border: 1px solid var(--r-main-100);
895
- border-radius: 8px;
896
- margin: 0;
897
- padding: 2px 6px;
898
- min-width: 120px;
899
- max-width: 180px;
900
- box-sizing: border-box;
901
- }
902
-
903
- .r-dropdown-link {
904
- display: block;
905
- width: 100%;
906
- text-decoration: none;
907
- color: var(--r-main-700);
908
- padding: 4px 8px;
909
- margin-top: 4px;
910
- margin-bottom: 4px;
911
- border-radius: 4px;
912
- transition: background-color 0.2s;
913
- box-sizing: border-box;
914
- }
915
- .r-dropdown-link:hover {
916
- color: var(--r-main-900);
917
- background-color: var(--r-main-100);
918
- }
919
-
920
- .r-dropdown-link._active {
921
- color: var(--r-primary-700);
922
- }.r-header-social {
923
- display: flex;
924
- flex: 1;
925
- justify-content: flex-end;
926
- }
927
- @media screen and (width >= 1024px) {
928
- .r-header-social {
929
- flex: none;
930
- justify-content: unset;
931
- }
932
- }
933
-
934
- .r-header-social-git {
935
- color: var(--r-main-700);
936
- transition: color 0.2s;
937
- }
938
- .r-header-social-git:hover, .r-header-social-git:focus {
939
- color: var(--r-main-950);
940
- }.r-container {
941
- max-width: 1180px;
942
- padding-right: 12px;
943
- padding-left: 12px;
944
- margin-right: auto;
945
- margin-left: auto;
946
- box-sizing: border-box;
947
843
  }.r-search-btn {
948
844
  position: relative;
949
845
  border-radius: 6px;
@@ -1127,6 +1023,110 @@
1127
1023
  font-size: 14px;
1128
1024
  color: var(--r-main-600);
1129
1025
  margin: 12px 0 0;
1026
+ }.r-dropdown {
1027
+ position: relative;
1028
+ color: var(--r-main-600);
1029
+ transition: color 0.2s 0.1s;
1030
+ }
1031
+ .r-dropdown:hover, .r-dropdown:focus-within {
1032
+ color: var(--r-main-950);
1033
+ }
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;
1039
+ }
1040
+ .r-dropdown:hover .r-dropdown-chevron, .r-dropdown:focus-within .r-dropdown-chevron {
1041
+ transform: rotate(180deg);
1042
+ }
1043
+
1044
+ .r-dropdown-summary {
1045
+ display: flex;
1046
+ justify-content: space-between;
1047
+ align-items: center;
1048
+ width: 100%;
1049
+ position: relative;
1050
+ color: inherit;
1051
+ cursor: pointer;
1052
+ padding: 10px 4px;
1053
+ font-size: 16px;
1054
+ border: 0;
1055
+ background: none;
1056
+ z-index: 1;
1057
+ box-sizing: border-box;
1058
+ }
1059
+
1060
+ .r-dropdown-chevron {
1061
+ display: block;
1062
+ margin-left: 6px;
1063
+ transition: transform 0.3s 0.1s;
1064
+ box-sizing: border-box;
1065
+ }
1066
+
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;
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;
1084
+ }
1085
+
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;
1097
+ }
1098
+ .r-dropdown-link:hover {
1099
+ color: var(--r-main-900);
1100
+ background-color: var(--r-main-100);
1101
+ }
1102
+
1103
+ .r-dropdown-link._active {
1104
+ color: var(--r-primary-700);
1105
+ }.r-container {
1106
+ max-width: 1180px;
1107
+ padding-right: 12px;
1108
+ padding-left: 12px;
1109
+ margin-right: auto;
1110
+ margin-left: auto;
1111
+ box-sizing: border-box;
1112
+ }.r-header-social {
1113
+ display: flex;
1114
+ flex: 1;
1115
+ justify-content: flex-end;
1116
+ }
1117
+ @media screen and (width >= 1024px) {
1118
+ .r-header-social {
1119
+ flex: none;
1120
+ justify-content: unset;
1121
+ }
1122
+ }
1123
+
1124
+ .r-header-social-git {
1125
+ color: var(--r-main-700);
1126
+ transition: color 0.2s;
1127
+ }
1128
+ .r-header-social-git:hover, .r-header-social-git:focus {
1129
+ color: var(--r-main-950);
1130
1130
  }.r-theme-switcher {
1131
1131
  position: relative;
1132
1132
  display: flex;
@@ -1254,87 +1254,15 @@
1254
1254
  .r-breadcrumb-title {
1255
1255
  color: var(--r-main-950);
1256
1256
  font-weight: 600;
1257
- }.r-pagination {
1258
- grid-area: pagination;
1259
- display: grid;
1260
- grid-template-columns: repeat(auto-fit, minmax(148px, 1fr));
1261
- gap: 16px;
1262
- margin-bottom: 40px;
1257
+ }.r-contents {
1258
+ grid-area: contents;
1263
1259
  }
1264
1260
 
1265
- .r-pagination-item {
1266
- position: relative;
1267
- padding-top: 8px;
1268
- padding-bottom: 8px;
1269
- text-decoration: none;
1270
- font-size: 14px;
1271
- color: var(--r-main-800);
1272
- }
1273
- .r-pagination-item:hover {
1274
- color: var(--r-main-950);
1275
- }
1276
-
1277
- .r-pagination-item._prev {
1278
- padding-left: 28px;
1279
- }
1280
-
1281
- .r-pagination-item._next {
1282
- text-align: right;
1283
- padding-right: 28px;
1284
- }
1285
-
1286
- .r-pagination-text {
1287
- display: block;
1288
- line-height: 2;
1289
- }
1290
-
1291
- .r-pagination-title {
1292
- font-weight: 600;
1293
- font-size: 16px;
1294
- }
1295
-
1296
- .r-pagination-icon {
1297
- position: absolute;
1298
- top: 50%;
1299
- transform: translateY(-50%);
1300
- transition: transform 0.2s;
1301
- }
1302
-
1303
- .r-pagination-icon._prev {
1304
- left: 0;
1305
- }
1306
- .r-pagination-item:hover .r-pagination-icon._prev {
1307
- transform: translate(-4px, -50%);
1308
- }
1309
- @media screen and (width >= 1180px) {
1310
- .r-pagination-item:hover .r-pagination-icon._prev {
1311
- transform: translate(-8px, -50%);
1312
- }
1313
- }
1314
-
1315
- .r-pagination-icon._next {
1316
- right: 0;
1317
- }
1318
- .r-pagination-item:hover .r-pagination-icon._next {
1319
- transform: translate(4px, -50%);
1320
- }
1321
- @media screen and (width >= 1180px) {
1322
- .r-pagination-item:hover .r-pagination-icon._next {
1323
- transform: translate(8px, -50%);
1324
- }
1325
- }
1326
-
1327
- .r-pagination-svg {
1328
- display: block;
1329
- }.r-contents {
1330
- grid-area: contents;
1331
- }
1332
-
1333
- .r-contents-sticky {
1334
- position: sticky;
1335
- top: var(--r-header-height);
1336
- width: 100%;
1337
- box-sizing: border-box;
1261
+ .r-contents-sticky {
1262
+ position: sticky;
1263
+ top: var(--r-header-height);
1264
+ width: 100%;
1265
+ box-sizing: border-box;
1338
1266
  }
1339
1267
  @media screen and (width >= 1180px) {
1340
1268
  .r-contents-sticky {
@@ -1565,11 +1493,81 @@
1565
1493
  }
1566
1494
  .r-contents-git:hover {
1567
1495
  color: var(--r-main-900);
1496
+ }.r-pagination {
1497
+ grid-area: pagination;
1498
+ display: grid;
1499
+ grid-template-columns: repeat(auto-fit, minmax(148px, 1fr));
1500
+ gap: 16px;
1501
+ margin-bottom: 40px;
1502
+ }
1503
+
1504
+ .r-pagination-item {
1505
+ position: relative;
1506
+ padding-top: 8px;
1507
+ padding-bottom: 8px;
1508
+ text-decoration: none;
1509
+ font-size: 14px;
1510
+ color: var(--r-main-800);
1511
+ }
1512
+ .r-pagination-item:hover {
1513
+ color: var(--r-main-950);
1514
+ }
1515
+
1516
+ .r-pagination-item._prev {
1517
+ padding-left: 28px;
1518
+ }
1519
+
1520
+ .r-pagination-item._next {
1521
+ text-align: right;
1522
+ padding-right: 28px;
1523
+ }
1524
+
1525
+ .r-pagination-text {
1526
+ display: block;
1527
+ line-height: 2;
1528
+ }
1529
+
1530
+ .r-pagination-title {
1531
+ font-weight: 600;
1532
+ font-size: 16px;
1533
+ }
1534
+
1535
+ .r-pagination-icon {
1536
+ position: absolute;
1537
+ top: 50%;
1538
+ transform: translateY(-50%);
1539
+ transition: transform 0.2s;
1540
+ }
1541
+
1542
+ .r-pagination-icon._prev {
1543
+ left: 0;
1544
+ }
1545
+ .r-pagination-item:hover .r-pagination-icon._prev {
1546
+ transform: translate(-4px, -50%);
1547
+ }
1548
+ @media screen and (width >= 1180px) {
1549
+ .r-pagination-item:hover .r-pagination-icon._prev {
1550
+ transform: translate(-8px, -50%);
1551
+ }
1552
+ }
1553
+
1554
+ .r-pagination-icon._next {
1555
+ right: 0;
1556
+ }
1557
+ .r-pagination-item:hover .r-pagination-icon._next {
1558
+ transform: translate(4px, -50%);
1559
+ }
1560
+ @media screen and (width >= 1180px) {
1561
+ .r-pagination-item:hover .r-pagination-icon._next {
1562
+ transform: translate(8px, -50%);
1563
+ }
1564
+ }
1565
+
1566
+ .r-pagination-svg {
1567
+ display: block;
1568
1568
  }.r-last-modified {
1569
1569
  color: var(--r-main-700);
1570
1570
  margin-block-start: 16px;
1571
- }.r-git-logo {
1572
- display: block;
1573
1571
  }.r-backdrop {
1574
1572
  position: fixed;
1575
1573
  top: 0;
@@ -1617,6 +1615,27 @@
1617
1615
  background-color: currentColor;
1618
1616
  border-radius: 0 0 0 4px;
1619
1617
  box-sizing: border-box;
1618
+ }.r-git-logo {
1619
+ display: block;
1620
+ }.r-anchor-heading:hover .r-anchor-heading-link {
1621
+ visibility: visible;
1622
+ opacity: 1;
1623
+ }
1624
+
1625
+ .r-anchor-heading-link {
1626
+ visibility: hidden;
1627
+ opacity: 0;
1628
+ transition: opacity 0.3s allow-discrete;
1629
+ padding-inline: 8px;
1630
+ margin-inline-start: -4px;
1631
+ color: var(--r-main-600);
1632
+ text-decoration: none;
1633
+ }
1634
+ .r-anchor-heading-link:hover {
1635
+ color: var(--r-primary-800);
1636
+ }
1637
+ .r-anchor-heading-link::after {
1638
+ content: "#";
1620
1639
  }.r-code-section {
1621
1640
  position: relative;
1622
1641
  margin-block-start: 1.5em;
@@ -1668,25 +1687,6 @@
1668
1687
 
1669
1688
  .r-code-section-filename {
1670
1689
  font-family: var(--monospace-font, monospace, monospace);
1671
- }.r-anchor-heading:hover .r-anchor-heading-link {
1672
- visibility: visible;
1673
- opacity: 1;
1674
- }
1675
-
1676
- .r-anchor-heading-link {
1677
- visibility: hidden;
1678
- opacity: 0;
1679
- transition: opacity 0.3s allow-discrete;
1680
- padding-inline: 8px;
1681
- margin-inline-start: -4px;
1682
- color: var(--r-main-600);
1683
- text-decoration: none;
1684
- }
1685
- .r-anchor-heading-link:hover {
1686
- color: var(--r-primary-800);
1687
- }
1688
- .r-anchor-heading-link::after {
1689
- content: "#";
1690
1690
  }.r-block {
1691
1691
  width: 100%;
1692
1692
  overflow: auto;
@@ -1882,77 +1882,6 @@
1882
1882
  min-width: 24px;
1883
1883
  text-align: center;
1884
1884
  box-sizing: border-box;
1885
- }.r-copy-button {
1886
- position: relative;
1887
- padding: 6px;
1888
- background: none;
1889
- color: var(--r-main-700);
1890
- border: 0;
1891
- border-radius: 6px;
1892
- cursor: pointer;
1893
- font: inherit;
1894
- transition: color 0.2s, background-color 0.2s;
1895
- }
1896
-
1897
- .r-copy-button-success {
1898
- opacity: 0;
1899
- transform: scale(0.7);
1900
- transition: transform 0.2s;
1901
- }
1902
-
1903
- .r-copy-button-base {
1904
- transition: transform 0.2s;
1905
- }
1906
-
1907
- .r-copy-button:hover {
1908
- color: var(--r-main-950);
1909
- }
1910
-
1911
- .r-copy-button:active,
1912
- .r-copy-button._active {
1913
- color: var(--r-success);
1914
- }
1915
- .r-copy-button:active .r-copy-button-success,
1916
- .r-copy-button._active .r-copy-button-success {
1917
- opacity: 1;
1918
- transform: scale(1);
1919
- }
1920
- .r-copy-button:active .r-copy-button-base,
1921
- .r-copy-button._active .r-copy-button-base {
1922
- opacity: 0;
1923
- transform: scale(0.7);
1924
- }
1925
-
1926
- .r-copy-button-svg {
1927
- display: block;
1928
- }.r-copy-text {
1929
- position: relative;
1930
- cursor: pointer;
1931
- background: none;
1932
- border: 0;
1933
- padding: 0;
1934
- font: inherit;
1935
- padding: 6px 0;
1936
- }
1937
- .r-copy-text:hover {
1938
- color: var(--r-main-950);
1939
- }
1940
- .r-copy-text::before {
1941
- content: "";
1942
- position: absolute;
1943
- bottom: 0;
1944
- left: 0;
1945
- width: 100%;
1946
- height: 1px;
1947
- background: linear-gradient(to right, currentColor 30%, transparent 0%, transparent 80%, currentColor 80%) repeat-x 0px/8px;
1948
- transition: background 0.2s;
1949
- box-sizing: border-box;
1950
- opacity: 0.6;
1951
- }
1952
-
1953
- .r-copy-text:active,
1954
- .r-copy-text._active {
1955
- color: var(--r-success);
1956
1885
  }.r-content-link {
1957
1886
  text-decoration: none;
1958
1887
  color: inherit;
@@ -2002,6 +1931,77 @@
2002
1931
  background-color: currentColor;
2003
1932
  border-radius: 0 0 0 4px;
2004
1933
  box-sizing: border-box;
1934
+ }.r-copy-text {
1935
+ position: relative;
1936
+ cursor: pointer;
1937
+ background: none;
1938
+ border: 0;
1939
+ padding: 0;
1940
+ font: inherit;
1941
+ padding: 6px 0;
1942
+ }
1943
+ .r-copy-text:hover {
1944
+ color: var(--r-main-950);
1945
+ }
1946
+ .r-copy-text::before {
1947
+ content: "";
1948
+ position: absolute;
1949
+ bottom: 0;
1950
+ left: 0;
1951
+ width: 100%;
1952
+ height: 1px;
1953
+ background: linear-gradient(to right, currentColor 30%, transparent 0%, transparent 80%, currentColor 80%) repeat-x 0px/8px;
1954
+ transition: background 0.2s;
1955
+ box-sizing: border-box;
1956
+ opacity: 0.6;
1957
+ }
1958
+
1959
+ .r-copy-text:active,
1960
+ .r-copy-text._active {
1961
+ color: var(--r-success);
1962
+ }.r-copy-button {
1963
+ position: relative;
1964
+ padding: 6px;
1965
+ background: none;
1966
+ color: var(--r-main-700);
1967
+ border: 0;
1968
+ border-radius: 6px;
1969
+ cursor: pointer;
1970
+ font: inherit;
1971
+ transition: color 0.2s, background-color 0.2s;
1972
+ }
1973
+
1974
+ .r-copy-button-success {
1975
+ opacity: 0;
1976
+ transform: scale(0.7);
1977
+ transition: transform 0.2s;
1978
+ }
1979
+
1980
+ .r-copy-button-base {
1981
+ transition: transform 0.2s;
1982
+ }
1983
+
1984
+ .r-copy-button:hover {
1985
+ color: var(--r-main-950);
1986
+ }
1987
+
1988
+ .r-copy-button:active,
1989
+ .r-copy-button._active {
1990
+ color: var(--r-success);
1991
+ }
1992
+ .r-copy-button:active .r-copy-button-success,
1993
+ .r-copy-button._active .r-copy-button-success {
1994
+ opacity: 1;
1995
+ transform: scale(1);
1996
+ }
1997
+ .r-copy-button:active .r-copy-button-base,
1998
+ .r-copy-button._active .r-copy-button-base {
1999
+ opacity: 0;
2000
+ transform: scale(0.7);
2001
+ }
2002
+
2003
+ .r-copy-button-svg {
2004
+ display: block;
2005
2005
  }.r-li {
2006
2006
  line-height: 1.8;
2007
2007
  margin-block-start: 6px;
@@ -2030,17 +2030,13 @@
2030
2030
  padding: 6px 12px;
2031
2031
  border-bottom: 1px solid var(--r-main-400);
2032
2032
  border-collapse: collapse;
2033
+ }.r-thead {
2034
+ background-color: var(--r-main-100);
2033
2035
  }.r-th {
2034
2036
  padding: 6px 12px;
2035
2037
  border-top: 1px solid var(--r-main-500);
2036
2038
  border-bottom: 1px solid var(--r-main-500);
2037
2039
  border-collapse: collapse;
2038
- }.r-thead {
2039
- background-color: var(--r-main-100);
2040
- }.r-task-ol {
2041
- list-style: none;
2042
- }.r-task-ul {
2043
- list-style: none;
2044
2040
  }.r-task-li.r-task-li {
2045
2041
  margin-block-start: 2px;
2046
2042
  margin-block-end: 2px;
@@ -2070,6 +2066,10 @@
2070
2066
 
2071
2067
  .r-task-label-text {
2072
2068
  vertical-align: middle;
2069
+ }.r-task-ol {
2070
+ list-style: none;
2071
+ }.r-task-ul {
2072
+ list-style: none;
2073
2073
  }.r-tooltip {
2074
2074
  font-family: var(--monospace-font, monospace, monospace);
2075
2075
  display: none;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "robindoc",
3
- "version": "0.0.0-experimental-692c301",
3
+ "version": "0.0.0-experimental-2c17c72",
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": {