@seqera/docusaurus-theme-seqera 1.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 (327) hide show
  1. package/README.md +26 -0
  2. package/package.json +66 -0
  3. package/src/getSwizzleConfig.ts +433 -0
  4. package/src/index.ts +154 -0
  5. package/src/inlineScripts.ts +95 -0
  6. package/src/inlineSvgSprites.ts +7 -0
  7. package/src/main-styles.css +322 -0
  8. package/src/nprogress.css +36 -0
  9. package/src/nprogress.ts +27 -0
  10. package/src/options.ts +503 -0
  11. package/src/prism-include-languages.ts +6 -0
  12. package/src/styles/api.css +42 -0
  13. package/src/styles/typography.css +342 -0
  14. package/src/theme/Admonition/Icon/Danger.tsx +15 -0
  15. package/src/theme/Admonition/Icon/Info.tsx +15 -0
  16. package/src/theme/Admonition/Icon/Note.tsx +15 -0
  17. package/src/theme/Admonition/Icon/Tip.tsx +15 -0
  18. package/src/theme/Admonition/Icon/Warning.tsx +15 -0
  19. package/src/theme/Admonition/Layout/index.tsx +53 -0
  20. package/src/theme/Admonition/Layout/styles.module.css +39 -0
  21. package/src/theme/Admonition/Type/Caution.tsx +34 -0
  22. package/src/theme/Admonition/Type/Danger.tsx +32 -0
  23. package/src/theme/Admonition/Type/Info.tsx +32 -0
  24. package/src/theme/Admonition/Type/Note.tsx +32 -0
  25. package/src/theme/Admonition/Type/Tip.tsx +32 -0
  26. package/src/theme/Admonition/Type/Warning.tsx +32 -0
  27. package/src/theme/Admonition/Types.tsx +33 -0
  28. package/src/theme/Admonition/index.tsx +23 -0
  29. package/src/theme/AdmonitionVersioned/AddedInVersion.tsx +14 -0
  30. package/src/theme/AdmonitionVersioned/AdmonitionVersioned.tsx +66 -0
  31. package/src/theme/AdmonitionVersioned/ChangedInVersion.tsx +14 -0
  32. package/src/theme/AdmonitionVersioned/DeprecatedInVersion.tsx +15 -0
  33. package/src/theme/AdmonitionVersioned/getStableVersion.ts +30 -0
  34. package/src/theme/AdmonitionVersioned/index.ts +1 -0
  35. package/src/theme/AdmonitionVersioned/stableVersions.ts +119 -0
  36. package/src/theme/AnnouncementBar/CloseButton/index.tsx +24 -0
  37. package/src/theme/AnnouncementBar/CloseButton/styles.module.css +6 -0
  38. package/src/theme/AnnouncementBar/Content/index.tsx +21 -0
  39. package/src/theme/AnnouncementBar/Content/styles.module.css +12 -0
  40. package/src/theme/AnnouncementBar/index.tsx +37 -0
  41. package/src/theme/AnnouncementBar/styles.module.css +57 -0
  42. package/src/theme/BackToTopButton/index.tsx +30 -0
  43. package/src/theme/BackToTopButton/styles.module.css +39 -0
  44. package/src/theme/Blog/Components/Author/Socials/index.tsx +75 -0
  45. package/src/theme/Blog/Components/Author/Socials/styles.module.css +34 -0
  46. package/src/theme/Blog/Components/Author/index.tsx +98 -0
  47. package/src/theme/Blog/Components/Author/styles.module.css +69 -0
  48. package/src/theme/Blog/Pages/BlogAuthorsListPage/index.tsx +57 -0
  49. package/src/theme/Blog/Pages/BlogAuthorsListPage/styles.module.css +6 -0
  50. package/src/theme/Blog/Pages/BlogAuthorsPostsPage/index.tsx +77 -0
  51. package/src/theme/BlogArchivePage/index.tsx +102 -0
  52. package/src/theme/BlogLayout/index.tsx +31 -0
  53. package/src/theme/BlogListPage/StructuredData/index.tsx +17 -0
  54. package/src/theme/BlogListPage/index.tsx +57 -0
  55. package/src/theme/BlogListPaginator/index.tsx +47 -0
  56. package/src/theme/BlogPostItem/Container/index.tsx +11 -0
  57. package/src/theme/BlogPostItem/Content/index.tsx +23 -0
  58. package/src/theme/BlogPostItem/Footer/ReadMoreLink/index.tsx +39 -0
  59. package/src/theme/BlogPostItem/Footer/index.tsx +85 -0
  60. package/src/theme/BlogPostItem/Header/Authors/index.tsx +49 -0
  61. package/src/theme/BlogPostItem/Header/Authors/styles.module.css +15 -0
  62. package/src/theme/BlogPostItem/Header/Info/index.tsx +77 -0
  63. package/src/theme/BlogPostItem/Header/Info/styles.module.css +5 -0
  64. package/src/theme/BlogPostItem/Header/Title/index.tsx +20 -0
  65. package/src/theme/BlogPostItem/Header/Title/styles.module.css +14 -0
  66. package/src/theme/BlogPostItem/Header/index.tsx +16 -0
  67. package/src/theme/BlogPostItem/index.tsx +27 -0
  68. package/src/theme/BlogPostItems/index.tsx +25 -0
  69. package/src/theme/BlogPostPage/Metadata/index.tsx +39 -0
  70. package/src/theme/BlogPostPage/StructuredData/index.tsx +16 -0
  71. package/src/theme/BlogPostPage/index.tsx +74 -0
  72. package/src/theme/BlogPostPaginator/index.tsx +46 -0
  73. package/src/theme/BlogSidebar/Content/index.tsx +52 -0
  74. package/src/theme/BlogSidebar/Desktop/index.tsx +52 -0
  75. package/src/theme/BlogSidebar/Desktop/styles.module.css +46 -0
  76. package/src/theme/BlogSidebar/Mobile/index.tsx +47 -0
  77. package/src/theme/BlogSidebar/Mobile/styles.module.css +5 -0
  78. package/src/theme/BlogSidebar/index.tsx +19 -0
  79. package/src/theme/BlogTagsListPage/index.tsx +33 -0
  80. package/src/theme/BlogTagsPostsPage/index.tsx +68 -0
  81. package/src/theme/CodeBlock/Buttons/Button/index.tsx +14 -0
  82. package/src/theme/CodeBlock/Buttons/CopyButton/index.tsx +82 -0
  83. package/src/theme/CodeBlock/Buttons/CopyButton/styles.module.css +42 -0
  84. package/src/theme/CodeBlock/Buttons/WordWrapButton/index.tsx +40 -0
  85. package/src/theme/CodeBlock/Buttons/WordWrapButton/styles.module.css +10 -0
  86. package/src/theme/CodeBlock/Buttons/index.tsx +27 -0
  87. package/src/theme/CodeBlock/Buttons/styles.module.css +32 -0
  88. package/src/theme/CodeBlock/Container/index.tsx +27 -0
  89. package/src/theme/CodeBlock/Container/styles.module.css +9 -0
  90. package/src/theme/CodeBlock/Content/Element.tsx +24 -0
  91. package/src/theme/CodeBlock/Content/String.tsx +37 -0
  92. package/src/theme/CodeBlock/Content/index.tsx +79 -0
  93. package/src/theme/CodeBlock/Content/styles.module.css +30 -0
  94. package/src/theme/CodeBlock/Layout/index.tsx +29 -0
  95. package/src/theme/CodeBlock/Layout/styles.module.css +22 -0
  96. package/src/theme/CodeBlock/Line/Token/index.tsx +13 -0
  97. package/src/theme/CodeBlock/Line/index.tsx +61 -0
  98. package/src/theme/CodeBlock/Line/styles.module.css +47 -0
  99. package/src/theme/CodeBlock/Title/index.tsx +10 -0
  100. package/src/theme/CodeBlock/index.tsx +40 -0
  101. package/src/theme/CodeInline/index.tsx +11 -0
  102. package/src/theme/ColorModeToggle/index.tsx +140 -0
  103. package/src/theme/ColorModeToggle/styles.module.css +35 -0
  104. package/src/theme/ContentVisibility/Draft/index.tsx +22 -0
  105. package/src/theme/ContentVisibility/Unlisted/index.tsx +37 -0
  106. package/src/theme/ContentVisibility/index.tsx +20 -0
  107. package/src/theme/Details/index.tsx +21 -0
  108. package/src/theme/Details/styles.module.css +8 -0
  109. package/src/theme/DocBreadcrumbs/Items/Home/index.tsx +29 -0
  110. package/src/theme/DocBreadcrumbs/Items/Home/styles.module.css +9 -0
  111. package/src/theme/DocBreadcrumbs/StructuredData/index.tsx +19 -0
  112. package/src/theme/DocBreadcrumbs/index.tsx +98 -0
  113. package/src/theme/DocBreadcrumbs/styles.module.css +14 -0
  114. package/src/theme/DocCard/index.tsx +133 -0
  115. package/src/theme/DocCard/styles.module.css +29 -0
  116. package/src/theme/DocCardList/index.tsx +43 -0
  117. package/src/theme/DocCardList/styles.module.css +9 -0
  118. package/src/theme/DocCategoryGeneratedIndexPage/index.tsx +68 -0
  119. package/src/theme/DocCategoryGeneratedIndexPage/styles.module.css +13 -0
  120. package/src/theme/DocItem/Content/index.tsx +43 -0
  121. package/src/theme/DocItem/Footer/index.tsx +51 -0
  122. package/src/theme/DocItem/Layout/index.tsx +66 -0
  123. package/src/theme/DocItem/Layout/styles.module.css +12 -0
  124. package/src/theme/DocItem/Metadata/index.tsx +17 -0
  125. package/src/theme/DocItem/Paginator/index.tsx +20 -0
  126. package/src/theme/DocItem/TOC/Desktop/index.tsx +19 -0
  127. package/src/theme/DocItem/TOC/Mobile/index.tsx +22 -0
  128. package/src/theme/DocItem/TOC/Mobile/styles.module.css +26 -0
  129. package/src/theme/DocItem/index.tsx +23 -0
  130. package/src/theme/DocPaginator/index.tsx +46 -0
  131. package/src/theme/DocRoot/Layout/Main/index.tsx +31 -0
  132. package/src/theme/DocRoot/Layout/Main/styles.module.css +23 -0
  133. package/src/theme/DocRoot/Layout/Sidebar/ExpandButton/index.tsx +36 -0
  134. package/src/theme/DocRoot/Layout/Sidebar/ExpandButton/styles.module.css +29 -0
  135. package/src/theme/DocRoot/Layout/Sidebar/index.tsx +79 -0
  136. package/src/theme/DocRoot/Layout/Sidebar/styles.module.css +34 -0
  137. package/src/theme/DocRoot/Layout/index.tsx +32 -0
  138. package/src/theme/DocRoot/Layout/styles.module.css +11 -0
  139. package/src/theme/DocRoot/index.tsx +29 -0
  140. package/src/theme/DocSidebar/Desktop/CollapseButton/index.tsx +34 -0
  141. package/src/theme/DocSidebar/Desktop/CollapseButton/styles.module.css +42 -0
  142. package/src/theme/DocSidebar/Desktop/Content/index.tsx +56 -0
  143. package/src/theme/DocSidebar/Desktop/Content/styles.module.css +18 -0
  144. package/src/theme/DocSidebar/Desktop/index.tsx +36 -0
  145. package/src/theme/DocSidebar/Desktop/styles.module.css +39 -0
  146. package/src/theme/DocSidebar/Mobile/index.tsx +49 -0
  147. package/src/theme/DocSidebar/index.tsx +25 -0
  148. package/src/theme/DocSidebarItem/Category/index.tsx +309 -0
  149. package/src/theme/DocSidebarItem/Category/styles.module.css +35 -0
  150. package/src/theme/DocSidebarItem/Html/index.tsx +30 -0
  151. package/src/theme/DocSidebarItem/Html/styles.module.css +8 -0
  152. package/src/theme/DocSidebarItem/Link/index.tsx +62 -0
  153. package/src/theme/DocSidebarItem/Link/styles.module.css +13 -0
  154. package/src/theme/DocSidebarItem/index.tsx +19 -0
  155. package/src/theme/DocSidebarItems/index.tsx +24 -0
  156. package/src/theme/DocTagDocListPage/index.tsx +113 -0
  157. package/src/theme/DocTagsListPage/index.tsx +52 -0
  158. package/src/theme/DocVersionBadge/index.tsx +29 -0
  159. package/src/theme/DocVersionBanner/index.tsx +171 -0
  160. package/src/theme/DocVersionRoot/index.tsx +46 -0
  161. package/src/theme/DocsRoot/index.tsx +17 -0
  162. package/src/theme/EditMetaRow/index.tsx +31 -0
  163. package/src/theme/EditMetaRow/styles.module.css +19 -0
  164. package/src/theme/EditThisPage/index.tsx +21 -0
  165. package/src/theme/ErrorPageContent.tsx +38 -0
  166. package/src/theme/Footer/Copyright/index.tsx +15 -0
  167. package/src/theme/Footer/Layout/index.tsx +42 -0
  168. package/src/theme/Footer/LinkItem/index.tsx +31 -0
  169. package/src/theme/Footer/Links/MultiColumn/index.tsx +53 -0
  170. package/src/theme/Footer/Links/Simple/index.tsx +38 -0
  171. package/src/theme/Footer/Links/index.tsx +16 -0
  172. package/src/theme/Footer/Logo/index.tsx +41 -0
  173. package/src/theme/Footer/Logo/styles.module.css +11 -0
  174. package/src/theme/Footer/index.tsx +28 -0
  175. package/src/theme/Heading/index.tsx +50 -0
  176. package/src/theme/Heading/styles.module.css +17 -0
  177. package/src/theme/Homepage/index.tsx +178 -0
  178. package/src/theme/Icon/AI/index.tsx +21 -0
  179. package/src/theme/Icon/AWS/index.tsx +22 -0
  180. package/src/theme/Icon/Arrow/index.tsx +15 -0
  181. package/src/theme/Icon/Azure/index.tsx +28 -0
  182. package/src/theme/Icon/Changelog/index.tsx +26 -0
  183. package/src/theme/Icon/ChatBubble/index.tsx +29 -0
  184. package/src/theme/Icon/ChatBubbles/index.tsx +42 -0
  185. package/src/theme/Icon/Close/index.tsx +21 -0
  186. package/src/theme/Icon/Cog/index.tsx +45 -0
  187. package/src/theme/Icon/Copy/index.tsx +15 -0
  188. package/src/theme/Icon/DarkMode/index.tsx +15 -0
  189. package/src/theme/Icon/Edit/index.tsx +24 -0
  190. package/src/theme/Icon/Edit/styles.module.css +6 -0
  191. package/src/theme/Icon/Envelope/index.tsx +33 -0
  192. package/src/theme/Icon/ExternalLink/index.tsx +30 -0
  193. package/src/theme/Icon/ExternalLink/styles.module.css +5 -0
  194. package/src/theme/Icon/Fusion/index.tsx +32 -0
  195. package/src/theme/Icon/GoogleCloud/index.tsx +56 -0
  196. package/src/theme/Icon/Home/index.tsx +15 -0
  197. package/src/theme/Icon/Language/index.tsx +24 -0
  198. package/src/theme/Icon/LightMode/index.tsx +15 -0
  199. package/src/theme/Icon/MCP/index.tsx +84 -0
  200. package/src/theme/Icon/Menu/index.tsx +29 -0
  201. package/src/theme/Icon/MultiQC/index.tsx +25 -0
  202. package/src/theme/Icon/Nextflow/index.tsx +25 -0
  203. package/src/theme/Icon/QuestionMark/index.tsx +46 -0
  204. package/src/theme/Icon/SeqeraCloud/index.tsx +35 -0
  205. package/src/theme/Icon/SeqeraEnterprise/index.tsx +372 -0
  206. package/src/theme/Icon/SeqeraLogo/index.tsx +22 -0
  207. package/src/theme/Icon/ServiceStatus/index.tsx +101 -0
  208. package/src/theme/Icon/Sidebar/index.tsx +8 -0
  209. package/src/theme/Icon/Socials/Bluesky/index.tsx +23 -0
  210. package/src/theme/Icon/Socials/Bluesky/styles.module.css +9 -0
  211. package/src/theme/Icon/Socials/Default/index.tsx +28 -0
  212. package/src/theme/Icon/Socials/Email/index.tsx +23 -0
  213. package/src/theme/Icon/Socials/GitHub/index.tsx +24 -0
  214. package/src/theme/Icon/Socials/GitHub/styles.module.css +9 -0
  215. package/src/theme/Icon/Socials/Instagram/index.tsx +23 -0
  216. package/src/theme/Icon/Socials/Instagram/styles.module.css +9 -0
  217. package/src/theme/Icon/Socials/LinkedIn/index.tsx +23 -0
  218. package/src/theme/Icon/Socials/LinkedIn/styles.module.css +9 -0
  219. package/src/theme/Icon/Socials/Mastodon/index.tsx +40 -0
  220. package/src/theme/Icon/Socials/StackOverflow/index.tsx +25 -0
  221. package/src/theme/Icon/Socials/Threads/index.tsx +25 -0
  222. package/src/theme/Icon/Socials/Threads/styles.module.css +9 -0
  223. package/src/theme/Icon/Socials/Twitch/index.tsx +32 -0
  224. package/src/theme/Icon/Socials/Twitter/index.tsx +22 -0
  225. package/src/theme/Icon/Socials/X/index.tsx +24 -0
  226. package/src/theme/Icon/Socials/X/styles.module.css +9 -0
  227. package/src/theme/Icon/Socials/YouTube/index.tsx +22 -0
  228. package/src/theme/Icon/Success/index.tsx +15 -0
  229. package/src/theme/Icon/SystemColorMode/index.tsx +15 -0
  230. package/src/theme/Icon/Wave/index.tsx +32 -0
  231. package/src/theme/Icon/WordWrap/index.tsx +15 -0
  232. package/src/theme/LastUpdated/index.tsx +91 -0
  233. package/src/theme/Layout/Provider/index.tsx +26 -0
  234. package/src/theme/Layout/index.tsx +59 -0
  235. package/src/theme/Layout/styles.module.css +23 -0
  236. package/src/theme/Logo/index.tsx +78 -0
  237. package/src/theme/MDXComponents/A/index.tsx +16 -0
  238. package/src/theme/MDXComponents/Button/index.tsx +43 -0
  239. package/src/theme/MDXComponents/Code.tsx +26 -0
  240. package/src/theme/MDXComponents/Details.tsx +26 -0
  241. package/src/theme/MDXComponents/Heading.tsx +9 -0
  242. package/src/theme/MDXComponents/Img/index.tsx +23 -0
  243. package/src/theme/MDXComponents/Img/styles.module.css +5 -0
  244. package/src/theme/MDXComponents/Li.tsx +17 -0
  245. package/src/theme/MDXComponents/Pre.tsx +10 -0
  246. package/src/theme/MDXComponents/Ul/index.tsx +25 -0
  247. package/src/theme/MDXComponents/Ul/styles.module.css +9 -0
  248. package/src/theme/MDXComponents/index.tsx +47 -0
  249. package/src/theme/MDXContent/index.tsx +10 -0
  250. package/src/theme/MDXPage/index.tsx +87 -0
  251. package/src/theme/MDXPage/styles.module.css +5 -0
  252. package/src/theme/Mermaid.tsx +11 -0
  253. package/src/theme/Navbar/ColorModeToggle/index.tsx +29 -0
  254. package/src/theme/Navbar/ColorModeToggle/styles.module.css +5 -0
  255. package/src/theme/Navbar/Content/index.tsx +152 -0
  256. package/src/theme/Navbar/Content/styles.module.css +19 -0
  257. package/src/theme/Navbar/Layout/index.tsx +59 -0
  258. package/src/theme/Navbar/Layout/styles.module.css +9 -0
  259. package/src/theme/Navbar/Logo/index.tsx +14 -0
  260. package/src/theme/Navbar/MobileSidebar/Header/index.tsx +37 -0
  261. package/src/theme/Navbar/MobileSidebar/Layout/index.tsx +72 -0
  262. package/src/theme/Navbar/MobileSidebar/Layout/styles.module.css +11 -0
  263. package/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx +90 -0
  264. package/src/theme/Navbar/MobileSidebar/SecondaryMenu/index.tsx +34 -0
  265. package/src/theme/Navbar/MobileSidebar/Toggle/index.tsx +25 -0
  266. package/src/theme/Navbar/MobileSidebar/index.tsx +28 -0
  267. package/src/theme/Navbar/Search/index.tsx +15 -0
  268. package/src/theme/Navbar/Search/styles.module.css +22 -0
  269. package/src/theme/Navbar/Submenu/SubmenuLinks.tsx +136 -0
  270. package/src/theme/Navbar/Submenu/index.tsx +84 -0
  271. package/src/theme/Navbar/Submenu/styles.module.css +82 -0
  272. package/src/theme/Navbar/index.tsx +13 -0
  273. package/src/theme/NavbarItem/ComponentTypes.tsx +27 -0
  274. package/src/theme/NavbarItem/DefaultNavbarItem/Desktop/index.tsx +29 -0
  275. package/src/theme/NavbarItem/DefaultNavbarItem/Mobile/index.tsx +18 -0
  276. package/src/theme/NavbarItem/DefaultNavbarItem/index.tsx +23 -0
  277. package/src/theme/NavbarItem/DocNavbarItem.tsx +38 -0
  278. package/src/theme/NavbarItem/DocSidebarNavbarItem.tsx +33 -0
  279. package/src/theme/NavbarItem/DocsVersionDropdownNavbarItem.tsx +189 -0
  280. package/src/theme/NavbarItem/DocsVersionNavbarItem.tsx +22 -0
  281. package/src/theme/NavbarItem/DropdownNavbarItem/Desktop/index.tsx +81 -0
  282. package/src/theme/NavbarItem/DropdownNavbarItem/Mobile/index.tsx +161 -0
  283. package/src/theme/NavbarItem/DropdownNavbarItem/Mobile/styles.module.css +5 -0
  284. package/src/theme/NavbarItem/DropdownNavbarItem/index.tsx +14 -0
  285. package/src/theme/NavbarItem/HtmlNavbarItem.tsx +27 -0
  286. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/index.tsx +128 -0
  287. package/src/theme/NavbarItem/LocaleDropdownNavbarItem/styles.module.css +6 -0
  288. package/src/theme/NavbarItem/NavbarNavLink.tsx +69 -0
  289. package/src/theme/NavbarItem/SearchNavbarItem.tsx +21 -0
  290. package/src/theme/NavbarItem/index.tsx +23 -0
  291. package/src/theme/NotFound/Content/index.tsx +34 -0
  292. package/src/theme/NotFound/index.tsx +22 -0
  293. package/src/theme/PaginatorNavLink/index.tsx +21 -0
  294. package/src/theme/SearchBar.tsx +8 -0
  295. package/src/theme/SearchMetadata/index.tsx +38 -0
  296. package/src/theme/SiteMetadata/index.tsx +153 -0
  297. package/src/theme/SkipToContent/index.tsx +9 -0
  298. package/src/theme/SkipToContent/styles.module.css +16 -0
  299. package/src/theme/TOC/index.tsx +26 -0
  300. package/src/theme/TOC/styles.module.css +23 -0
  301. package/src/theme/TOCCollapsible/CollapseButton/index.tsx +30 -0
  302. package/src/theme/TOCCollapsible/CollapseButton/styles.module.css +27 -0
  303. package/src/theme/TOCCollapsible/index.tsx +42 -0
  304. package/src/theme/TOCCollapsible/styles.module.css +26 -0
  305. package/src/theme/TOCInline/index.tsx +25 -0
  306. package/src/theme/TOCInline/styles.module.css +7 -0
  307. package/src/theme/TOCItems/Tree.tsx +40 -0
  308. package/src/theme/TOCItems/index.tsx +56 -0
  309. package/src/theme/TabItem/index.tsx +22 -0
  310. package/src/theme/TabItem/styles.module.css +5 -0
  311. package/src/theme/Tabs/index.tsx +167 -0
  312. package/src/theme/Tabs/styles.module.css +9 -0
  313. package/src/theme/Tag/index.tsx +30 -0
  314. package/src/theme/Tag/styles.module.css +65 -0
  315. package/src/theme/TagsListByLetter/index.tsx +40 -0
  316. package/src/theme/TagsListByLetter/styles.module.css +6 -0
  317. package/src/theme/TagsListInline/index.tsx +30 -0
  318. package/src/theme/TagsListInline/styles.module.css +10 -0
  319. package/src/theme/ThemeProvider/TitleFormatter/index.tsx +22 -0
  320. package/src/theme/ThemeProvider/index.tsx +9 -0
  321. package/src/theme/ThemedImage/index.tsx +21 -0
  322. package/src/theme/ThemedImage/styles.module.css +13 -0
  323. package/src/theme/pages/Home/index.tsx +19 -0
  324. package/src/theme/prism-include-languages.ts +39 -0
  325. package/src/theme-seqera.d.ts +2277 -0
  326. package/src/translations.ts +240 -0
  327. package/tailwind.config.js +7 -0
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import Link from '@docusaurus/Link';
3
+
4
+ interface ButtonProps {
5
+ children: React.ReactNode;
6
+ href?: string;
7
+ to?: string;
8
+ onClick?: () => void;
9
+ }
10
+
11
+ export default function MDXButton({
12
+ children,
13
+ href,
14
+ to,
15
+ onClick,
16
+ }: ButtonProps): JSX.Element {
17
+ const className = `btn btn-outline shadow-none btn-sm border px-6 py-1 text-[.9rem] hover:border-black hover:bg-black hover:text-white! dark:border-gray-600 dark:text-white dark:hover:border-white dark:hover:bg-white dark:hover:text-black! no-underline!`;
18
+
19
+ // External link
20
+ if (href) {
21
+ return (
22
+ <a href={href} className={className} target="_blank" rel="noopener noreferrer">
23
+ {children}
24
+ </a>
25
+ );
26
+ }
27
+
28
+ // Internal link
29
+ if (to) {
30
+ return (
31
+ <Link to={to} className={className}>
32
+ {children}
33
+ </Link>
34
+ );
35
+ }
36
+
37
+ // Regular button
38
+ return (
39
+ <button className={className} onClick={onClick}>
40
+ {children}
41
+ </button>
42
+ );
43
+ }
@@ -0,0 +1,26 @@
1
+
2
+
3
+ import type {ComponentProps, ReactNode} from 'react';
4
+ import React from 'react';
5
+ import CodeBlock from '@theme/CodeBlock';
6
+ import CodeInline from '@theme/CodeInline';
7
+ import type {Props} from '@theme/MDXComponents/Code';
8
+
9
+ function shouldBeInline(props: Props) {
10
+ return (
11
+ // empty code blocks have no props.children,
12
+ // see https://github.com/facebook/docusaurus/pull/9704
13
+ typeof props.children !== 'undefined' &&
14
+ React.Children.toArray(props.children).every(
15
+ (el) => typeof el === 'string' && !el.includes('\n'),
16
+ )
17
+ );
18
+ }
19
+
20
+ export default function MDXCode(props: Props): ReactNode {
21
+ return shouldBeInline(props) ? (
22
+ <CodeInline {...props} />
23
+ ) : (
24
+ <CodeBlock {...(props as ComponentProps<typeof CodeBlock>)} />
25
+ );
26
+ }
@@ -0,0 +1,26 @@
1
+
2
+
3
+ import React, {
4
+ type ComponentProps,
5
+ type ReactElement,
6
+ type ReactNode,
7
+ } from 'react';
8
+ import Details from '@theme/Details';
9
+ import type {Props} from '@theme/MDXComponents/Details';
10
+
11
+ export default function MDXDetails(props: Props): ReactNode {
12
+ const items = React.Children.toArray(props.children);
13
+ // Split summary item from the rest to pass it as a separate prop to the
14
+ // Details theme component
15
+ const summary = items.find(
16
+ (item): item is ReactElement<ComponentProps<'summary'>> =>
17
+ React.isValidElement(item) && item.type === 'summary',
18
+ );
19
+ const children = <>{items.filter((item) => item !== summary)}</>;
20
+
21
+ return (
22
+ <Details {...props} summary={summary}>
23
+ {children}
24
+ </Details>
25
+ );
26
+ }
@@ -0,0 +1,9 @@
1
+
2
+
3
+ import React, {type ReactNode} from 'react';
4
+ import Heading from '@theme/Heading';
5
+ import type {Props} from '@theme/MDXComponents/Heading';
6
+
7
+ export default function MDXHeading(props: Props): ReactNode {
8
+ return <Heading {...props} />;
9
+ }
@@ -0,0 +1,23 @@
1
+
2
+
3
+ import React, {type ReactNode} from 'react';
4
+ import clsx from 'clsx';
5
+ import type {Props} from '@theme/MDXComponents/Img';
6
+
7
+ import styles from './styles.module.css';
8
+
9
+ function transformImgClassName(className?: string): string {
10
+ return clsx(className, styles.img);
11
+ }
12
+
13
+ export default function MDXImg(props: Props): ReactNode {
14
+ return (
15
+ // eslint-disable-next-line jsx-a11y/alt-text
16
+ <img
17
+ decoding="async"
18
+ loading="lazy"
19
+ {...props}
20
+ className={transformImgClassName(props.className)}
21
+ />
22
+ );
23
+ }
@@ -0,0 +1,5 @@
1
+
2
+
3
+ .img {
4
+ height: auto;
5
+ }
@@ -0,0 +1,17 @@
1
+
2
+
3
+ import React, {type ReactNode} from 'react';
4
+ import clsx from 'clsx';
5
+ import useBrokenLinks from '@docusaurus/useBrokenLinks';
6
+ import {useAnchorTargetClassName} from '@docusaurus/theme-common';
7
+ import type {Props} from '@theme/MDXComponents/Li';
8
+
9
+ export default function MDXLi(props: Props): ReactNode | undefined {
10
+ // MDX Footnotes have ids such as <li id="user-content-fn-1-953011">
11
+ useBrokenLinks().collectAnchor(props.id);
12
+ const anchorTargetClassName = useAnchorTargetClassName(props.id);
13
+
14
+ return (
15
+ <li className={clsx(anchorTargetClassName, props.className)} {...props} />
16
+ );
17
+ }
@@ -0,0 +1,10 @@
1
+
2
+
3
+ import React, {type ReactNode} from 'react';
4
+ import type {Props} from '@theme/MDXComponents/Pre';
5
+
6
+ export default function MDXPre(props: Props): ReactNode | undefined {
7
+ // With MDX 2, this element is only used for fenced code blocks
8
+ // It always receives a MDXComponents/Code as children
9
+ return <>{props.children}</>;
10
+ }
@@ -0,0 +1,25 @@
1
+
2
+
3
+ import React, {type ReactNode} from 'react';
4
+ import clsx from 'clsx';
5
+ import type {Props} from '@theme/MDXComponents/Ul';
6
+
7
+ import styles from './styles.module.css';
8
+
9
+ function transformUlClassName(className?: string): string | undefined {
10
+ // Fix https://github.com/facebook/docusaurus/issues/9098
11
+ if (typeof className === 'undefined') {
12
+ return undefined;
13
+ }
14
+ return clsx(
15
+ className,
16
+ // This class is set globally by GitHub/MDX. We keep the global class, and
17
+ // add another class to get a task list without the default ul styling
18
+ // See https://github.com/syntax-tree/mdast-util-to-hast/issues/28
19
+ className?.includes('contains-task-list') && styles.containsTaskList,
20
+ );
21
+ }
22
+
23
+ export default function MDXUl(props: Props): ReactNode {
24
+ return <ul {...props} className={transformUlClassName(props.className)} />;
25
+ }
@@ -0,0 +1,9 @@
1
+
2
+
3
+ .containsTaskList {
4
+ list-style: none;
5
+ }
6
+
7
+ :not(.containsTaskList > li) > .containsTaskList {
8
+ padding-left: 0;
9
+ }
@@ -0,0 +1,47 @@
1
+
2
+
3
+ import React, {type ComponentProps} from 'react';
4
+ import Head from '@docusaurus/Head';
5
+ import MDXCode from '@theme/MDXComponents/Code';
6
+ import MDXA from '@theme/MDXComponents/A';
7
+ import MDXPre from '@theme/MDXComponents/Pre';
8
+ import MDXDetails from '@theme/MDXComponents/Details';
9
+ import MDXHeading from '@theme/MDXComponents/Heading';
10
+ import MDXUl from '@theme/MDXComponents/Ul';
11
+ import MDXLi from '@theme/MDXComponents/Li';
12
+ import MDXImg from '@theme/MDXComponents/Img';
13
+ import MDXButton from '@theme/MDXComponents/Button';
14
+ import Admonition from '@theme/Admonition';
15
+ import Mermaid from '@theme/Mermaid';
16
+ import AddedInVersion from "../AdmonitionVersioned/AddedInVersion";
17
+ import ChangedInVersion from "../AdmonitionVersioned/ChangedInVersion";
18
+ import DeprecatedInVersion from "../AdmonitionVersioned/DeprecatedInVersion";
19
+
20
+
21
+ import type {MDXComponentsObject} from '@theme/MDXComponents';
22
+
23
+ const MDXComponents: MDXComponentsObject = {
24
+ Head,
25
+ details: MDXDetails, // For MD mode support, see https://github.com/facebook/docusaurus/issues/9092#issuecomment-1602902274
26
+ Details: MDXDetails,
27
+ code: MDXCode,
28
+ a: MDXA,
29
+ Button: MDXButton,
30
+ pre: MDXPre,
31
+ ul: MDXUl,
32
+ li: MDXLi,
33
+ img: MDXImg,
34
+ h1: (props: ComponentProps<'h1'>) => <MDXHeading as="h1" {...props} />,
35
+ h2: (props: ComponentProps<'h2'>) => <MDXHeading as="h2" {...props} />,
36
+ h3: (props: ComponentProps<'h3'>) => <MDXHeading as="h3" {...props} />,
37
+ h4: (props: ComponentProps<'h4'>) => <MDXHeading as="h4" {...props} />,
38
+ h5: (props: ComponentProps<'h5'>) => <MDXHeading as="h5" {...props} />,
39
+ h6: (props: ComponentProps<'h6'>) => <MDXHeading as="h6" {...props} />,
40
+ admonition: Admonition,
41
+ mermaid: Mermaid,
42
+ AddedInVersion: AddedInVersion,
43
+ ChangedInVersion: ChangedInVersion,
44
+ DeprecatedInVersion: DeprecatedInVersion,
45
+ };
46
+
47
+ export default MDXComponents;
@@ -0,0 +1,10 @@
1
+
2
+
3
+ import React, {type ReactNode} from 'react';
4
+ import {MDXProvider} from '@mdx-js/react';
5
+ import MDXComponents from '@theme/MDXComponents';
6
+ import type {Props} from '@theme/MDXContent';
7
+
8
+ export default function MDXContent({children}: Props): ReactNode {
9
+ return <MDXProvider components={MDXComponents}>{children}</MDXProvider>;
10
+ }
@@ -0,0 +1,87 @@
1
+
2
+
3
+ import React, {type ReactNode} from 'react';
4
+ import clsx from 'clsx';
5
+ import {
6
+ PageMetadata,
7
+ HtmlClassNameProvider,
8
+ ThemeClassNames,
9
+ } from '@docusaurus/theme-common';
10
+ import Layout from '@theme/Layout';
11
+ import MDXContent from '@theme/MDXContent';
12
+ import TOC from '@theme/TOC';
13
+ import ContentVisibility from '@theme/ContentVisibility';
14
+ import type {Props} from '@theme/MDXPage';
15
+
16
+ import EditMetaRow from '@theme/EditMetaRow';
17
+ import styles from './styles.module.css';
18
+
19
+ export default function MDXPage(props: Props): ReactNode {
20
+ const {content: MDXPageContent} = props;
21
+ const {metadata, assets} = MDXPageContent;
22
+ const {
23
+ title,
24
+ editUrl,
25
+ description,
26
+ frontMatter,
27
+ lastUpdatedBy,
28
+ lastUpdatedAt,
29
+ } = metadata;
30
+ const {
31
+ keywords,
32
+ wrapperClassName,
33
+ hide_table_of_contents: hideTableOfContents,
34
+ } = frontMatter;
35
+ const image = assets.image ?? frontMatter.image;
36
+
37
+ const canDisplayEditMetaRow = !!(editUrl || lastUpdatedAt || lastUpdatedBy);
38
+
39
+ return (
40
+ <HtmlClassNameProvider
41
+ className={clsx(
42
+ wrapperClassName ?? ThemeClassNames.wrapper.mdxPages,
43
+ ThemeClassNames.page.mdxPage,
44
+ )}>
45
+ <Layout>
46
+ <PageMetadata
47
+ title={title}
48
+ description={description}
49
+ keywords={keywords}
50
+ image={image}
51
+ />
52
+ <main className="container container--fluid margin-vert--lg">
53
+ <div className={clsx('row', styles.mdxPageWrapper)}>
54
+ <div className={clsx('col', !hideTableOfContents && 'col--8')}>
55
+ <ContentVisibility metadata={metadata} />
56
+ <article>
57
+ <MDXContent>
58
+ <MDXPageContent />
59
+ </MDXContent>
60
+ </article>
61
+ {canDisplayEditMetaRow && (
62
+ <EditMetaRow
63
+ className={clsx(
64
+ 'margin-top--sm',
65
+ ThemeClassNames.pages.pageFooterEditMetaRow,
66
+ )}
67
+ editUrl={editUrl}
68
+ lastUpdatedAt={lastUpdatedAt}
69
+ lastUpdatedBy={lastUpdatedBy}
70
+ />
71
+ )}
72
+ </div>
73
+ {!hideTableOfContents && MDXPageContent.toc.length > 0 && (
74
+ <div className="col col--2">
75
+ <TOC
76
+ toc={MDXPageContent.toc}
77
+ minHeadingLevel={frontMatter.toc_min_heading_level}
78
+ maxHeadingLevel={frontMatter.toc_max_heading_level}
79
+ />
80
+ </div>
81
+ )}
82
+ </div>
83
+ </main>
84
+ </Layout>
85
+ </HtmlClassNameProvider>
86
+ );
87
+ }
@@ -0,0 +1,5 @@
1
+
2
+
3
+ .mdxPageWrapper {
4
+ justify-content: center;
5
+ }
@@ -0,0 +1,11 @@
1
+
2
+
3
+ // This component is meant to be implemented by a Mermaid renderer theme
4
+ // It is notable created to be overridden by docusaurus-theme-mermaid
5
+
6
+ // By default, the classic theme does not provide any Mermaid implementation
7
+ // Yet we declare it there so that we can register it in MDX
8
+ // TODO later the mermaid theme should be able to register its MDX component
9
+ // see https://github.com/facebook/docusaurus/pull/7490#issuecomment-1279117288
10
+
11
+ export {default} from '@docusaurus/Noop';
@@ -0,0 +1,29 @@
1
+
2
+
3
+ import React, {type ReactNode} from 'react';
4
+ import {useColorMode, useThemeConfig} from '@docusaurus/theme-common';
5
+ import ColorModeToggle from '@theme/ColorModeToggle';
6
+ import type {Props} from '@theme/Navbar/ColorModeToggle';
7
+ import styles from './styles.module.css';
8
+
9
+ export default function NavbarColorModeToggle({className}: Props): ReactNode {
10
+ const navbarStyle = useThemeConfig().navbar.style;
11
+ const {disableSwitch, respectPrefersColorScheme} = useThemeConfig().colorMode;
12
+ const {colorModeChoice, setColorMode} = useColorMode();
13
+
14
+ if (disableSwitch) {
15
+ return null;
16
+ }
17
+
18
+ return (
19
+ <ColorModeToggle
20
+ className={className}
21
+ buttonClassName={
22
+ navbarStyle === 'dark' ? styles.darkNavbarColorModeToggle : undefined
23
+ }
24
+ respectPrefersColorScheme={respectPrefersColorScheme}
25
+ value={colorModeChoice}
26
+ onChange={setColorMode}
27
+ />
28
+ );
29
+ }
@@ -0,0 +1,5 @@
1
+
2
+
3
+ .darkNavbarColorModeToggle:hover {
4
+ background: var(--ifm-color-gray-800);
5
+ }
@@ -0,0 +1,152 @@
1
+ import React, {type ReactNode} from 'react';
2
+ import clsx from 'clsx';
3
+ import {
4
+ useThemeConfig,
5
+ ErrorCauseBoundary,
6
+ ThemeClassNames,
7
+ } from '@docusaurus/theme-common';
8
+ import {
9
+ splitNavbarItems,
10
+ useNavbarMobileSidebar,
11
+ } from '@docusaurus/theme-common/internal';
12
+ import NavbarItem, {type Props as NavbarItemConfig} from '@theme/NavbarItem';
13
+ import NavbarColorModeToggle from '@theme/Navbar/ColorModeToggle';
14
+ import SearchBar from '@theme/SearchBar';
15
+ import NavbarMobileSidebarToggle from '@theme/Navbar/MobileSidebar/Toggle';
16
+ import NavbarLogo from '@theme/Navbar/Logo';
17
+ import NavbarSearch from '@theme/Navbar/Search';
18
+ import Submenu from '../Submenu';
19
+ import styles from './styles.module.css';
20
+ import Link from '@docusaurus/Link';
21
+
22
+ function useNavbarItems() {
23
+ // TODO temporary casting until ThemeConfig type is improved
24
+ return useThemeConfig().navbar.items as NavbarItemConfig[];
25
+ }
26
+
27
+ function NavbarItems({items}: {items: NavbarItemConfig[]}): ReactNode {
28
+ return (
29
+ <>
30
+ {items.map((item, i) => (
31
+ <ErrorCauseBoundary
32
+ key={i}
33
+ onError={(error) =>
34
+ new Error(
35
+ `A theme navbar item failed to render.
36
+ Please double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:
37
+ ${JSON.stringify(item, null, 2)}`,
38
+ {cause: error},
39
+ )
40
+ }>
41
+ <NavbarItem {...item} />
42
+ </ErrorCauseBoundary>
43
+ ))}
44
+ </>
45
+ );
46
+ }
47
+
48
+ function NavbarContentLayout({
49
+ left,
50
+ right,
51
+ isMenuOpen,
52
+ }: {
53
+ left: ReactNode;
54
+ right: ReactNode;
55
+ isMenuOpen?: boolean | undefined;
56
+ }) {
57
+ return (
58
+ <div className="navbar__inner">
59
+ <div
60
+ className={clsx(
61
+ ThemeClassNames.layout.navbar.containerLeft,
62
+ 'navbar__items',
63
+ )}>
64
+ {left}
65
+ </div>
66
+ <div
67
+ className={clsx(
68
+ ThemeClassNames.layout.navbar.containerRight,
69
+ 'navbar__items navbar__items--right',
70
+ )}>
71
+ {right}
72
+
73
+ <div className="hidden md:flex!">
74
+ <Submenu />
75
+ </div>
76
+ </div>
77
+ </div>
78
+ );
79
+ }
80
+
81
+ export default function NavbarContent(): ReactNode {
82
+ const mobileSidebar = useNavbarMobileSidebar();
83
+
84
+ const items = useNavbarItems();
85
+ const [leftItems, rightItems] = splitNavbarItems(items);
86
+
87
+ const searchBarItem = items.find((item) => item.type === 'search');
88
+
89
+ return (
90
+ <div className="w-full flex flex-col">
91
+ <div className="pt-3 pb-1">
92
+ <NavbarContentLayout
93
+ left={
94
+ <>
95
+ <NavbarLogo />
96
+ </>
97
+ }
98
+ right={
99
+ <>
100
+ <NavbarItems items={rightItems} />
101
+
102
+ <SearchBar />
103
+ <div className="mr-2">
104
+ <NavbarColorModeToggle className={styles.colorModeToggle} />
105
+ </div>
106
+ <div className="hidden md:flex!">
107
+ <a
108
+ className="btn btn-secondary hover:bg-nextflow-600 shadow-none border text-black btn-sm px-6 py-1 text-[.9rem] mr-2 "
109
+ href="https://cloud.seqera.io/oauth/login/auth0">
110
+ Log In
111
+ </a>
112
+ <a
113
+ className="btn btn-outline shadow-none btn-sm border px-6 py-1 text-[.9rem] hover:border-black hover:bg-black hover:text-white"
114
+ href="https://cloud.seqera.io/oauth/login/auth0">
115
+ Sign Up
116
+ </a>
117
+ </div>
118
+ {!mobileSidebar.disabled && <NavbarMobileSidebarToggle />}
119
+ </>
120
+ }
121
+ />
122
+ </div>
123
+ <div className="hidden md:flex! text-[.9rem] pt-1">
124
+ <div className="flex flex-row justify-between w-full">
125
+ <div>
126
+ <NavbarItems items={leftItems} />
127
+ </div>
128
+ <div className="mr-2">
129
+ <Link
130
+ className="navbar__link ml-8 font-normal"
131
+ to={'/platform-cloud/seqera-ai'}
132
+ aria-label="Seqera AI">
133
+ Seqera AI
134
+ </Link>
135
+ <Link
136
+ className="navbar__link ml-8 font-normal"
137
+ to={'/platform-cloud/seqera-mcp'}
138
+ aria-label="Seqera MCP">
139
+ Seqera MCP
140
+ </Link>
141
+ <Link
142
+ className="navbar__link ml-8 font-normal"
143
+ to={'/changelog'}
144
+ aria-label="Changelog">
145
+ Changelog
146
+ </Link>
147
+ </div>
148
+ </div>
149
+ </div>
150
+ </div>
151
+ );
152
+ }
@@ -0,0 +1,19 @@
1
+
2
+
3
+ /*
4
+ Hide color mode toggle in small viewports
5
+ */
6
+ @media (max-width: 996px) {
7
+ .colorModeToggle {
8
+ display: none;
9
+ }
10
+ }
11
+
12
+ /*
13
+ Restore some Infima style that broke with CSS Cascade Layers
14
+ See https://github.com/facebook/docusaurus/pull/11142
15
+ */
16
+ :global(.navbar__items--right) > :last-child {
17
+ padding-right: 0;
18
+ }
19
+
@@ -0,0 +1,59 @@
1
+
2
+
3
+ import React, {type ComponentProps, type ReactNode} from 'react';
4
+ import clsx from 'clsx';
5
+ import {ThemeClassNames, useThemeConfig} from '@docusaurus/theme-common';
6
+ import {
7
+ useHideableNavbar,
8
+ useNavbarMobileSidebar,
9
+ } from '@docusaurus/theme-common/internal';
10
+ import {translate} from '@docusaurus/Translate';
11
+ import NavbarMobileSidebar from '@theme/Navbar/MobileSidebar';
12
+ import type {Props} from '@theme/Navbar/Layout';
13
+
14
+ import styles from './styles.module.css';
15
+
16
+ function NavbarBackdrop(props: ComponentProps<'div'>) {
17
+ return (
18
+ <div
19
+ role="presentation"
20
+ {...props}
21
+ className={clsx('navbar-sidebar__backdrop', props.className)}
22
+ />
23
+ );
24
+ }
25
+
26
+ export default function NavbarLayout({children}: Props): ReactNode {
27
+ const {
28
+ navbar: {hideOnScroll, style},
29
+ } = useThemeConfig();
30
+ const mobileSidebar = useNavbarMobileSidebar();
31
+ const {navbarRef, isNavbarVisible} = useHideableNavbar(hideOnScroll);
32
+ return (
33
+ <nav
34
+ ref={navbarRef}
35
+ aria-label={translate({
36
+ id: 'theme.NavBar.navAriaLabel',
37
+ message: 'Main',
38
+ description: 'The ARIA label for the main navigation',
39
+ })}
40
+ className={clsx(
41
+ ThemeClassNames.layout.navbar.container,
42
+ 'navbar border-b border-base-content/20 md:pt-10 md:pb-10 px-4 sticky top-0 shadow-none',
43
+ 'navbar--fixed-top',
44
+ hideOnScroll && [
45
+ styles.navbarHideable,
46
+ !isNavbarVisible && styles.navbarHidden,
47
+ ],
48
+ {
49
+ 'navbar--dark': style === 'dark',
50
+ 'navbar--primary': style === 'primary',
51
+ 'navbar-sidebar--show': mobileSidebar.shown,
52
+ },
53
+ )}>
54
+ {children}
55
+ <NavbarBackdrop onClick={mobileSidebar.toggle} />
56
+ <NavbarMobileSidebar />
57
+ </nav>
58
+ );
59
+ }
@@ -0,0 +1,9 @@
1
+
2
+
3
+ .navbarHideable {
4
+ transition: transform var(--ifm-transition-fast) ease;
5
+ }
6
+
7
+ .navbarHidden {
8
+ transform: translate3d(0, calc(-100% - 2px), 0);
9
+ }
@@ -0,0 +1,14 @@
1
+
2
+
3
+ import React, {type ReactNode} from 'react';
4
+ import Logo from '@theme/Logo';
5
+
6
+ export default function NavbarLogo(): ReactNode {
7
+ return (
8
+ <Logo
9
+ className="navbar__brand"
10
+ imageClassName="navbar__logo"
11
+ titleClassName="hidden"
12
+ />
13
+ );
14
+ }