@redocly/theme 0.15.1 → 0.17.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 (348) hide show
  1. package/lib/I18n/LanguagePicker.js +2 -1
  2. package/lib/components/Breadcrumbs/Breadcrumb.js +0 -1
  3. package/lib/components/Breadcrumbs/Breadcrumbs.js +6 -0
  4. package/lib/components/Cards/Card.d.ts +1 -0
  5. package/lib/components/Cards/Card.js +1 -1
  6. package/lib/components/Cards/CardsBlock.d.ts +1 -3
  7. package/lib/components/Cards/CardsBlock.js +2 -1
  8. package/lib/components/Catalog/Catalog.js +1 -1
  9. package/lib/components/CodeBlock/CodeBlock.d.ts +1 -3
  10. package/lib/components/CodeBlock/CodeBlock.js +2 -1
  11. package/lib/components/CodeSample/CodeSample.d.ts +2 -1
  12. package/lib/components/CodeSample/CodeSample.js +3 -2
  13. package/lib/components/ColorModeSwitcher/ColorModeSwitcher.d.ts +5 -1
  14. package/lib/components/ColorModeSwitcher/ColorModeSwitcher.js +3 -2
  15. package/lib/components/Feedback/Comment.d.ts +1 -1
  16. package/lib/components/Feedback/Comment.js +3 -3
  17. package/lib/components/Feedback/Rating.d.ts +1 -1
  18. package/lib/components/Feedback/Rating.js +2 -2
  19. package/lib/components/Feedback/Reasons.d.ts +1 -1
  20. package/lib/components/Feedback/Reasons.js +2 -2
  21. package/lib/components/Feedback/ReportDialog.js +1 -1
  22. package/lib/components/Feedback/Sentiment.d.ts +1 -1
  23. package/lib/components/Feedback/Sentiment.js +2 -2
  24. package/lib/components/Feedback/types.d.ts +5 -0
  25. package/lib/components/Footer/CustomFooter.d.ts +2 -1
  26. package/lib/components/Footer/CustomFooter.js +2 -2
  27. package/lib/components/Footer/CustomFooterNavItem.d.ts +2 -1
  28. package/lib/components/Footer/CustomFooterNavItem.js +2 -2
  29. package/lib/components/Footer/Footer.d.ts +2 -1
  30. package/lib/components/Footer/Footer.js +2 -2
  31. package/lib/components/Footer/FooterColumn.d.ts +2 -1
  32. package/lib/components/Footer/FooterColumn.js +2 -2
  33. package/lib/components/Footer/FooterColumns.d.ts +2 -1
  34. package/lib/components/Footer/FooterColumns.js +2 -2
  35. package/lib/components/Footer/FooterCopyright.d.ts +2 -1
  36. package/lib/components/Footer/FooterCopyright.js +2 -2
  37. package/lib/components/JsonViewer/JsonViewer.d.ts +1 -3
  38. package/lib/components/LastUpdated/LastUpdated.d.ts +1 -0
  39. package/lib/components/LastUpdated/LastUpdated.js +1 -1
  40. package/lib/components/Markdown/ContainerWrapper.d.ts +1 -3
  41. package/lib/components/Markdown/ContainerWrapper.js +2 -1
  42. package/lib/components/Markdown/Heading.d.ts +2 -1
  43. package/lib/components/Markdown/Heading.js +2 -2
  44. package/lib/components/Markdown/MarkdownLayout.d.ts +2 -1
  45. package/lib/components/Markdown/MarkdownLayout.js +2 -2
  46. package/lib/components/Markdown/MarkdownWrapper.d.ts +1 -3
  47. package/lib/components/Markdown/MarkdownWrapper.js +2 -1
  48. package/lib/components/Markdown/Mermaid.d.ts +2 -1
  49. package/lib/components/Markdown/Mermaid.js +3 -2
  50. package/lib/components/Markdown/PageWrapper.d.ts +1 -3
  51. package/lib/components/Markdown/PageWrapper.js +2 -1
  52. package/lib/components/Markdown/Sup.d.ts +3 -1
  53. package/lib/components/Markdown/Sup.js +2 -2
  54. package/lib/components/Menu/Menu.d.ts +3 -1
  55. package/lib/components/Menu/Menu.js +6 -4
  56. package/lib/components/Menu/MenuContainer.d.ts +1 -0
  57. package/lib/components/Menu/MenuContainer.js +2 -1
  58. package/lib/components/Menu/MenuGroup.d.ts +2 -1
  59. package/lib/components/Menu/MenuGroup.js +3 -3
  60. package/lib/components/Menu/MenuItem.d.ts +1 -1
  61. package/lib/components/Menu/MenuItem.js +19 -3
  62. package/lib/components/Menu/MenuItemLabel.d.ts +1 -3
  63. package/lib/components/Menu/MenuItemLabel.js +18 -9
  64. package/lib/components/Menu/MenuItemSwitch.js +4 -2
  65. package/lib/components/Menu/MenuLink.d.ts +1 -3
  66. package/lib/components/Menu/MenuLink.js +2 -1
  67. package/lib/components/Menu/MenuLinkItem.d.ts +1 -1
  68. package/lib/components/Menu/MenuLinkItem.js +2 -2
  69. package/lib/components/Menu/MobileMenu.d.ts +11 -0
  70. package/lib/components/Menu/MobileMenu.js +179 -0
  71. package/lib/components/Menu/MobileMenuGroup.d.ts +9 -0
  72. package/lib/components/Menu/MobileMenuGroup.js +53 -0
  73. package/lib/components/Menu/index.d.ts +1 -0
  74. package/lib/components/Menu/index.js +1 -0
  75. package/lib/components/Navbar/BurgerButton.d.ts +5 -0
  76. package/lib/components/Navbar/BurgerButton.js +29 -0
  77. package/lib/components/Navbar/MobileUserProfile.d.ts +2 -0
  78. package/lib/components/Navbar/MobileUserProfile.js +78 -0
  79. package/lib/components/Navbar/Navbar.d.ts +1 -0
  80. package/lib/components/Navbar/Navbar.js +29 -9
  81. package/lib/components/Navbar/NavbarDropdown.d.ts +2 -1
  82. package/lib/components/Navbar/NavbarDropdown.js +2 -2
  83. package/lib/components/Navbar/NavbarMenu.d.ts +2 -1
  84. package/lib/components/Navbar/NavbarMenu.js +2 -2
  85. package/lib/components/NavbarLogo/NavbarLogo.d.ts +2 -1
  86. package/lib/components/NavbarLogo/NavbarLogo.js +2 -2
  87. package/lib/components/OpenApiDocs/DevOnboardingTryItSecurity.d.ts +1 -1
  88. package/lib/components/OpenApiDocs/DevOnboardingTryItSecurity.js +1 -1
  89. package/lib/components/PageNavigation/NextButton.d.ts +2 -1
  90. package/lib/components/PageNavigation/NextButton.js +2 -2
  91. package/lib/components/PageNavigation/PageNavigation.d.ts +2 -1
  92. package/lib/components/PageNavigation/PageNavigation.js +2 -2
  93. package/lib/components/PageNavigation/PreviousButton.d.ts +2 -1
  94. package/lib/components/PageNavigation/PreviousButton.js +2 -2
  95. package/lib/components/Panel/PanelBody.d.ts +1 -3
  96. package/lib/components/Panel/PanelBody.js +2 -1
  97. package/lib/components/Panel/PanelHeader.d.ts +1 -3
  98. package/lib/components/Panel/PanelHeader.js +2 -1
  99. package/lib/components/Panel/PanelHeaderTitle.d.ts +1 -3
  100. package/lib/components/Panel/PanelHeaderTitle.js +2 -1
  101. package/lib/components/Profile/Profile.d.ts +6 -0
  102. package/lib/components/Profile/Profile.js +7 -7
  103. package/lib/components/Profile/types.d.ts +1 -0
  104. package/lib/components/SamplesPanelControls/SamplesPanelControls.d.ts +2 -6
  105. package/lib/components/SamplesPanelControls/SamplesPanelControls.js +2 -1
  106. package/lib/components/Search/CancelSearch.d.ts +2 -1
  107. package/lib/components/Search/CancelSearch.js +2 -2
  108. package/lib/components/Search/ClearIcon.d.ts +1 -3
  109. package/lib/components/Search/ClearIcon.js +2 -1
  110. package/lib/components/Search/ClockBackwardsIcon.d.ts +1 -4
  111. package/lib/components/Search/Input.d.ts +1 -3
  112. package/lib/components/Search/Input.js +2 -1
  113. package/lib/components/Search/InputWrapper.d.ts +2 -1
  114. package/lib/components/Search/InputWrapper.js +2 -2
  115. package/lib/components/Search/MobileSearchTrigger.d.ts +2 -1
  116. package/lib/components/Search/MobileSearchTrigger.js +6 -5
  117. package/lib/components/Search/Popover.d.ts +1 -3
  118. package/lib/components/Search/Popover.js +3 -2
  119. package/lib/components/Search/RecentSearches.d.ts +2 -1
  120. package/lib/components/Search/RecentSearches.js +3 -3
  121. package/lib/components/Search/Search.d.ts +3 -1
  122. package/lib/components/Search/Search.js +2 -2
  123. package/lib/components/Search/SearchDialog.d.ts +2 -1
  124. package/lib/components/Search/SearchDialog.js +4 -3
  125. package/lib/components/Search/SearchIcon.d.ts +1 -3
  126. package/lib/components/Search/SearchIcon.js +2 -1
  127. package/lib/components/Search/SearchItem.d.ts +2 -1
  128. package/lib/components/Search/SearchItem.js +3 -3
  129. package/lib/components/Search/SearchTrigger.d.ts +2 -1
  130. package/lib/components/Search/SearchTrigger.js +2 -2
  131. package/lib/components/Search/Shortcut.d.ts +2 -1
  132. package/lib/components/Search/Shortcut.js +2 -2
  133. package/lib/components/Search/ShortcutKey.d.ts +1 -0
  134. package/lib/components/Search/ShortcutKey.js +1 -1
  135. package/lib/components/Search/SidebarSearch.d.ts +1 -3
  136. package/lib/components/Search/SidebarSearch.js +2 -1
  137. package/lib/components/Search/SuggestedPages.d.ts +3 -1
  138. package/lib/components/Search/SuggestedPages.js +2 -2
  139. package/lib/components/Separator/Separator.d.ts +1 -1
  140. package/lib/components/Separator/Separator.js +2 -2
  141. package/lib/components/Separator/SeparatorItem.d.ts +1 -5
  142. package/lib/components/Separator/SeparatorItem.js +7 -2
  143. package/lib/components/Separator/SeparatorLine.d.ts +1 -3
  144. package/lib/components/Separator/SeparatorLine.js +2 -1
  145. package/lib/components/Sidebar/ApiCallItem.d.ts +1 -1
  146. package/lib/components/Sidebar/ApiCallItem.js +10 -3
  147. package/lib/components/Sidebar/BackButton.d.ts +2 -1
  148. package/lib/components/Sidebar/BackButton.js +2 -2
  149. package/lib/components/Sidebar/Drilldown.d.ts +2 -1
  150. package/lib/components/Sidebar/Drilldown.js +2 -2
  151. package/lib/components/Sidebar/DrilldownMenu.d.ts +1 -1
  152. package/lib/components/Sidebar/DrilldownMenu.js +3 -3
  153. package/lib/components/Sidebar/DrilldownMenuItem.d.ts +1 -1
  154. package/lib/components/Sidebar/DrilldownMenuItem.js +2 -2
  155. package/lib/components/Sidebar/HeaderWrapper.d.ts +1 -3
  156. package/lib/components/Sidebar/HeaderWrapper.js +2 -1
  157. package/lib/components/Sidebar/MobileSidebarButton.d.ts +1 -3
  158. package/lib/components/Sidebar/MobileSidebarButton.js +3 -2
  159. package/lib/components/Sidebar/Sidebar.d.ts +1 -3
  160. package/lib/components/Sidebar/Sidebar.js +2 -1
  161. package/lib/components/Sidebar/SidebarLayout.d.ts +2 -1
  162. package/lib/components/Sidebar/SidebarLayout.js +2 -4
  163. package/lib/components/Sidebar/types.d.ts +3 -0
  164. package/lib/components/SidebarActions/SidebarActions.d.ts +2 -1
  165. package/lib/components/SidebarActions/SidebarActions.js +2 -2
  166. package/lib/components/SidebarLogo/SidebarLogo.d.ts +2 -1
  167. package/lib/components/SidebarLogo/SidebarLogo.js +2 -2
  168. package/lib/components/TableOfContent/TableOfContent.d.ts +1 -0
  169. package/lib/components/TableOfContent/TableOfContent.js +2 -2
  170. package/lib/components/Tags/Tags.d.ts +2 -1
  171. package/lib/components/Tags/Tags.js +2 -2
  172. package/lib/components/Tiles/TileHeader.d.ts +1 -3
  173. package/lib/components/Tiles/TileHeader.js +2 -1
  174. package/lib/components/Tiles/TileText.d.ts +1 -3
  175. package/lib/components/Tiles/TileText.js +2 -1
  176. package/lib/components/Typography/CompactTypography.d.ts +1 -3
  177. package/lib/components/Typography/Emphasis.d.ts +1 -3
  178. package/lib/components/Typography/Emphasis.js +2 -1
  179. package/lib/components/Typography/H1.d.ts +1 -3
  180. package/lib/components/Typography/H1.js +2 -1
  181. package/lib/components/Typography/H2.d.ts +1 -3
  182. package/lib/components/Typography/H2.js +2 -1
  183. package/lib/components/Typography/H3.d.ts +1 -3
  184. package/lib/components/Typography/H3.js +2 -1
  185. package/lib/components/Typography/SectionHeader.d.ts +1 -3
  186. package/lib/components/Typography/SectionHeader.js +2 -1
  187. package/lib/components/Typography/Typography.d.ts +1 -3
  188. package/lib/components/Typography/Typography.js +2 -1
  189. package/lib/config.d.ts +496 -1
  190. package/lib/config.js +134 -1
  191. package/lib/globalStyle.js +62 -2
  192. package/lib/hooks/useMobileMenu.js +7 -1
  193. package/lib/icons/BurgerIcon/BurgerIcon.d.ts +5 -0
  194. package/lib/icons/BurgerIcon/BurgerIcon.js +15 -0
  195. package/lib/icons/BurgerIcon/index.d.ts +1 -0
  196. package/lib/icons/BurgerIcon/index.js +6 -0
  197. package/lib/icons/CloseIcon/CloseIcon.d.ts +5 -0
  198. package/lib/icons/CloseIcon/CloseIcon.js +16 -0
  199. package/lib/icons/CloseIcon/index.d.ts +1 -0
  200. package/lib/icons/CloseIcon/index.js +6 -0
  201. package/lib/icons/ColorModeIcon/ColorModeIcon.js +5 -1
  202. package/lib/icons/ExpandIcon/ExpandIcon.d.ts +8 -0
  203. package/lib/icons/ExpandIcon/ExpandIcon.js +31 -0
  204. package/lib/icons/ExpandIcon/index.d.ts +1 -0
  205. package/lib/icons/ExpandIcon/index.js +6 -0
  206. package/lib/icons/LogoutIcon/LogoutIcon.d.ts +5 -0
  207. package/lib/icons/LogoutIcon/LogoutIcon.js +17 -0
  208. package/lib/icons/LogoutIcon/index.d.ts +1 -0
  209. package/lib/icons/LogoutIcon/index.js +6 -0
  210. package/lib/icons/index.d.ts +4 -0
  211. package/lib/icons/index.js +4 -0
  212. package/lib/mocks/Sidebar/useSidebarItems.d.ts +3 -0
  213. package/lib/mocks/Sidebar/useSidebarItems.js +8 -0
  214. package/lib/mocks/hooks/index.d.ts +4 -1
  215. package/lib/mocks/hooks/index.js +16 -1
  216. package/lib/mocks/media-css.d.ts +5 -0
  217. package/lib/mocks/media-css.js +5 -0
  218. package/lib/ui/Dropdown.js +1 -1
  219. package/lib/ui/darkColors.js +11 -3
  220. package/package.json +5 -4
  221. package/src/I18n/LanguagePicker.tsx +2 -1
  222. package/src/components/Breadcrumbs/Breadcrumb.tsx +0 -1
  223. package/src/components/Breadcrumbs/Breadcrumbs.tsx +6 -0
  224. package/src/components/Cards/Card.tsx +2 -1
  225. package/src/components/Cards/CardsBlock.tsx +2 -1
  226. package/src/components/Catalog/Catalog.tsx +1 -1
  227. package/src/components/CodeBlock/CodeBlock.ts +2 -1
  228. package/src/components/CodeSample/CodeSample.tsx +4 -1
  229. package/src/components/ColorModeSwitcher/ColorModeSwitcher.tsx +7 -1
  230. package/src/components/Feedback/Comment.tsx +3 -3
  231. package/src/components/Feedback/Rating.tsx +2 -2
  232. package/src/components/Feedback/Reasons.tsx +6 -2
  233. package/src/components/Feedback/ReportDialog.tsx +1 -1
  234. package/src/components/Feedback/Sentiment.tsx +2 -2
  235. package/src/components/Feedback/types.ts +5 -0
  236. package/src/components/Footer/CustomFooter.tsx +3 -2
  237. package/src/components/Footer/CustomFooterNavItem.tsx +3 -2
  238. package/src/components/Footer/Footer.tsx +3 -1
  239. package/src/components/Footer/FooterColumn.tsx +3 -2
  240. package/src/components/Footer/FooterColumns.tsx +3 -2
  241. package/src/components/Footer/FooterCopyright.tsx +6 -1
  242. package/src/components/LastUpdated/LastUpdated.tsx +2 -0
  243. package/src/components/Markdown/ContainerWrapper.tsx +2 -1
  244. package/src/components/Markdown/Heading.tsx +3 -1
  245. package/src/components/Markdown/MarkdownLayout.tsx +3 -1
  246. package/src/components/Markdown/MarkdownWrapper.tsx +2 -1
  247. package/src/components/Markdown/Mermaid.tsx +5 -1
  248. package/src/components/Markdown/PageWrapper.tsx +2 -1
  249. package/src/components/Markdown/Sup.tsx +9 -2
  250. package/src/components/Menu/Menu.tsx +16 -5
  251. package/src/components/Menu/MenuContainer.tsx +3 -1
  252. package/src/components/Menu/MenuGroup.tsx +4 -5
  253. package/src/components/Menu/MenuItem.tsx +22 -4
  254. package/src/components/Menu/MenuItemLabel.tsx +19 -10
  255. package/src/components/Menu/MenuItemSwitch.tsx +7 -5
  256. package/src/components/Menu/MenuLink.tsx +2 -1
  257. package/src/components/Menu/MenuLinkItem.tsx +2 -1
  258. package/src/components/Menu/MobileMenu.tsx +209 -0
  259. package/src/components/Menu/MobileMenuGroup.tsx +73 -0
  260. package/src/components/Menu/index.ts +1 -0
  261. package/src/components/Navbar/BurgerButton.tsx +34 -0
  262. package/src/components/Navbar/MobileUserProfile.tsx +90 -0
  263. package/src/components/Navbar/Navbar.tsx +43 -14
  264. package/src/components/Navbar/NavbarDropdown.tsx +3 -2
  265. package/src/components/Navbar/NavbarMenu.tsx +8 -2
  266. package/src/components/NavbarLogo/NavbarLogo.tsx +11 -3
  267. package/src/components/OpenApiDocs/DevOnboardingTryItSecurity.tsx +2 -4
  268. package/src/components/PageNavigation/NextButton.tsx +3 -1
  269. package/src/components/PageNavigation/PageNavigation.tsx +10 -2
  270. package/src/components/PageNavigation/PreviousButton.tsx +3 -1
  271. package/src/components/Panel/PanelBody.ts +2 -1
  272. package/src/components/Panel/PanelHeader.ts +2 -1
  273. package/src/components/Panel/PanelHeaderTitle.ts +2 -1
  274. package/src/components/Profile/Profile.tsx +2 -2
  275. package/src/components/Profile/types.ts +1 -0
  276. package/src/components/SamplesPanelControls/SamplesPanelControls.ts +6 -3
  277. package/src/components/Search/CancelSearch.tsx +8 -2
  278. package/src/components/Search/ClearIcon.tsx +2 -1
  279. package/src/components/Search/ClockBackwardsIcon.tsx +1 -1
  280. package/src/components/Search/Input.tsx +2 -1
  281. package/src/components/Search/InputWrapper.tsx +3 -1
  282. package/src/components/Search/MobileSearchTrigger.tsx +16 -5
  283. package/src/components/Search/Popover.tsx +3 -2
  284. package/src/components/Search/RecentSearches.tsx +9 -3
  285. package/src/components/Search/Search.tsx +2 -2
  286. package/src/components/Search/SearchDialog.tsx +10 -3
  287. package/src/components/Search/SearchIcon.tsx +2 -1
  288. package/src/components/Search/SearchItem.tsx +4 -1
  289. package/src/components/Search/SearchTrigger.tsx +8 -2
  290. package/src/components/Search/Shortcut.tsx +3 -1
  291. package/src/components/Search/ShortcutKey.tsx +2 -1
  292. package/src/components/Search/SidebarSearch.tsx +2 -1
  293. package/src/components/Search/SuggestedPages.tsx +2 -2
  294. package/src/components/Separator/Separator.tsx +2 -2
  295. package/src/components/Separator/SeparatorItem.tsx +11 -4
  296. package/src/components/Separator/SeparatorLine.tsx +2 -1
  297. package/src/components/Sidebar/ApiCallItem.tsx +12 -4
  298. package/src/components/Sidebar/BackButton.tsx +3 -1
  299. package/src/components/Sidebar/Drilldown.tsx +3 -1
  300. package/src/components/Sidebar/DrilldownMenu.tsx +3 -2
  301. package/src/components/Sidebar/DrilldownMenuItem.tsx +2 -2
  302. package/src/components/Sidebar/HeaderWrapper.tsx +2 -1
  303. package/src/components/Sidebar/MobileSidebarButton.tsx +3 -2
  304. package/src/components/Sidebar/Sidebar.tsx +2 -1
  305. package/src/components/Sidebar/SidebarLayout.tsx +3 -4
  306. package/src/components/Sidebar/types.ts +3 -0
  307. package/src/components/SidebarActions/SidebarActions.tsx +3 -0
  308. package/src/components/SidebarLogo/SidebarLogo.tsx +3 -0
  309. package/src/components/TableOfContent/TableOfContent.tsx +3 -2
  310. package/src/components/Tags/Tags.tsx +2 -2
  311. package/src/components/Tiles/TileHeader.ts +2 -1
  312. package/src/components/Tiles/TileText.tsx +2 -1
  313. package/src/components/Typography/Emphasis.ts +2 -1
  314. package/src/components/Typography/H1.ts +2 -1
  315. package/src/components/Typography/H2.ts +2 -1
  316. package/src/components/Typography/H3.ts +2 -1
  317. package/src/components/Typography/SectionHeader.ts +2 -1
  318. package/src/components/Typography/Typography.ts +2 -1
  319. package/src/config.ts +150 -1
  320. package/src/globalStyle.ts +66 -3
  321. package/src/hooks/useMobileMenu.ts +5 -1
  322. package/src/icons/BurgerIcon/BurgerIcon.tsx +12 -0
  323. package/src/icons/BurgerIcon/index.ts +1 -0
  324. package/src/icons/CloseIcon/CloseIcon.tsx +13 -0
  325. package/src/icons/CloseIcon/index.ts +1 -0
  326. package/src/icons/ColorModeIcon/ColorModeIcon.tsx +5 -1
  327. package/src/icons/ExpandIcon/ExpandIcon.tsx +46 -0
  328. package/src/icons/ExpandIcon/index.ts +1 -0
  329. package/src/icons/LogoutIcon/LogoutIcon.tsx +20 -0
  330. package/src/icons/LogoutIcon/index.ts +1 -0
  331. package/src/icons/index.ts +4 -0
  332. package/src/mocks/Sidebar/useSidebarItems.tsx +7 -0
  333. package/src/mocks/hooks/index.ts +16 -1
  334. package/src/mocks/media-css.ts +1 -0
  335. package/src/ui/Dropdown.tsx +1 -1
  336. package/src/ui/darkColors.tsx +11 -3
  337. package/lib/components/Navbar/MobileNavbarDropdown.d.ts +0 -8
  338. package/lib/components/Navbar/MobileNavbarDropdown.js +0 -30
  339. package/lib/components/Navbar/MobileNavbarItem.d.ts +0 -15
  340. package/lib/components/Navbar/MobileNavbarItem.js +0 -110
  341. package/lib/components/Navbar/MobileNavbarMenu.d.ts +0 -6
  342. package/lib/components/Navbar/MobileNavbarMenu.js +0 -92
  343. package/lib/components/Navbar/MobileNavbarMenuButton.d.ts +0 -4
  344. package/lib/components/Navbar/MobileNavbarMenuButton.js +0 -18
  345. package/src/components/Navbar/MobileNavbarDropdown.tsx +0 -37
  346. package/src/components/Navbar/MobileNavbarItem.tsx +0 -121
  347. package/src/components/Navbar/MobileNavbarMenu.tsx +0 -111
  348. package/src/components/Navbar/MobileNavbarMenuButton.tsx +0 -13
@@ -0,0 +1,209 @@
1
+ import React, { useState } from 'react';
2
+ import { useLocation } from 'react-router-dom';
3
+ import styled from 'styled-components';
4
+
5
+ import { DropdownWrapper } from '@theme/components/Navbar/NavbarDropdown';
6
+ import { isPrimitive, isEmptyArray, withPathPrefix } from '@theme/utils';
7
+ import type { ResolvedNavItem } from '@theme/types/portal';
8
+ import { Menu, MenuItemLabel } from '@theme/components/Menu/index';
9
+ import type { ItemState } from '@portal/Sidebar/types';
10
+ import { MobileUserProfile } from '@theme/components/Navbar/MobileUserProfile';
11
+ import { getPathnameForLocale } from '@portal/utils';
12
+ import { useI18nConfig, useTranslate } from '@portal/hooks';
13
+ import { ExpandIcon } from '@theme/icons';
14
+
15
+ interface MobileMenuProps {
16
+ navItems: ResolvedNavItem[];
17
+ sidebarItems: ItemState[];
18
+ className?: string;
19
+ }
20
+
21
+ enum MenuLevel {
22
+ NAVBAR = 'NAVBAR',
23
+ SIDEBAR = 'SIDEBAR',
24
+ }
25
+
26
+ export function MobileMenu({
27
+ navItems,
28
+ sidebarItems,
29
+ className,
30
+ }: MobileMenuProps): JSX.Element | null {
31
+ const [menuLevel, setMenuLevel] = useState(
32
+ sidebarItems.length ? MenuLevel.SIDEBAR : MenuLevel.NAVBAR,
33
+ );
34
+ const { pathname, hash } = useLocation();
35
+ const pathHash = pathname + hash;
36
+ const { defaultLocale, currentLocale, locales } = useI18nConfig();
37
+ const { translate } = useTranslate();
38
+
39
+ if (isPrimitive(navItems) || isEmptyArray(navItems)) {
40
+ return null;
41
+ }
42
+
43
+ const isItemActive = (item: ResolvedNavItem): boolean => {
44
+ return (
45
+ pathHash ===
46
+ withPathPrefix(getPathnameForLocale(item.link || '/', defaultLocale, currentLocale, locales))
47
+ );
48
+ };
49
+
50
+ const mapNavbarItems = (items: ResolvedNavItem[]): ItemState[] => {
51
+ return items.map(
52
+ (navItem) =>
53
+ ({
54
+ ...navItem,
55
+ ...(navItem.items && { items: mapNavbarItems(navItem.items) }),
56
+ ...('link' in navItem && { link: navItem.link || '/' }),
57
+ active: 'link' in navItem && isItemActive(navItem),
58
+ hasActiveSubItem: !!navItem.items?.find(isItemActive),
59
+ } as ItemState),
60
+ );
61
+ };
62
+
63
+ let menuItems: ItemState[];
64
+ switch (menuLevel) {
65
+ case MenuLevel.SIDEBAR:
66
+ menuItems = sidebarItems;
67
+ break;
68
+ default:
69
+ menuItems = mapNavbarItems(navItems);
70
+ }
71
+
72
+ const isMenuButtonVisible = menuLevel === MenuLevel.SIDEBAR;
73
+ const isPreviousButtonVisible = menuLevel === MenuLevel.NAVBAR && !!sidebarItems.length;
74
+ const isButtonsSectionVisible = isMenuButtonVisible || isPreviousButtonVisible;
75
+
76
+ const translationKeys = {
77
+ mainMenu: 'theme.mobileMenu.mainMenu',
78
+ previous: 'theme.mobileMenu.previous',
79
+ };
80
+
81
+ return (
82
+ <MobileMenuWrapper data-component-name="Menu/MobileMenu" className={className}>
83
+ <ScrollableArea>
84
+ {isButtonsSectionVisible && (
85
+ <ButtonsSection alignRight={isPreviousButtonVisible}>
86
+ {isMenuButtonVisible && (
87
+ <ControlButton
88
+ data-component-name="Menu/ControlButton"
89
+ onClick={() => setMenuLevel(MenuLevel.NAVBAR)}
90
+ >
91
+ <ExpandIcon direction="left" />
92
+ <ControlButtonLabel paddingDirection="left">
93
+ {translate(translationKeys.mainMenu, 'Main Menu')}
94
+ </ControlButtonLabel>
95
+ </ControlButton>
96
+ )}
97
+ {isPreviousButtonVisible && (
98
+ <ControlButton
99
+ data-component-name="Menu/ControlButton"
100
+ onClick={() => setMenuLevel(MenuLevel.SIDEBAR)}
101
+ >
102
+ <ControlButtonLabel paddingDirection="right">
103
+ {translate(translationKeys.previous, 'Previous')}
104
+ </ControlButtonLabel>
105
+ <ExpandIcon direction="right" />
106
+ </ControlButton>
107
+ )}
108
+ </ButtonsSection>
109
+ )}
110
+ <MenuWrapper>
111
+ <Menu items={menuItems} isMobile />
112
+ </MenuWrapper>
113
+ </ScrollableArea>
114
+ <MobileUserProfile />
115
+ </MobileMenuWrapper>
116
+ );
117
+ }
118
+
119
+ const MobileMenuWrapper = styled.div`
120
+ height: 100%;
121
+ width: 100%;
122
+ position: fixed;
123
+ z-index: var(--z-index-raised);
124
+ left: 0;
125
+ top: var(--navbar-height);
126
+ overflow-x: hidden;
127
+ transition: 0.5s;
128
+ display: flex;
129
+ flex-direction: column;
130
+ background: var(--mobile-menu-background);
131
+
132
+ ${({ theme }) => theme.mediaQueries.medium} {
133
+ display: none;
134
+ }
135
+
136
+ ${DropdownWrapper} {
137
+ & > div {
138
+ text-align: center;
139
+ padding: 10px 0;
140
+ cursor: pointer;
141
+ a {
142
+ color: var(--navbar-text-color);
143
+ text-decoration: none;
144
+ }
145
+ :hover {
146
+ text-decoration: underline;
147
+ }
148
+ }
149
+ }
150
+ `;
151
+
152
+ const ButtonsSection = styled.div<{ alignRight: boolean }>`
153
+ align-items: center;
154
+ display: flex;
155
+ justify-content: space-between;
156
+ ${({ alignRight }) => alignRight && 'justify-content: flex-end'};
157
+ `;
158
+
159
+ const ScrollableArea = styled.div`
160
+ padding-top: var(--mobile-menu-padding-top);
161
+ flex: 1;
162
+ overflow-y: scroll;
163
+ margin-bottom: 140px;
164
+ `;
165
+
166
+ const MenuWrapper = styled.div`
167
+ margin: 0 var(--mobile-menu-horizontal-margin);
168
+ margin-top: var(--mobile-menu-items-margin-top);
169
+ line-height: 22px;
170
+ background: var(--mobile-menu-background);
171
+
172
+ ${MenuItemLabel} {
173
+ margin: 0;
174
+ border-radius: var(--mobile-menu-item-radius);
175
+ padding-left: var(--sidebar-item-padding-horizontal);
176
+ }
177
+ `;
178
+
179
+ export const ControlButton = styled.li`
180
+ display: inline-block;
181
+ padding: var(--mobile-menu-control-button-padding-vertical)
182
+ var(--mobile-menu-control-button-padding-horizontal);
183
+ margin: var(--mobile-menu-control-button-margin-vertical)
184
+ var(--mobile-menu-control-button-margin-horizontal);
185
+ text-align: center;
186
+ font-size: var(--mobile-menu-control-button-font-size);
187
+ line-height: 22px;
188
+ font-weight: var(--mobile-menu-control-button-weight);
189
+ color: var(--mobile-menu-control-button-color);
190
+ cursor: pointer;
191
+
192
+ svg {
193
+ fill: var(--mobile-menu-control-button-color);
194
+ }
195
+
196
+ &:hover {
197
+ color: var(--mobile-menu-control-button-hover-color);
198
+
199
+ svg {
200
+ fill: var(--mobile-menu-control-button-hover-color);
201
+ }
202
+ }
203
+ `;
204
+
205
+ const ControlButtonLabel = styled.span<{ paddingDirection: 'right' | 'left' }>`
206
+ vertical-align: middle;
207
+ ${({ paddingDirection }) => paddingDirection === 'left' && 'padding-left: 8px'};
208
+ ${({ paddingDirection }) => paddingDirection === 'right' && 'padding-right: 8px'};
209
+ `;
@@ -0,0 +1,73 @@
1
+ import React from 'react';
2
+ import styled from 'styled-components';
3
+
4
+ import { MenuLinkItem } from '@theme/components/Menu/MenuLinkItem';
5
+ import { MenuItemLabel } from '@theme/components/Menu/MenuItemLabel';
6
+ import { SeparatorLine } from '@theme/components/Separator/SeparatorLine';
7
+ import type { ItemState } from '@theme/components/Sidebar/types';
8
+ import { useTranslate } from '@portal/hooks';
9
+ import { ExpandIcon } from '@theme/icons';
10
+
11
+ interface MenuGroupProps {
12
+ item: ItemState;
13
+ isExpanded: boolean;
14
+ toggleExpanded: () => void;
15
+ }
16
+
17
+ export function MobileMenuGroup({
18
+ item,
19
+ isExpanded,
20
+ toggleExpanded,
21
+ children,
22
+ }: React.PropsWithChildren<MenuGroupProps>): JSX.Element {
23
+ const { translate } = useTranslate();
24
+
25
+ return (
26
+ <Wrapper data-component-name="Menu/MobileMenuGroup">
27
+ <MenuLinkItem item={item}>
28
+ <MenuGroupLabel onClick={toggleExpanded} active={item.active} expanded={isExpanded}>
29
+ <LabelContainer>
30
+ <Label>{translate(item.labelTranslationKey, item.label)}</Label>
31
+ </LabelContainer>
32
+ {!!item.items.length && <ExpandIcon direction={isExpanded ? 'down' : 'right'} />}
33
+ </MenuGroupLabel>
34
+ </MenuLinkItem>
35
+ <MenuWrapper isExpanded={isExpanded}>{children}</MenuWrapper>
36
+ {item.separatorLine ? <SeparatorLine /> : null}
37
+ </Wrapper>
38
+ );
39
+ }
40
+
41
+ const LabelContainer = styled.div`
42
+ display: flex;
43
+ `;
44
+
45
+ const Label = styled.div``;
46
+
47
+ const Wrapper = styled.div``;
48
+
49
+ const MenuWrapper = styled.div<{ isExpanded?: boolean }>`
50
+ padding-left: var(--mobile-menu-item-nested-offset);
51
+ overflow: hidden;
52
+ ${(props) => !props.isExpanded && 'max-height: 0'}
53
+ `;
54
+
55
+ const MenuGroupLabel = styled(MenuItemLabel)<{ active?: boolean; expanded?: boolean }>`
56
+ color: var(--mobile-menu-item-text-color);
57
+ background: var(--mobile-menu-background);
58
+ display: flex;
59
+ justify-content: space-between;
60
+
61
+ ${({ active }) =>
62
+ active &&
63
+ `
64
+ color: var(--mobile-menu-item-active-text-color);
65
+ background-color: var(--mobile-menu-item-active-color);
66
+ `}
67
+
68
+ ${({ expanded }) =>
69
+ expanded &&
70
+ `
71
+ color: var(--mobile-menu-item-active-text-color);
72
+ `}
73
+ `;
@@ -5,3 +5,4 @@ export * from '@theme/components/Menu/MenuContainer';
5
5
  export * from '@theme/components/Menu/MenuItemLabel';
6
6
  export * from '@theme/components/Menu/MenuLink';
7
7
  export * from '@theme/components/Menu/MenuLinkItem';
8
+ export * from '@theme/components/Menu/MobileMenuGroup';
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import styled from 'styled-components';
3
+
4
+ import { BurgerIcon, CloseIcon } from '@theme/icons';
5
+
6
+ export function BurgerButton({
7
+ isOpen,
8
+ onClick,
9
+ }: {
10
+ isOpen: boolean;
11
+ onClick: () => void;
12
+ }): JSX.Element | null {
13
+ return (
14
+ <Wrapper data-component-name="BurgerButton/BurgerButton" onClick={onClick}>
15
+ {isOpen ? <CloseIcon /> : <BurgerIcon />}
16
+ </Wrapper>
17
+ );
18
+ }
19
+
20
+ const Wrapper = styled.div`
21
+ display: flex;
22
+ align-items: center;
23
+ cursor: pointer;
24
+ user-select: none;
25
+ fill: var(--navbar-text-color);
26
+
27
+ * {
28
+ margin: var(--mobile-menu-burger-button-margin);
29
+ }
30
+
31
+ ${({ theme }) => theme.mediaQueries.medium} {
32
+ display: none;
33
+ }
34
+ `;
@@ -0,0 +1,90 @@
1
+ import React from 'react';
2
+ import styled from 'styled-components';
3
+
4
+ import { useProfileProps } from '@portal/Profile/useProfileProps';
5
+ import { LogoutIcon } from '@theme/icons/LogoutIcon';
6
+ import { AvatarWrapper, ProfileWrapper, Profile } from '@theme/components/Profile/Profile';
7
+ import { useThemeConfig } from '@theme/hooks/useThemeConfig';
8
+ import { useTranslate } from '@portal/hooks';
9
+
10
+ export function MobileUserProfile(): JSX.Element {
11
+ const { userProfile } = useThemeConfig();
12
+ const { userData, handleLogout, loginUrl } = useProfileProps();
13
+ const { translate } = useTranslate();
14
+ const translationKeys = {
15
+ login: 'theme.profile.login',
16
+ };
17
+
18
+ if (!userData?.isAuthenticated) {
19
+ return (
20
+ <MobileProfileWrapper data-component-name="Navbar/MobileUserProfile">
21
+ <LoginButton href={loginUrl} data-cy="login-btn">
22
+ {translate(translationKeys.login, userProfile?.loginLabel || 'Login')}
23
+ </LoginButton>
24
+ </MobileProfileWrapper>
25
+ );
26
+ }
27
+
28
+ return (
29
+ <MobileProfileWrapper data-component-name="Navbar/MobileUserProfile">
30
+ <UserDataWrapper>
31
+ <ProfilePicture>
32
+ <Profile name={userData.name} imageUrl={userData.picture} />
33
+ </ProfilePicture>
34
+ <UserName>{userData.name}</UserName>
35
+ </UserDataWrapper>
36
+ <LogoutButton onClick={() => handleLogout()}>
37
+ <LogoutIcon />
38
+ </LogoutButton>
39
+ </MobileProfileWrapper>
40
+ );
41
+ }
42
+ const LoginButton = styled.a`
43
+ background: var(--mobile-menu-login-button-background);
44
+ border-radius: 6px;
45
+ width: 100%;
46
+ margin: 0;
47
+ padding: 5px 0;
48
+ color: var(--mobile-menu-login-button-color);
49
+ font-size: 14px;
50
+ text-align: center;
51
+ line-height: 22px;
52
+ cursor: pointer;
53
+ text-decoration: none;
54
+ `;
55
+
56
+ const MobileProfileWrapper = styled.div`
57
+ display: flex;
58
+ justify-content: space-between;
59
+ align-items: center;
60
+ width: 100%;
61
+ position: fixed;
62
+ bottom: 0;
63
+ padding: 18px 16px;
64
+ border-top: 1px solid var(--mobile-menu-profile-border-color);
65
+ background: var(--mobile-menu-profile-background);
66
+ `;
67
+
68
+ const UserDataWrapper = styled.div`
69
+ display: flex;
70
+ align-items: center;
71
+ `;
72
+
73
+ const ProfilePicture = styled.div`
74
+ margin-right: 16px;
75
+
76
+ ${AvatarWrapper} {
77
+ margin: 0;
78
+ }
79
+
80
+ ${ProfileWrapper} {
81
+ padding: 0;
82
+ }
83
+ `;
84
+
85
+ const UserName = styled.div``;
86
+
87
+ const LogoutButton = styled.div`
88
+ cursor: pointer;
89
+ user-select: none;
90
+ `;
@@ -4,17 +4,19 @@ import styled, { createGlobalStyle } from 'styled-components';
4
4
  import { NavbarMenu } from '@theme/components/Navbar';
5
5
  import { useMobileMenu } from '@theme/hooks/useMobileMenu';
6
6
  import { isEmptyArray, isPrimitive } from '@theme/utils';
7
- import { MobileNavbarMenuButton } from '@theme/components/Navbar/MobileNavbarMenuButton';
8
7
  import type { NavbarLogoProps } from '@theme/components/NavbarLogo';
9
8
  import { NavbarLogo } from '@theme/components/NavbarLogo';
10
- import { MobileNavbarMenu } from '@theme/components/Navbar/MobileNavbarMenu';
9
+ import { MobileMenu } from '@theme/components/Menu/MobileMenu';
11
10
  import { ColorModeSwitcher } from '@theme/components/ColorModeSwitcher/ColorModeSwitcher';
12
11
  import { useThemeConfig } from '@theme/hooks/useThemeConfig';
13
12
  import { Search } from '@theme/components/Search/Search';
14
13
  import { AuthUserProfile } from '@theme/components/Profile/AuthUserProfile';
15
- import type { LogoConfig, ResolvedConfigLinks } from '@theme/types/portal';
16
- import { useI18n } from '@portal/hooks';
17
- import { LanguagePicker } from '@theme/I18n/LanguagePicker';
14
+ import type { LogoConfig, ResolvedConfigLinks, ResolvedNavItem } from '@theme/types/portal';
15
+ import { useI18n, usePageVersions } from '@portal/hooks';
16
+ import { BurgerButton } from '@theme/components/Navbar/BurgerButton';
17
+ import { useSidebarItems } from '@portal/Sidebar/useSidebarItems';
18
+
19
+ import { LanguagePicker } from '../../I18n/LanguagePicker';
18
20
 
19
21
  const EmptyNavbarHack = createGlobalStyle`
20
22
  :root {
@@ -74,9 +76,14 @@ interface NavbarPresentationalProps extends NavbarLogoProps {
74
76
  menu: ResolvedConfigLinks;
75
77
  hideUserProfile: boolean | string | undefined;
76
78
  changeLanguage: (value: string) => void;
79
+ className?: string;
77
80
  }
78
81
 
79
82
  export function NavbarPresentational(props: NavbarPresentationalProps): JSX.Element | null {
83
+ const { versions = [] } = usePageVersions() || {};
84
+ const activeVersion = versions.find((version) => version?.active);
85
+ const sidebarItems = useSidebarItems(activeVersion);
86
+
80
87
  const {
81
88
  menuItemsExist,
82
89
  closeMobileMenu,
@@ -87,26 +94,48 @@ export function NavbarPresentational(props: NavbarPresentationalProps): JSX.Elem
87
94
  menu,
88
95
  hideUserProfile,
89
96
  changeLanguage,
97
+ className,
90
98
  } = props;
91
99
  return (
92
- <NavbarContainer data-component-name="Navbar/Navbar">
93
- {menuItemsExist && <MobileNavbarMenuButton onClick={openMobileMenu} />}
94
-
95
- {isOpen && (
96
- <MobileNavbarMenu closeMenu={closeMobileMenu} menuItems={menu as ResolvedConfigLinks} />
97
- )}
100
+ <NavbarContainer data-component-name="Navbar/Navbar" className={className}>
101
+ {isOpen && <MobileMenu navItems={menu as ResolvedNavItem[]} sidebarItems={sidebarItems} />}
98
102
  <NavbarRow>
103
+ {menuItemsExist && (
104
+ <BurgerButton onClick={isOpen ? closeMobileMenu : openMobileMenu} isOpen={isOpen} />
105
+ )}
99
106
  <NavbarLogo logo={logo} />
100
107
  <NavbarMenu menuItems={menu as ResolvedConfigLinks} />
101
108
  {hideSearch ? null : <Search />}
102
109
  <LanguagePicker onChangeLanguage={changeLanguage} />
103
- {hideUserProfile ? null : <AuthUserProfile />}
104
- <ColorModeSwitcher />
110
+ {hideUserProfile ? null : (
111
+ <AuthUserProfileWrapper>
112
+ <AuthUserProfile />
113
+ </AuthUserProfileWrapper>
114
+ )}
115
+ <ColorModeSwitcherWrapper isVisible={isOpen}>
116
+ <ColorModeSwitcher />
117
+ </ColorModeSwitcherWrapper>
105
118
  </NavbarRow>
106
119
  </NavbarContainer>
107
120
  );
108
121
  }
109
122
 
123
+ const ColorModeSwitcherWrapper = styled.div<{ isVisible: boolean }>`
124
+ display: ${({ isVisible }) => (isVisible ? 'block' : 'none')};
125
+
126
+ ${({ theme }) => theme.mediaQueries.medium} {
127
+ display: block;
128
+ }
129
+ `;
130
+
131
+ const AuthUserProfileWrapper = styled.div`
132
+ display: none;
133
+
134
+ ${({ theme }) => theme.mediaQueries.medium} {
135
+ display: block;
136
+ }
137
+ `;
138
+
110
139
  export const NavbarContainer = styled.nav`
111
140
  --text-color: var(--navbar-text-color);
112
141
 
@@ -119,7 +148,7 @@ export const NavbarContainer = styled.nav`
119
148
  font-size: 0.875rem;
120
149
  position: sticky;
121
150
  top: 0;
122
- z-index: 200;
151
+ z-index: var(--z-index-raised);
123
152
  padding: var(--navbar-item-padding-vertical) var(--navbar-item-padding-horizontal);
124
153
  background: var(--navbar-background-color);
125
154
  font-family: var(--navbar-item-font-family);
@@ -7,12 +7,13 @@ import { useTranslate } from '@portal/hooks';
7
7
 
8
8
  interface NavbarDropdownProps {
9
9
  items: ResolvedNavLinkItem[];
10
+ className?: string;
10
11
  }
11
12
 
12
- export function NavbarDropdown({ items }: NavbarDropdownProps): JSX.Element {
13
+ export function NavbarDropdown({ items, className }: NavbarDropdownProps): JSX.Element {
13
14
  const { translate } = useTranslate();
14
15
  return (
15
- <DropdownWrapper data-component-name="Navbar/NavbarDropdown">
16
+ <DropdownWrapper data-component-name="Navbar/NavbarDropdown" className={className}>
16
17
  {items.map((item, index) => (
17
18
  <div key={`${item.label}_${index}`}>
18
19
  <Link to={item.link}>{translate(item.labelTranslationKey, item.label)}</Link>
@@ -5,13 +5,19 @@ import { NavbarItem } from '@theme/components/Navbar/NavbarItem';
5
5
  import { isPrimitive } from '@theme/utils';
6
6
  import type { ResolvedConfigLinks, ResolvedNavItem } from '@theme/types/portal';
7
7
 
8
- export function NavbarMenu({ menuItems }: { menuItems: ResolvedConfigLinks }): JSX.Element | null {
8
+ export function NavbarMenu({
9
+ menuItems,
10
+ className,
11
+ }: {
12
+ menuItems: ResolvedConfigLinks;
13
+ className?: string;
14
+ }): JSX.Element | null {
9
15
  if (isPrimitive(menuItems)) {
10
16
  return null;
11
17
  }
12
18
 
13
19
  return (
14
- <NavItemsContainer data-component-name="Navbar/NavbarMenu">
20
+ <NavItemsContainer data-component-name="Navbar/NavbarMenu" className={className}>
15
21
  {(menuItems as ResolvedNavItem[]).map((navItem, index) => {
16
22
  return (
17
23
  <NavbarItem key={`${navItem.label}_${index}`} data-cy={navItem.label} navItem={navItem} />
@@ -4,14 +4,22 @@ import styled from 'styled-components';
4
4
  import { Link } from '@portal/Link';
5
5
  import type { LogoConfig } from '@theme/types/portal';
6
6
 
7
- export type NavbarLogoProps = { logo: Pick<LogoConfig, 'image' | 'link' | 'altText'> };
7
+ export type NavbarLogoProps = {
8
+ logo: Pick<LogoConfig, 'image' | 'link' | 'altText'>;
9
+ className?: string;
10
+ };
8
11
 
9
- export function NavbarLogo({ logo }: NavbarLogoProps): JSX.Element | null {
12
+ export function NavbarLogo({ logo, className }: NavbarLogoProps): JSX.Element | null {
10
13
  if (!logo.image) {
11
14
  return null;
12
15
  }
13
16
  const img = (
14
- <NavLogo src={logo.image} alt={logo.altText} data-component-name="NavbarLogo/NavbarLogo" />
17
+ <NavLogo
18
+ className={className}
19
+ src={logo.image}
20
+ alt={logo.altText}
21
+ data-component-name="NavbarLogo/NavbarLogo"
22
+ />
15
23
  );
16
24
  return logo.link ? <Link to={logo.link}>{img}</Link> : img;
17
25
  }
@@ -1,13 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import styled from 'styled-components';
3
3
 
4
- import type { TryItSecurityAppsProps } from './TryItSecurityApps';
5
-
4
+ import type { TryItSecurityAppsProps } from '@theme/components/OpenApiDocs/TryItSecurityApps';
6
5
  import { Button } from '@theme/components/Button/Button';
7
6
  import { usePreloadHistory } from '@portal/usePreloadHistory';
8
7
  import { usePageData } from '@portal/hooks/usePageData';
9
-
10
- import { Dropdown } from './Dropdown';
8
+ import { Dropdown } from '@theme/components/OpenApiDocs/Dropdown';
11
9
 
12
10
  export function DevOnboardingTryItSecurity(props: TryItSecurityAppsProps) {
13
11
  const apiId = (props as any).apiId;
@@ -8,9 +8,10 @@ import { useTranslate } from '@portal/hooks';
8
8
 
9
9
  interface NextPageType {
10
10
  nextPage?: ResolvedNavItemWithLink | null;
11
+ className?: string;
11
12
  }
12
13
 
13
- export function NextButton({ nextPage }: NextPageType): JSX.Element {
14
+ export function NextButton({ nextPage, className }: NextPageType): JSX.Element {
14
15
  const { navigation } = useThemeConfig();
15
16
  const { translate } = useTranslate();
16
17
 
@@ -33,6 +34,7 @@ export function NextButton({ nextPage }: NextPageType): JSX.Element {
33
34
  to={nextPage.link}
34
35
  data-component-name="PageNavigation/NextPageLink"
35
36
  data-translation-key={translationKey}
37
+ extraClass={className}
36
38
  >
37
39
  {text}
38
40
  </StyledButton>
@@ -9,9 +9,14 @@ import type { ResolvedNavItemWithLink } from '@theme/types/portal';
9
9
  interface PageNavigationType {
10
10
  nextPage?: ResolvedNavItemWithLink | null;
11
11
  prevPage?: ResolvedNavItemWithLink | null;
12
+ className?: string;
12
13
  }
13
14
 
14
- export function PageNavigation({ nextPage, prevPage }: PageNavigationType): JSX.Element | null {
15
+ export function PageNavigation({
16
+ nextPage,
17
+ prevPage,
18
+ className,
19
+ }: PageNavigationType): JSX.Element | null {
15
20
  const { navigation } = useThemeConfig();
16
21
 
17
22
  if (navigation?.previousButton?.hide && navigation?.nextButton?.hide) {
@@ -19,7 +24,10 @@ export function PageNavigation({ nextPage, prevPage }: PageNavigationType): JSX.
19
24
  }
20
25
 
21
26
  return (
22
- <PageNavigationWrapper data-component-name="PageNavigation/PageNavigation">
27
+ <PageNavigationWrapper
28
+ data-component-name="PageNavigation/PageNavigation"
29
+ className={className}
30
+ >
23
31
  <PreviousButton prevPage={prevPage} />
24
32
  <NextButton nextPage={nextPage} />
25
33
  </PageNavigationWrapper>
@@ -8,9 +8,10 @@ import { useTranslate } from '@portal/hooks';
8
8
 
9
9
  interface PreviousPageType {
10
10
  prevPage?: ResolvedNavItemWithLink | null;
11
+ className?: string;
11
12
  }
12
13
 
13
- export function PreviousButton({ prevPage }: PreviousPageType): JSX.Element {
14
+ export function PreviousButton({ prevPage, className }: PreviousPageType): JSX.Element {
14
15
  const { navigation } = useThemeConfig();
15
16
  const { translate } = useTranslate();
16
17
 
@@ -36,6 +37,7 @@ export function PreviousButton({ prevPage }: PreviousPageType): JSX.Element {
36
37
  to={prevPage.link}
37
38
  data-component-name="PageNavigation/PreviousPageLink"
38
39
  data-translation-key={translationKey}
40
+ extraClass={className}
39
41
  >
40
42
  {text}
41
43
  </StyledButton>
@@ -18,8 +18,9 @@ interface PanelBodyProps {
18
18
  hidden?: boolean;
19
19
  }
20
20
 
21
- export const PanelBody = styled.div.attrs(() => ({
21
+ export const PanelBody = styled.div.attrs<{ className?: string }>(({ className }) => ({
22
22
  'data-component-name': 'Panel/PanelBody',
23
+ className,
23
24
  }))<PanelBodyProps>`
24
25
  ${({ animate }) => animate && showPanelAnimation};
25
26
  ${({ hidden }) => hidden && 'visibility: hidden'};