robindoc 1.2.4 → 2.0.0

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.
Files changed (81) hide show
  1. package/README.md +3 -3
  2. package/lib/components/blocks/breadcrumbs/index.d.ts +0 -1
  3. package/lib/components/blocks/breadcrumbs/index.d.ts.map +1 -1
  4. package/lib/components/blocks/breadcrumbs/index.js +1 -1
  5. package/lib/components/blocks/breadcrumbs/index.js.map +1 -1
  6. package/lib/components/blocks/nav-content-link/index.d.ts +1 -3
  7. package/lib/components/blocks/nav-content-link/index.d.ts.map +1 -1
  8. package/lib/components/blocks/nav-content-link/index.js.map +1 -1
  9. package/lib/components/blocks/nav-link/index.d.ts +17 -5
  10. package/lib/components/blocks/nav-link/index.d.ts.map +1 -1
  11. package/lib/components/blocks/nav-link/index.js +1 -1
  12. package/lib/components/blocks/nav-link/index.js.map +1 -1
  13. package/lib/components/blocks/pagination/index.d.ts +0 -1
  14. package/lib/components/blocks/pagination/index.d.ts.map +1 -1
  15. package/lib/components/blocks/pagination/index.js +1 -1
  16. package/lib/components/blocks/pagination/index.js.map +1 -1
  17. package/lib/components/blocks/search/index.d.ts +0 -1
  18. package/lib/components/blocks/search/index.d.ts.map +1 -1
  19. package/lib/components/blocks/search/index.js +1 -1
  20. package/lib/components/blocks/search/index.js.map +1 -1
  21. package/lib/components/blocks/search/search-modal/index.d.ts +0 -1
  22. package/lib/components/blocks/search/search-modal/index.d.ts.map +1 -1
  23. package/lib/components/blocks/search/search-modal/index.js +1 -1
  24. package/lib/components/blocks/search/search-modal/index.js.map +1 -1
  25. package/lib/components/blocks/section-dropdown/index.d.ts +0 -1
  26. package/lib/components/blocks/section-dropdown/index.d.ts.map +1 -1
  27. package/lib/components/blocks/section-dropdown/index.js +1 -1
  28. package/lib/components/blocks/section-dropdown/index.js.map +1 -1
  29. package/lib/components/elements/article/document.d.ts +0 -1
  30. package/lib/components/elements/article/document.d.ts.map +1 -1
  31. package/lib/components/elements/article/document.js +1 -1
  32. package/lib/components/elements/article/document.js.map +1 -1
  33. package/lib/components/elements/article/index.d.ts +0 -1
  34. package/lib/components/elements/article/index.d.ts.map +1 -1
  35. package/lib/components/elements/article/index.js +1 -1
  36. package/lib/components/elements/article/index.js.map +1 -1
  37. package/lib/components/elements/header/index.d.ts +0 -1
  38. package/lib/components/elements/header/index.d.ts.map +1 -1
  39. package/lib/components/elements/header/index.js +1 -1
  40. package/lib/components/elements/header/index.js.map +1 -1
  41. package/lib/components/elements/robin-provider/index.d.ts.map +1 -1
  42. package/lib/components/elements/robin-provider/index.js +1 -1
  43. package/lib/components/elements/robin-provider/index.js.map +1 -1
  44. package/lib/components/elements/sidebar/index.d.ts +0 -4
  45. package/lib/components/elements/sidebar/index.d.ts.map +1 -1
  46. package/lib/components/elements/sidebar/index.js +1 -1
  47. package/lib/components/elements/sidebar/index.js.map +1 -1
  48. package/lib/components/elements/sidebar/sidebar-drop/index.d.ts +1 -0
  49. package/lib/components/elements/sidebar/sidebar-drop/index.d.ts.map +1 -1
  50. package/lib/components/elements/sidebar/sidebar-drop/index.js +1 -1
  51. package/lib/components/elements/sidebar/sidebar-drop/index.js.map +1 -1
  52. package/lib/components/elements/sidebar/sidebar-link/index.d.ts +3 -3
  53. package/lib/components/elements/sidebar/sidebar-link/index.d.ts.map +1 -1
  54. package/lib/components/elements/sidebar/sidebar-link/index.js +1 -1
  55. package/lib/components/elements/sidebar/sidebar-link/index.js.map +1 -1
  56. package/lib/components/elements/sidebar/tools.d.ts +4 -1
  57. package/lib/components/elements/sidebar/tools.d.ts.map +1 -1
  58. package/lib/components/elements/sidebar/tools.js +1 -1
  59. package/lib/components/elements/sidebar/tools.js.map +1 -1
  60. package/lib/components/ui/content-link/index.d.ts +2 -2
  61. package/lib/components/ui/content-link/index.d.ts.map +1 -1
  62. package/lib/components/ui/content-link/index.js +1 -1
  63. package/lib/components/ui/content-link/index.js.map +1 -1
  64. package/lib/core/utils/initialize-robindoc.d.ts.map +1 -1
  65. package/lib/core/utils/initialize-robindoc.js +1 -1
  66. package/lib/core/utils/initialize-robindoc.js.map +1 -1
  67. package/lib/styles.css +1 -1
  68. package/lib/styles.css.map +1 -1
  69. package/package.json +3 -1
  70. package/lib/components/contexts/sidebar/context.d.ts +0 -3
  71. package/lib/components/contexts/sidebar/context.d.ts.map +0 -1
  72. package/lib/components/contexts/sidebar/context.js +0 -2
  73. package/lib/components/contexts/sidebar/context.js.map +0 -1
  74. package/lib/components/contexts/sidebar/provider.d.ts +0 -3
  75. package/lib/components/contexts/sidebar/provider.d.ts.map +0 -1
  76. package/lib/components/contexts/sidebar/provider.js +0 -3
  77. package/lib/components/contexts/sidebar/provider.js.map +0 -1
  78. package/lib/components/contexts/sidebar/use-sidebar-store.d.ts +0 -6
  79. package/lib/components/contexts/sidebar/use-sidebar-store.d.ts.map +0 -1
  80. package/lib/components/contexts/sidebar/use-sidebar-store.js +0 -3
  81. package/lib/components/contexts/sidebar/use-sidebar-store.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"document.js","sources":["../../../../src/components/elements/article/document.tsx"],"sourcesContent":["import React from \"react\";\nimport { dirname, join } from \"path\";\nimport parse, { attributesToProps, DOMNode, domToReact, HTMLReactParserOptions, Text } from \"html-react-parser\";\nimport { type TokensList, type Token, type Tokens } from \"marked\";\nimport { type RobinProps, type Components } from \"@src/core/types/content\";\nimport { type BaseProvider } from \"@src/core/providers/base\";\nimport { NavContentLink } from \"@src/components/blocks/nav-content-link\";\nimport { AnchorHeading } from \"@src/components/blocks/anchor-heading\";\nimport { CodeSection } from \"@src/components/blocks/code-section\";\nimport { Table, Thead, Tr, Th, Tbody, Td } from \"@src/components/ui/table\";\nimport { CodeSpan } from \"@src/components/ui/code-span\";\nimport { Img } from \"@src/components/ui/img\";\nimport { Block } from \"@src/components/ui/block\";\nimport { Blockquote } from \"@src/components/ui/blockquote\";\nimport { Paragraph } from \"@src/components/ui/paragraph\";\nimport { Strong } from \"@src/components/ui/strong\";\nimport { Del } from \"@src/components/ui/del\";\nimport { Em } from \"@src/components/ui/em\";\nimport { Hr } from \"@src/components/ui/hr\";\nimport { Heading } from \"@src/components/ui/heading\";\nimport { Tabs } from \"@src/components/ui/tabs\";\nimport { ListItem, OrderedList, UnorderedList } from \"@src/components/ui/list\";\nimport { TaskListItem, TaskOrderedList, TaskUnorderedList } from \"@src/components/ui/task-list\";\n\nimport { isNewCodeToken, parseCodeLang, parseMarkdown, validateComponentName, type AnchorData } from \"./utils\";\n\ninterface DocumentJSXProps extends Omit<ContentProps, \"tokens\" | \"headings\"> {\n raw: string;\n}\n\nexport const DocumentJSX: React.FC<DocumentJSXProps> = ({ raw, components, ...baseProps }) => {\n const parseOptions: HTMLReactParserOptions = {\n replace(domNode) {\n if (domNode instanceof Text && domNode.data) {\n const { headings, tokens } = parseMarkdown(domNode.data);\n\n return <Document headings={headings} tokens={tokens} components={components} subtree {...baseProps} />;\n }\n\n if (!(\"name\" in domNode)) return <></>;\n\n if (!validateComponentName(domNode.name)) return domNode;\n\n if (!components || !(domNode.name in components)) {\n console.warn(`Unknown component: \"${domNode.name}\"`);\n return <></>;\n }\n\n const props = \"attribs\" in domNode ? attributesToProps(domNode.attribs) : {};\n const Component = components[domNode.name];\n const children = \"children\" in domNode ? domNode.children : null;\n\n return (\n <Component {...props}>{children ? domToReact(children as DOMNode[], parseOptions) : null}</Component>\n );\n },\n htmlparser2: {\n lowerCaseTags: false,\n lowerCaseAttributeNames: false,\n },\n };\n return parse(raw, parseOptions);\n};\n\nexport type ContentProps = {\n pathname: string;\n components?: Components;\n config?: {\n publicDirs?: string[];\n };\n uri?: string;\n targetProvider?: BaseProvider | null;\n tokens: TokensList;\n headings: AnchorData[];\n subtree?: boolean;\n link?: React.ElementType;\n pages?: { clientPath: string; origPath: string }[];\n};\n\nexport const Document: React.FC<ContentProps> = ({\n pathname,\n components,\n uri,\n targetProvider,\n tokens,\n headings,\n config = {},\n subtree,\n link,\n pages,\n}) => {\n const { publicDirs } = config;\n\n let robin:\n | null\n | { props: RobinProps; childTokens: Token[]; componentName: string; type: \"base\" }\n | { type: \"dummy\" } = null;\n let codeQueue: { [lang: string]: JSX.Element } = {};\n const insertedCodeKeys: string[] = [];\n const DocumentToken: React.FC<{ token: Token | Token[] }> = ({ token }) => {\n if (!token) return null;\n\n if (isNewCodeToken(token, codeQueue)) {\n const tabsData = codeQueue;\n codeQueue = {};\n const tabsKey = Object.keys(tabsData).sort().join(\"-\");\n const isInsertedKey = insertedCodeKeys.includes(tabsKey);\n if (!isInsertedKey) insertedCodeKeys.push(tabsKey);\n\n return (\n <>\n <Tabs tabsData={tabsData} insertStyles={!isInsertedKey} blockKey={tabsKey} />\n <DocumentToken token={token} />\n </>\n );\n }\n\n if (robin) {\n if (!Array.isArray(token) && token.type === \"html\" && token.raw.trim() === \"<!---/robin-->\") {\n if (robin.type === \"dummy\") {\n robin = null;\n return null;\n }\n\n const { componentName, childTokens, props } = robin;\n const RobinComponent = components![componentName];\n robin = null;\n return (\n <RobinComponent {...props}>\n <DocumentToken token={childTokens} />\n </RobinComponent>\n );\n } else {\n if (robin.type === \"dummy\") return null;\n\n if (Array.isArray(token)) {\n robin.childTokens.push(...token);\n } else {\n robin.childTokens.push(token);\n }\n return null;\n }\n }\n\n if (Array.isArray(token))\n return token.map((t, index) => <DocumentToken token={t} key={(t as Tokens.Text).raw || index} />);\n\n switch (token.type) {\n case \"heading\":\n const Component = `h${token.depth}` as \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n const predefinedData = headings.find((heading) => heading.token === token);\n if (predefinedData?.id) {\n return (\n <AnchorHeading component={Component} id={predefinedData.id}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </AnchorHeading>\n );\n } else {\n return (\n <Heading component={Component} id={token.depth === 1 ? \"main-content\" : undefined}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </Heading>\n );\n }\n case \"table\":\n return (\n <Block>\n <Table>\n <Thead>\n <Tr>\n {token.header.map((t: Tokens.Text, index: number) => (\n <Th key={t.text + index}>\n {t.tokens ? <DocumentToken token={t.tokens} /> : t.text}\n </Th>\n ))}\n </Tr>\n </Thead>\n <Tbody>\n {token.rows.map((row: Tokens.Text[], rowIndex: number) => (\n <Tr key={rowIndex}>\n {row.map((elem, elemIndex) => (\n <Td key={elem.text + elemIndex}>\n {elem.tokens ? <DocumentToken token={elem.tokens} /> : elem.text}\n </Td>\n ))}\n </Tr>\n ))}\n </Tbody>\n </Table>\n </Block>\n );\n case \"link\":\n let finalHref: string = token.href;\n const external = /^(https?:\\/\\/|\\/)/.test(token.href);\n\n if (pages && !external) {\n const currentPageData = pages.find((item) => item.clientPath === pathname);\n\n if (currentPageData) {\n const linkOrigPath = join(dirname(currentPageData.origPath), token.href).replace(/\\\\/g, \"/\");\n const linkData = pages.find((item) => item.origPath === linkOrigPath);\n\n if (linkData) {\n finalHref = linkData?.clientPath;\n }\n }\n }\n\n return (\n <NavContentLink link={link} href={finalHref} external={external}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </NavContentLink>\n );\n case \"space\":\n return null;\n case \"hr\":\n return <Hr />;\n case \"image\":\n return (\n <Img\n src={token.href}\n publicDirs={publicDirs}\n provider={targetProvider}\n uri={uri}\n alt={token.title || \"\"}\n />\n );\n case \"paragraph\":\n if (subtree) return token.tokens ? <DocumentToken token={token.tokens} /> : token.raw;\n if (\n token.tokens?.some((t) => t.type === \"html\") &&\n token.tokens?.every((t) => t.type === \"html\" || t.raw === \"\\n\")\n ) {\n return <DocumentToken token={{ ...token, type: \"html\" }} />;\n }\n\n return <Paragraph>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Paragraph>;\n case \"strong\":\n return <Strong>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Strong>;\n case \"del\":\n return <Del>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Del>;\n case \"em\":\n return <Em>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Em>;\n case \"blockquote\":\n return <Blockquote>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Blockquote>;\n case \"codespan\":\n return <CodeSpan>{token.raw.replace(/^`|`$/g, \"\")}</CodeSpan>;\n case \"code\":\n const { lang, configuration } = parseCodeLang(token.lang);\n if (configuration.switcher) {\n const tabKey = typeof configuration.tab === \"string\" ? configuration.tab : lang;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n codeQueue[tabKey] = <CodeSection lang={lang as any} code={token.text} {...configuration} />;\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return <CodeSection lang={lang as any} code={token.text} {...configuration} />;\n case \"escape\":\n return token.text;\n case \"list\":\n const isTaskList = token.items.every((i: Tokens.ListItem) => i.task);\n if (isTaskList) {\n const ListComponent = token.ordered ? TaskOrderedList : TaskUnorderedList;\n return (\n <ListComponent start={token.start}>\n {token.items.map((elem: Tokens.ListItem, index: number) => (\n <TaskListItem key={elem.raw + index} defaultChecked={elem.checked}>\n {elem.tokens ? <DocumentToken token={elem.tokens} /> : elem.raw}\n </TaskListItem>\n ))}\n </ListComponent>\n );\n }\n\n const ListComponent = token.ordered ? OrderedList : UnorderedList;\n return (\n <ListComponent start={token.start}>\n {token.items.map((elem: Tokens.ListItem, index: number) => (\n <ListItem key={elem.raw + index}>\n {elem.tokens ? <DocumentToken token={elem.tokens} /> : elem.raw}\n </ListItem>\n ))}\n </ListComponent>\n );\n case \"html\":\n const text = token.raw.trim();\n // console.log(\"html\", token);\n\n if (text.startsWith(\"<!---robin\") && text.endsWith(\"-->\")) {\n const selfClosed = text.endsWith(\"/-->\");\n const componentName = text.match(/<!---robin ([\\w]+)/)?.[1];\n\n if (!componentName) {\n if (!selfClosed) robin = { type: \"dummy\" };\n return null;\n }\n\n if (!validateComponentName(componentName)) {\n console.warn(\n `\"${componentName}\" is using incorrect casing. Use PascalCase for Robin components`,\n );\n if (!selfClosed) robin = { type: \"dummy\" };\n return null;\n }\n\n if (!components || !(componentName in components)) {\n console.warn(`Unknown component: \"${componentName}\"`);\n if (!selfClosed) robin = { type: \"dummy\" };\n return null;\n }\n const propRows = text.split(/\\r?\\n/).slice(1, -1);\n const props = propRows.reduce<{ [key: string]: string | true }>((acc, cur) => {\n const [_match, key, value] = cur.match(/^([\\w]+)(?:=\"(.+)\")?$/) || [];\n\n if (!_match) {\n console.warn(`Invalid component attribute: \"${cur}\"`);\n return acc;\n }\n\n acc[key] = value ?? true;\n return acc;\n }, {});\n\n if (selfClosed) {\n const Component = components[componentName as keyof typeof components];\n return <Component {...props} />;\n }\n\n robin = { props, componentName, childTokens: [], type: \"base\" };\n return null;\n }\n\n return (\n <DocumentJSX\n raw={token.raw}\n components={components}\n config={config}\n link={link}\n targetProvider={targetProvider}\n pathname={pathname}\n uri={uri}\n />\n );\n case \"text\":\n if (\"tokens\" in token) {\n return <DocumentToken token={token.tokens || []} />;\n }\n return token.raw;\n default:\n if (!token.type && \"raw\" in token) return token.raw;\n\n console.warn(`Unknown token ${token.type}`, token);\n return null;\n }\n };\n\n tokens.push({ type: \"text\", raw: \"\" });\n return <DocumentToken token={tokens} />;\n};\n"],"names":["DocumentJSX","raw","components","baseProps","parseOptions","replace","domNode","Text","data","headings","tokens","parseMarkdown","React","Document","subtree","validateComponentName","name","console","warn","props","attributesToProps","attribs","Component","children","domToReact","htmlparser2","lowerCaseTags","lowerCaseAttributeNames","parse","pathname","uri","targetProvider","config","link","pages","publicDirs","robin","codeQueue","insertedCodeKeys","DocumentToken","token","isNewCodeToken","tabsData","tabsKey","Object","keys","sort","join","isInsertedKey","includes","push","createElement","Fragment","Tabs","insertStyles","blockKey","Array","isArray","type","trim","childTokens","componentName","RobinComponent","map","t","index","key","depth","predefinedData","find","heading","id","AnchorHeading","component","Heading","undefined","Block","Table","Thead","Tr","header","Th","text","Tbody","rows","row","rowIndex","elem","elemIndex","Td","finalHref","href","external","test","currentPageData","item","clientPath","linkOrigPath","dirname","origPath","linkData","NavContentLink","Hr","Img","src","provider","alt","title","some","every","Paragraph","Strong","Del","Em","Blockquote","CodeSpan","lang","configuration","parseCodeLang","switcher","tabKey","tab","CodeSection","code","items","i","task","ListComponent","ordered","TaskOrderedList","TaskUnorderedList","start","TaskListItem","defaultChecked","checked","OrderedList","UnorderedList","ListItem","startsWith","endsWith","selfClosed","match","split","slice","reduce","acc","cur","_match","value"],"mappings":"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"}
1
+ {"version":3,"file":"document.js","sources":["../../../../src/components/elements/article/document.tsx"],"sourcesContent":["import React from \"react\";\nimport { dirname, join } from \"path\";\nimport parse, { attributesToProps, DOMNode, domToReact, HTMLReactParserOptions, Text } from \"html-react-parser\";\nimport { type TokensList, type Token, type Tokens } from \"marked\";\nimport { type RobinProps, type Components } from \"@src/core/types/content\";\nimport { type BaseProvider } from \"@src/core/providers/base\";\nimport { NavContentLink } from \"@src/components/blocks/nav-content-link\";\nimport { AnchorHeading } from \"@src/components/blocks/anchor-heading\";\nimport { CodeSection } from \"@src/components/blocks/code-section\";\nimport { Table, Thead, Tr, Th, Tbody, Td } from \"@src/components/ui/table\";\nimport { CodeSpan } from \"@src/components/ui/code-span\";\nimport { Img } from \"@src/components/ui/img\";\nimport { Block } from \"@src/components/ui/block\";\nimport { Blockquote } from \"@src/components/ui/blockquote\";\nimport { Paragraph } from \"@src/components/ui/paragraph\";\nimport { Strong } from \"@src/components/ui/strong\";\nimport { Del } from \"@src/components/ui/del\";\nimport { Em } from \"@src/components/ui/em\";\nimport { Hr } from \"@src/components/ui/hr\";\nimport { Heading } from \"@src/components/ui/heading\";\nimport { Tabs } from \"@src/components/ui/tabs\";\nimport { ListItem, OrderedList, UnorderedList } from \"@src/components/ui/list\";\nimport { TaskListItem, TaskOrderedList, TaskUnorderedList } from \"@src/components/ui/task-list\";\n\nimport { isNewCodeToken, parseCodeLang, parseMarkdown, validateComponentName, type AnchorData } from \"./utils\";\n\ninterface DocumentJSXProps extends Omit<ContentProps, \"tokens\" | \"headings\"> {\n raw: string;\n}\n\nexport const DocumentJSX: React.FC<DocumentJSXProps> = ({ raw, components, ...baseProps }) => {\n const parseOptions: HTMLReactParserOptions = {\n replace(domNode) {\n if (domNode instanceof Text && domNode.data) {\n const { headings, tokens } = parseMarkdown(domNode.data);\n\n return <Document headings={headings} tokens={tokens} components={components} subtree {...baseProps} />;\n }\n\n if (!(\"name\" in domNode)) return <></>;\n\n if (!validateComponentName(domNode.name)) return domNode;\n\n if (!components || !(domNode.name in components)) {\n console.warn(`Unknown component: \"${domNode.name}\"`);\n return <></>;\n }\n\n const props = \"attribs\" in domNode ? attributesToProps(domNode.attribs) : {};\n const Component = components[domNode.name];\n const children = \"children\" in domNode ? domNode.children : null;\n\n return (\n <Component {...props}>{children ? domToReact(children as DOMNode[], parseOptions) : null}</Component>\n );\n },\n htmlparser2: {\n lowerCaseTags: false,\n lowerCaseAttributeNames: false,\n },\n };\n return parse(raw, parseOptions);\n};\n\nexport type ContentProps = {\n pathname: string;\n components?: Components;\n config?: {\n publicDirs?: string[];\n };\n uri?: string;\n targetProvider?: BaseProvider | null;\n tokens: TokensList;\n headings: AnchorData[];\n subtree?: boolean;\n pages?: { clientPath: string; origPath: string }[];\n};\n\nexport const Document: React.FC<ContentProps> = ({\n pathname,\n components,\n uri,\n targetProvider,\n tokens,\n headings,\n config = {},\n subtree,\n pages,\n}) => {\n const { publicDirs } = config;\n\n let robin:\n | null\n | { props: RobinProps; childTokens: Token[]; componentName: string; type: \"base\" }\n | { type: \"dummy\" } = null;\n let codeQueue: { [lang: string]: JSX.Element } = {};\n const insertedCodeKeys: string[] = [];\n const DocumentToken: React.FC<{ token: Token | Token[] }> = ({ token }) => {\n if (!token) return null;\n\n if (isNewCodeToken(token, codeQueue)) {\n const tabsData = codeQueue;\n codeQueue = {};\n const tabsKey = Object.keys(tabsData).sort().join(\"-\");\n const isInsertedKey = insertedCodeKeys.includes(tabsKey);\n if (!isInsertedKey) insertedCodeKeys.push(tabsKey);\n\n return (\n <>\n <Tabs tabsData={tabsData} insertStyles={!isInsertedKey} blockKey={tabsKey} />\n <DocumentToken token={token} />\n </>\n );\n }\n\n if (robin) {\n if (!Array.isArray(token) && token.type === \"html\" && token.raw.trim() === \"<!---/robin-->\") {\n if (robin.type === \"dummy\") {\n robin = null;\n return null;\n }\n\n const { componentName, childTokens, props } = robin;\n const RobinComponent = components![componentName];\n robin = null;\n return (\n <RobinComponent {...props}>\n <DocumentToken token={childTokens} />\n </RobinComponent>\n );\n } else {\n if (robin.type === \"dummy\") return null;\n\n if (Array.isArray(token)) {\n robin.childTokens.push(...token);\n } else {\n robin.childTokens.push(token);\n }\n return null;\n }\n }\n\n if (Array.isArray(token))\n return token.map((t, index) => <DocumentToken token={t} key={(t as Tokens.Text).raw || index} />);\n\n switch (token.type) {\n case \"heading\":\n const Component = `h${token.depth}` as \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n const predefinedData = headings.find((heading) => heading.token === token);\n if (predefinedData?.id) {\n return (\n <AnchorHeading component={Component} id={predefinedData.id}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </AnchorHeading>\n );\n } else {\n return (\n <Heading component={Component} id={token.depth === 1 ? \"main-content\" : undefined}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </Heading>\n );\n }\n case \"table\":\n return (\n <Block>\n <Table>\n <Thead>\n <Tr>\n {token.header.map((t: Tokens.Text, index: number) => (\n <Th key={t.text + index}>\n {t.tokens ? <DocumentToken token={t.tokens} /> : t.text}\n </Th>\n ))}\n </Tr>\n </Thead>\n <Tbody>\n {token.rows.map((row: Tokens.Text[], rowIndex: number) => (\n <Tr key={rowIndex}>\n {row.map((elem, elemIndex) => (\n <Td key={elem.text + elemIndex}>\n {elem.tokens ? <DocumentToken token={elem.tokens} /> : elem.text}\n </Td>\n ))}\n </Tr>\n ))}\n </Tbody>\n </Table>\n </Block>\n );\n case \"link\":\n let finalHref: string = token.href;\n const external = /^(https?:\\/\\/|\\/)/.test(token.href);\n\n if (pages && !external) {\n const currentPageData = pages.find((item) => item.clientPath === pathname);\n\n if (currentPageData) {\n const linkOrigPath = join(dirname(currentPageData.origPath), token.href).replace(/\\\\/g, \"/\");\n const linkData = pages.find((item) => item.origPath === linkOrigPath);\n\n if (linkData) {\n finalHref = linkData?.clientPath;\n }\n }\n }\n\n return (\n <NavContentLink href={finalHref} external={external}>\n {token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}\n </NavContentLink>\n );\n case \"space\":\n return null;\n case \"hr\":\n return <Hr />;\n case \"image\":\n return (\n <Img\n src={token.href}\n publicDirs={publicDirs}\n provider={targetProvider}\n uri={uri}\n alt={token.title || \"\"}\n />\n );\n case \"paragraph\":\n if (subtree) return token.tokens ? <DocumentToken token={token.tokens} /> : token.raw;\n if (\n token.tokens?.some((t) => t.type === \"html\") &&\n token.tokens?.every((t) => t.type === \"html\" || t.raw === \"\\n\")\n ) {\n return <DocumentToken token={{ ...token, type: \"html\" }} />;\n }\n\n return <Paragraph>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Paragraph>;\n case \"strong\":\n return <Strong>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Strong>;\n case \"del\":\n return <Del>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Del>;\n case \"em\":\n return <Em>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Em>;\n case \"blockquote\":\n return <Blockquote>{token.tokens ? <DocumentToken token={token.tokens} /> : token.raw}</Blockquote>;\n case \"codespan\":\n return <CodeSpan>{token.raw.replace(/^`|`$/g, \"\")}</CodeSpan>;\n case \"code\":\n const { lang, configuration } = parseCodeLang(token.lang);\n if (configuration.switcher) {\n const tabKey = typeof configuration.tab === \"string\" ? configuration.tab : lang;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n codeQueue[tabKey] = <CodeSection lang={lang as any} code={token.text} {...configuration} />;\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return <CodeSection lang={lang as any} code={token.text} {...configuration} />;\n case \"escape\":\n return token.text;\n case \"list\":\n const isTaskList = token.items.every((i: Tokens.ListItem) => i.task);\n if (isTaskList) {\n const ListComponent = token.ordered ? TaskOrderedList : TaskUnorderedList;\n return (\n <ListComponent start={token.start}>\n {token.items.map((elem: Tokens.ListItem, index: number) => (\n <TaskListItem key={elem.raw + index} defaultChecked={elem.checked}>\n {elem.tokens ? <DocumentToken token={elem.tokens} /> : elem.raw}\n </TaskListItem>\n ))}\n </ListComponent>\n );\n }\n\n const ListComponent = token.ordered ? OrderedList : UnorderedList;\n return (\n <ListComponent start={token.start}>\n {token.items.map((elem: Tokens.ListItem, index: number) => (\n <ListItem key={elem.raw + index}>\n {elem.tokens ? <DocumentToken token={elem.tokens} /> : elem.raw}\n </ListItem>\n ))}\n </ListComponent>\n );\n case \"html\":\n const text = token.raw.trim();\n // console.log(\"html\", token);\n\n if (text.startsWith(\"<!---robin\") && text.endsWith(\"-->\")) {\n const selfClosed = text.endsWith(\"/-->\");\n const componentName = text.match(/<!---robin ([\\w]+)/)?.[1];\n\n if (!componentName) {\n if (!selfClosed) robin = { type: \"dummy\" };\n return null;\n }\n\n if (!validateComponentName(componentName)) {\n console.warn(\n `\"${componentName}\" is using incorrect casing. Use PascalCase for Robin components`,\n );\n if (!selfClosed) robin = { type: \"dummy\" };\n return null;\n }\n\n if (!components || !(componentName in components)) {\n console.warn(`Unknown component: \"${componentName}\"`);\n if (!selfClosed) robin = { type: \"dummy\" };\n return null;\n }\n const propRows = text.split(/\\r?\\n/).slice(1, -1);\n const props = propRows.reduce<{ [key: string]: string | true }>((acc, cur) => {\n const [_match, key, value] = cur.match(/^([\\w]+)(?:=\"(.+)\")?$/) || [];\n\n if (!_match) {\n console.warn(`Invalid component attribute: \"${cur}\"`);\n return acc;\n }\n\n acc[key] = value ?? true;\n return acc;\n }, {});\n\n if (selfClosed) {\n const Component = components[componentName as keyof typeof components];\n return <Component {...props} />;\n }\n\n robin = { props, componentName, childTokens: [], type: \"base\" };\n return null;\n }\n\n return (\n <DocumentJSX\n raw={token.raw}\n components={components}\n config={config}\n targetProvider={targetProvider}\n pathname={pathname}\n uri={uri}\n />\n );\n case \"text\":\n if (\"tokens\" in token) {\n return <DocumentToken token={token.tokens || []} />;\n }\n return token.raw;\n default:\n if (!token.type && \"raw\" in token) return token.raw;\n\n console.warn(`Unknown token ${token.type}`, token);\n return null;\n }\n };\n\n tokens.push({ type: \"text\", raw: \"\" });\n return <DocumentToken token={tokens} />;\n};\n"],"names":["DocumentJSX","raw","components","baseProps","parseOptions","replace","domNode","Text","data","headings","tokens","parseMarkdown","React","Document","subtree","validateComponentName","name","console","warn","props","attributesToProps","attribs","Component","children","domToReact","htmlparser2","lowerCaseTags","lowerCaseAttributeNames","parse","pathname","uri","targetProvider","config","pages","publicDirs","robin","codeQueue","insertedCodeKeys","DocumentToken","token","isNewCodeToken","tabsData","tabsKey","Object","keys","sort","join","isInsertedKey","includes","push","createElement","Fragment","Tabs","insertStyles","blockKey","Array","isArray","type","trim","childTokens","componentName","RobinComponent","map","t","index","key","depth","predefinedData","find","heading","id","AnchorHeading","component","Heading","undefined","Block","Table","Thead","Tr","header","Th","text","Tbody","rows","row","rowIndex","elem","elemIndex","Td","finalHref","href","external","test","currentPageData","item","clientPath","linkOrigPath","dirname","origPath","linkData","NavContentLink","Hr","Img","src","provider","alt","title","some","every","Paragraph","Strong","Del","Em","Blockquote","CodeSpan","lang","configuration","parseCodeLang","switcher","tabKey","tab","CodeSection","code","items","i","task","ListComponent","ordered","TaskOrderedList","TaskUnorderedList","start","TaskListItem","defaultChecked","checked","OrderedList","UnorderedList","ListItem","startsWith","endsWith","selfClosed","match","split","slice","reduce","acc","cur","_match","value"],"mappings":"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"}
@@ -12,7 +12,6 @@ export type ContentProps = {
12
12
  publicDirs?: string[];
13
13
  };
14
14
  provider?: BaseProvider;
15
- link?: React.ElementType;
16
15
  pathname: string;
17
16
  pages?: {
18
17
  clientPath: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/elements/article/index.tsx"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,KAAK,UAAU,EAAE,oCAAgC;AAC1D,OAAO,EAAE,KAAK,YAAY,EAAE,qCAAiC;AAG7D,OAAO,EAAY,KAAK,aAAa,EAAE,8BAAwC;AAC/E,OAAO,EAAe,KAAK,gBAAgB,EAAE,iCAA2C;AACxF,OAAO,EAAc,KAAK,eAAe,EAAE,gCAA0C;AAKrF,MAAM,MAAM,YAAY,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnD,YAAY,CAAC,EAAE;QACX,uBAAuB;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACL,GAAG,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAElF,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,GAC/C,OAAO,CAAC,gBAAgB,CAAC,GACzB,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,GAC/B,YAAY,CAAC;AAEjB,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAiE1C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/elements/article/index.tsx"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,KAAK,UAAU,EAAE,oCAAgC;AAC1D,OAAO,EAAE,KAAK,YAAY,EAAE,qCAAiC;AAG7D,OAAO,EAAY,KAAK,aAAa,EAAE,8BAAwC;AAC/E,OAAO,EAAe,KAAK,gBAAgB,EAAE,iCAA2C;AACxF,OAAO,EAAc,KAAK,eAAe,EAAE,gCAA0C;AAKrF,MAAM,MAAM,YAAY,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnD,YAAY,CAAC,EAAE;QACX,uBAAuB;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACL,GAAG,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAElF,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,GAC/C,OAAO,CAAC,gBAAgB,CAAC,GACzB,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,GAC/B,YAAY,CAAC;AAEjB,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA6D1C,CAAC"}
@@ -1,2 +1,2 @@
1
- import e from"react";import{loadContent as t}from"../../../core/utils/load-content.js";import{ContentsProvider as n}from"../../contexts/contents/provider.js";import{Contents as i}from"../../blocks/contents/index.js";import{Breadcrumbs as r}from"../../blocks/breadcrumbs/index.js";import{Pagination as o}from"../../blocks/pagination/index.js";import{parseMarkdown as a}from"./utils.js";import{Document as s}from"./document.js";import{LastModified as d}from"../../blocks/last-modified/index.js";const l=async({components:l,content:c,uri:m,config:p={},provider:f,hideContents:u,link:g,editUri:v,pathname:b,title:h,breadcrumbs:k,prev:x,next:E,pages:j=[],translations:w})=>{const{lastModifiedOn:P="Last modified on",editOnService:O,onThisPage:U,next:C,previous:L}=w||{},{data:M,provider:S}=c||!m?{data:c,provider:null}:await t(m,f);if(!M)throw new Error("Robindoc: Please provide content or valid uri");const{headings:T,tokens:y}=a(M),D=m&&S&&await S.getEditUri(m),N=m&&S&&await S.getLastModifiedDate(m);return e.createElement(n,null,k&&k.length>0&&e.createElement(r,{breadcrumbs:k,title:h,link:g}),e.createElement(i,{editUri:null===v?null:v||D,hideContents:u,headings:T,translations:{editOnService:O,onThisPage:U}}),e.createElement("div",{className:"r-article"},e.createElement(s,{headings:T,tokens:y,pages:j,components:l,config:p,link:g,targetProvider:S,pathname:b,uri:m}),N&&e.createElement(d,{date:N},P)),(x||E)&&e.createElement(o,{prev:x,next:E,link:g,translations:{next:C,previous:L}}))};export{l as Article};
1
+ import e from"react";import{loadContent as t}from"../../../core/utils/load-content.js";import{ContentsProvider as n}from"../../contexts/contents/provider.js";import{Contents as r}from"../../blocks/contents/index.js";import{Breadcrumbs as o}from"../../blocks/breadcrumbs/index.js";import{Pagination as i}from"../../blocks/pagination/index.js";import{parseMarkdown as a}from"./utils.js";import{Document as s}from"./document.js";import{LastModified as d}from"../../blocks/last-modified/index.js";const c=async({components:c,content:m,uri:l,config:p={},provider:f,hideContents:u,editUri:g,pathname:v,title:b,breadcrumbs:h,prev:x,next:E,pages:j=[],translations:k})=>{const{lastModifiedOn:w="Last modified on",editOnService:P,onThisPage:O,next:U,previous:C}=k||{},{data:L,provider:M}=m||!l?{data:m,provider:null}:await t(l,f);if(!L)throw new Error("Robindoc: Please provide content or valid uri");const{headings:S,tokens:T}=a(L),y=l&&M&&await M.getEditUri(l),D=l&&M&&await M.getLastModifiedDate(l);return e.createElement(n,null,h&&h.length>0&&e.createElement(o,{breadcrumbs:h,title:b}),e.createElement(r,{editUri:null===g?null:g||y,hideContents:u,headings:S,translations:{editOnService:P,onThisPage:O}}),e.createElement("div",{className:"r-article"},e.createElement(s,{headings:S,tokens:T,pages:j,components:c,config:p,targetProvider:M,pathname:v,uri:l}),D&&e.createElement(d,{date:D},w)),(x||E)&&e.createElement(i,{prev:x,next:E,translations:{next:U,previous:C}}))};export{c as Article};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/elements/article/index.tsx"],"sourcesContent":["import \"./article.scss\";\nimport React from \"react\";\n\nimport { type Components } from \"@src/core/types/content\";\nimport { type BaseProvider } from \"@src/core/providers/base\";\nimport { loadContent } from \"@src/core/utils/load-content\";\nimport { ContentsProvider } from \"@src/components/contexts/contents/provider\";\nimport { Contents, type ContentsProps } from \"@src/components/blocks/contents\";\nimport { Breadcrumbs, type BreadcrumbsProps } from \"@src/components/blocks/breadcrumbs\";\nimport { Pagination, type PaginationProps } from \"@src/components/blocks/pagination\";\nimport { parseMarkdown } from \"./utils\";\nimport { Document } from \"./document\";\nimport { LastModified } from \"@src/components/blocks/last-modified\";\n\nexport type ContentProps = {\n title: string;\n components?: Components;\n config?: {\n publicDirs?: string[];\n };\n provider?: BaseProvider;\n link?: React.ElementType;\n pathname: string;\n pages?: { clientPath: string; origPath: string }[];\n translations?: {\n /** Last modified on */\n lastModifiedOn?: string;\n };\n} & ({ content: string; uri?: undefined } | { uri: string; content?: undefined });\n\nexport type ArticleProps = Partial<PaginationProps> &\n Partial<BreadcrumbsProps> &\n Omit<ContentsProps, \"headings\"> &\n ContentProps;\n\nexport const Article: React.FC<ArticleProps> = async ({\n components,\n content,\n uri,\n config = {},\n provider,\n hideContents,\n link,\n editUri: editUriProp,\n pathname,\n title,\n breadcrumbs,\n prev,\n next,\n pages = [],\n translations,\n}) => {\n const {\n lastModifiedOn = \"Last modified on\",\n editOnService,\n onThisPage,\n next: nextTranslation,\n previous,\n } = translations || {};\n const { data, provider: targetProvider } =\n content || !uri ? { data: content, provider: null } : await loadContent(uri, provider);\n\n if (!data) {\n throw new Error(\"Robindoc: Please provide content or valid uri\");\n }\n\n const { headings, tokens } = parseMarkdown(data);\n const editUri = uri && targetProvider && (await targetProvider.getEditUri(uri));\n const lastModified = uri && targetProvider && (await targetProvider.getLastModifiedDate(uri));\n\n return (\n <ContentsProvider>\n {breadcrumbs && breadcrumbs.length > 0 && (\n <Breadcrumbs breadcrumbs={breadcrumbs} title={title} link={link} />\n )}\n <Contents\n editUri={editUriProp === null ? null : editUriProp || editUri}\n hideContents={hideContents}\n headings={headings}\n translations={{ editOnService, onThisPage }}\n />\n <div className=\"r-article\">\n <Document\n headings={headings}\n tokens={tokens}\n pages={pages}\n components={components}\n config={config}\n link={link}\n targetProvider={targetProvider}\n pathname={pathname}\n uri={uri}\n />\n {lastModified && <LastModified date={lastModified}>{lastModifiedOn}</LastModified>}\n </div>\n {(prev || next) && (\n <Pagination prev={prev} next={next} link={link} translations={{ next: nextTranslation, previous }} />\n )}\n </ContentsProvider>\n );\n};\n"],"names":["Article","async","components","content","uri","config","provider","hideContents","link","editUri","editUriProp","pathname","title","breadcrumbs","prev","next","pages","translations","lastModifiedOn","editOnService","onThisPage","nextTranslation","previous","data","targetProvider","loadContent","Error","headings","tokens","parseMarkdown","getEditUri","lastModified","getLastModifiedDate","React","ContentsProvider","length","createElement","Breadcrumbs","Contents","className","Document","LastModified","date","Pagination"],"mappings":"mfAmCaA,EAAkCC,OAC3CC,aACAC,UACAC,MACAC,SAAS,CAAE,EACXC,WACAC,eACAC,OACAC,QAASC,EACTC,WACAC,QACAC,cACAC,OACAC,OACAC,QAAQ,GACRC,mBAEA,MAAMC,eACFA,EAAiB,mBAAkBC,cACnCA,EAAaC,WACbA,EACAL,KAAMM,EAAeC,SACrBA,GACAL,GAAgB,IACdM,KAAEA,EAAMjB,SAAUkB,GACpBrB,IAAYC,EAAM,CAAEmB,KAAMpB,EAASG,SAAU,YAAemB,EAAYrB,EAAKE,GAEjF,IAAKiB,EACD,MAAM,IAAIG,MAAM,iDAGpB,MAAMC,SAAEA,EAAQC,OAAEA,GAAWC,EAAcN,GACrCd,EAAUL,GAAOoB,SAAyBA,EAAeM,WAAW1B,GACpE2B,EAAe3B,GAAOoB,SAAyBA,EAAeQ,oBAAoB5B,GAExF,OACI6B,gBAACC,EAAgB,KACZrB,GAAeA,EAAYsB,OAAS,GACjCF,EAAAG,cAACC,EAAW,CAACxB,YAAaA,EAAaD,MAAOA,EAAOJ,KAAMA,IAE/DyB,EAAAG,cAACE,EAAQ,CACL7B,QAAyB,OAAhBC,EAAuB,KAAOA,GAAeD,EACtDF,aAAcA,EACdoB,SAAUA,EACVV,aAAc,CAAEE,gBAAeC,gBAEnCa,EAAKG,cAAA,MAAA,CAAAG,UAAU,aACXN,EAAAG,cAACI,EACG,CAAAb,SAAUA,EACVC,OAAQA,EACRZ,MAAOA,EACPd,WAAYA,EACZG,OAAQA,EACRG,KAAMA,EACNgB,eAAgBA,EAChBb,SAAUA,EACVP,IAAKA,IAER2B,GAAgBE,EAACG,cAAAK,EAAa,CAAAC,KAAMX,GAAeb,KAEtDJ,GAAQC,IACNkB,EAAAG,cAACO,EAAU,CAAC7B,KAAMA,EAAMC,KAAMA,EAAMP,KAAMA,EAAMS,aAAc,CAAEF,KAAMM,EAAiBC,cAGjG"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/elements/article/index.tsx"],"sourcesContent":["import \"./article.scss\";\nimport React from \"react\";\n\nimport { type Components } from \"@src/core/types/content\";\nimport { type BaseProvider } from \"@src/core/providers/base\";\nimport { loadContent } from \"@src/core/utils/load-content\";\nimport { ContentsProvider } from \"@src/components/contexts/contents/provider\";\nimport { Contents, type ContentsProps } from \"@src/components/blocks/contents\";\nimport { Breadcrumbs, type BreadcrumbsProps } from \"@src/components/blocks/breadcrumbs\";\nimport { Pagination, type PaginationProps } from \"@src/components/blocks/pagination\";\nimport { parseMarkdown } from \"./utils\";\nimport { Document } from \"./document\";\nimport { LastModified } from \"@src/components/blocks/last-modified\";\n\nexport type ContentProps = {\n title: string;\n components?: Components;\n config?: {\n publicDirs?: string[];\n };\n provider?: BaseProvider;\n pathname: string;\n pages?: { clientPath: string; origPath: string }[];\n translations?: {\n /** Last modified on */\n lastModifiedOn?: string;\n };\n} & ({ content: string; uri?: undefined } | { uri: string; content?: undefined });\n\nexport type ArticleProps = Partial<PaginationProps> &\n Partial<BreadcrumbsProps> &\n Omit<ContentsProps, \"headings\"> &\n ContentProps;\n\nexport const Article: React.FC<ArticleProps> = async ({\n components,\n content,\n uri,\n config = {},\n provider,\n hideContents,\n editUri: editUriProp,\n pathname,\n title,\n breadcrumbs,\n prev,\n next,\n pages = [],\n translations,\n}) => {\n const {\n lastModifiedOn = \"Last modified on\",\n editOnService,\n onThisPage,\n next: nextTranslation,\n previous,\n } = translations || {};\n const { data, provider: targetProvider } =\n content || !uri ? { data: content, provider: null } : await loadContent(uri, provider);\n\n if (!data) {\n throw new Error(\"Robindoc: Please provide content or valid uri\");\n }\n\n const { headings, tokens } = parseMarkdown(data);\n const editUri = uri && targetProvider && (await targetProvider.getEditUri(uri));\n const lastModified = uri && targetProvider && (await targetProvider.getLastModifiedDate(uri));\n\n return (\n <ContentsProvider>\n {breadcrumbs && breadcrumbs.length > 0 && <Breadcrumbs breadcrumbs={breadcrumbs} title={title} />}\n <Contents\n editUri={editUriProp === null ? null : editUriProp || editUri}\n hideContents={hideContents}\n headings={headings}\n translations={{ editOnService, onThisPage }}\n />\n <div className=\"r-article\">\n <Document\n headings={headings}\n tokens={tokens}\n pages={pages}\n components={components}\n config={config}\n targetProvider={targetProvider}\n pathname={pathname}\n uri={uri}\n />\n {lastModified && <LastModified date={lastModified}>{lastModifiedOn}</LastModified>}\n </div>\n {(prev || next) && (\n <Pagination prev={prev} next={next} translations={{ next: nextTranslation, previous }} />\n )}\n </ContentsProvider>\n );\n};\n"],"names":["Article","async","components","content","uri","config","provider","hideContents","editUri","editUriProp","pathname","title","breadcrumbs","prev","next","pages","translations","lastModifiedOn","editOnService","onThisPage","nextTranslation","previous","data","targetProvider","loadContent","Error","headings","tokens","parseMarkdown","getEditUri","lastModified","getLastModifiedDate","React","ContentsProvider","length","createElement","Breadcrumbs","Contents","className","Document","LastModified","date","Pagination"],"mappings":"6eAkCa,MAAAA,EAAkCC,OAC3CC,aACAC,UACAC,MACAC,SAAS,CAAA,EACTC,WACAC,eACAC,QAASC,EACTC,WACAC,QACAC,cACAC,OACAC,OACAC,QAAQ,GACRC,mBAEA,MAAMC,eACFA,EAAiB,mBAAkBC,cACnCA,EAAaC,WACbA,EACAL,KAAMM,EAAeC,SACrBA,GACAL,GAAgB,IACdM,KAAEA,EAAMhB,SAAUiB,GACpBpB,IAAYC,EAAM,CAAEkB,KAAMnB,EAASG,SAAU,YAAekB,EAAYpB,EAAKE,GAEjF,IAAKgB,EACD,MAAM,IAAIG,MAAM,iDAGpB,MAAMC,SAAEA,EAAQC,OAAEA,GAAWC,EAAcN,GACrCd,EAAUJ,GAAOmB,SAAyBA,EAAeM,WAAWzB,GACpE0B,EAAe1B,GAAOmB,SAAyBA,EAAeQ,oBAAoB3B,GAExF,OACI4B,gBAACC,EAAgB,KACZrB,GAAeA,EAAYsB,OAAS,GAAKF,EAAAG,cAACC,EAAW,CAACxB,YAAaA,EAAaD,MAAOA,IACxFqB,EAAAG,cAACE,EAAQ,CACL7B,QAAyB,OAAhBC,EAAuB,KAAOA,GAAeD,EACtDD,aAAcA,EACdmB,SAAUA,EACVV,aAAc,CAAEE,gBAAeC,gBAEnCa,EAAKG,cAAA,MAAA,CAAAG,UAAU,aACXN,EAAAG,cAACI,EAAQ,CACLb,SAAUA,EACVC,OAAQA,EACRZ,MAAOA,EACPb,WAAYA,EACZG,OAAQA,EACRkB,eAAgBA,EAChBb,SAAUA,EACVN,IAAKA,IAER0B,GAAgBE,EAACG,cAAAK,EAAa,CAAAC,KAAMX,GAAeb,KAEtDJ,GAAQC,IACNkB,EAACG,cAAAO,EAAW,CAAA7B,KAAMA,EAAMC,KAAMA,EAAME,aAAc,CAAEF,KAAMM,EAAiBC,cAGrF"}
@@ -15,7 +15,6 @@ type SectionType = {
15
15
  };
16
16
  export type HeaderProps = {
17
17
  logo: React.ReactElement;
18
- link?: React.ElementType;
19
18
  links?: {
20
19
  title: string;
21
20
  href: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/elements/header/index.tsx"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAc,eAAe,EAAE,iCAA2C;AACjF,OAAO,EAAU,KAAK,WAAW,EAAE,4BAAsC;AAMzE,KAAK,aAAa,GAAG;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,KAAK,WAAW,GAAG;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,aAAa,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACtB,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC;IACzB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,KAAK,CAAC,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;IACJ,GAAG,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAA;KAAE,CAAC;IACxD,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,OAAO,CAAC,EAAE,WAAW,CAAC;CACzB,GAAG,eAAe,GACf,WAAW,CAAC;AAEhB,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAsExC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/elements/header/index.tsx"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAc,eAAe,EAAE,iCAA2C;AACjF,OAAO,EAAU,KAAK,WAAW,EAAE,4BAAsC;AAMzE,KAAK,aAAa,GAAG;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,KAAK,WAAW,GAAG;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,aAAa,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACtB,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC;IACzB,KAAK,CAAC,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;IACJ,GAAG,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAA;KAAE,CAAC;IACxD,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,OAAO,CAAC,EAAE,WAAW,CAAC;CACzB,GAAG,eAAe,GACf,WAAW,CAAC;AAEhB,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CA2DxC,CAAC"}
@@ -1,2 +1,2 @@
1
- import e from"react";import{HeaderMenu as t}from"../../blocks/header-menu/index.js";import{Search as r}from"../../blocks/search/index.js";import{SectionDropdown as a}from"../../blocks/section-dropdown/index.js";import{HeaderSocial as l}from"../../blocks/header-social/index.js";import{Container as i}from"../../ui/container/index.js";import{NavLink as n}from"../../blocks/nav-link/index.js";const s=({logo:s,versions:o,locales:m,link:c="a",links:k=[],git:d,searcher:h,translations:f})=>{const{menu:y,...p}=f||{},E=o?.list.find((e=>e.key===o.target)),u=E&&E.key!==o?.default?`/${E.key}`:"",$=m?.list.find((e=>e.key===m.target)),v=$&&$.key!==m?.default?`/${$.key}`:"";return e.createElement("header",{className:"r-header"},e.createElement(i,{className:"r-header-body"},e.createElement("div",null,e.createElement(n,{href:"/",link:c,className:"r-header-logo"},s)),e.createElement(t,{translations:{menu:y}},e.createElement("nav",{className:"r-header-nav"},k.map((t=>e.createElement(n,{href:t.href,link:c,className:"r-header-link",key:t.title},t.title)))),e.createElement("div",{className:"r-header-actions"},e.createElement("div",{className:"r-header-sections"},o&&E&&e.createElement(a,{defaultOption:E.key,options:o.list.map((e=>({href:e.href||`${v}${e.key===o.default?"":`/${e.key}`}/`,key:e.key,title:e.title,shortTitle:e.shortTitle}))),link:c}),m&&$&&e.createElement(a,{defaultOption:$.key,options:m.list.map((e=>({href:e.href||`${e.key===m.default?"":`/${e.key}`}${u}/`,key:e.key,title:e.title,shortTitle:e.shortTitle}))),link:c})),h&&e.createElement(r,{link:c,searcher:h,translations:p}))),d&&e.createElement(l,{git:d})))};export{s as Header};
1
+ import e from"react";import{HeaderMenu as t}from"../../blocks/header-menu/index.js";import{Search as r}from"../../blocks/search/index.js";import{SectionDropdown as a}from"../../blocks/section-dropdown/index.js";import{HeaderSocial as l}from"../../blocks/header-social/index.js";import{Container as s}from"../../ui/container/index.js";import{NavLink as i}from"../../blocks/nav-link/index.js";const n=({logo:n,versions:o,locales:m,links:c=[],git:d,searcher:k,translations:h})=>{const{menu:f,...y}=h||{},p=o?.list.find((e=>e.key===o.target)),E=p&&p.key!==o?.default?`/${p.key}`:"",u=m?.list.find((e=>e.key===m.target)),$=u&&u.key!==m?.default?`/${u.key}`:"";return e.createElement("header",{className:"r-header"},e.createElement(s,{className:"r-header-body"},e.createElement("div",null,e.createElement(i,{href:"/",className:"r-header-logo"},n)),e.createElement(t,{translations:{menu:f}},e.createElement("nav",{className:"r-header-nav"},c.map((t=>e.createElement(i,{href:t.href,className:"r-header-link",key:t.title},t.title)))),e.createElement("div",{className:"r-header-actions"},e.createElement("div",{className:"r-header-sections"},o&&p&&e.createElement(a,{defaultOption:p.key,options:o.list.map((e=>({href:e.href||`${$}${e.key===o.default?"":`/${e.key}`}/`,key:e.key,title:e.title,shortTitle:e.shortTitle})))}),m&&u&&e.createElement(a,{defaultOption:u.key,options:m.list.map((e=>({href:e.href||`${e.key===m.default?"":`/${e.key}`}${E}/`,key:e.key,title:e.title,shortTitle:e.shortTitle})))})),k&&e.createElement(r,{searcher:k,translations:y}))),d&&e.createElement(l,{git:d})))};export{n as Header};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/elements/header/index.tsx"],"sourcesContent":["import \"./header.scss\";\nimport React from \"react\";\nimport { HeaderMenu, HeaderMenuProps } from \"@src/components/blocks/header-menu\";\nimport { Search, type SearchProps } from \"@src/components/blocks/search\";\nimport { SectionDropdown } from \"@src/components/blocks/section-dropdown\";\nimport { HeaderSocial } from \"@src/components/blocks/header-social\";\nimport { Container } from \"@src/components/ui/container\";\nimport { NavLink } from \"@src/components/blocks/nav-link\";\n\ntype SectionOption = {\n key: string;\n href?: string;\n title: string;\n shortTitle?: string;\n};\n\ntype SectionType = {\n default?: string;\n target: string;\n list: SectionOption[];\n};\n\nexport type HeaderProps = {\n logo: React.ReactElement;\n link?: React.ElementType;\n links?: {\n title: string;\n href: string;\n }[];\n git?: string | { uri: string; logo: React.ElementType };\n versions?: SectionType;\n locales?: SectionType;\n} & HeaderMenuProps &\n SearchProps;\n\nexport const Header: React.FC<HeaderProps> = ({\n logo,\n versions,\n locales,\n link: Link = \"a\",\n links = [],\n git,\n searcher,\n translations,\n}) => {\n const { menu, ...searchTranslations } = translations || {};\n const targetVersion = versions?.list.find((version) => version.key === versions.target);\n const versionPrefix = !targetVersion || targetVersion.key === versions?.default ? \"\" : `/${targetVersion.key}`;\n const targetLocale = locales?.list.find((locale) => locale.key === locales.target);\n const localePrefix = !targetLocale || targetLocale.key === locales?.default ? \"\" : `/${targetLocale.key}`;\n\n return (\n <header className=\"r-header\">\n <Container className=\"r-header-body\">\n <div>\n <NavLink href=\"/\" link={Link} className=\"r-header-logo\">\n {logo}\n </NavLink>\n </div>\n <HeaderMenu translations={{ menu }}>\n <nav className=\"r-header-nav\">\n {links.map((link) => (\n <NavLink href={link.href} link={Link} className=\"r-header-link\" key={link.title}>\n {link.title}\n </NavLink>\n ))}\n </nav>\n <div className=\"r-header-actions\">\n <div className=\"r-header-sections\">\n {versions && targetVersion && (\n <SectionDropdown\n defaultOption={targetVersion.key}\n options={versions.list.map((version) => ({\n href:\n version.href ||\n `${localePrefix}${version.key === versions.default ? \"\" : `/${version.key}`}/`,\n key: version.key,\n title: version.title,\n shortTitle: version.shortTitle,\n }))}\n link={Link}\n />\n )}\n {locales && targetLocale && (\n <SectionDropdown\n defaultOption={targetLocale.key}\n options={locales.list.map((locale) => ({\n href:\n locale.href ||\n `${locale.key === locales.default ? \"\" : `/${locale.key}`}${versionPrefix}/`,\n key: locale.key,\n title: locale.title,\n shortTitle: locale.shortTitle,\n }))}\n link={Link}\n />\n )}\n </div>\n {searcher && <Search link={Link} searcher={searcher} translations={searchTranslations} />}\n </div>\n </HeaderMenu>\n {git && <HeaderSocial git={git} />}\n </Container>\n </header>\n );\n};\n"],"names":["Header","logo","versions","locales","link","Link","links","git","searcher","translations","menu","searchTranslations","targetVersion","list","find","version","key","target","versionPrefix","default","targetLocale","locale","localePrefix","React","createElement","className","Container","NavLink","href","HeaderMenu","map","title","SectionDropdown","defaultOption","options","shortTitle","Search","HeaderSocial"],"mappings":"uYAmCO,MAAMA,EAAgC,EACzCC,OACAC,WACAC,UACAC,KAAMC,EAAO,IACbC,QAAQ,GACRC,MACAC,WACAC,mBAEA,MAAMC,KAAEA,KAASC,GAAuBF,GAAgB,CAAA,EAClDG,EAAgBV,GAAUW,KAAKC,MAAMC,GAAYA,EAAQC,MAAQd,EAASe,SAC1EC,EAAiBN,GAAiBA,EAAcI,MAAQd,GAAUiB,QAAe,IAAIP,EAAcI,MAAvB,GAC5EI,EAAejB,GAASU,KAAKC,MAAMO,GAAWA,EAAOL,MAAQb,EAAQc,SACrEK,EAAgBF,GAAgBA,EAAaJ,MAAQb,GAASgB,QAAe,IAAIC,EAAaJ,MAAtB,GAE9E,OACIO,EAAAC,cAAA,SAAA,CAAQC,UAAU,YACdF,EAAAC,cAACE,EAAS,CAACD,UAAU,iBACjBF,EAAAC,cAAA,MAAA,KACID,EAAAC,cAACG,EAAQ,CAAAC,KAAK,IAAIxB,KAAMC,EAAMoB,UAAU,iBACnCxB,IAGTsB,EAAAC,cAACK,EAAW,CAAApB,aAAc,CAAEC,SACxBa,EAAAC,cAAA,MAAA,CAAKC,UAAU,gBACVnB,EAAMwB,KAAK1B,GACRmB,EAAAC,cAACG,EAAQ,CAAAC,KAAMxB,EAAKwB,KAAMxB,KAAMC,EAAMoB,UAAU,gBAAgBT,IAAKZ,EAAK2B,OACrE3B,EAAK2B,UAIlBR,EAAKC,cAAA,MAAA,CAAAC,UAAU,oBACXF,EAAKC,cAAA,MAAA,CAAAC,UAAU,qBACVvB,GAAYU,GACTW,EAAAC,cAACQ,EAAe,CACZC,cAAerB,EAAcI,IAC7BkB,QAAShC,EAASW,KAAKiB,KAAKf,IAAa,CACrCa,KACIb,EAAQa,MACR,GAAGN,IAAeP,EAAQC,MAAQd,EAASiB,QAAU,GAAK,IAAIJ,EAAQC,SAC1EA,IAAKD,EAAQC,IACbe,MAAOhB,EAAQgB,MACfI,WAAYpB,EAAQoB,eAExB/B,KAAMC,IAGbF,GAAWiB,GACRG,EAAAC,cAACQ,EAAe,CACZC,cAAeb,EAAaJ,IAC5BkB,QAAS/B,EAAQU,KAAKiB,KAAKT,IAAY,CACnCO,KACIP,EAAOO,MACP,GAAGP,EAAOL,MAAQb,EAAQgB,QAAU,GAAK,IAAIE,EAAOL,QAAQE,KAChEF,IAAKK,EAAOL,IACZe,MAAOV,EAAOU,MACdI,WAAYd,EAAOc,eAEvB/B,KAAMC,KAIjBG,GAAYe,EAACC,cAAAY,EAAO,CAAAhC,KAAMC,EAAMG,SAAUA,EAAUC,aAAcE,MAG1EJ,GAAOgB,EAACC,cAAAa,EAAa,CAAA9B,IAAKA,KAGrC"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/elements/header/index.tsx"],"sourcesContent":["import \"./header.scss\";\nimport React from \"react\";\nimport { HeaderMenu, HeaderMenuProps } from \"@src/components/blocks/header-menu\";\nimport { Search, type SearchProps } from \"@src/components/blocks/search\";\nimport { SectionDropdown } from \"@src/components/blocks/section-dropdown\";\nimport { HeaderSocial } from \"@src/components/blocks/header-social\";\nimport { Container } from \"@src/components/ui/container\";\nimport { NavLink } from \"@src/components/blocks/nav-link\";\n\ntype SectionOption = {\n key: string;\n href?: string;\n title: string;\n shortTitle?: string;\n};\n\ntype SectionType = {\n default?: string;\n target: string;\n list: SectionOption[];\n};\n\nexport type HeaderProps = {\n logo: React.ReactElement;\n links?: {\n title: string;\n href: string;\n }[];\n git?: string | { uri: string; logo: React.ElementType };\n versions?: SectionType;\n locales?: SectionType;\n} & HeaderMenuProps &\n SearchProps;\n\nexport const Header: React.FC<HeaderProps> = ({ logo, versions, locales, links = [], git, searcher, translations }) => {\n const { menu, ...searchTranslations } = translations || {};\n const targetVersion = versions?.list.find((version) => version.key === versions.target);\n const versionPrefix = !targetVersion || targetVersion.key === versions?.default ? \"\" : `/${targetVersion.key}`;\n const targetLocale = locales?.list.find((locale) => locale.key === locales.target);\n const localePrefix = !targetLocale || targetLocale.key === locales?.default ? \"\" : `/${targetLocale.key}`;\n\n return (\n <header className=\"r-header\">\n <Container className=\"r-header-body\">\n <div>\n <NavLink href=\"/\" className=\"r-header-logo\">\n {logo}\n </NavLink>\n </div>\n <HeaderMenu translations={{ menu }}>\n <nav className=\"r-header-nav\">\n {links.map((link) => (\n <NavLink href={link.href} className=\"r-header-link\" key={link.title}>\n {link.title}\n </NavLink>\n ))}\n </nav>\n <div className=\"r-header-actions\">\n <div className=\"r-header-sections\">\n {versions && targetVersion && (\n <SectionDropdown\n defaultOption={targetVersion.key}\n options={versions.list.map((version) => ({\n href:\n version.href ||\n `${localePrefix}${version.key === versions.default ? \"\" : `/${version.key}`}/`,\n key: version.key,\n title: version.title,\n shortTitle: version.shortTitle,\n }))}\n />\n )}\n {locales && targetLocale && (\n <SectionDropdown\n defaultOption={targetLocale.key}\n options={locales.list.map((locale) => ({\n href:\n locale.href ||\n `${locale.key === locales.default ? \"\" : `/${locale.key}`}${versionPrefix}/`,\n key: locale.key,\n title: locale.title,\n shortTitle: locale.shortTitle,\n }))}\n />\n )}\n </div>\n {searcher && <Search searcher={searcher} translations={searchTranslations} />}\n </div>\n </HeaderMenu>\n {git && <HeaderSocial git={git} />}\n </Container>\n </header>\n );\n};\n"],"names":["Header","logo","versions","locales","links","git","searcher","translations","menu","searchTranslations","targetVersion","list","find","version","key","target","versionPrefix","default","targetLocale","locale","localePrefix","React","createElement","className","Container","NavLink","href","HeaderMenu","map","link","title","SectionDropdown","defaultOption","options","shortTitle","Search","HeaderSocial"],"mappings":"6YAkCaA,EAAgC,EAAGC,OAAMC,WAAUC,UAASC,QAAQ,GAAIC,MAAKC,WAAUC,mBAChG,MAAMC,KAAEA,KAASC,GAAuBF,GAAgB,CAAA,EAClDG,EAAgBR,GAAUS,KAAKC,MAAMC,GAAYA,EAAQC,MAAQZ,EAASa,SAC1EC,EAAiBN,GAAiBA,EAAcI,MAAQZ,GAAUe,QAAe,IAAIP,EAAcI,MAAvB,GAC5EI,EAAef,GAASQ,KAAKC,MAAMO,GAAWA,EAAOL,MAAQX,EAAQY,SACrEK,EAAgBF,GAAgBA,EAAaJ,MAAQX,GAASc,QAAe,IAAIC,EAAaJ,MAAtB,GAE9E,OACIO,EAAAC,cAAA,SAAA,CAAQC,UAAU,YACdF,EAAAC,cAACE,EAAS,CAACD,UAAU,iBACjBF,EAAAC,cAAA,MAAA,KACID,EAAAC,cAACG,EAAO,CAACC,KAAK,IAAIH,UAAU,iBACvBtB,IAGToB,EAAAC,cAACK,EAAW,CAAApB,aAAc,CAAEC,SACxBa,EAAAC,cAAA,MAAA,CAAKC,UAAU,gBACVnB,EAAMwB,KAAKC,GACRR,EAACC,cAAAG,GAAQC,KAAMG,EAAKH,KAAMH,UAAU,gBAAgBT,IAAKe,EAAKC,OACzDD,EAAKC,UAIlBT,EAAKC,cAAA,MAAA,CAAAC,UAAU,oBACXF,EAAKC,cAAA,MAAA,CAAAC,UAAU,qBACVrB,GAAYQ,GACTW,EAAAC,cAACS,EAAe,CACZC,cAAetB,EAAcI,IAC7BmB,QAAS/B,EAASS,KAAKiB,KAAKf,IAAa,CACrCa,KACIb,EAAQa,MACR,GAAGN,IAAeP,EAAQC,MAAQZ,EAASe,QAAU,GAAK,IAAIJ,EAAQC,SAC1EA,IAAKD,EAAQC,IACbgB,MAAOjB,EAAQiB,MACfI,WAAYrB,EAAQqB,iBAI/B/B,GAAWe,GACRG,EAAAC,cAACS,EAAe,CACZC,cAAed,EAAaJ,IAC5BmB,QAAS9B,EAAQQ,KAAKiB,KAAKT,IAAY,CACnCO,KACIP,EAAOO,MACP,GAAGP,EAAOL,MAAQX,EAAQc,QAAU,GAAK,IAAIE,EAAOL,QAAQE,KAChEF,IAAKK,EAAOL,IACZgB,MAAOX,EAAOW,MACdI,WAAYf,EAAOe,kBAKlC5B,GAAYe,EAAAC,cAACa,EAAM,CAAC7B,SAAUA,EAAUC,aAAcE,MAG9DJ,GAAOgB,EAACC,cAAAc,EAAa,CAAA/B,IAAKA,KAGrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/elements/robin-provider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAgC1B,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAc3D,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/elements/robin-provider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AA+B1B,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAY3D,CAAC"}
@@ -1,2 +1,2 @@
1
- import e from"react";import{NavigateProvider as t}from"../../contexts/navigate/provider.js";import{SidebarProvider as m}from"../../contexts/sidebar/provider.js";const s=()=>{const e=localStorage.getItem("theme");e&&["light","dark"].includes(e)?document.documentElement.classList.add(`theme-${e}`):(document.documentElement.classList.add("theme-system"),window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?document.documentElement.classList.add("theme-dark"):document.documentElement.classList.add("theme-light"));const t=localStorage.getItem("r-tabs"),m=t?.split(";").filter((e=>e&&/[\w-]+=[\w]+/.test(e)))||[];Array.from(document.documentElement.classList).forEach((e=>{e.startsWith("r-tabs-global")&&document.documentElement.classList.remove(e)})),m.forEach((e=>{const[t,m]=e.split("=");document.documentElement.classList.add(`r-tabs-global__${t}`,`r-tabs-global__${t}_${m}`)}))},a=({children:a})=>e.createElement(e.Fragment,null,e.createElement("script",{id:"detect-theme",dangerouslySetInnerHTML:{__html:`(${s})()`}}),e.createElement(m,null,e.createElement(t,null,a)));export{a as RobinProvider};
1
+ import e from"react";import{NavigateProvider as t}from"../../contexts/navigate/provider.js";const m=()=>{const e=localStorage.getItem("theme");e&&["light","dark"].includes(e)?document.documentElement.classList.add(`theme-${e}`):(document.documentElement.classList.add("theme-system"),window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?document.documentElement.classList.add("theme-dark"):document.documentElement.classList.add("theme-light"));const t=localStorage.getItem("r-tabs"),m=t?.split(";").filter((e=>e&&/[\w-]+=[\w]+/.test(e)))||[];Array.from(document.documentElement.classList).forEach((e=>{e.startsWith("r-tabs-global")&&document.documentElement.classList.remove(e)})),m.forEach((e=>{const[t,m]=e.split("=");document.documentElement.classList.add(`r-tabs-global__${t}`,`r-tabs-global__${t}_${m}`)}))},s=({children:s})=>e.createElement(e.Fragment,null,e.createElement("script",{id:"detect-theme",dangerouslySetInnerHTML:{__html:`(${m})()`}}),e.createElement(t,null,s));export{s as RobinProvider};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/elements/robin-provider/index.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { NavigateProvider } from \"@src/components/contexts/navigate/provider\";\nimport { SidebarProvider } from \"@src/components/contexts/sidebar/provider\";\n\nconst clientLogic = () => {\n const userTheme = localStorage.getItem(\"theme\");\n if (userTheme && [\"light\", \"dark\"].includes(userTheme)) {\n document.documentElement.classList.add(`theme-${userTheme}`);\n } else {\n document.documentElement.classList.add(`theme-system`);\n if (window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches) {\n document.documentElement.classList.add(\"theme-dark\");\n } else {\n document.documentElement.classList.add(\"theme-light\");\n }\n }\n\n const store = localStorage.getItem(\"r-tabs\");\n const items = store?.split(\";\").filter((item) => item && /[\\w-]+=[\\w]+/.test(item)) || [];\n const classNames = Array.from(document.documentElement.classList);\n classNames.forEach((className) => {\n if (className.startsWith(`r-tabs-global`)) {\n document.documentElement.classList.remove(className);\n }\n });\n items.forEach((item) => {\n const [tabsKey, tab] = item.split(\"=\");\n document.documentElement.classList.add(`r-tabs-global__${tabsKey}`, `r-tabs-global__${tabsKey}_${tab}`);\n });\n};\n\nexport const RobinProvider: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <>\n <script\n id=\"detect-theme\"\n dangerouslySetInnerHTML={{\n __html: `(${clientLogic})()`,\n }}\n />\n <SidebarProvider>\n <NavigateProvider>{children}</NavigateProvider>\n </SidebarProvider>\n </>\n );\n};\n"],"names":["clientLogic","userTheme","localStorage","getItem","includes","document","documentElement","classList","add","window","matchMedia","matches","store","items","split","filter","item","test","Array","from","forEach","className","startsWith","remove","tabsKey","tab","RobinProvider","children","React","createElement","Fragment","id","dangerouslySetInnerHTML","__html","SidebarProvider","NavigateProvider"],"mappings":"iKAKA,MAAMA,EAAc,KAChB,MAAMC,EAAYC,aAAaC,QAAQ,SACnCF,GAAa,CAAC,QAAS,QAAQG,SAASH,GACxCI,SAASC,gBAAgBC,UAAUC,IAAI,SAASP,MAEhDI,SAASC,gBAAgBC,UAAUC,IAAI,gBACnCC,OAAOC,YAAcD,OAAOC,WAAW,gCAAgCC,QACvEN,SAASC,gBAAgBC,UAAUC,IAAI,cAEvCH,SAASC,gBAAgBC,UAAUC,IAAI,gBAI/C,MAAMI,EAAQV,aAAaC,QAAQ,UAC7BU,EAAQD,GAAOE,MAAM,KAAKC,QAAQC,GAASA,GAAQ,eAAeC,KAAKD,MAAU,GACpEE,MAAMC,KAAKd,SAASC,gBAAgBC,WAC5Ca,SAASC,IACZA,EAAUC,WAAW,kBACrBjB,SAASC,gBAAgBC,UAAUgB,OAAOF,EAC7C,IAELR,EAAMO,SAASJ,IACX,MAAOQ,EAASC,GAAOT,EAAKF,MAAM,KAClCT,SAASC,gBAAgBC,UAAUC,IAAI,kBAAkBgB,IAAW,kBAAkBA,KAAWC,IAAM,GACzG,EAGOC,EAAmD,EAAGC,cAE3DC,EAAAC,cAAAD,EAAAE,SAAA,KACIF,EAAAC,cAAA,SAAA,CACIE,GAAG,eACHC,wBAAyB,CACrBC,OAAQ,IAAIjC,UAGpB4B,EAAAC,cAACK,EAAe,KACZN,EAAAC,cAACM,EAAkB,KAAAR"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/elements/robin-provider/index.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { NavigateProvider } from \"@src/components/contexts/navigate/provider\";\n\nconst clientLogic = () => {\n const userTheme = localStorage.getItem(\"theme\");\n if (userTheme && [\"light\", \"dark\"].includes(userTheme)) {\n document.documentElement.classList.add(`theme-${userTheme}`);\n } else {\n document.documentElement.classList.add(`theme-system`);\n if (window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches) {\n document.documentElement.classList.add(\"theme-dark\");\n } else {\n document.documentElement.classList.add(\"theme-light\");\n }\n }\n\n const store = localStorage.getItem(\"r-tabs\");\n const items = store?.split(\";\").filter((item) => item && /[\\w-]+=[\\w]+/.test(item)) || [];\n const classNames = Array.from(document.documentElement.classList);\n classNames.forEach((className) => {\n if (className.startsWith(`r-tabs-global`)) {\n document.documentElement.classList.remove(className);\n }\n });\n items.forEach((item) => {\n const [tabsKey, tab] = item.split(\"=\");\n document.documentElement.classList.add(`r-tabs-global__${tabsKey}`, `r-tabs-global__${tabsKey}_${tab}`);\n });\n};\n\nexport const RobinProvider: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <>\n <script\n id=\"detect-theme\"\n dangerouslySetInnerHTML={{\n __html: `(${clientLogic})()`,\n }}\n />\n <NavigateProvider>{children}</NavigateProvider>\n </>\n );\n};\n"],"names":["clientLogic","userTheme","localStorage","getItem","includes","document","documentElement","classList","add","window","matchMedia","matches","store","items","split","filter","item","test","Array","from","forEach","className","startsWith","remove","tabsKey","tab","RobinProvider","children","React","createElement","Fragment","id","dangerouslySetInnerHTML","__html","NavigateProvider"],"mappings":"4FAIA,MAAMA,EAAc,KAChB,MAAMC,EAAYC,aAAaC,QAAQ,SACnCF,GAAa,CAAC,QAAS,QAAQG,SAASH,GACxCI,SAASC,gBAAgBC,UAAUC,IAAI,SAASP,MAEhDI,SAASC,gBAAgBC,UAAUC,IAAI,gBACnCC,OAAOC,YAAcD,OAAOC,WAAW,gCAAgCC,QACvEN,SAASC,gBAAgBC,UAAUC,IAAI,cAEvCH,SAASC,gBAAgBC,UAAUC,IAAI,gBAI/C,MAAMI,EAAQV,aAAaC,QAAQ,UAC7BU,EAAQD,GAAOE,MAAM,KAAKC,QAAQC,GAASA,GAAQ,eAAeC,KAAKD,MAAU,GACpEE,MAAMC,KAAKd,SAASC,gBAAgBC,WAC5Ca,SAASC,IACZA,EAAUC,WAAW,kBACrBjB,SAASC,gBAAgBC,UAAUgB,OAAOF,EAC7C,IAELR,EAAMO,SAASJ,IACX,MAAOQ,EAASC,GAAOT,EAAKF,MAAM,KAClCT,SAASC,gBAAgBC,UAAUC,IAAI,kBAAkBgB,IAAW,kBAAkBA,KAAWC,IAAM,GACzG,EAGOC,EAAmD,EAAGC,cAE3DC,EAAAC,cAAAD,EAAAE,SAAA,KACIF,EAAAC,cAAA,SAAA,CACIE,GAAG,eACHC,wBAAyB,CACrBC,OAAQ,IAAIjC,UAGpB4B,EAAAC,cAACK,EAAkB,KAAAP"}
@@ -3,8 +3,6 @@ import { type TreeItem } from "./types";
3
3
  import "./sidebar.scss";
4
4
  type LinkBranchProps = {
5
5
  branch: TreeItem;
6
- link?: React.ElementType;
7
- pathname?: string;
8
6
  depth: number;
9
7
  translations?: {
10
8
  /** Expand {title} */
@@ -13,8 +11,6 @@ type LinkBranchProps = {
13
11
  };
14
12
  export type SidebarProps = {
15
13
  tree?: TreeItem[] | null;
16
- link?: React.ElementType;
17
- pathname?: string;
18
14
  translations?: LinkBranchProps["translations"];
19
15
  };
20
16
  export declare const Sidebar: React.FC<SidebarProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/elements/sidebar/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMxC,OAAO,gBAAgB,CAAC;AAExB,KAAK,eAAe,GAAG;IACnB,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE;QACX,qBAAqB;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACL,CAAC;AAwCF,MAAM,MAAM,YAAY,GAAG;IACvB,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;CAClD,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAwB1C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/elements/sidebar/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMxC,OAAO,gBAAgB,CAAC;AAExB,KAAK,eAAe,GAAG;IACnB,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE;QACX,qBAAqB;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACL,CAAC;AAuCF,MAAM,MAAM,YAAY,GAAG;IACvB,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;CAClD,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAsB1C,CAAC"}
@@ -1,2 +1,2 @@
1
- import e from"react";import t from"clsx";import{SidebarMenu as a}from"./sidebar-menu/index.js";import{SidebarDrop as r}from"./sidebar-drop/index.js";import{SidebarLink as n}from"./sidebar-link/index.js";import{checkIsTargetSection as i}from"./tools.js";const l=({branch:a,link:m,pathname:s,depth:d,translations:p})=>{const{expandTitle:c="Expand {title}"}=p||{};return e.createElement("li",{className:t("r-sidebar-li","heading"===a.type&&"r-sidebar-heading",a.items&&a.items.length>0&&"_droppable")},a.href?e.createElement(n,{link:m,branch:a,pathname:s}):e.createElement("p",{className:t("r-sidebar-p","heading"===a.type&&"r-sidebar-heading")},a.title),a.items&&a.items.length>0&&e.createElement(r,{defaultOpen:i(a,s),id:a.href+a.title,label:c.replace("{title}",a.title)},a.items.map((t=>e.createElement(l,{branch:t,link:m,key:t.href+t.title,depth:d>=4?4:d+1,pathname:s,translations:p})))))},m=({tree:t,pathname:r,link:n,translations:i})=>t?.length?e.createElement(e.Fragment,null,e.createElement("div",{className:"r-sidebar-top-mock"}),e.createElement(a,null,e.createElement("nav",{className:"r-sidebar-nav",id:"navigation"},e.createElement("ul",{className:"r-sidebar-list"},t.map((t=>e.createElement(l,{pathname:r?.replace(/\/$/,""),branch:t,link:n,key:t.href+t.title,depth:0,translations:i}))))))):e.createElement("div",{className:"r-sidebar"});export{m as Sidebar};
1
+ import e from"react";import t from"clsx";import{SidebarMenu as a}from"./sidebar-menu/index.js";import{SidebarDrop as r}from"./sidebar-drop/index.js";import{SidebarLink as i}from"./sidebar-link/index.js";import{isActiveItem as l,collectItems as n}from"./tools.js";const s=({branch:a,depth:m,translations:d})=>{const{expandTitle:c="Expand {title}"}=d||{};return e.createElement("li",{className:t("r-sidebar-li","heading"===a.type&&"r-sidebar-heading",a.items&&a.items.length>0&&"_droppable")},l(a)?e.createElement(i,{branch:a}):e.createElement("p",{className:t("r-sidebar-p","heading"===a.type&&"r-sidebar-heading")},a.title),a.items&&a.items.length>0&&e.createElement(r,{childHrefs:n(a),defaultOpen:!1,id:a.href+a.title,label:c.replace("{title}",a.title)},a.items.map((t=>e.createElement(s,{branch:t,key:t.href+t.title,depth:m>=4?4:m+1,translations:d})))))},m=({tree:t,translations:r})=>t?.length?e.createElement(e.Fragment,null,e.createElement("div",{className:"r-sidebar-top-mock"}),e.createElement(a,null,e.createElement("nav",{className:"r-sidebar-nav",id:"navigation"},e.createElement("ul",{className:"r-sidebar-list"},t.map((t=>e.createElement(s,{branch:t,key:t.href+t.title,depth:0,translations:r}))))))):e.createElement("div",{className:"r-sidebar"});export{m as Sidebar};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/elements/sidebar/index.tsx"],"sourcesContent":["import React from \"react\";\nimport clsx from \"clsx\";\n\nimport { type TreeItem } from \"./types\";\nimport { SidebarMenu } from \"./sidebar-menu\";\nimport { SidebarDrop } from \"./sidebar-drop\";\nimport { SidebarLink } from \"./sidebar-link\";\nimport { checkIsTargetSection } from \"./tools\";\n\nimport \"./sidebar.scss\";\n\ntype LinkBranchProps = {\n branch: TreeItem;\n link?: React.ElementType;\n pathname?: string;\n depth: number;\n translations?: {\n /** Expand {title} */\n expandTitle?: string;\n };\n};\n\nconst LinkBranch: React.FC<LinkBranchProps> = ({ branch, link, pathname, depth, translations }) => {\n const { expandTitle = \"Expand {title}\" } = translations || {};\n\n return (\n <li\n className={clsx(\n \"r-sidebar-li\",\n branch.type === \"heading\" && \"r-sidebar-heading\",\n branch.items && branch.items.length > 0 && \"_droppable\",\n )}\n >\n {branch.href ? (\n <SidebarLink link={link} branch={branch} pathname={pathname} />\n ) : (\n <p className={clsx(\"r-sidebar-p\", branch.type === \"heading\" && \"r-sidebar-heading\")}>{branch.title}</p>\n )}\n {branch.items && branch.items.length > 0 && (\n <SidebarDrop\n defaultOpen={checkIsTargetSection(branch, pathname)}\n id={branch.href + branch.title}\n label={expandTitle.replace(\"{title}\", branch.title)}\n >\n {branch.items.map((item) => (\n <LinkBranch\n branch={item}\n link={link}\n key={item.href + item.title}\n depth={depth >= 4 ? 4 : depth + 1}\n pathname={pathname}\n translations={translations}\n />\n ))}\n </SidebarDrop>\n )}\n </li>\n );\n};\n\nexport type SidebarProps = {\n tree?: TreeItem[] | null;\n link?: React.ElementType;\n pathname?: string;\n translations?: LinkBranchProps[\"translations\"];\n};\n\nexport const Sidebar: React.FC<SidebarProps> = ({ tree, pathname, link, translations }) => {\n if (!tree?.length) return <div className=\"r-sidebar\" />;\n\n return (\n <>\n <div className=\"r-sidebar-top-mock\" />\n <SidebarMenu>\n <nav className=\"r-sidebar-nav\" id=\"navigation\">\n <ul className=\"r-sidebar-list\">\n {tree.map((item) => (\n <LinkBranch\n pathname={pathname?.replace(/\\/$/, \"\")}\n branch={item}\n link={link}\n key={item.href + item.title}\n depth={0}\n translations={translations}\n />\n ))}\n </ul>\n </nav>\n </SidebarMenu>\n </>\n );\n};\n"],"names":["LinkBranch","branch","link","pathname","depth","translations","expandTitle","React","createElement","className","clsx","type","items","length","href","SidebarLink","title","SidebarDrop","defaultOpen","checkIsTargetSection","id","label","replace","map","item","key","Sidebar","tree","Fragment","SidebarMenu"],"mappings":"6PAsBA,MAAMA,EAAwC,EAAGC,SAAQC,OAAMC,WAAUC,QAAOC,mBAC5E,MAAMC,YAAEA,EAAc,kBAAqBD,GAAgB,CAAA,EAE3D,OACIE,EAAAC,cAAA,KAAA,CACIC,UAAWC,EACP,eACgB,YAAhBT,EAAOU,MAAsB,oBAC7BV,EAAOW,OAASX,EAAOW,MAAMC,OAAS,GAAK,eAG9CZ,EAAOa,KACJP,EAAAC,cAACO,EAAY,CAAAb,KAAMA,EAAMD,OAAQA,EAAQE,SAAUA,IAEnDI,qBAAGE,UAAWC,EAAK,cAA+B,YAAhBT,EAAOU,MAAsB,sBAAuBV,EAAOe,OAEhGf,EAAOW,OAASX,EAAOW,MAAMC,OAAS,GACnCN,gBAACU,EAAW,CACRC,YAAaC,EAAqBlB,EAAQE,GAC1CiB,GAAInB,EAAOa,KAAOb,EAAOe,MACzBK,MAAOf,EAAYgB,QAAQ,UAAWrB,EAAOe,QAE5Cf,EAAOW,MAAMW,KAAKC,GACfjB,EAAAC,cAACR,EAAU,CACPC,OAAQuB,EACRtB,KAAMA,EACNuB,IAAKD,EAAKV,KAAOU,EAAKR,MACtBZ,MAAOA,GAAS,EAAI,EAAIA,EAAQ,EAChCD,SAAUA,EACVE,aAAcA,OAMpC,EAUOqB,EAAkC,EAAGC,OAAMxB,WAAUD,OAAMG,kBAC/DsB,GAAMd,OAGPN,EAAAC,cAAAD,EAAAqB,SAAA,KACIrB,EAAKC,cAAA,MAAA,CAAAC,UAAU,uBACfF,EAAAC,cAACqB,EAAW,KACRtB,EAAAC,cAAA,MAAA,CAAKC,UAAU,gBAAgBW,GAAG,cAC9Bb,EAAAC,cAAA,KAAA,CAAIC,UAAU,kBACTkB,EAAKJ,KAAKC,GACPjB,EAACC,cAAAR,EACG,CAAAG,SAAUA,GAAUmB,QAAQ,MAAO,IACnCrB,OAAQuB,EACRtB,KAAMA,EACNuB,IAAKD,EAAKV,KAAOU,EAAKR,MACtBZ,MAAO,EACPC,aAAcA,UAfhBE,EAAKC,cAAA,MAAA,CAAAC,UAAU"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/elements/sidebar/index.tsx"],"sourcesContent":["import React from \"react\";\nimport clsx from \"clsx\";\n\nimport { type TreeItem } from \"./types\";\nimport { SidebarMenu } from \"./sidebar-menu\";\nimport { SidebarDrop } from \"./sidebar-drop\";\nimport { SidebarLink } from \"./sidebar-link\";\nimport { collectItems, isActiveItem } from \"./tools\";\n\nimport \"./sidebar.scss\";\n\ntype LinkBranchProps = {\n branch: TreeItem;\n depth: number;\n translations?: {\n /** Expand {title} */\n expandTitle?: string;\n };\n};\n\nconst LinkBranch: React.FC<LinkBranchProps> = ({ branch, depth, translations }) => {\n const { expandTitle = \"Expand {title}\" } = translations || {};\n\n return (\n <li\n className={clsx(\n \"r-sidebar-li\",\n branch.type === \"heading\" && \"r-sidebar-heading\",\n branch.items && branch.items.length > 0 && \"_droppable\",\n )}\n >\n {isActiveItem(branch) ? (\n <SidebarLink branch={branch} />\n ) : (\n <p className={clsx(\"r-sidebar-p\", branch.type === \"heading\" && \"r-sidebar-heading\")}>{branch.title}</p>\n )}\n {branch.items && branch.items.length > 0 && (\n <SidebarDrop\n childHrefs={collectItems(branch)}\n defaultOpen={false}\n id={branch.href + branch.title}\n label={expandTitle.replace(\"{title}\", branch.title)}\n >\n {branch.items.map((item) => (\n <LinkBranch\n branch={item}\n key={item.href + item.title}\n depth={depth >= 4 ? 4 : depth + 1}\n translations={translations}\n />\n ))}\n </SidebarDrop>\n )}\n </li>\n );\n};\n\nexport type SidebarProps = {\n tree?: TreeItem[] | null;\n translations?: LinkBranchProps[\"translations\"];\n};\n\nexport const Sidebar: React.FC<SidebarProps> = ({ tree, translations }) => {\n if (!tree?.length) return <div className=\"r-sidebar\" />;\n\n return (\n <>\n <div className=\"r-sidebar-top-mock\" />\n <SidebarMenu>\n <nav className=\"r-sidebar-nav\" id=\"navigation\">\n <ul className=\"r-sidebar-list\">\n {tree.map((item) => (\n <LinkBranch\n branch={item}\n key={item.href + item.title}\n depth={0}\n translations={translations}\n />\n ))}\n </ul>\n </nav>\n </SidebarMenu>\n </>\n );\n};\n"],"names":["LinkBranch","branch","depth","translations","expandTitle","React","createElement","className","clsx","type","items","length","isActiveItem","SidebarLink","title","SidebarDrop","childHrefs","collectItems","defaultOpen","id","href","label","replace","map","item","key","Sidebar","tree","Fragment","SidebarMenu"],"mappings":"uQAoBA,MAAMA,EAAwC,EAAGC,SAAQC,QAAOC,mBAC5D,MAAMC,YAAEA,EAAc,kBAAqBD,GAAgB,CAAA,EAE3D,OACIE,EAAAC,cAAA,KAAA,CACIC,UAAWC,EACP,eACgB,YAAhBP,EAAOQ,MAAsB,oBAC7BR,EAAOS,OAAST,EAAOS,MAAMC,OAAS,GAAK,eAG9CC,EAAaX,GACVI,EAAAC,cAACO,EAAW,CAACZ,OAAQA,IAErBI,EAAGC,cAAA,IAAA,CAAAC,UAAWC,EAAK,cAA+B,YAAhBP,EAAOQ,MAAsB,sBAAuBR,EAAOa,OAEhGb,EAAOS,OAAST,EAAOS,MAAMC,OAAS,GACnCN,EAACC,cAAAS,EACG,CAAAC,WAAYC,EAAahB,GACzBiB,aAAa,EACbC,GAAIlB,EAAOmB,KAAOnB,EAAOa,MACzBO,MAAOjB,EAAYkB,QAAQ,UAAWrB,EAAOa,QAE5Cb,EAAOS,MAAMa,KAAKC,GACfnB,EAACC,cAAAN,EACG,CAAAC,OAAQuB,EACRC,IAAKD,EAAKJ,KAAOI,EAAKV,MACtBZ,MAAOA,GAAS,EAAI,EAAIA,EAAQ,EAChCC,aAAcA,OAMpC,EAQOuB,EAAkC,EAAGC,OAAMxB,kBAC/CwB,GAAMhB,OAGPN,EAAAC,cAAAD,EAAAuB,SAAA,KACIvB,EAAKC,cAAA,MAAA,CAAAC,UAAU,uBACfF,EAAAC,cAACuB,EAAW,KACRxB,EAAAC,cAAA,MAAA,CAAKC,UAAU,gBAAgBY,GAAG,cAC9Bd,EAAIC,cAAA,KAAA,CAAAC,UAAU,kBACToB,EAAKJ,KAAKC,GACPnB,EAACC,cAAAN,GACGC,OAAQuB,EACRC,IAAKD,EAAKJ,KAAOI,EAAKV,MACtBZ,MAAO,EACPC,aAAcA,UAbhBE,EAAKC,cAAA,MAAA,CAAAC,UAAU"}
@@ -1,5 +1,6 @@
1
1
  import React from "react";
2
2
  export interface SidebarDropProps {
3
+ childHrefs: string[];
3
4
  defaultOpen?: boolean;
4
5
  label: string;
5
6
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/elements/sidebar/sidebar-drop/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAGjD,MAAM,WAAW,gBAAgB;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CA+C3E,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/elements/sidebar/sidebar-drop/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,MAAM,WAAW,gBAAgB;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAsC3E,CAAC"}
@@ -1,3 +1,3 @@
1
1
  'use client';
2
- import e,{useRef as r,useEffect as t}from"react";import{useSidebarStore as s}from"../../../contexts/sidebar/use-sidebar-store.js";const o=({children:o,id:a,defaultOpen:n,label:i})=>{const{add:l,remove:c,has:d}=s(),m=r(null);return t((()=>{n&&l(a)}),[n]),e.createElement("details",{className:"r-sidebar-drop",open:d(a)||n,onClick:e=>{e.currentTarget.open?(e.currentTarget.style.removeProperty("--drop-height"),c(a)):(m.current?.offsetHeight&&e.currentTarget.style.setProperty("--drop-height",m.current.offsetHeight.toString()+"px"),l(a))}},e.createElement("summary",{className:"r-sidebar-drop-btn","aria-label":i},e.createElement("svg",{className:"r-sidebar-drop-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},e.createElement("path",{d:"m9 18 6-6-6-6"}))),e.createElement("ul",{className:"r-sidebar-list r-sidebar-sublist",ref:m},o))};export{o as SidebarDrop};
2
+ import e,{useState as r,useRef as t,useEffect as n}from"react";import{usePathname as o}from"next/navigation";const s=({childHrefs:s,label:a,children:i})=>{const l=o(),c=s.includes(l),[d,m]=r(c),u=t(null),p=t(null);return n((()=>{c&&!d&&m(!0),c&&p.current&&!p.current?.open&&(p.current.open=!0)}),[c]),n((()=>{p.current?.style.setProperty("--drop-height",u.current?.offsetHeight.toString()+"px")}),[]),e.createElement("details",{className:"r-sidebar-drop",open:d,ref:p},e.createElement("summary",{className:"r-sidebar-drop-btn","aria-label":a},e.createElement("svg",{className:"r-sidebar-drop-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},e.createElement("path",{d:"m9 18 6-6-6-6"}))),e.createElement("ul",{className:"r-sidebar-list r-sidebar-sublist",ref:u},i))};export{s as SidebarDrop};
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/elements/sidebar/sidebar-drop/index.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\nimport { useSidebarStore } from \"@src/components/contexts/sidebar/use-sidebar-store\";\n\nexport interface SidebarDropProps {\n defaultOpen?: boolean;\n label: string;\n id: string;\n}\n\nexport const SidebarDrop: React.FC<React.PropsWithChildren<SidebarDropProps>> = ({\n children,\n id,\n defaultOpen,\n label,\n}) => {\n const { add, remove, has } = useSidebarStore();\n const dropdownRef = useRef<HTMLUListElement>(null);\n\n const toggleHandler = (e: React.MouseEvent<HTMLDetailsElement>) => {\n if (e.currentTarget.open) {\n e.currentTarget.style.removeProperty(\"--drop-height\");\n remove(id);\n } else {\n if (dropdownRef.current?.offsetHeight) {\n e.currentTarget.style.setProperty(\"--drop-height\", dropdownRef.current.offsetHeight.toString() + \"px\");\n }\n add(id);\n }\n };\n\n useEffect(() => {\n if (defaultOpen) add(id);\n }, [defaultOpen]);\n\n return (\n <details className=\"r-sidebar-drop\" open={has(id) || defaultOpen} onClick={toggleHandler}>\n <summary className=\"r-sidebar-drop-btn\" aria-label={label}>\n <svg\n className=\"r-sidebar-drop-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </summary>\n <ul className=\"r-sidebar-list r-sidebar-sublist\" ref={dropdownRef}>\n {children}\n </ul>\n </details>\n );\n};\n"],"names":["SidebarDrop","children","id","defaultOpen","label","add","remove","has","useSidebarStore","dropdownRef","useRef","useEffect","React","createElement","className","open","onClick","e","currentTarget","style","removeProperty","current","offsetHeight","setProperty","toString","width","height","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","d","ref"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/elements/sidebar/sidebar-drop/index.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { usePathname } from \"next/navigation\";\n\nexport interface SidebarDropProps {\n childHrefs: string[];\n defaultOpen?: boolean;\n label: string;\n id: string;\n}\n\nexport const SidebarDrop: React.FC<React.PropsWithChildren<SidebarDropProps>> = ({ childHrefs, label, children }) => {\n const pathname = usePathname();\n const openedByDefault = childHrefs.includes(pathname);\n const [opened, setOpened] = useState(openedByDefault);\n const dropdownRef = useRef<HTMLUListElement>(null);\n const detailsRef = useRef<HTMLDetailsElement>(null);\n\n useEffect(() => {\n if (openedByDefault && !opened) setOpened(true);\n if (openedByDefault && detailsRef.current && !detailsRef.current?.open) detailsRef.current.open = true;\n }, [openedByDefault]);\n\n useEffect(() => {\n detailsRef.current?.style.setProperty(\"--drop-height\", dropdownRef.current?.offsetHeight.toString() + \"px\");\n }, []);\n\n return (\n <details className=\"r-sidebar-drop\" open={opened} ref={detailsRef}>\n <summary className=\"r-sidebar-drop-btn\" aria-label={label}>\n <svg\n className=\"r-sidebar-drop-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </summary>\n <ul className=\"r-sidebar-list r-sidebar-sublist\" ref={dropdownRef}>\n {children}\n </ul>\n </details>\n );\n};\n"],"names":["SidebarDrop","childHrefs","label","children","pathname","usePathname","openedByDefault","includes","opened","setOpened","useState","dropdownRef","useRef","detailsRef","useEffect","current","open","style","setProperty","offsetHeight","toString","React","createElement","className","ref","width","height","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","d"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import React from "react";
2
2
  import { type TreeItem } from "../types";
3
3
  type SidebarLinkProps = {
4
- branch: TreeItem;
5
- link?: React.ElementType;
6
- pathname?: string;
4
+ branch: TreeItem & {
5
+ href: string;
6
+ };
7
7
  };
8
8
  export declare const SidebarLink: React.FC<SidebarLinkProps>;
9
9
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/elements/sidebar/sidebar-link/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIzC,KAAK,gBAAgB,GAAG;IACpB,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAqBlD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/elements/sidebar/sidebar-link/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAKtC,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGzC,KAAK,gBAAgB,GAAG;IACpB,MAAM,EAAE,QAAQ,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAqBlD,CAAC"}
@@ -1,3 +1,3 @@
1
1
  'use client';
2
- import e,{useRef as r}from"react";import t from"clsx";import{checkIsTargetPathname as n,checkIsTargetSection as l}from"../tools.js";import{NavLink as o}from"../../../blocks/nav-link/index.js";const i=({link:i,branch:a,pathname:m})=>{const c=n(a.href,m),s=l(a,m),f=r(null);return e.createElement(o,{link:i,href:a.href,className:t("r-sidebar-link",c&&"_active",s&&"_target"),ref:e=>{s&&(f.current=null,e?.parentElement?.scrollIntoViewIfNeeded?.())}},a.title)};export{i as SidebarLink};
2
+ import e,{useRef as r}from"react";import{usePathname as t}from"next/navigation";import n from"clsx";import{NavLink as o}from"../../../blocks/nav-link/index.js";import{checkIsTargetPathname as l,collectItems as i}from"../tools.js";const m=({branch:m})=>{const a=t(),c=l(m.href,a),s=i(m).includes(a),f=r(null);return e.createElement(o,{href:m.href,className:n("r-sidebar-link",c&&"_active",s&&"_target"),ref:e=>{s&&(f.current=null,e?.parentElement?.scrollIntoViewIfNeeded?.())}},m.title)};export{m as SidebarLink};
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/elements/sidebar/sidebar-link/index.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useRef } from \"react\";\nimport clsx from \"clsx\";\n\nimport { type TreeItem } from \"../types\";\nimport { checkIsTargetPathname, checkIsTargetSection } from \"../tools\";\nimport { NavLink } from \"@src/components/blocks/nav-link\";\n\ntype SidebarLinkProps = {\n branch: TreeItem;\n link?: React.ElementType;\n pathname?: string;\n};\n\nexport const SidebarLink: React.FC<SidebarLinkProps> = ({ link, branch, pathname }) => {\n const isActive = checkIsTargetPathname(branch.href, pathname);\n const isTarget = checkIsTargetSection(branch, pathname);\n const scrollTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n return (\n <NavLink\n link={link}\n href={branch.href}\n className={clsx(\"r-sidebar-link\", isActive && \"_active\", isTarget && \"_target\")}\n ref={(node) => {\n if (isTarget) {\n scrollTimeoutRef.current = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (node as any)?.parentElement?.scrollIntoViewIfNeeded?.();\n }\n }}\n >\n {branch.title}\n </NavLink>\n );\n};\n"],"names":["SidebarLink","link","branch","pathname","isActive","checkIsTargetPathname","href","isTarget","checkIsTargetSection","scrollTimeoutRef","useRef","React","createElement","NavLink","className","clsx","ref","node","current","parentElement","scrollIntoViewIfNeeded","title"],"mappings":";gMAeO,CAAMA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAA0C,CAAGC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMC,SAAQC,CACpE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,CAAWC,CAAAA,CAAAA,CAAsBH,CAAOI,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMH,CAC9CI,CAAAA,CAAAA,CAAAA,CAAWC,CAAqBN,CAAAA,CAAAA,CAAQC,CACxCM,CAAAA,CAAAA,CAAAA,CAAmBC,CAA8B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAEvD,OACIC,CAAAC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAACC,CAAO,CAAA,CACJZ,CAAMA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACNK,CAAMJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOI,CACbQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAWC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkBX,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAWG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACrES,CAAMC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACEV,CACAE,CAAAA,CAAAA,CAAAA,CAAAA,CAAiBS,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAE1BD,CAAcE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAeC,CAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAGHlB,CAAOmB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAEf"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/elements/sidebar/sidebar-link/index.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useRef } from \"react\";\nimport { usePathname } from \"next/navigation\";\nimport clsx from \"clsx\";\n\nimport { NavLink } from \"@src/components/blocks/nav-link\";\nimport { type TreeItem } from \"../types\";\nimport { checkIsTargetPathname, collectItems } from \"../tools\";\n\ntype SidebarLinkProps = {\n branch: TreeItem & { href: string };\n};\n\nexport const SidebarLink: React.FC<SidebarLinkProps> = ({ branch }) => {\n const pathname = usePathname();\n const isActive = checkIsTargetPathname(branch.href, pathname);\n const isTarget = collectItems(branch).includes(pathname);\n const scrollTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n return (\n <NavLink\n href={branch.href}\n className={clsx(\"r-sidebar-link\", isActive && \"_active\", isTarget && \"_target\")}\n ref={(node) => {\n if (isTarget) {\n scrollTimeoutRef.current = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (node as any)?.parentElement?.scrollIntoViewIfNeeded?.();\n }\n }}\n >\n {branch.title}\n </NavLink>\n );\n};\n"],"names":["SidebarLink","branch","pathname","usePathname","isActive","checkIsTargetPathname","href","isTarget","collectItems","includes","scrollTimeoutRef","useRef","React","createElement","NavLink","className","clsx","ref","node","current","parentElement","scrollIntoViewIfNeeded","title"],"mappings":";uOAcaA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAA0C,CAAGC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACtD,CAAMC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAWC,CACXC,CAAAA,CAAAA,CAAAA,CAAAA,CAAWC,CAAsBJ,CAAAA,CAAAA,CAAOK,CAAMJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAC9CK,CAAWC,CAAAA,CAAAA,CAAaP,CAAQQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAASP,CACzCQ,CAAAA,CAAAA,CAAAA,CAAmBC,EAA8B,CAEvD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACIC,CAAAC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAACC,CAAO,CAAA,CACJR,CAAML,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOK,CACbS,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAWC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkBZ,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAWG,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACrEU,CAAMC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACEX,CACAG,CAAAA,CAAAA,CAAAA,CAAAA,CAAiBS,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAE1BD,CAAcE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAeC,CAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAGHpB,CAAOqB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAEf"}
@@ -1,4 +1,7 @@
1
1
  import { type TreeItem } from "./types";
2
- export declare const checkIsTargetSection: (item: TreeItem, pathname?: string) => boolean;
2
+ export declare const collectItems: (branch: TreeItem) => string[];
3
+ export declare const isActiveItem: (branch: TreeItem) => branch is TreeItem & {
4
+ href: string;
5
+ };
3
6
  export declare const checkIsTargetPathname: (itemHref?: string, pathname?: string) => boolean;
4
7
  //# sourceMappingURL=tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../../src/components/elements/sidebar/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,eAAO,MAAM,oBAAoB,SAAU,QAAQ,aAAa,MAAM,YAUrE,CAAC;AAEF,eAAO,MAAM,qBAAqB,cAAe,MAAM,aAAa,MAAM,YAIzE,CAAC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../../src/components/elements/sidebar/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,eAAO,MAAM,YAAY,WAAY,QAAQ,aAU5C,CAAC;AAEF,eAAO,MAAM,YAAY,WAAY,QAAQ;UAAgC,MAAM;CAA0B,CAAC;AAE9G,eAAO,MAAM,qBAAqB,cAAe,MAAM,aAAa,MAAM,YAIzE,CAAC"}
@@ -1,2 +1,2 @@
1
- const t=(e,p)=>"string"==typeof p&&("string"==typeof e.href&&p===new URL(e.href,"http://r").pathname?.replace(/\/$/,"")||!!e.items?.find((e=>t(e,p)))),e=(t,e)=>"string"==typeof e&&"string"==typeof t&&e===new URL(t,"http://r").pathname?.replace(/\/$/,"");export{e as checkIsTargetPathname,t as checkIsTargetSection};
1
+ const e=t=>{const r=[];return t.href&&r.push(t.href),t.items?.forEach((t=>{r.push(...e(t))})),r},t=e=>Boolean(e.href),r=(e,t)=>"string"==typeof t&&"string"==typeof e&&t===new URL(e,"http://r").pathname?.replace(/\/$/,"");export{r as checkIsTargetPathname,e as collectItems,t as isActiveItem};
2
2
  //# sourceMappingURL=tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sources":["../../../../src/components/elements/sidebar/tools.ts"],"sourcesContent":["import { type TreeItem } from \"./types\";\n\nexport const checkIsTargetSection = (item: TreeItem, pathname?: string) => {\n if (typeof pathname !== \"string\") return false;\n\n if (typeof item.href === \"string\" && pathname === new URL(item.href, \"http://r\").pathname?.replace(/\\/$/, \"\")) {\n return true;\n }\n\n if (item.items?.find((el) => checkIsTargetSection(el, pathname))) return true;\n\n return false;\n};\n\nexport const checkIsTargetPathname = (itemHref?: string, pathname?: string) => {\n if (typeof pathname !== \"string\" || typeof itemHref !== \"string\") return false;\n\n return pathname === new URL(itemHref, \"http://r\").pathname?.replace(/\\/$/, \"\");\n};\n"],"names":["checkIsTargetSection","item","pathname","href","URL","replace","items","find","el","checkIsTargetPathname","itemHref"],"mappings":"MAEaA,EAAuB,CAACC,EAAgBC,IACzB,iBAAbA,IAEc,iBAAdD,EAAKE,MAAqBD,IAAa,IAAIE,IAAIH,EAAKE,KAAM,YAAYD,UAAUG,QAAQ,MAAO,OAItGJ,EAAKK,OAAOC,MAAMC,GAAOR,EAAqBQ,EAAIN,MAK7CO,EAAwB,CAACC,EAAmBR,IAC7B,iBAAbA,GAA6C,iBAAbQ,GAEpCR,IAAa,IAAIE,IAAIM,EAAU,YAAYR,UAAUG,QAAQ,MAAO"}
1
+ {"version":3,"file":"tools.js","sources":["../../../../src/components/elements/sidebar/tools.ts"],"sourcesContent":["import { type TreeItem } from \"./types\";\n\nexport const collectItems = (branch: TreeItem) => {\n const links: string[] = [];\n\n if (branch.href) links.push(branch.href);\n\n branch.items?.forEach((item) => {\n links.push(...collectItems(item));\n });\n\n return links;\n};\n\nexport const isActiveItem = (branch: TreeItem): branch is TreeItem & { href: string } => Boolean(branch.href);\n\nexport const checkIsTargetPathname = (itemHref?: string, pathname?: string) => {\n if (typeof pathname !== \"string\" || typeof itemHref !== \"string\") return false;\n\n return pathname === new URL(itemHref, \"http://r\").pathname?.replace(/\\/$/, \"\");\n};\n"],"names":["collectItems","branch","links","href","push","items","forEach","item","isActiveItem","Boolean","checkIsTargetPathname","itemHref","pathname","URL","replace"],"mappings":"AAEa,MAAAA,EAAgBC,IACzB,MAAMC,EAAkB,GAQxB,OANID,EAAOE,MAAMD,EAAME,KAAKH,EAAOE,MAEnCF,EAAOI,OAAOC,SAASC,IACnBL,EAAME,QAAQJ,EAAaO,GAAM,IAG9BL,CAAK,EAGHM,EAAgBP,GAA4DQ,QAAQR,EAAOE,MAE3FO,EAAwB,CAACC,EAAmBC,IAC7B,iBAAbA,GAA6C,iBAAbD,GAEpCC,IAAa,IAAIC,IAAIF,EAAU,YAAYC,UAAUE,QAAQ,MAAO"}
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
+ import { type LinkProps } from "next/link";
2
3
  import "./content-link.scss";
3
- export interface ContentLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
4
- link?: React.ElementType;
4
+ export interface ContentLinkProps extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, "href">, React.PropsWithChildren<LinkProps> {
5
5
  external?: boolean;
6
6
  }
7
7
  export declare const ContentLink: React.FC<ContentLinkProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/content-link/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,qBAAqB,CAAC;AAE7B,MAAM,WAAW,gBAAiB,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;IACnF,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAmBlD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/content-link/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAGjD,OAAO,qBAAqB,CAAC;AAE7B,MAAM,WAAW,gBACb,SAAQ,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,EAC/D,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAalD,CAAC"}
@@ -1,2 +1,2 @@
1
- import e from"react";import r from"clsx";const n=({link:n="a",className:t,external:a,children:l,...c})=>{const o=a?{target:"_blank",rel:"noopener noreferrer"}:{};return e.createElement(n,{className:r("r-content-link",t),...o,...c},l,a&&e.createElement(e.Fragment,null," ",e.createElement("span",{className:"r-content-link-external"})))};export{n as ContentLink};
1
+ import e from"react";import r from"next/link";import n from"clsx";const t=({className:t,external:l,children:a,...o})=>{const c=l?{target:"_blank",rel:"noopener noreferrer"}:{};return e.createElement(r,{className:n("r-content-link",t),...c,...o},a,l&&e.createElement(e.Fragment,null," ",e.createElement("span",{className:"r-content-link-external"})))};export{t as ContentLink};
2
2
  //# sourceMappingURL=index.js.map