@redocly/theme 0.1.7 → 0.1.8

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 (375) hide show
  1. package/Footer/Footer.d.ts +3 -0
  2. package/Footer/Footer.js +34 -0
  3. package/Footer/FooterColumn.d.ts +7 -0
  4. package/Footer/FooterColumn.js +38 -0
  5. package/Footer/FooterColumns.d.ts +7 -0
  6. package/Footer/FooterColumns.js +44 -0
  7. package/Footer/FooterCopyright.d.ts +5 -0
  8. package/Footer/FooterCopyright.js +29 -0
  9. package/Footer/index.d.ts +4 -0
  10. package/Footer/index.js +14 -0
  11. package/JsonViewer/JsonViewer.js +1 -1
  12. package/JsonViewer/index.d.ts +1 -0
  13. package/JsonViewer/index.js +1 -0
  14. package/Layout/PageLayout.d.ts +6 -0
  15. package/Layout/PageLayout.js +30 -0
  16. package/Layout/RootLayout.d.ts +7 -0
  17. package/Layout/RootLayout.js +31 -0
  18. package/Layout/index.d.ts +2 -0
  19. package/Layout/index.js +10 -0
  20. package/Logo/Logo.d.ts +1 -6
  21. package/Markdown/Admonition/Admonition.d.ts +9 -0
  22. package/Markdown/Admonition/Admonition.js +39 -0
  23. package/Markdown/CodeSample/CodeSample.d.ts +8 -0
  24. package/Markdown/CodeSample/CodeSample.js +30 -0
  25. package/Markdown/CodeSample/styled.d.ts +5 -0
  26. package/Markdown/CodeSample/styled.js +109 -0
  27. package/Markdown/CodeSample/types.d.ts +9 -0
  28. package/Markdown/CodeSample/types.js +2 -0
  29. package/Markdown/ContentWrapper.d.ts +5 -0
  30. package/Markdown/ContentWrapper.js +21 -0
  31. package/Markdown/Heading/Heading.d.ts +5 -0
  32. package/Markdown/Heading/Heading.js +23 -0
  33. package/Markdown/MarkdownLayout.d.ts +7 -0
  34. package/Markdown/MarkdownLayout.js +23 -0
  35. package/Markdown/Mermaid/Mermaid.d.ts +6 -0
  36. package/Markdown/Mermaid/Mermaid.js +19 -0
  37. package/Markdown/PageWrapper.d.ts +3 -0
  38. package/Markdown/PageWrapper.js +15 -0
  39. package/Markdown/StyledMarkdown.d.ts +8 -0
  40. package/Markdown/StyledMarkdown.js +54 -0
  41. package/Markdown/Tabs/Tab.d.ts +8 -0
  42. package/Markdown/Tabs/Tab.js +35 -0
  43. package/Markdown/Tabs/Tabs.d.ts +10 -0
  44. package/Markdown/Tabs/Tabs.js +43 -0
  45. package/Navbar/Navbar.d.ts +1 -0
  46. package/Navbar/Navbar.js +7 -1
  47. package/Navbar/NavbarItem.js +1 -1
  48. package/Navbar/NavbarMenu.js +4 -1
  49. package/OperationBadge/OperationBadge.d.ts +5 -0
  50. package/OperationBadge/OperationBadge.js +15 -0
  51. package/OperationBadge/index.d.ts +1 -0
  52. package/OperationBadge/index.js +17 -0
  53. package/PageNavigation/NextPageLink.d.ts +2 -0
  54. package/PageNavigation/NextPageLink.js +25 -0
  55. package/PageNavigation/PageNavigation.d.ts +2 -0
  56. package/PageNavigation/PageNavigation.js +31 -0
  57. package/PageNavigation/PreviousPageLink.d.ts +2 -0
  58. package/PageNavigation/PreviousPageLink.js +25 -0
  59. package/Panel/CodePanel.js +6 -6
  60. package/Panel/ContentPanel.js +4 -4
  61. package/Panel/Panel.d.ts +1 -1
  62. package/Panel/Panel.js +3 -3
  63. package/Panel/PanelComponent.d.ts +1 -1
  64. package/Panel/PanelComponent.js +3 -3
  65. package/Panel/index.d.ts +1 -0
  66. package/Panel/index.js +1 -0
  67. package/Search/Autocomplete.d.ts +13 -0
  68. package/Search/Autocomplete.js +79 -0
  69. package/Search/ClearIcon.d.ts +2 -0
  70. package/Search/ClearIcon.js +29 -0
  71. package/Search/Input.d.ts +3 -0
  72. package/Search/Input.js +15 -0
  73. package/Search/Parameters.d.ts +7 -0
  74. package/Search/Parameters.js +42 -0
  75. package/Search/Popover.d.ts +3 -0
  76. package/Search/Popover.js +15 -0
  77. package/Search/Search.d.ts +2 -0
  78. package/Search/Search.js +39 -0
  79. package/Search/SearchIcon.d.ts +2 -0
  80. package/Search/SearchIcon.js +29 -0
  81. package/Search/SearchItem.d.ts +7 -0
  82. package/Search/SearchItem.js +47 -0
  83. package/Search/utils.d.ts +2 -0
  84. package/Search/utils.js +21 -0
  85. package/Sidebar/ApiCallItem.d.ts +8 -0
  86. package/Sidebar/ApiCallItem.js +35 -0
  87. package/Sidebar/ArrowBack.d.ts +5 -0
  88. package/Sidebar/ArrowBack.js +28 -0
  89. package/Sidebar/BackButton.d.ts +6 -0
  90. package/Sidebar/BackButton.js +30 -0
  91. package/Sidebar/Drilldown.d.ts +8 -0
  92. package/Sidebar/Drilldown.js +45 -0
  93. package/Sidebar/DrilldownMenu.d.ts +3 -0
  94. package/Sidebar/DrilldownMenu.js +57 -0
  95. package/Sidebar/DrilldownMenuItem.d.ts +3 -0
  96. package/Sidebar/DrilldownMenuItem.js +31 -0
  97. package/Sidebar/ExternalIcon.d.ts +5 -0
  98. package/Sidebar/ExternalIcon.js +28 -0
  99. package/Sidebar/Menu.d.ts +4 -0
  100. package/Sidebar/Menu.js +14 -0
  101. package/Sidebar/MenuContainer.d.ts +2 -0
  102. package/Sidebar/MenuContainer.js +12 -0
  103. package/Sidebar/MenuGroup.d.ts +9 -0
  104. package/Sidebar/MenuGroup.js +37 -0
  105. package/Sidebar/MenuItem.d.ts +3 -0
  106. package/Sidebar/MenuItem.js +33 -0
  107. package/Sidebar/MenuItemLabel.d.ts +6 -0
  108. package/Sidebar/MenuItemLabel.js +18 -0
  109. package/Sidebar/MenuLink.d.ts +6 -0
  110. package/Sidebar/MenuLink.js +15 -0
  111. package/Sidebar/MenuLinkItem.d.ts +3 -0
  112. package/Sidebar/MenuLinkItem.js +30 -0
  113. package/Sidebar/MobileSidebarButton.d.ts +6 -0
  114. package/Sidebar/MobileSidebarButton.js +20 -0
  115. package/Sidebar/Separator.d.ts +3 -0
  116. package/Sidebar/Separator.js +31 -0
  117. package/Sidebar/SeparatorItem.d.ts +6 -0
  118. package/Sidebar/SeparatorItem.js +13 -0
  119. package/Sidebar/SeparatorLine.d.ts +4 -0
  120. package/Sidebar/SeparatorLine.js +14 -0
  121. package/Sidebar/Sidebar.d.ts +8 -0
  122. package/Sidebar/Sidebar.js +23 -0
  123. package/Sidebar/SidebarLayout.d.ts +7 -0
  124. package/Sidebar/SidebarLayout.js +35 -0
  125. package/Sidebar/types/DrilldownMenuProps.d.ts +6 -0
  126. package/Sidebar/types/DrilldownMenuProps.js +2 -0
  127. package/Sidebar/types/ItemState.d.ts +9 -0
  128. package/Sidebar/types/ItemState.js +2 -0
  129. package/Sidebar/types/MenuItemProps.d.ts +5 -0
  130. package/Sidebar/types/MenuItemProps.js +2 -0
  131. package/Sidebar/types/MenuStyle.d.ts +3 -0
  132. package/Sidebar/types/MenuStyle.js +8 -0
  133. package/Sidebar/types/NavItem.d.ts +26 -0
  134. package/Sidebar/types/NavItem.js +2 -0
  135. package/SourceCode/SourceCode.js +2 -2
  136. package/TableOfContent/TableOfContent.d.ts +9 -0
  137. package/TableOfContent/TableOfContent.js +64 -0
  138. package/globalStyle.js +1 -1
  139. package/hooks/index.d.ts +4 -0
  140. package/hooks/index.js +4 -0
  141. package/hooks/useActiveHeading.d.ts +2 -0
  142. package/hooks/useActiveHeading.js +34 -0
  143. package/hooks/useActiveSectionId.d.ts +3 -0
  144. package/hooks/useActiveSectionId.js +48 -0
  145. package/hooks/useFullHeight.d.ts +2 -0
  146. package/hooks/useFullHeight.js +47 -0
  147. package/hooks/useMobileMenu.d.ts +2 -0
  148. package/hooks/useMobileMenu.js +13 -0
  149. package/hooks/useNavbarHeight.d.ts +3 -0
  150. package/hooks/useNavbarHeight.js +20 -0
  151. package/icons/ShelfIcon/ShelfIcon.js +2 -2
  152. package/index.d.ts +1 -0
  153. package/index.js +1 -0
  154. package/mocks/hooks/usePageData.d.ts +5 -0
  155. package/mocks/hooks/usePageData.js +7 -0
  156. package/mocks/models.d.ts +3 -0
  157. package/mocks/models.js +2 -0
  158. package/mocks/search.d.ts +22 -0
  159. package/mocks/search.js +13 -0
  160. package/mocks/types/index.d.ts +1 -0
  161. package/mocks/types/index.js +2 -0
  162. package/mocks/usePreloadHistory.d.ts +3 -0
  163. package/mocks/usePreloadHistory.js +12 -0
  164. package/package.json +5 -2
  165. package/src/Button/Button.stories.tsx +1 -1
  166. package/src/Button/__tests__/Button.test.tsx +1 -1
  167. package/src/CodeBlock/__tests__/CodeBlock.test.tsx +1 -1
  168. package/src/CopyButton/CopyButton.stories.tsx +1 -1
  169. package/src/CopyButton/CopyButton.tsx +1 -1
  170. package/src/CopyButton/CopyButtonWrapper.tsx +4 -4
  171. package/src/CopyButton/__tests__/CopyButton.test.tsx +1 -1
  172. package/src/CopyButton/__tests__/CopyButtonWrapper.test.tsx +2 -1
  173. package/src/Footer/Footer.tsx +34 -0
  174. package/src/Footer/FooterColumn.tsx +62 -0
  175. package/src/Footer/FooterColumns.tsx +51 -0
  176. package/src/Footer/FooterCopyright.tsx +26 -0
  177. package/src/Footer/index.tsx +4 -0
  178. package/src/Headings/Headings.stories.tsx +1 -1
  179. package/src/Headings/Headings.ts +1 -1
  180. package/src/Headings/__tests__/Headings.test.tsx +1 -1
  181. package/src/JsonViewer/JsonViewer.stories.tsx +1 -1
  182. package/src/JsonViewer/JsonViewer.tsx +6 -7
  183. package/src/JsonViewer/__tests__/JsonViewer.test.tsx +2 -1
  184. package/src/JsonViewer/index.ts +1 -0
  185. package/src/Layout/PageLayout.tsx +34 -0
  186. package/src/Layout/RootLayout.tsx +24 -0
  187. package/src/Layout/index.tsx +2 -0
  188. package/src/Logo/Logo.tsx +1 -7
  189. package/src/Markdown/Admonition/Admonition.tsx +64 -0
  190. package/src/Markdown/CodeSample/CodeSample.tsx +39 -0
  191. package/src/Markdown/CodeSample/styled.ts +289 -0
  192. package/src/Markdown/CodeSample/types.ts +40 -0
  193. package/src/Markdown/ContentWrapper.tsx +20 -0
  194. package/src/Markdown/Heading/Heading.tsx +35 -0
  195. package/src/Markdown/MarkdownLayout.tsx +25 -0
  196. package/src/Markdown/Mermaid/Mermaid.tsx +23 -0
  197. package/src/Markdown/PageWrapper.tsx +9 -0
  198. package/src/Markdown/StyledMarkdown.tsx +312 -0
  199. package/src/Markdown/Tabs/Tab.tsx +37 -0
  200. package/src/Markdown/Tabs/Tabs.tsx +45 -0
  201. package/src/Navbar/Navbar.stories.tsx +0 -10
  202. package/src/Navbar/Navbar.tsx +19 -25
  203. package/src/Navbar/NavbarItem.tsx +1 -1
  204. package/src/Navbar/NavbarMenu.tsx +4 -4
  205. package/src/OperationBadge/OperationBadge.stories.tsx +35 -0
  206. package/src/OperationBadge/OperationBadge.ts +59 -0
  207. package/src/OperationBadge/__tests__/OperationBadge.test.tsx +59 -0
  208. package/src/OperationBadge/__tests__/__snapshots__/OperationBadge.test.tsx.snap +651 -0
  209. package/src/OperationBadge/index.ts +1 -0
  210. package/src/PageNavigation/NextPageLink.tsx +22 -0
  211. package/src/PageNavigation/PageNavigation.tsx +20 -0
  212. package/src/PageNavigation/PreviousPageLink.tsx +22 -0
  213. package/src/Panel/CodePanel.stories.tsx +1 -2
  214. package/src/Panel/CodePanel.ts +8 -7
  215. package/src/Panel/ContentPanel.stories.tsx +1 -2
  216. package/src/Panel/ContentPanel.ts +5 -6
  217. package/src/Panel/Panel.stories.tsx +1 -3
  218. package/src/Panel/Panel.ts +3 -3
  219. package/src/Panel/PanelComponent.tsx +4 -5
  220. package/src/Panel/__tests__/CodePanel.test.tsx +1 -1
  221. package/src/Panel/__tests__/ContentPanel.test.tsx +1 -1
  222. package/src/Panel/__tests__/Panel.test.tsx +1 -2
  223. package/src/Panel/__tests__/__snapshots__/CodePanel.test.tsx.snap +8 -8
  224. package/src/Panel/__tests__/__snapshots__/ContentPanel.test.tsx.snap +22 -22
  225. package/src/Panel/__tests__/__snapshots__/Panel.test.tsx.snap +16 -16
  226. package/src/Panel/index.ts +1 -0
  227. package/src/SamplesPanelControls/SamplesControlButton.stories.tsx +1 -1
  228. package/src/SamplesPanelControls/SamplesPanelControls.ts +1 -1
  229. package/src/Search/Autocomplete.tsx +128 -0
  230. package/src/Search/ClearIcon.tsx +31 -0
  231. package/src/Search/Input.tsx +19 -0
  232. package/src/Search/Parameters.tsx +62 -0
  233. package/src/Search/Popover.tsx +20 -0
  234. package/src/Search/Search.tsx +52 -0
  235. package/src/Search/SearchIcon.tsx +32 -0
  236. package/src/Search/SearchItem.tsx +85 -0
  237. package/src/Search/utils.tsx +19 -0
  238. package/src/Sidebar/ApiCallItem.tsx +33 -0
  239. package/src/Sidebar/ArrowBack.tsx +22 -0
  240. package/src/Sidebar/BackButton.tsx +44 -0
  241. package/src/Sidebar/Drilldown.tsx +46 -0
  242. package/src/Sidebar/DrilldownMenu.tsx +58 -0
  243. package/src/Sidebar/DrilldownMenuItem.tsx +40 -0
  244. package/src/Sidebar/ExternalIcon.tsx +37 -0
  245. package/src/Sidebar/Menu.tsx +11 -0
  246. package/src/Sidebar/MenuContainer.tsx +8 -0
  247. package/src/Sidebar/MenuGroup.tsx +55 -0
  248. package/src/Sidebar/MenuItem.tsx +25 -0
  249. package/src/Sidebar/MenuItemLabel.tsx +41 -0
  250. package/src/Sidebar/MenuLink.tsx +14 -0
  251. package/src/Sidebar/MenuLinkItem.tsx +24 -0
  252. package/src/Sidebar/MobileSidebarButton.tsx +44 -0
  253. package/src/Sidebar/Separator.tsx +17 -0
  254. package/src/Sidebar/SeparatorItem.tsx +14 -0
  255. package/src/Sidebar/SeparatorLine.tsx +9 -0
  256. package/src/Sidebar/Sidebar.tsx +54 -0
  257. package/src/Sidebar/SidebarLayout.tsx +30 -0
  258. package/src/Sidebar/types/DrilldownMenuProps.ts +7 -0
  259. package/src/Sidebar/types/ItemState.ts +11 -0
  260. package/src/Sidebar/types/MenuItemProps.ts +6 -0
  261. package/src/Sidebar/types/MenuStyle.ts +4 -0
  262. package/src/Sidebar/types/NavItem.ts +27 -0
  263. package/src/SidebarLogo/SidebarLogo.stories.tsx +1 -1
  264. package/src/SidebarLogo/__tests__/SidebarLogo.test.tsx +1 -1
  265. package/src/SourceCode/SourceCode.stories.tsx +1 -1
  266. package/src/SourceCode/SourceCode.tsx +7 -3
  267. package/src/SourceCode/__tests__/SourceCode.test.tsx +2 -1
  268. package/src/TableOfContent/TableOfContent.tsx +112 -0
  269. package/src/Tooltip/Tooltip.stories.tsx +1 -1
  270. package/src/Tooltip/Tooltip.tsx +1 -1
  271. package/src/Tooltip/__tests__/Tooltip.test.tsx +1 -1
  272. package/src/globalStyle.ts +10 -34
  273. package/src/hooks/index.ts +4 -0
  274. package/src/hooks/useActiveHeading.ts +46 -0
  275. package/src/hooks/useActiveSectionId.ts +53 -0
  276. package/src/hooks/useFullHeight.ts +47 -0
  277. package/src/hooks/useMobileMenu.ts +11 -0
  278. package/src/hooks/useNavbarHeight.ts +24 -0
  279. package/src/icons/ShelfIcon/ShelfIcon.stories.tsx +1 -1
  280. package/src/icons/ShelfIcon/ShelfIcon.tsx +1 -1
  281. package/src/icons/ShelfIcon/__tests__/ShelfIcon.test.tsx +1 -1
  282. package/src/index.ts +1 -0
  283. package/src/mocks/hooks/usePageData.ts +8 -0
  284. package/src/mocks/models.ts +3 -0
  285. package/src/mocks/search.ts +31 -0
  286. package/src/mocks/types/index.ts +1 -0
  287. package/src/mocks/usePreloadHistory.ts +9 -0
  288. package/src/types/portal/index.d.ts +6 -0
  289. package/src/types/portal/src/client/app/Sidebar/types.d.ts +50 -0
  290. package/src/types/portal/src/client/app/media-css.d.ts +7 -0
  291. package/src/types/portal/src/client/styling/default.d.ts +407 -0
  292. package/src/types/portal/src/client/styling/index.d.ts +14 -0
  293. package/src/types/portal/src/client/styling/resolve.d.ts +1 -0
  294. package/src/types/portal/src/server/constants.d.ts +11 -0
  295. package/src/types/portal/src/server/plugins/markdown/types.d.ts +28 -0
  296. package/src/types/portal/src/server/plugins/nav-utils.d.ts +19 -0
  297. package/src/types/portal/src/server/plugins/portal-config/types.d.ts +23 -0
  298. package/src/types/portal/src/server/plugins/sidebars/index.d.ts +16 -0
  299. package/src/types/portal/src/server/plugins/versions/index.d.ts +15 -0
  300. package/src/types/portal/src/server/plugins/versions/types.d.ts +23 -0
  301. package/src/types/portal/src/server/plugins/versions/utils.d.ts +10 -0
  302. package/src/types/portal/src/server/store.d.ts +101 -0
  303. package/src/types/portal/src/server/utils/async.d.ts +5 -0
  304. package/src/types/portal/src/server/utils/crypto.d.ts +3 -0
  305. package/src/types/portal/src/server/utils/fs.d.ts +3 -0
  306. package/src/types/portal/src/server/utils/index.d.ts +6 -0
  307. package/src/types/portal/src/server/utils/paths.d.ts +16 -0
  308. package/src/types/portal/src/server/utils/reporter/formatter.d.ts +11 -0
  309. package/src/types/portal/src/server/utils/reporter/reporter.d.ts +17 -0
  310. package/src/types/portal/src/server/utils/watcher.d.ts +16 -0
  311. package/src/types/portal/src/server/utils/yaml.d.ts +1 -0
  312. package/src/types/portal/src/shared/constants.d.ts +8 -0
  313. package/src/types/portal/src/shared/types.d.ts +77 -0
  314. package/src/types/portal/src/shared/urls.d.ts +7 -0
  315. package/src/types/portal/src/shared/utils.d.ts +10 -0
  316. package/src/ui/AlertIcon.tsx +110 -0
  317. package/src/ui/Arrow/Arrow.tsx +36 -0
  318. package/src/ui/Background.tsx +16 -0
  319. package/src/ui/Box.tsx +39 -0
  320. package/src/ui/Button.tsx +19 -0
  321. package/src/ui/Dropdown.tsx +132 -0
  322. package/src/ui/Flex.tsx +21 -0
  323. package/src/ui/Jumbotron.tsx +57 -0
  324. package/src/ui/Tiles/ThinTile.tsx +151 -0
  325. package/src/ui/Tiles/TileHeader.ts +13 -0
  326. package/src/ui/Tiles/TileText.tsx +12 -0
  327. package/src/ui/Tiles/WideTile.tsx +138 -0
  328. package/src/ui/Typography.tsx +167 -0
  329. package/src/ui/UniversalLink.tsx +100 -0
  330. package/src/ui/index.tsx +12 -0
  331. package/src/utils/__tests__/ClipboardService.test.ts +1 -1
  332. package/src/utils/__tests__/css-variables.test.ts +1 -1
  333. package/src/utils/__tests__/highlight.test.ts +1 -1
  334. package/src/utils/__tests__/jsonToHtml.test.ts +1 -1
  335. package/src/utils/__tests__/media-css.test.ts +1 -1
  336. package/src/utils/__tests__/theme-helpers.test.ts +1 -1
  337. package/src/utils/getNavbarElement.ts +10 -0
  338. package/src/utils/isUrl.ts +42 -0
  339. package/src/utils/replaceHashInColor.ts +3 -0
  340. package/ui/AlertIcon.d.ts +9 -0
  341. package/ui/AlertIcon.js +45 -0
  342. package/ui/Arrow/Arrow.d.ts +7 -0
  343. package/ui/Arrow/Arrow.js +42 -0
  344. package/ui/Background.d.ts +7 -0
  345. package/ui/Background.js +16 -0
  346. package/ui/Box.d.ts +6 -0
  347. package/ui/Box.js +16 -0
  348. package/ui/Button.d.ts +7 -0
  349. package/ui/Button.js +27 -0
  350. package/ui/Dropdown.d.ts +8 -0
  351. package/ui/Dropdown.js +54 -0
  352. package/ui/Flex.d.ts +10 -0
  353. package/ui/Flex.js +31 -0
  354. package/ui/Jumbotron.d.ts +18 -0
  355. package/ui/Jumbotron.js +44 -0
  356. package/ui/Tiles/ThinTile.d.ts +21 -0
  357. package/ui/Tiles/ThinTile.js +98 -0
  358. package/ui/Tiles/TileHeader.d.ts +5 -0
  359. package/ui/Tiles/TileHeader.js +15 -0
  360. package/ui/Tiles/TileText.d.ts +5 -0
  361. package/ui/Tiles/TileText.js +15 -0
  362. package/ui/Tiles/WideTile.d.ts +7 -0
  363. package/ui/Tiles/WideTile.js +93 -0
  364. package/ui/Typography.d.ts +110 -0
  365. package/ui/Typography.js +137 -0
  366. package/ui/UniversalLink.d.ts +17 -0
  367. package/ui/UniversalLink.js +62 -0
  368. package/ui/index.d.ts +10 -0
  369. package/ui/index.js +30 -0
  370. package/utils/getNavbarElement.d.ts +1 -0
  371. package/utils/getNavbarElement.js +14 -0
  372. package/utils/isUrl.d.ts +12 -0
  373. package/utils/isUrl.js +35 -0
  374. package/utils/replaceHashInColor.d.ts +1 -0
  375. package/utils/replaceHashInColor.js +6 -0
@@ -0,0 +1,101 @@
1
+ import { Sidebar } from './plugins/sidebars/index.js';
2
+ import { PageType } from './constants.js';
3
+ import type { Version, VersionsConfigType } from './plugins/versions/types.js';
4
+ import type { ResolvedNavItem } from '../shared/types.js';
5
+ export interface PageProps {
6
+ id: string;
7
+ seo: {
8
+ title: string;
9
+ };
10
+ versions?: Version[];
11
+ [k: string]: unknown;
12
+ }
13
+ export interface Page {
14
+ type: PageType;
15
+ basePath: string;
16
+ relativePath: string;
17
+ id: string;
18
+ pathname: string;
19
+ absolutePath: string;
20
+ hash: string;
21
+ sidebarId: string | null;
22
+ version: string;
23
+ versions: Version[] | null;
24
+ dataDependencies?: string[];
25
+ getPageProps(): Promise<PageProps>;
26
+ getSidebarLabel(): Promise<string>;
27
+ getTemplateId(): string;
28
+ getSidebar?(): ResolvedNavItem[];
29
+ getSidebarPages?(): Page[];
30
+ clone(version: string, versionsConfig: Map<string, VersionsConfigType>): Page;
31
+ }
32
+ export declare class Template {
33
+ absolutePath: string;
34
+ id: string;
35
+ hash: string;
36
+ constructor(absolutePath: string, id: string);
37
+ }
38
+ export declare class Store {
39
+ contentDir: string;
40
+ outdir: string;
41
+ renderMode: 'thread_worker' | 'main';
42
+ isReady: boolean;
43
+ allAbsolutePaths: string[];
44
+ pages: Map<string, Page>;
45
+ sidebars: Map<string, Sidebar>;
46
+ sharedData: Map<string, any>;
47
+ templates: Map<string, Template>;
48
+ esbuildPlugins: any[];
49
+ listeners: Map<string, Set<Function>>;
50
+ globalData: Record<string, unknown>;
51
+ cliOptions: Record<string, unknown>;
52
+ globalConfig: Record<string, unknown>;
53
+ readyPromise: Promise<void>;
54
+ versionsConfig: Map<string, VersionsConfigType>;
55
+ private _resolveReady;
56
+ sidebarUpdatesFrozen: boolean;
57
+ ignoredContentPaths: string[];
58
+ currentProcessedPage: string;
59
+ constructor(contentDir: string, outdir?: string, renderMode?: 'thread_worker' | 'main');
60
+ on(type: 'page-updated', cb: (page: Page) => void | any): void;
61
+ on(type: 'sidebar-updated', cb: (sidebar: Sidebar) => void | any): void;
62
+ on(type: 'template-updated', cb: (template: Template) => void | any): void;
63
+ on(type: 'ready', cb: (pathname: string) => void | any): void;
64
+ on(type: 'shared-data-updated', cb: (id: string, data: any) => void): any;
65
+ on(
66
+ type: 'global-data-updated',
67
+ cb: (pathname: string, data: Record<string, unknown>) => void | any,
68
+ ): void;
69
+ on(type: 'versions-config-updated', cb: any): void;
70
+ runListeners<T extends Array<unknown>>(
71
+ type:
72
+ | 'ready'
73
+ | 'page-updated'
74
+ | 'template-updated'
75
+ | 'sidebar-updated'
76
+ | 'global-data-updated'
77
+ | 'shared-data-updated'
78
+ | 'versions-config-updated',
79
+ ...args: T
80
+ ): void;
81
+ ready(): void;
82
+ addEsbuildPlugin(plugin: any): void;
83
+ setVersionsConfig(id: string, data: VersionsConfigType): void;
84
+ setGlobalData(data: Record<string, unknown>): void;
85
+ setCliOptions(data: Record<string, unknown>): void;
86
+ setGlobalConfig(data: Record<string, unknown>): void;
87
+ setAllAbsolutePaths(paths: any): void;
88
+ setVersionConfigUpdated(): void;
89
+ getPageByPathname(pathname: string): Page;
90
+ getSidebarById(id: string): Sidebar;
91
+ getPageByFsPath(absolutePath: string): Page;
92
+ createSidebar(sidebar: Sidebar): void;
93
+ removeSidebar(id: string): void;
94
+ createSharedData(id: string, data: any): string;
95
+ createPage(page: Page): Promise<void>;
96
+ deletePage(pathname: string): void;
97
+ getTemplate(id: string): Template;
98
+ createTemplate(template: Template): void;
99
+ private verifyVersionsLink;
100
+ private assignPagesSidebars;
101
+ }
@@ -0,0 +1,5 @@
1
+ export declare function promiseMapLimit<T, P>(
2
+ array: T[],
3
+ poolLimit: number,
4
+ iteratorFn: (arg: T, array: T[]) => Promise<P>,
5
+ ): Promise<P[]>;
@@ -0,0 +1,3 @@
1
+ export declare function sha(content: string): string;
2
+ export declare function shaFile(fileName: string): string;
3
+ export declare function shaFileForUrl(fileName: string): string;
@@ -0,0 +1,3 @@
1
+ export declare function readFileAsStringSync(filePath: string): string;
2
+ export declare function readFileNames(dir: string): string[];
3
+ export declare function copyStaticFile(absolutePath: string, outdir: string): string;
@@ -0,0 +1,6 @@
1
+ export * from './async.js';
2
+ export * from './crypto.js';
3
+ export * from './fs.js';
4
+ export * from './reporter/reporter.js';
5
+ export * from './watcher.js';
6
+ export * from './paths.js';
@@ -0,0 +1,16 @@
1
+ export declare function getDataFromRelativePath(relativePath: string): {
2
+ pathVersion: string;
3
+ basePath: string;
4
+ };
5
+ export declare function generatePagePathname(
6
+ currentVersion?: string | null,
7
+ defaultVersion?: string | null,
8
+ ...combineParts: string[]
9
+ ): string;
10
+ export declare function fromCurrentDir(moduleUrl: string, path: string): string;
11
+ export declare function excludeVersion<T extends string[] | string>(
12
+ arg: T,
13
+ ): {
14
+ version?: string;
15
+ data: T;
16
+ };
@@ -0,0 +1,11 @@
1
+ declare const formatter: {
2
+ success(message: string, ...args: any[]): string;
3
+ info(message: string, ...args: any[]): string;
4
+ warn(message: string, ...args: any[]): string;
5
+ error(message: string, ...args: any[]): string;
6
+ verbose(message: string, ...args: any[]): string;
7
+ formatMs(ms: number): string;
8
+ withTime(message: any, reporter: any): string;
9
+ format(pattern: string, ...args: any[]): string;
10
+ };
11
+ export default formatter;
@@ -0,0 +1,17 @@
1
+ export declare const reporter: {
2
+ now(): number;
3
+ startTiming(): void;
4
+ getTimeSpan(): number;
5
+ success(message: string, ...args: any[]): void;
6
+ successTime(message: string, ...args: any[]): void;
7
+ info(message: string, ...args: any[]): void;
8
+ infoTime(message: string, ...args: any[]): void;
9
+ warn(message: string, ...args: any[]): void;
10
+ warnTime(message: string, ...args: any[]): void;
11
+ error(message: string, ...args: any[]): void;
12
+ verbose(message: string, ...args: any[]): void;
13
+ verboseTime(message: string, ...args: any[]): void;
14
+ panic(message: string, ...args: any[]): never;
15
+ panicOnBuild(message: string, ...args: any[]): void;
16
+ flushErrors(): void;
17
+ };
@@ -0,0 +1,16 @@
1
+ /// <reference types="node" />
2
+ import * as chokidar from 'chokidar';
3
+ import * as fs from 'fs';
4
+ declare type WatchCb = (event: 'add' | 'change' | 'unlink', path: string, stats?: fs.Stats) => void;
5
+ export declare class Watcher {
6
+ cwd: string;
7
+ private _readyPromise;
8
+ private listeners;
9
+ constructor(cwd: string);
10
+ watch(test: RegExp, cb: WatchCb): void;
11
+ emit(event: 'add' | 'change' | 'unlink', path: string, stats?: fs.Stats): void;
12
+ stop(): Promise<void>;
13
+ start(): void;
14
+ ready(): Promise<chokidar.FSWatcher>;
15
+ }
16
+ export {};
@@ -0,0 +1 @@
1
+ export declare function parseYaml<T = unknown>(raw: string): T;
@@ -0,0 +1,8 @@
1
+ export declare const RUNTIME_RESOURCES_DIR = 'runtime';
2
+ export declare const REDOC_OVERVIEW_ITEM_ID = 'overview';
3
+ export declare const PORTAL_CUSTOM_THEMES_FOLDER = '@theme';
4
+ export declare const USER_THEME_ALIAS = '@theme';
5
+ export declare const PUBLIC_STATIC_FOLDER = '/static';
6
+ export declare enum FsErrors {
7
+ NotExist = 'ENOENT',
8
+ }
@@ -0,0 +1,77 @@
1
+ /// <reference types="react" />
2
+ import type { PageProps } from '../server/store';
3
+ export declare type ResolvedNavLinkItem = {
4
+ type: 'link';
5
+ link: string;
6
+ label: string;
7
+ items?: ResolvedNavItem[];
8
+ external?: boolean;
9
+ version?: string;
10
+ default?: string;
11
+ httpVerb?: string;
12
+ separatorLine?: boolean;
13
+ active?: boolean;
14
+ };
15
+ export declare type ResolvedNavGroupItem = {
16
+ type: 'group';
17
+ link?: string;
18
+ label: string;
19
+ items: ResolvedNavItem[];
20
+ version?: string;
21
+ default?: string;
22
+ menuStyle?: MenuStyle;
23
+ separatorLine?: boolean;
24
+ active?: boolean;
25
+ };
26
+ export declare type ResolvedNavItem =
27
+ | ResolvedNavLinkItem
28
+ | ResolvedNavGroupItem
29
+ | {
30
+ type: 'separator';
31
+ label?: string;
32
+ separatorLine?: boolean;
33
+ }
34
+ | {
35
+ type: 'error';
36
+ label: string;
37
+ };
38
+ export declare type ResolvedSidebar = ResolvedNavItem[];
39
+ export interface PageData {
40
+ templateId: string;
41
+ sidebarId?: string;
42
+ dataDependencies?: string[];
43
+ props: PageProps;
44
+ }
45
+ export interface CachedPageData extends PageData {
46
+ Template: React.ComponentType<{
47
+ pageProps: PageProps;
48
+ resolvedDataDependencies?: Record<string, unknown>[];
49
+ }>;
50
+ }
51
+ export interface ResolvedPageData extends CachedPageData {
52
+ sidebar: ResolvedSidebar;
53
+ resolvedDataDependencies?: Record<string, unknown>[];
54
+ }
55
+ export declare enum MenuStyle {
56
+ Drilldown = 'drilldown',
57
+ }
58
+ export declare type NavItem = {
59
+ page?: string;
60
+ directory?: string;
61
+ group?: string;
62
+ label?: string;
63
+ href?: never;
64
+ items?: NavItem[];
65
+ separator?: string;
66
+ separatorLine?: boolean;
67
+ version?: string;
68
+ menuStyle?: MenuStyle;
69
+ external?: boolean;
70
+ };
71
+ export declare type RawNavItem = string | NavItem;
72
+ export interface LogoConfig {
73
+ image?: string;
74
+ altText?: string;
75
+ link?: string;
76
+ favicon?: string;
77
+ }
@@ -0,0 +1,7 @@
1
+ export declare function getPageDataUrl(normalizedRoute: string): string;
2
+ export declare function getClientPageDataUrl(normalizedRoute: string): string;
3
+ export declare function getSidebarUrl(id: string): string;
4
+ export declare function getSharedDataUrl(id: string): string;
5
+ export declare const GLOBAL_DATA_URL = '/app-data.json';
6
+ export declare function combineUrls(baseURL: string, ...relativeURLs: string[]): string;
7
+ export declare function withPathPrefix(url: string): string;
@@ -0,0 +1,10 @@
1
+ export declare const isLocalLink: (path: string) => boolean;
2
+ /**
3
+ *
4
+ * @returns url with leading and without trailing slash or empty string, e.g. '/prefix'
5
+ */
6
+ export declare function getPathPrefix(): string;
7
+ export declare function normalizePathPrefix(prefix: string): string;
8
+ export declare function addLeadingSlash(url: string): string;
9
+ export declare function removeTrailingSlash(url: string): string;
10
+ export declare function getGlobMatcher(glob: string, options?: {}): (file: string) => boolean;
@@ -0,0 +1,110 @@
1
+ import React, { HTMLProps } from 'react';
2
+ import styled from 'styled-components';
3
+
4
+ interface IconProps extends HTMLProps<HTMLElement> {
5
+ type: 'warning' | 'success' | 'danger' | 'attention' | 'info';
6
+ }
7
+
8
+ function Icon({ type, className }: IconProps) {
9
+ switch (type) {
10
+ case 'warning':
11
+ return (
12
+ <svg
13
+ className={className}
14
+ xmlns="http://www.w3.org/2000/svg"
15
+ version="1.1"
16
+ id="Layer_1"
17
+ x="0"
18
+ y="0"
19
+ viewBox="0 0 500.6 500.6"
20
+ enableBackground="new 0 0 500.6 500.6"
21
+ >
22
+ <path d="M250.3 15.1c-132.5 0-239.8 107.2-239.8 239.8 0 132.5 107.2 239.8 239.8 239.8 132.5 0 239.8-107.2 239.8-239.8C490.1 122.3 382.8 15.1 250.3 15.1zM250.3 457.1C138.5 457.1 48 366.7 48 254.8 48 143 138.5 52.5 250.3 52.5c111.8 0 202.3 90.5 202.3 202.3C452.6 366.7 362.1 457.1 250.3 457.1z" />
23
+ <path d="M250.3 135.8c-10.3 0-18.7 8.4-18.7 18.7v120.6c0 10.3 8.4 18.7 18.7 18.7s18.7-8.4 18.7-18.7V154.5C269 144.2 260.7 135.8 250.3 135.8z" />
24
+ <circle cx="250.3" cy="342.1" r="25.3" />
25
+ </svg>
26
+ );
27
+ case 'success':
28
+ return (
29
+ <svg
30
+ className={className}
31
+ xmlns="http://www.w3.org/2000/svg"
32
+ version="1.1"
33
+ id="Layer_1"
34
+ x="0"
35
+ y="0"
36
+ viewBox="0 0 500.6 500.6"
37
+ enableBackground="new 0 0 500.6 500.6"
38
+ >
39
+ <path d="M250.3 490.1c132.5 0 239.8-107.2 239.8-239.8 0-132.5-107.2-239.8-239.8-239.8 -132.5 0-239.8 107.2-239.8 239.8C10.6 382.8 117.8 490.1 250.3 490.1zM250.3 48c111.8 0 202.3 90.5 202.3 202.3 0 111.8-90.5 202.3-202.3 202.3C138.5 452.6 48 362.1 48 250.3 48 138.5 138.5 48 250.3 48z" />
40
+ <path d="M224.7 349.6c8.5 5.9 20.2 3.8 26.1-4.6L355 195.7c5.9-8.5 3.8-20.2-4.6-26.1s-20.2-3.8-26.1 4.6L220 323.5C214.1 332 216.2 343.7 224.7 349.6z" />
41
+ <path d="M247.1 346.2c7.3-7.3 7.3-19.2 0-26.5l-55.9-55.9c-7.3-7.3-19.2-7.3-26.5 0s-7.3 19.2 0 26.5l55.9 55.9C228 353.5 239.8 353.5 247.1 346.2z" />
42
+ </svg>
43
+ );
44
+ case 'danger':
45
+ return (
46
+ <svg
47
+ className={className}
48
+ xmlns="http://www.w3.org/2000/svg"
49
+ version="1.1"
50
+ id="Layer_1"
51
+ x="0"
52
+ y="0"
53
+ viewBox="0 0 500.6 500.6"
54
+ enableBackground="new 0 0 500.6 500.6"
55
+ >
56
+ <path d="M250.3 490.1c132.5 0 239.8-107.2 239.8-239.8 0-132.5-107.2-239.8-239.8-239.8 -132.5 0-239.8 107.2-239.8 239.8C10.6 382.8 117.8 490.1 250.3 490.1zM250.3 48c111.8 0 202.3 90.5 202.3 202.3 0 111.8-90.5 202.3-202.3 202.3C138.5 452.6 48 362.1 48 250.3 48 138.5 138.5 48 250.3 48z" />
57
+ <path d="M168.4 332.2c7.3 7.3 19.2 7.3 26.5 0l137.3-137.3c7.3-7.3 7.3-19.2 0-26.5 -7.3-7.3-19.2-7.3-26.5 0L168.4 305.7C161.1 313 161.1 324.9 168.4 332.2z" />
58
+ <path d="M168.4 168.4c-7.3 7.3-7.3 19.2 0 26.5l137.3 137.3c7.3 7.3 19.2 7.3 26.5 0 7.3-7.3 7.3-19.2 0-26.5L194.9 168.4C187.6 161.1 175.7 161.1 168.4 168.4z" />
59
+ </svg>
60
+ );
61
+ case 'attention':
62
+ return (
63
+ <svg
64
+ className={className}
65
+ xmlns="http://www.w3.org/2000/svg"
66
+ version="1.1"
67
+ id="Layer_1"
68
+ x="0"
69
+ y="0"
70
+ viewBox="0 0 500.6 500.6"
71
+ enableBackground="new 0 0 500.6 500.6"
72
+ >
73
+ <path d="M250.3 301.8c-8.3 0-15-6.7-15-15V181.9c0-8.3 6.7-15 15-15 8.3 0 15 6.7 15 15v104.9C265.3 295.1 258.6 301.8 250.3 301.8zM483.7 377L297.2 66.1c-21.2-35.3-72.6-35.4-93.8 0L16.9 377c-17.6 29.4 3.6 67.1 38 67.1h390.8C480.1 444.1 501.4 406.4 483.7 377L483.7 377zM445.7 414.1H54.9c-11.2 0-18-12.2-12.3-21.7L229.1 81.5c9.6-16 32.8-16 42.4 0L458 392.4C463.7 401.9 456.9 414.1 445.7 414.1z" />
74
+ <circle cx="250.3" cy="339.2" r="22.5" />
75
+ </svg>
76
+ );
77
+ default:
78
+ return (
79
+ <svg
80
+ className={className}
81
+ xmlns="http://www.w3.org/2000/svg"
82
+ version="1.1"
83
+ id="Layer_1"
84
+ x="0"
85
+ y="0"
86
+ viewBox="0 0 500.6 500.6"
87
+ enableBackground="new 0 0 500.6 500.6"
88
+ >
89
+ <path d="M250.3 490.7c132.5 0 239.8-107.2 239.8-239.8 0-132.5-107.2-239.8-239.8-239.8 -132.5 0-239.8 107.2-239.8 239.8C10.6 383.5 117.8 490.7 250.3 490.7zM250.3 48.6c111.8 0 202.3 90.5 202.3 202.3 0 111.8-90.5 202.3-202.3 202.3C138.5 453.2 48 362.7 48 250.9 48 139.1 138.5 48.6 250.3 48.6z" />
90
+ <path d="M250.3 370c10.3 0 18.7-8.4 18.7-18.7V230.6c0-10.3-8.4-18.7-18.7-18.7 -10.3 0-18.7 8.4-18.7 18.7v120.6C231.6 361.6 240 370 250.3 370z" />
91
+ <circle cx="250.3" cy="163.7" r="25.3" />
92
+ </svg>
93
+ );
94
+ }
95
+ }
96
+
97
+ export const AlertIcon = styled(Icon).attrs(() => ({
98
+ 'data-component-name': 'ui/AlertIcon',
99
+ }))`
100
+ position: absolute;
101
+ left: var(--alert-padding-horizontal);
102
+ top: 50%;
103
+ transform: translateY(-50%);
104
+ width: var(--alert-icon-size);
105
+ height: var(--alert-icon-size);
106
+ margin-right: var(--alert-padding-horizontal);
107
+ flex-shrink: 0;
108
+
109
+ fill: ${({ type }) => `var(--alert-${type}-icon-color)`};
110
+ `;
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ import styled from 'styled-components';
3
+
4
+ export interface ArrowProps {
5
+ direction?: string;
6
+ }
7
+
8
+ function directionToTransform({ direction }: ArrowProps) {
9
+ switch (direction) {
10
+ case 'up':
11
+ return 180;
12
+ case 'right':
13
+ return -90;
14
+ case 'left':
15
+ return 90;
16
+ default:
17
+ return 0;
18
+ }
19
+ }
20
+
21
+ const Icon = ({ className }: { className?: string }) => (
22
+ <span data-component-name="ui/Arrow/Arrow">
23
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 7 5" className={className}>
24
+ <path d="M3.5 2.51L5.806.205a.7.7 0 01.99.99l-2.8 2.8a.698.698 0 01-.99 0l-2.8-2.8a.7.7 0 11.99-.99L3.5 2.51z" />
25
+ </svg>
26
+ </span>
27
+ );
28
+
29
+ export const Arrow = styled(Icon)`
30
+ width: var(--sidebar-chevron-size);
31
+ height: var(--sidebar-chevron-size);
32
+ fill: var(--sidebar-chevron-color);
33
+ transform: rotate(${directionToTransform}deg);
34
+
35
+ vertical-align: middle;
36
+ `;
@@ -0,0 +1,16 @@
1
+ import styled from 'styled-components';
2
+
3
+ import { Flex } from '@theme/ui/Flex';
4
+
5
+ export const Background = styled(Flex).attrs(() => ({
6
+ 'data-component-name': 'ui/Background',
7
+ }))`
8
+ background: var(--navbar-color-background);
9
+ color: var(--color-primary-contrast);
10
+ font-family: var(--h-font-family);
11
+
12
+ a:not([role='button']),
13
+ a:not([role='button']):hover {
14
+ color: var(--color-primary-contrast);
15
+ }
16
+ `;
package/src/ui/Box.tsx ADDED
@@ -0,0 +1,39 @@
1
+ import {
2
+ space,
3
+ position,
4
+ flex,
5
+ textAlign,
6
+ color,
7
+ border,
8
+ layout,
9
+ SpaceProps,
10
+ LayoutProps,
11
+ TextAlignProps,
12
+ ColorProps,
13
+ PositionProps,
14
+ FlexProps,
15
+ BordersProps,
16
+ } from 'styled-system';
17
+ import styled from 'styled-components';
18
+
19
+ export interface BoxProps
20
+ extends SpaceProps,
21
+ LayoutProps,
22
+ PositionProps,
23
+ FlexProps,
24
+ TextAlignProps,
25
+ ColorProps,
26
+ BordersProps {}
27
+
28
+ export const Box = styled.div.attrs(() => ({
29
+ 'data-component-name': 'ui/Box',
30
+ }))<BoxProps>`
31
+ max-width: 100%;
32
+ ${space}
33
+ ${layout}
34
+ ${position}
35
+ ${flex}
36
+ ${textAlign}
37
+ ${color}
38
+ ${border}
39
+ `;
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { LinkProps } from 'react-router-dom';
3
+
4
+ import { Button as RefDocsButton, ButtonProps } from '@theme/Button';
5
+ import { Link } from '@portal/Link';
6
+
7
+ const StyledButtonAsLink = RefDocsButton.withComponent(Link);
8
+
9
+ export function Button(
10
+ props: ButtonProps & Partial<LinkProps<never>> & { ref?: any; external?: boolean },
11
+ ): JSX.Element {
12
+ if (props.to) {
13
+ return <StyledButtonAsLink {...props} role="button" data-component-name="ui/Button" />;
14
+ } else {
15
+ return (
16
+ <RefDocsButton {...(props as ButtonProps)} role="button" data-component-name="ui/Button" />
17
+ );
18
+ }
19
+ }
@@ -0,0 +1,132 @@
1
+ import React, { useState, useRef, useEffect } from 'react';
2
+ import styled from 'styled-components';
3
+
4
+ import { Link } from '@portal/Link';
5
+ import { Version } from '@theme/types/portal';
6
+
7
+ type DropdownProps = {
8
+ items: Version[];
9
+ activeItem: Version;
10
+ };
11
+
12
+ const Icon = () => (
13
+ <svg
14
+ xmlns="http://www.w3.org/2000/svg"
15
+ width="16"
16
+ height="16"
17
+ viewBox="0 0 24 24"
18
+ fill="none"
19
+ stroke="currentColor"
20
+ strokeWidth="2"
21
+ strokeLinecap="round"
22
+ strokeLinejoin="round"
23
+ >
24
+ <polyline points="6 9 12 15 18 9"></polyline>
25
+ </svg>
26
+ );
27
+
28
+ const DropDownContainer = styled.div`
29
+ position: relative;
30
+ padding: calc(var(--spacing-unit) * 2) calc(var(--spacing-unit) * 4);
31
+ `;
32
+
33
+ const DropDownHeader = styled.div`
34
+ display: flex;
35
+ justify-content: space-between;
36
+ align-items: center;
37
+ background: #fff;
38
+ padding: 8px 10px;
39
+ border-radius: 4px;
40
+ border: 1px solid #e4e7eb;
41
+ font-weight: 600;
42
+ color: var(--color-text-main);
43
+ background: var(--color-secondary-300);
44
+ `;
45
+
46
+ const DropDownList = styled.div`
47
+ position: absolute;
48
+ background: var(--color-secondary-300);
49
+ margin: 2px 20px 0 20px;
50
+ padding: 0;
51
+ border-radius: 4px;
52
+ border: 1px solid rgba(38, 50, 56, 0.2);
53
+ z-index: 9999;
54
+ left: 0;
55
+ right: 0;
56
+ `;
57
+
58
+ const IconWrapper = styled.span`
59
+ transition: transform 0.2s;
60
+ display: inline-block;
61
+ font-size: 0;
62
+ &.active {
63
+ transform: rotate(-180deg);
64
+ }
65
+ `;
66
+
67
+ const ListItem = styled.div`
68
+ background-color: var(--background-color);
69
+ padding: 0.4em 10px;
70
+ font-size: 1em;
71
+ color: var(--color-text-main);
72
+ cursor: pointer;
73
+ &:hover {
74
+ background-color: rgba(38, 50, 56, 0.12);
75
+ }
76
+ &.active {
77
+ background-color: rgba(0, 0, 0, 0.05);
78
+ }
79
+ `;
80
+
81
+ const DropDownLink = styled(Link)`
82
+ display: block;
83
+ text-decoration: none;
84
+ color: var(--color-text-main);
85
+ `;
86
+
87
+ export default function Dropdown({ items, activeItem }: DropdownProps): JSX.Element {
88
+ const ref = useRef<HTMLDivElement>(null);
89
+ const [isOpen, setIsOpen] = useState(false);
90
+ const toggling = () => setIsOpen(!isOpen);
91
+ useEffect(() => {
92
+ const checkIfClickedOutside = (e: MouseEvent) => {
93
+ if (!(e.target instanceof HTMLElement)) {
94
+ return;
95
+ }
96
+
97
+ if (isOpen && ref.current && !ref.current.contains(e.target)) {
98
+ setIsOpen(false);
99
+ }
100
+ };
101
+
102
+ document.addEventListener('mousedown', checkIfClickedOutside);
103
+
104
+ return () => {
105
+ document.removeEventListener('mousedown', checkIfClickedOutside);
106
+ };
107
+ }, [isOpen]);
108
+
109
+ return (
110
+ <DropDownContainer ref={ref} data-component-name="ui/Dropdown">
111
+ <DropDownHeader onClick={toggling}>
112
+ {activeItem?.label || activeItem.version}
113
+ <IconWrapper className={isOpen ? 'active' : ''}>
114
+ <Icon />
115
+ </IconWrapper>
116
+ </DropDownHeader>
117
+ {isOpen && (
118
+ <DropDownList>
119
+ {items.map((item) => (
120
+ <ListItem
121
+ className={activeItem.version === item.version ? 'active' : ''}
122
+ onClick={toggling}
123
+ key={item?.link + item?.version}
124
+ >
125
+ <DropDownLink to={item?.link || '#'}>{item?.label || item.version}</DropDownLink>
126
+ </ListItem>
127
+ ))}
128
+ </DropDownList>
129
+ )}
130
+ </DropDownContainer>
131
+ );
132
+ }
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import styled from 'styled-components';
3
+ import { flexbox, FlexboxProps, width, WidthProps } from 'styled-system';
4
+
5
+ import { Box } from '@theme/ui/Box';
6
+
7
+ export interface FlexProps extends FlexboxProps, WidthProps {}
8
+
9
+ export const Flex = styled(Box).attrs({ 'data-component-name': 'ui/Flex' })<FlexProps>`
10
+ display: flex;
11
+ ${flexbox}
12
+ ${width}
13
+ `;
14
+
15
+ export function FlexSection(props: React.PropsWithChildren<FlexProps>): JSX.Element {
16
+ return (
17
+ <Flex {...props} width={props.width || { xs: '90%', large: 910 }}>
18
+ {props.children}
19
+ </Flex>
20
+ );
21
+ }