@redocly/theme 0.18.3 → 0.18.4-patch.1

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 (467) hide show
  1. package/lib/components/Breadcrumbs/Breadcrumb.js +2 -5
  2. package/lib/components/Breadcrumbs/Breadcrumbs.js +6 -2
  3. package/lib/components/Breadcrumbs/index.d.ts +1 -0
  4. package/lib/components/Breadcrumbs/index.js +1 -0
  5. package/lib/components/Breadcrumbs/styledVariables.d.ts +1 -0
  6. package/lib/components/Breadcrumbs/styledVariables.js +20 -0
  7. package/lib/components/Button/Button.d.ts +6 -3
  8. package/lib/components/Button/Button.js +41 -41
  9. package/lib/components/Button/index.d.ts +1 -0
  10. package/lib/components/Button/index.js +1 -0
  11. package/lib/components/Button/styledVariables.d.ts +1 -0
  12. package/lib/components/Button/styledVariables.js +107 -0
  13. package/lib/components/Catalog/Catalog.d.ts +6 -0
  14. package/lib/components/Catalog/Catalog.js +112 -102
  15. package/lib/components/Catalog/CatalogCard.js +91 -58
  16. package/lib/components/Catalog/index.d.ts +4 -3
  17. package/lib/components/Catalog/index.js +4 -3
  18. package/lib/components/Catalog/styledVariables.d.ts +1 -0
  19. package/lib/components/Catalog/styledVariables.js +95 -0
  20. package/lib/components/CodeBlock/CodeBlockContainer.js +38 -10
  21. package/lib/components/CodeBlock/CodeBlockControlButton.d.ts +3 -4
  22. package/lib/components/CodeBlock/CodeBlockControlButton.js +5 -19
  23. package/lib/components/CodeBlock/CodeBlockControls.js +8 -5
  24. package/lib/components/CodeBlock/index.d.ts +1 -0
  25. package/lib/components/CodeBlock/index.js +1 -0
  26. package/lib/components/CodeBlock/styledVariables.d.ts +1 -0
  27. package/lib/components/CodeBlock/styledVariables.js +92 -0
  28. package/lib/components/ColorModeSwitcher/ColorModeSwitcher.js +0 -1
  29. package/lib/components/Dropdown/Dropdown.d.ts +9 -3
  30. package/lib/components/Dropdown/Dropdown.js +7 -4
  31. package/lib/components/Dropdown/index.d.ts +1 -0
  32. package/lib/components/Dropdown/index.js +1 -0
  33. package/lib/components/Dropdown/styledVariables.d.ts +1 -0
  34. package/lib/components/Dropdown/styledVariables.js +30 -0
  35. package/lib/components/EditPageButton/EditPageButton.d.ts +1 -3
  36. package/lib/components/EditPageButton/EditPageButton.js +17 -8
  37. package/lib/components/Feedback/Comment.js +5 -0
  38. package/lib/components/Feedback/Rating.js +5 -1
  39. package/lib/components/Feedback/Reasons.js +6 -1
  40. package/lib/components/Feedback/Sentiment.js +5 -0
  41. package/lib/components/Feedback/Thumbs.js +4 -4
  42. package/lib/components/Filter/Filter.d.ts +3 -1
  43. package/lib/components/Filter/Filter.js +113 -80
  44. package/lib/components/Filter/FilterContent.d.ts +13 -0
  45. package/lib/components/Filter/FilterContent.js +60 -0
  46. package/lib/components/Filter/FilterPopover.d.ts +13 -0
  47. package/lib/components/Filter/FilterPopover.js +109 -0
  48. package/lib/components/Filter/FilterTag.d.ts +7 -0
  49. package/lib/components/Filter/FilterTag.js +33 -0
  50. package/lib/components/Filter/FilterTags.d.ts +7 -0
  51. package/lib/components/Filter/FilterTags.js +29 -0
  52. package/lib/components/Filter/index.d.ts +2 -0
  53. package/lib/components/Filter/index.js +2 -0
  54. package/lib/components/Filter/styledVariables.d.ts +1 -0
  55. package/lib/components/Filter/styledVariables.js +112 -0
  56. package/lib/components/Footer/CustomFooterNavItem.js +1 -1
  57. package/lib/components/Footer/Footer.d.ts +4 -3
  58. package/lib/components/Footer/Footer.js +28 -10
  59. package/lib/components/Footer/FooterColumn.d.ts +3 -3
  60. package/lib/components/Footer/FooterColumn.js +57 -63
  61. package/lib/components/Footer/FooterColumns.js +6 -4
  62. package/lib/components/Footer/FooterCopyright.js +11 -6
  63. package/lib/components/Footer/index.d.ts +1 -0
  64. package/lib/components/Footer/index.js +1 -0
  65. package/lib/components/Footer/styledVariables.d.ts +1 -0
  66. package/lib/components/Footer/styledVariables.js +61 -0
  67. package/lib/components/Image/Image.d.ts +9 -0
  68. package/lib/components/Image/Image.js +31 -0
  69. package/lib/components/Image/index.d.ts +1 -0
  70. package/lib/components/{Tags → Image}/index.js +1 -1
  71. package/lib/components/JsonViewer/JsonViewer.js +2 -2
  72. package/lib/components/LastUpdated/LastUpdated.js +1 -0
  73. package/lib/components/LastUpdated/index.d.ts +1 -0
  74. package/lib/components/{OperationBadge → LastUpdated}/index.js +1 -1
  75. package/lib/components/LastUpdated/styledVariables.d.ts +1 -0
  76. package/lib/components/LastUpdated/styledVariables.js +11 -0
  77. package/lib/components/Markdown/Admonition.js +12 -9
  78. package/lib/components/Markdown/MarkdownLayout.d.ts +0 -2
  79. package/lib/components/Markdown/MarkdownLayout.js +1 -6
  80. package/lib/components/Markdown/MarkdownWrapper.js +2 -4
  81. package/lib/components/Markdown/Mermaid.js +4 -1
  82. package/lib/components/Markdown/index.d.ts +1 -0
  83. package/lib/components/Markdown/index.js +1 -0
  84. package/lib/components/Markdown/styledVariables.d.ts +3 -0
  85. package/lib/components/Markdown/styledVariables.js +231 -0
  86. package/lib/components/Menu/Menu.js +5 -7
  87. package/lib/components/Menu/MenuGroup.js +12 -7
  88. package/lib/components/Menu/MenuItem.js +1 -1
  89. package/lib/components/Menu/MenuItemLabel.js +9 -13
  90. package/lib/components/Menu/MobileMenu.js +20 -25
  91. package/lib/components/Menu/MobileMenuGroup.js +1 -1
  92. package/lib/components/Menu/index.d.ts +1 -0
  93. package/lib/components/Menu/index.js +1 -0
  94. package/lib/components/Menu/styledVariables.d.ts +2 -0
  95. package/lib/components/Menu/styledVariables.js +101 -0
  96. package/lib/components/Navbar/Navbar.js +20 -13
  97. package/lib/components/Navbar/NavbarItem.d.ts +1 -1
  98. package/lib/components/Navbar/NavbarItem.js +18 -6
  99. package/lib/components/Navbar/NavbarMenu.js +2 -2
  100. package/lib/components/Navbar/index.d.ts +1 -0
  101. package/lib/components/Navbar/index.js +1 -0
  102. package/lib/components/Navbar/styledVariables.d.ts +1 -0
  103. package/lib/components/Navbar/styledVariables.js +42 -0
  104. package/lib/components/NavbarLogo/NavbarLogo.d.ts +4 -1
  105. package/lib/components/NavbarLogo/NavbarLogo.js +13 -5
  106. package/lib/components/NavbarLogo/index.d.ts +1 -0
  107. package/lib/components/NavbarLogo/index.js +1 -0
  108. package/lib/components/NavbarLogo/styledVariables.d.ts +1 -0
  109. package/lib/components/NavbarLogo/styledVariables.js +18 -0
  110. package/lib/components/OpenApiDocs/DevOnboardingTryItSecurity.js +2 -2
  111. package/lib/components/OpenApiDocs/Dropdown.js +3 -3
  112. package/lib/components/PageNavigation/NextButton.js +1 -1
  113. package/lib/components/PageNavigation/PreviousButton.js +1 -1
  114. package/lib/components/Panel/PanelHeader.js +2 -0
  115. package/lib/components/Panel/PanelHeaderTitle.js +0 -4
  116. package/lib/components/Panel/index.d.ts +1 -0
  117. package/lib/components/Panel/index.js +1 -0
  118. package/lib/components/Panel/styledVariables.d.ts +2 -0
  119. package/lib/components/Panel/styledVariables.js +481 -0
  120. package/lib/components/Product/ProductPicker.js +22 -9
  121. package/lib/components/Product/index.d.ts +1 -0
  122. package/lib/components/Product/index.js +1 -0
  123. package/lib/components/Product/styledVariables.d.ts +2 -0
  124. package/lib/components/Product/styledVariables.js +42 -0
  125. package/lib/components/Profile/LoginLink.js +1 -2
  126. package/lib/components/{Navbar → Profile}/MobileUserProfile.js +12 -24
  127. package/lib/components/Profile/Profile.js +3 -22
  128. package/lib/components/Profile/UserProfile.js +21 -9
  129. package/lib/components/Profile/UserProfileData.d.ts +9 -0
  130. package/lib/components/Profile/UserProfileData.js +35 -0
  131. package/lib/components/Profile/index.d.ts +1 -0
  132. package/lib/components/Profile/index.js +15 -0
  133. package/lib/components/Profile/styledVariables.d.ts +2 -0
  134. package/lib/components/Profile/styledVariables.js +55 -0
  135. package/lib/components/Search/CancelSearch.js +2 -14
  136. package/lib/components/Search/ProductTag.js +8 -8
  137. package/lib/components/Search/RecentSearches.js +5 -5
  138. package/lib/components/Search/Search.js +0 -2
  139. package/lib/components/Search/SearchIcon.js +2 -2
  140. package/lib/components/Search/SearchItem.js +4 -4
  141. package/lib/components/Search/SearchTrigger.js +4 -5
  142. package/lib/components/Search/ShortcutKey.js +1 -5
  143. package/lib/components/Search/SuggestedPages.js +3 -3
  144. package/lib/components/Search/index.d.ts +1 -0
  145. package/lib/components/Search/index.js +1 -0
  146. package/lib/components/Search/styledVariables.d.ts +1 -0
  147. package/lib/components/Search/styledVariables.js +98 -0
  148. package/lib/components/Select/Select.d.ts +21 -9
  149. package/lib/components/Select/Select.js +27 -17
  150. package/lib/components/Select/index.d.ts +1 -0
  151. package/lib/components/Select/index.js +1 -0
  152. package/lib/components/Select/styledVariables.d.ts +1 -0
  153. package/lib/components/Select/styledVariables.js +34 -0
  154. package/lib/components/Separator/Separator.js +11 -3
  155. package/lib/components/Separator/SeparatorItem.js +6 -9
  156. package/lib/components/Separator/SeparatorLine.js +7 -3
  157. package/lib/components/Sidebar/ApiCallItem.d.ts +2 -6
  158. package/lib/components/Sidebar/ApiCallItem.js +17 -13
  159. package/lib/components/Sidebar/FooterWrapper.js +3 -4
  160. package/lib/components/Sidebar/HeaderWrapper.js +3 -3
  161. package/lib/components/Sidebar/VersionPicker.d.ts +3 -3
  162. package/lib/components/Sidebar/VersionPicker.js +6 -4
  163. package/lib/components/Sidebar/index.d.ts +1 -0
  164. package/lib/components/Sidebar/index.js +1 -0
  165. package/lib/components/Sidebar/styledVariables.d.ts +2 -0
  166. package/lib/components/Sidebar/styledVariables.js +216 -0
  167. package/lib/components/Sidebar/types.d.ts +1 -0
  168. package/lib/components/SidebarActions/CollapseSidebarButton.js +41 -1
  169. package/lib/components/SidebarActions/styled.js +29 -21
  170. package/lib/components/TableOfContent/TableOfContent.js +3 -2
  171. package/lib/components/TableOfContent/index.d.ts +1 -0
  172. package/lib/components/TableOfContent/index.js +1 -0
  173. package/lib/components/TableOfContent/styledVariables.d.ts +1 -0
  174. package/lib/components/TableOfContent/styledVariables.js +47 -0
  175. package/lib/components/Tabs/Tab.js +1 -1
  176. package/lib/components/Tabs/Tabs.js +1 -1
  177. package/lib/components/Tag/Tag.d.ts +18 -0
  178. package/lib/components/Tag/Tag.js +45 -0
  179. package/lib/components/Tag/index.d.ts +2 -0
  180. package/lib/components/Tag/index.js +19 -0
  181. package/lib/components/Tag/styledVariables.d.ts +1 -0
  182. package/lib/components/Tag/styledVariables.js +140 -0
  183. package/lib/components/Tiles/ThinTile.js +7 -5
  184. package/lib/components/Tiles/TileHeader.js +1 -1
  185. package/lib/components/Tiles/TileText.js +1 -1
  186. package/lib/components/Tiles/WideTile.js +10 -8
  187. package/lib/components/Tooltip/index.d.ts +1 -0
  188. package/lib/components/Tooltip/index.js +1 -0
  189. package/lib/components/Tooltip/styledVariables.d.ts +1 -0
  190. package/lib/components/Tooltip/styledVariables.js +21 -0
  191. package/lib/components/Typography/SectionHeader.js +2 -2
  192. package/lib/components/Typography/Typography.js +1 -1
  193. package/lib/components/index.d.ts +1 -2
  194. package/lib/components/index.js +1 -2
  195. package/lib/config.d.ts +155 -154
  196. package/lib/config.js +39 -28
  197. package/lib/globalStyle.js +602 -1983
  198. package/lib/hooks/useMobileMenu.js +5 -6
  199. package/lib/hooks/useModalScrollLock.d.ts +1 -0
  200. package/lib/hooks/useModalScrollLock.js +16 -0
  201. package/lib/i18n/LanguagePicker.d.ts +9 -0
  202. package/lib/{I18n → i18n}/LanguagePicker.js +27 -12
  203. package/lib/i18n/index.d.ts +2 -0
  204. package/lib/i18n/index.js +21 -0
  205. package/lib/i18n/styledVariables.d.ts +1 -0
  206. package/lib/i18n/styledVariables.js +40 -0
  207. package/lib/icons/AlertIcon/AlertIcon.js +0 -5
  208. package/lib/icons/ArrowIcon/ArrowIcon.js +1 -1
  209. package/lib/icons/CheckboxIcon/CheckboxIcon.d.ts +6 -0
  210. package/lib/icons/CheckboxIcon/CheckboxIcon.js +28 -0
  211. package/lib/icons/CheckboxIcon/index.d.ts +1 -0
  212. package/lib/icons/CheckboxIcon/index.js +6 -0
  213. package/lib/icons/CollapseIcon/CollapseIcon.d.ts +1 -1
  214. package/lib/icons/CollapseIcon/CollapseIcon.js +5 -5
  215. package/lib/icons/ColorModeIcon/ColorModeIcon.js +1 -1
  216. package/lib/icons/CopyIcon/CopyIcon.d.ts +1 -2
  217. package/lib/icons/CopyIcon/CopyIcon.js +4 -4
  218. package/lib/icons/DeselectIcon/DeselectIcon.d.ts +1 -1
  219. package/lib/icons/DeselectIcon/DeselectIcon.js +5 -5
  220. package/lib/icons/EditIcon/EditIcon.d.ts +6 -0
  221. package/lib/icons/EditIcon/EditIcon.js +18 -0
  222. package/lib/icons/EditIcon/index.d.ts +1 -0
  223. package/lib/icons/EditIcon/index.js +18 -0
  224. package/lib/icons/ErrorIcon/ErrorIcon.d.ts +4 -0
  225. package/lib/icons/ErrorIcon/ErrorIcon.js +14 -0
  226. package/lib/icons/ErrorIcon/index.d.ts +1 -0
  227. package/lib/icons/ErrorIcon/index.js +18 -0
  228. package/lib/icons/ExpandIcon/ExpandIcon.d.ts +1 -2
  229. package/lib/icons/ExpandIcon/ExpandIcon.js +5 -5
  230. package/lib/icons/ExternalIcon/ExternalIcon.js +3 -3
  231. package/lib/icons/FileIcon/FileIcon.d.ts +1 -2
  232. package/lib/icons/FileIcon/FileIcon.js +2 -2
  233. package/lib/icons/LanguageIcon/LanguageIcon.d.ts +4 -0
  234. package/lib/icons/LanguageIcon/LanguageIcon.js +14 -0
  235. package/lib/icons/LanguageIcon/index.d.ts +1 -0
  236. package/lib/icons/LanguageIcon/index.js +18 -0
  237. package/lib/icons/PlusIcon/PlusIcon.d.ts +5 -0
  238. package/lib/icons/PlusIcon/PlusIcon.js +16 -0
  239. package/lib/icons/PlusIcon/index.d.ts +1 -0
  240. package/lib/icons/PlusIcon/index.js +18 -0
  241. package/lib/icons/PointingArrowIcon/PointingArrowIcon.d.ts +4 -0
  242. package/lib/icons/PointingArrowIcon/PointingArrowIcon.js +15 -0
  243. package/lib/icons/PointingArrowIcon/index.d.ts +1 -0
  244. package/lib/icons/PointingArrowIcon/index.js +18 -0
  245. package/lib/icons/ReportIcon/ReportIcon.d.ts +1 -2
  246. package/lib/icons/ReportIcon/ReportIcon.js +3 -3
  247. package/lib/icons/RocketIcon/RocketIcon.d.ts +7 -0
  248. package/lib/icons/RocketIcon/RocketIcon.js +15 -0
  249. package/lib/icons/RocketIcon/index.d.ts +1 -0
  250. package/lib/icons/RocketIcon/index.js +18 -0
  251. package/lib/icons/SelectIcon/SelectIcon.d.ts +1 -2
  252. package/lib/icons/SelectIcon/SelectIcon.js +5 -5
  253. package/lib/icons/index.d.ts +6 -0
  254. package/lib/icons/index.js +6 -0
  255. package/lib/index.d.ts +1 -1
  256. package/lib/index.js +1 -1
  257. package/lib/layouts/Forbidden.js +4 -0
  258. package/lib/layouts/NotFound.js +4 -0
  259. package/lib/mocks/hooks/index.js +0 -1
  260. package/lib/types/portal/src/shared/types/catalog.d.ts +5 -1
  261. package/lib/types/portal/src/shared/types/nav.d.ts +5 -0
  262. package/lib/ui/ArrowBack.js +0 -1
  263. package/lib/ui/Burger.js +1 -1
  264. package/lib/ui/Dropdown.js +7 -7
  265. package/lib/ui/Highlight.d.ts +1 -1
  266. package/lib/ui/Highlight.js +1 -1
  267. package/lib/ui/Jumbotron.js +1 -1
  268. package/lib/ui/darkColors.js +217 -84
  269. package/lib/utils/css-variables.js +1 -1
  270. package/lib/utils/index.d.ts +1 -0
  271. package/lib/utils/index.js +1 -0
  272. package/lib/utils/tags-parser.d.ts +1 -0
  273. package/lib/utils/tags-parser.js +10 -0
  274. package/package.json +1 -1
  275. package/src/components/Breadcrumbs/Breadcrumb.tsx +2 -5
  276. package/src/components/Breadcrumbs/Breadcrumbs.tsx +6 -2
  277. package/src/components/Breadcrumbs/index.ts +1 -0
  278. package/src/components/Breadcrumbs/styledVariables.ts +17 -0
  279. package/src/components/Button/Button.tsx +53 -47
  280. package/src/components/Button/index.ts +1 -0
  281. package/src/components/Button/styledVariables.ts +104 -0
  282. package/src/components/Catalog/Catalog.tsx +140 -120
  283. package/src/components/Catalog/CatalogCard.tsx +108 -58
  284. package/src/components/Catalog/index.ts +4 -0
  285. package/src/components/Catalog/styledVariables.ts +92 -0
  286. package/src/components/CodeBlock/CodeBlockContainer.tsx +17 -9
  287. package/src/components/CodeBlock/CodeBlockControlButton.tsx +6 -19
  288. package/src/components/CodeBlock/CodeBlockControls.tsx +8 -5
  289. package/src/components/CodeBlock/index.ts +1 -0
  290. package/src/components/CodeBlock/styledVariables.ts +89 -0
  291. package/src/components/ColorModeSwitcher/ColorModeSwitcher.tsx +0 -1
  292. package/src/components/Dropdown/Dropdown.tsx +14 -5
  293. package/src/components/Dropdown/index.ts +1 -0
  294. package/src/components/Dropdown/styledVariables.ts +27 -0
  295. package/src/components/EditPageButton/EditPageButton.tsx +24 -10
  296. package/src/components/Feedback/Comment.tsx +5 -0
  297. package/src/components/Feedback/Rating.tsx +5 -1
  298. package/src/components/Feedback/Reasons.tsx +6 -1
  299. package/src/components/Feedback/Sentiment.tsx +5 -0
  300. package/src/components/Feedback/Thumbs.tsx +4 -4
  301. package/src/components/Filter/Filter.tsx +150 -94
  302. package/src/components/Filter/FilterContent.tsx +95 -0
  303. package/src/components/Filter/FilterPopover.tsx +150 -0
  304. package/src/components/Filter/FilterTag.tsx +37 -0
  305. package/src/components/Filter/FilterTags.tsx +39 -0
  306. package/src/components/Filter/index.ts +2 -0
  307. package/src/components/Filter/styledVariables.ts +109 -0
  308. package/src/components/Footer/CustomFooterNavItem.tsx +1 -1
  309. package/src/components/Footer/Footer.tsx +32 -10
  310. package/src/components/Footer/FooterColumn.tsx +84 -63
  311. package/src/components/Footer/FooterColumns.tsx +6 -4
  312. package/src/components/Footer/FooterCopyright.tsx +13 -7
  313. package/src/components/Footer/index.ts +1 -0
  314. package/src/components/Footer/styledVariables.ts +58 -0
  315. package/src/components/Image/Image.tsx +47 -0
  316. package/src/components/Image/index.ts +1 -0
  317. package/src/components/JsonViewer/JsonViewer.tsx +2 -2
  318. package/src/components/LastUpdated/LastUpdated.tsx +1 -2
  319. package/src/components/LastUpdated/index.ts +1 -0
  320. package/src/components/LastUpdated/styledVariables.ts +8 -0
  321. package/src/components/Markdown/Admonition.tsx +13 -8
  322. package/src/components/Markdown/MarkdownLayout.tsx +2 -15
  323. package/src/components/Markdown/MarkdownWrapper.tsx +2 -4
  324. package/src/components/Markdown/Mermaid.tsx +4 -1
  325. package/src/components/Markdown/index.ts +1 -0
  326. package/src/components/Markdown/styledVariables.ts +230 -0
  327. package/src/components/Menu/Menu.tsx +5 -7
  328. package/src/components/Menu/MenuGroup.tsx +15 -7
  329. package/src/components/Menu/MenuItem.tsx +1 -1
  330. package/src/components/Menu/MenuItemLabel.tsx +9 -13
  331. package/src/components/Menu/MobileMenu.tsx +20 -25
  332. package/src/components/Menu/MobileMenuGroup.tsx +1 -1
  333. package/src/components/Menu/index.ts +1 -0
  334. package/src/components/Menu/styledVariables.ts +99 -0
  335. package/src/components/Navbar/Navbar.tsx +20 -13
  336. package/src/components/Navbar/NavbarItem.tsx +18 -4
  337. package/src/components/Navbar/NavbarMenu.tsx +2 -2
  338. package/src/components/Navbar/index.ts +1 -0
  339. package/src/components/Navbar/styledVariables.ts +39 -0
  340. package/src/components/NavbarLogo/NavbarLogo.tsx +24 -11
  341. package/src/components/NavbarLogo/index.ts +1 -0
  342. package/src/components/NavbarLogo/styledVariables.ts +15 -0
  343. package/src/components/OpenApiDocs/DevOnboardingTryItSecurity.tsx +1 -2
  344. package/src/components/OpenApiDocs/Dropdown.tsx +3 -3
  345. package/src/components/PageNavigation/NextButton.tsx +0 -1
  346. package/src/components/PageNavigation/PreviousButton.tsx +0 -1
  347. package/src/components/Panel/PanelHeader.ts +2 -0
  348. package/src/components/Panel/PanelHeaderTitle.ts +0 -4
  349. package/src/components/Panel/index.ts +1 -0
  350. package/src/components/Panel/styledVariables.ts +479 -0
  351. package/src/components/Product/ProductPicker.tsx +23 -17
  352. package/src/components/Product/index.ts +1 -0
  353. package/src/components/Product/styledVariables.ts +40 -0
  354. package/src/components/Profile/LoginLink.tsx +1 -2
  355. package/src/components/{Navbar → Profile}/MobileUserProfile.tsx +12 -29
  356. package/src/components/Profile/Profile.tsx +1 -24
  357. package/src/components/Profile/UserProfile.tsx +20 -8
  358. package/src/components/Profile/UserProfileData.tsx +40 -0
  359. package/src/components/Profile/index.ts +1 -0
  360. package/src/components/Profile/styledVariables.ts +53 -0
  361. package/src/components/Search/CancelSearch.tsx +2 -15
  362. package/src/components/Search/ProductTag.tsx +8 -8
  363. package/src/components/Search/RecentSearches.tsx +5 -5
  364. package/src/components/Search/Search.tsx +0 -2
  365. package/src/components/Search/SearchIcon.tsx +10 -5
  366. package/src/components/Search/SearchItem.tsx +4 -4
  367. package/src/components/Search/SearchTrigger.tsx +4 -5
  368. package/src/components/Search/ShortcutKey.tsx +1 -5
  369. package/src/components/Search/SuggestedPages.tsx +3 -3
  370. package/src/components/Search/index.ts +1 -0
  371. package/src/components/Search/styledVariables.ts +95 -0
  372. package/src/components/Select/Select.tsx +65 -31
  373. package/src/components/Select/index.ts +1 -0
  374. package/src/components/Select/styledVariables.ts +31 -0
  375. package/src/components/Separator/Separator.tsx +17 -3
  376. package/src/components/Separator/SeparatorItem.tsx +6 -9
  377. package/src/components/Separator/SeparatorLine.tsx +7 -3
  378. package/src/components/Sidebar/ApiCallItem.tsx +17 -13
  379. package/src/components/Sidebar/FooterWrapper.tsx +3 -4
  380. package/src/components/Sidebar/HeaderWrapper.tsx +3 -3
  381. package/src/components/Sidebar/VersionPicker.tsx +6 -4
  382. package/src/components/Sidebar/index.ts +1 -0
  383. package/src/components/Sidebar/styledVariables.ts +214 -0
  384. package/src/components/Sidebar/types.ts +1 -0
  385. package/src/components/SidebarActions/CollapseSidebarButton.tsx +22 -2
  386. package/src/components/SidebarActions/styled.tsx +29 -30
  387. package/src/components/TableOfContent/TableOfContent.tsx +3 -2
  388. package/src/components/TableOfContent/index.ts +1 -0
  389. package/src/components/TableOfContent/styledVariables.ts +44 -0
  390. package/src/components/Tabs/Tab.tsx +1 -1
  391. package/src/components/Tabs/Tabs.tsx +1 -1
  392. package/src/components/Tag/Tag.tsx +71 -0
  393. package/src/components/Tag/index.ts +2 -0
  394. package/src/components/Tag/styledVariables.ts +137 -0
  395. package/src/components/Tiles/ThinTile.tsx +7 -5
  396. package/src/components/Tiles/TileHeader.ts +1 -1
  397. package/src/components/Tiles/TileText.tsx +1 -1
  398. package/src/components/Tiles/WideTile.tsx +10 -8
  399. package/src/components/Tooltip/index.ts +1 -0
  400. package/src/components/Tooltip/styledVariables.ts +18 -0
  401. package/src/components/Typography/SectionHeader.ts +2 -2
  402. package/src/components/Typography/Typography.ts +1 -1
  403. package/src/components/index.ts +1 -2
  404. package/src/config.ts +44 -29
  405. package/src/globalStyle.ts +597 -1999
  406. package/src/hooks/useMobileMenu.ts +3 -4
  407. package/src/hooks/useModalScrollLock.ts +12 -0
  408. package/src/{I18n → i18n}/LanguagePicker.tsx +48 -21
  409. package/src/i18n/index.ts +2 -0
  410. package/src/i18n/styledVariables.ts +37 -0
  411. package/src/icons/AlertIcon/AlertIcon.tsx +0 -5
  412. package/src/icons/ArrowIcon/ArrowIcon.tsx +1 -1
  413. package/src/icons/CheckboxIcon/CheckboxIcon.tsx +64 -0
  414. package/src/icons/CheckboxIcon/index.ts +1 -0
  415. package/src/icons/CollapseIcon/CollapseIcon.tsx +5 -5
  416. package/src/icons/ColorModeIcon/ColorModeIcon.tsx +1 -1
  417. package/src/icons/CopyIcon/CopyIcon.tsx +4 -5
  418. package/src/icons/DeselectIcon/DeselectIcon.tsx +5 -5
  419. package/src/icons/EditIcon/EditIcon.tsx +30 -0
  420. package/src/icons/EditIcon/index.ts +1 -0
  421. package/src/icons/ErrorIcon/ErrorIcon.tsx +15 -0
  422. package/src/icons/ErrorIcon/index.ts +1 -0
  423. package/src/icons/ExpandIcon/ExpandIcon.tsx +5 -6
  424. package/src/icons/ExternalIcon/ExternalIcon.tsx +4 -4
  425. package/src/icons/FileIcon/FileIcon.tsx +2 -3
  426. package/src/icons/LanguageIcon/LanguageIcon.tsx +15 -0
  427. package/src/icons/LanguageIcon/index.ts +1 -0
  428. package/src/icons/PlusIcon/PlusIcon.tsx +25 -0
  429. package/src/icons/PlusIcon/index.ts +1 -0
  430. package/src/icons/PointingArrowIcon/PointingArrowIcon.tsx +16 -0
  431. package/src/icons/PointingArrowIcon/index.ts +1 -0
  432. package/src/icons/ReportIcon/ReportIcon.tsx +3 -4
  433. package/src/icons/RocketIcon/RocketIcon.tsx +32 -0
  434. package/src/icons/RocketIcon/index.tsx +1 -0
  435. package/src/icons/SelectIcon/SelectIcon.tsx +5 -6
  436. package/src/icons/index.ts +6 -0
  437. package/src/index.ts +1 -1
  438. package/src/layouts/Forbidden.tsx +4 -0
  439. package/src/layouts/NotFound.tsx +4 -0
  440. package/src/mocks/hooks/index.ts +0 -1
  441. package/src/types/portal/src/shared/types/catalog.ts +7 -1
  442. package/src/types/portal/src/shared/types/nav.ts +5 -0
  443. package/src/ui/ArrowBack.tsx +0 -1
  444. package/src/ui/Burger.tsx +1 -1
  445. package/src/ui/Dropdown.tsx +7 -7
  446. package/src/ui/Highlight.tsx +2 -2
  447. package/src/ui/Jumbotron.tsx +1 -1
  448. package/src/ui/darkColors.tsx +217 -84
  449. package/src/utils/css-variables.ts +4 -2
  450. package/src/utils/index.ts +1 -0
  451. package/src/utils/tags-parser.ts +8 -0
  452. package/lib/I18n/LanguagePicker.d.ts +0 -4
  453. package/lib/I18n/index.d.ts +0 -1
  454. package/lib/I18n/index.js +0 -6
  455. package/lib/components/OperationBadge/OperationBadge.d.ts +0 -6
  456. package/lib/components/OperationBadge/OperationBadge.js +0 -68
  457. package/lib/components/OperationBadge/index.d.ts +0 -1
  458. package/lib/components/Tags/Tags.d.ts +0 -5
  459. package/lib/components/Tags/Tags.js +0 -32
  460. package/lib/components/Tags/index.d.ts +0 -1
  461. package/src/I18n/index.ts +0 -1
  462. package/src/components/Catalog/index.tsx +0 -3
  463. package/src/components/OperationBadge/OperationBadge.ts +0 -62
  464. package/src/components/OperationBadge/index.ts +0 -1
  465. package/src/components/Tags/Tags.tsx +0 -36
  466. package/src/components/Tags/index.ts +0 -1
  467. /package/lib/components/{Navbar → Profile}/MobileUserProfile.d.ts +0 -0
@@ -2,11 +2,21 @@ import React from 'react';
2
2
  import styled from 'styled-components';
3
3
  import { DatePicker } from 'react-date-picker';
4
4
 
5
+ // import type { ReactNode } from 'react';
6
+
5
7
  import type { ResolvedFilter } from '@theme/types/portal/src/shared/types/catalog';
6
- import { Checkbox } from '@theme/ui/Checkbox';
7
8
  import { useTranslate } from '@portal/hooks';
9
+ import { CheckboxIcon } from '@theme/icons';
10
+ import { Select } from '@theme/components/Select';
11
+ import type { ThemeConfig } from '@theme/config';
8
12
 
9
- export function Filter({ filter }: { filter: ResolvedFilter & { selectedOptions: any } }) {
13
+ export function Filter({
14
+ filter,
15
+ filterValuesCasing,
16
+ }: {
17
+ filter: ResolvedFilter & { selectedOptions: any };
18
+ filterValuesCasing?: NonNullable<ThemeConfig['catalog']>[string]['filterValuesCasing'];
19
+ }) {
10
20
  const { translate } = useTranslate();
11
21
  const translationKeys = {
12
22
  selectAll: 'theme.catalog.filters.select.all',
@@ -14,32 +24,48 @@ export function Filter({ filter }: { filter: ResolvedFilter & { selectedOptions:
14
24
  };
15
25
 
16
26
  if (!filter.parentUsed) return null;
27
+
28
+ let selectOptions: { value: string; element: React.ReactNode }[] = [];
29
+ if (filter.type === 'select') {
30
+ const defaultOptionCount = filter.filteredOptions.reduce(
31
+ (acc, option) => acc + option.count,
32
+ 0,
33
+ );
34
+ selectOptions = [
35
+ {
36
+ value: '',
37
+ element: (
38
+ <FilterOption key="all" onClick={() => filter.selectOption('')}>
39
+ <FilterOptionLabel>{translate(translationKeys.selectAll, 'All')}</FilterOptionLabel>
40
+ <FilterOptionCount>{defaultOptionCount}</FilterOptionCount>
41
+ </FilterOption>
42
+ ),
43
+ },
44
+ ];
45
+ selectOptions.push(
46
+ ...filter.filteredOptions.map((option) => ({
47
+ value: option.value,
48
+ element: (
49
+ <FilterOption key={option.value}>
50
+ <FilterOptionLabel>
51
+ {changeCasing(translate(option.value), filterValuesCasing)}
52
+ </FilterOptionLabel>
53
+ <FilterOptionCount>{option.count}</FilterOptionCount>
54
+ </FilterOption>
55
+ ),
56
+ })),
57
+ );
58
+ }
59
+
17
60
  return (
18
61
  <FilterGroup key={filter.property + filter.title}>
19
- <FilterTitle>
20
- {translate(filter.titleTranslationKey, filter.title)}{' '}
21
- {filter.selectedOptions?.size ? (
22
- <a data-translation-key={translationKeys.clear} onClick={() => filter.selectOption('')}>
23
- {translate(translationKeys.clear, 'Clear')}
24
- </a>
25
- ) : null}
26
- </FilterTitle>
62
+ <FilterTitle>{translate(filter.titleTranslationKey, filter.title)} </FilterTitle>
27
63
  {filter.type === 'select' ? (
28
64
  <StyledSelect
29
- onChange={(e) => filter.selectOption(e.target.value)}
30
65
  value={(filter.selectedOptions as Set<any>).values().next()?.value || ''}
31
- >
32
- <option key="none" value="" data-translation-key={translationKeys.selectAll}>
33
- {translate(translationKeys.selectAll, 'All')}
34
- </option>
35
- {filter.filteredOptions.map((value: any) => {
36
- return (
37
- <option key={value.value} value={value.value}>
38
- {translate(value.value)} ({value.count})
39
- </option>
40
- );
41
- })}
42
- </StyledSelect>
66
+ onChange={(value) => filter.selectOption(value)}
67
+ options={selectOptions}
68
+ />
43
69
  ) : filter.type === 'date-range' ? (
44
70
  <>
45
71
  <DatePickerWrapper>
@@ -89,17 +115,13 @@ export function Filter({ filter }: { filter: ResolvedFilter & { selectedOptions:
89
115
  filter.filteredOptions.map((value: any) => {
90
116
  const id = 'filter--' + filter.property + '--' + slug(value.value);
91
117
  return (
92
- <FilterValue key={id} role="link">
93
- <Checkbox
94
- type="checkbox"
95
- id={id}
96
- checked={filter.selectedOptions.has(value.value)}
97
- onChange={() => filter.toggleOption(value.value)}
98
- />
99
- <label htmlFor={id}>
100
- {translate(value.value)} ({value.count})
101
- </label>
102
- </FilterValue>
118
+ <FilterOption key={id} role="link" onClick={() => filter.toggleOption(value.value)}>
119
+ <CheckboxIcon checked={filter.selectedOptions.has(value.value)} />
120
+ <FilterOptionLabel>
121
+ {changeCasing(translate(value.value), filterValuesCasing)}
122
+ </FilterOptionLabel>
123
+ <FilterOptionCount>{value.count}</FilterOptionCount>
124
+ </FilterOption>
103
125
  );
104
126
  })
105
127
  )}
@@ -107,62 +129,89 @@ export function Filter({ filter }: { filter: ResolvedFilter & { selectedOptions:
107
129
  );
108
130
  }
109
131
 
110
- const FilterGroup = styled.div`
111
- padding: 16px 0;
112
- border-bottom: 1px solid var(--border-color);
132
+ function changeCasing(
133
+ str: string,
134
+ casing?: NonNullable<ThemeConfig['catalog']>[string]['filterValuesCasing'],
135
+ ) {
136
+ if (!casing || casing === 'original' || !str) return str;
113
137
 
114
- &:last-of-type {
115
- border-bottom: none;
138
+ if (casing === 'lowercase') {
139
+ return str.toLowerCase();
116
140
  }
117
- `;
118
141
 
119
- const FilterTitle = styled.h4`
120
- font-size: 18px;
121
- font-weight: var(--font-weight-bold);
122
- margin: 0;
123
- margin-bottom: 16px;
142
+ if (casing === 'uppercase') {
143
+ return str.toUpperCase();
144
+ }
124
145
 
125
- > a {
126
- font-size: 14px;
127
- cursor: pointer;
146
+ if (casing === 'sentence') {
147
+ const words = str.split(/[\s-_]+/);
148
+ return words.map((word) => word[0].toUpperCase() + word.slice(1).toLowerCase()).join(' ');
128
149
  }
150
+ }
151
+
152
+ const FilterGroup = styled.div`
153
+ padding: var(--filter-group-padding);
154
+ `;
155
+
156
+ const FilterOptionLabel = styled.label`
157
+ cursor: pointer;
158
+ font-size: var(--filter-option-label-font-size);
159
+ font-weight: var(--filter-option-label-font-weight);
160
+ margin: var(--filter-option-label-margin);
161
+ color: var(--filter-option-label-color);
162
+ white-space: nowrap;
163
+ text-overflow: ellipsis;
164
+ overflow: hidden;
165
+ `;
166
+
167
+ const FilterOptionCount = styled.label`
168
+ cursor: pointer;
169
+ display: flex;
170
+ align-items: center;
171
+ height: var(--filter-option-count-height);
172
+ color: var(--filter-option-count-color);
173
+ text-align: center;
174
+ font-size: var(--filter-option-count-font-size);
175
+ font-weight: var(--filter-option-count-font-weight);
176
+ padding: var(--filter-option-count-padding);
177
+ border-radius: var(--filter-option-count-border-radius);
178
+ border: var(--filter-option-count-border);
179
+ background-color: var(--filter-option-count-background-color);
129
180
  `;
130
181
 
131
- const FilterValue = styled.label`
132
- display: block;
182
+ const FilterTitle = styled.h4`
183
+ font-weight: var(--filter-title-font-weight);
184
+ font-size: var(--filter-title-font-size);
185
+ margin: var(--filter-title-margin);
186
+ `;
187
+
188
+ const FilterOption = styled.label.attrs({ 'data-cy': 'Filter/FilterOption' })`
189
+ display: flex;
190
+ align-items: center;
133
191
  cursor: pointer;
134
- font-size: 16px;
135
- margin: 8px 0;
192
+ font-weight: var(--filter-option-font-weight);
193
+ font-size: var(--filter-option-font-size);
194
+ margin: var(--filter-option-margin);
136
195
 
137
196
  input {
138
197
  cursor: pointer;
139
198
  }
140
199
  `;
141
200
 
142
- const StyledSelect = styled.select`
143
- border: 1px solid rgba(0, 0, 0, 0.23);
144
-
145
- padding: var(--input-padding);
146
- border-radius: var(--input-border-radius);
147
- background-color: var(--input-background-color);
148
- color: var(--text-color);
149
- font-family: var(--input-font-family);
150
- font-size: var(--input-font-size);
151
- line-height: var(--input-line-height);
152
-
153
- min-width: 200px;
154
- outline-color: var(--color-primary-500);
155
- transition: outline 0.25s ease;
156
- display: inline-block;
157
- text-align: left;
158
- appearance: none;
159
-
160
- background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e");
161
- background-repeat: no-repeat;
162
- background-position: right 10px center;
163
- background-size: 1em;
164
- width: 100%;
165
- padding-right: 25px;
201
+ const StyledSelect = styled(Select)`
202
+ min-height: var(--filter-select-min-height);
203
+ color: var(--filter-select-color);
204
+ border: 1px solid var(--filter-select-border-color);
205
+ border-radius: var(--filter-select-border-radius);
206
+ padding: var(--filter-select-padding);
207
+
208
+ :hover {
209
+ border-color: var(--filter-select-hover-border-color);
210
+ }
211
+
212
+ ${FilterOption} {
213
+ margin: var(--filter-select-option-margin);
214
+ }
166
215
  `;
167
216
 
168
217
  // TODO: import from portal
@@ -171,15 +220,16 @@ function slug(str: string): string {
171
220
  }
172
221
 
173
222
  const DatePickerWrapper = styled.div`
223
+ color: var(--filter-date-picker-color);
174
224
  display: flex;
175
225
  flex-direction: row;
176
- margin-bottom: 5px;
226
+ margin: var(--filter-date-picker-margin);
177
227
 
178
228
  align-items: center;
179
- gap: 10px;
229
+ gap: var(--filter-date-picker-gap);
180
230
 
181
231
  > span {
182
- width: 50px;
232
+ width: var(--filter-date-picker-width);
183
233
  }
184
234
 
185
235
  .react-date-picker {
@@ -187,35 +237,41 @@ const DatePickerWrapper = styled.div`
187
237
  }
188
238
 
189
239
  .react-calendar__tile--now {
190
- background: #cbf7f1;
191
- color: black;
240
+ background: var(--filter-date-picker-tile-background);
241
+ color: var(--filter-date-picker-tile-color);
192
242
 
193
243
  &:enabled:hover,
194
244
  &:enabled:focus {
195
- background: #b1efe7;
196
- color: black;
245
+ background: var(--filter-date-picker-tile-hover-background);
246
+ color: var(--filter-date-picker-tile-hover-color);
197
247
  }
198
248
  }
199
249
 
200
- .react-date-picker__inputGroup__input:invalid {
201
- background: rgb(255 125 0 / 10%);
250
+ .react-date-picker__inputGroup__input {
251
+ width: var(--filter-date-picker-input-width);
252
+
253
+ &:invalid {
254
+ background: var(--filter-date-picker-invalid-input-background);
255
+ }
202
256
  }
203
257
 
204
258
  .react-date-picker__button {
205
- padding: 4px 4px;
259
+ padding: var(--filter-date-picker-button-padding);
260
+
206
261
  svg {
207
- width: 12px;
262
+ stroke: var(--filter-date-picker-icon-stroke);
263
+ width: var(--filter-date-picker-icon-width);
208
264
  }
209
- }
210
265
 
211
- .react-date-picker__wrapper {
212
- border: 1px solid rgba(0, 0, 0, 0.23);
213
- border-radius: var(--border-radius);
214
- padding: var(--input-padding);
266
+ &:enabled:hover .react-date-picker__button__icon {
267
+ stroke: var(--filter-date-picker-hover-icon-stroke);
268
+ }
215
269
  }
216
270
 
217
- .react-date-picker__inputGroup__input {
218
- width: 20px;
271
+ .react-date-picker__wrapper {
272
+ border: 1px solid var(--filter-date-picker-wrapper-border-color);
273
+ border-radius: var(--filter-date-picker-wrapper-radius);
274
+ padding: var(--filter-date-picker-wrapper-padding);
219
275
  }
220
276
  `;
221
277
 
@@ -0,0 +1,95 @@
1
+ import React from 'react';
2
+ import styled from 'styled-components';
3
+ import { Button } from '@theme';
4
+
5
+ import type { ThemeConfig } from '@theme';
6
+
7
+ import { useTranslate } from '@portal/hooks';
8
+ import { FilterControls } from '@theme/components/Catalog';
9
+ import { Filter } from '@theme/components/Filter';
10
+ import { Sidebar } from '@theme/components/Sidebar';
11
+ import type { ResolvedFilter } from '@theme/types/portal/src/shared/types/catalog';
12
+ import { StyledInput } from '@theme/components/Filter/FilterPopover';
13
+
14
+ interface FilterContentProps {
15
+ setFilterTerm: (value: string) => void;
16
+ filters: ResolvedFilter[];
17
+ filterTerm: string;
18
+ isMobile: boolean;
19
+ filterValuesCasing?: NonNullable<ThemeConfig['catalog']>[string]['filterValuesCasing'];
20
+ }
21
+
22
+ export function FilterContent({
23
+ setFilterTerm,
24
+ filters,
25
+ filterTerm,
26
+ isMobile,
27
+ filterValuesCasing,
28
+ }: FilterContentProps) {
29
+ const { translate } = useTranslate();
30
+ const translationKeys = {
31
+ placeholder: 'theme.catalog.filters.placeholder',
32
+ clearAll: 'theme.catalog.filters.clearAll',
33
+ };
34
+
35
+ const hasActiveFilters = filters.some((filter) => {
36
+ if (filter.selectedOptions && filter.selectedOptions instanceof Set) {
37
+ return filter.selectedOptions.size;
38
+ } else if (filter.selectedOptions.from && filter.selectedOptions.to) {
39
+ return true;
40
+ }
41
+ });
42
+
43
+ const handleClearAll = () => {
44
+ filters.forEach((filter) => filter.selectOption(''));
45
+ };
46
+
47
+ return (
48
+ <FilterContentWrapper isMobile={isMobile}>
49
+ <FilterControls>
50
+ <StyledInput
51
+ placeholder={translate(translationKeys.placeholder, 'Type to filter...')}
52
+ value={filterTerm}
53
+ onChange={(e) => setFilterTerm(e.target.value)}
54
+ />
55
+ </FilterControls>
56
+ <FilterItems>
57
+ {filters.map((filter, idx) => (
58
+ <Filter
59
+ filter={filter}
60
+ key={filter.property + '-' + idx}
61
+ filterValuesCasing={filterValuesCasing}
62
+ />
63
+ ))}
64
+ </FilterItems>
65
+ {hasActiveFilters && (
66
+ <Button size="small" onClick={handleClearAll}>
67
+ {translate(translationKeys.placeholder, 'Clear all filters')}
68
+ </Button>
69
+ )}
70
+ </FilterContentWrapper>
71
+ );
72
+ }
73
+
74
+ const FilterContentWrapper = styled(Sidebar)<{ isMobile?: boolean }>`
75
+ width: var(--sidebar-width);
76
+ display: none;
77
+
78
+ ${Button} {
79
+ width: var(--filter-content-clear-button-width);
80
+ margin: var(--filter-content-clear-button-margin);
81
+ }
82
+
83
+ ${({ theme, isMobile }) => !isMobile && theme.mediaQueries.medium} {
84
+ display: block;
85
+ border-right: 1px solid var(--filter-content-border-color);
86
+
87
+ ${FilterControls} {
88
+ background: var(--filter-controls-background-color);
89
+ }
90
+ }
91
+ `;
92
+
93
+ export const FilterItems = styled.div`
94
+ padding: var(--filter-content-items-padding);
95
+ `;
@@ -0,0 +1,150 @@
1
+ import React from 'react';
2
+ import styled from 'styled-components';
3
+ import { Filter, FilterControls } from '@theme';
4
+
5
+ import type { ThemeConfig } from '@theme';
6
+
7
+ import { FilterContent, FilterItems } from '@theme/components/Filter/FilterContent';
8
+ import { useTranslate } from '@portal/hooks';
9
+ import type { ResolvedFilter } from '@theme/types/portal/src/shared/types/catalog';
10
+
11
+ interface FilterPopoverProps {
12
+ setIsAddingFilter: (value: boolean) => void;
13
+ filters: ResolvedFilter[];
14
+ filterValuesCasing?: NonNullable<ThemeConfig['catalog']>[string]['filterValuesCasing'];
15
+ }
16
+
17
+ export function FilterPopover({
18
+ setIsAddingFilter,
19
+ filters,
20
+ filterValuesCasing,
21
+ }: FilterPopoverProps) {
22
+ const [filterTerm, setFilterTerm] = React.useState('');
23
+ const filteredFilters = filters
24
+ .map((filter) => {
25
+ const options = filter.options.filter((option) =>
26
+ option.value.toLowerCase().includes(filterTerm.toLowerCase()),
27
+ );
28
+ return options.length
29
+ ? {
30
+ ...filter,
31
+ filteredOptions: options,
32
+ }
33
+ : null;
34
+ })
35
+ .filter(Boolean) as ResolvedFilter[];
36
+
37
+ const translationKeys = {
38
+ placeholder: 'theme.catalog.filters.placeholder',
39
+ done: 'theme.catalog.filters.done',
40
+ };
41
+ const { translate } = useTranslate();
42
+
43
+ return (
44
+ <FilterPopoverWrapper>
45
+ <FilterPopoverHeader>
46
+ <FilterPopoverHeaderLabel>Add Filter</FilterPopoverHeaderLabel>
47
+ <FilterPopoverHeaderButton onClick={() => setIsAddingFilter(false)}>
48
+ {translate(translationKeys.placeholder, 'Done')}
49
+ </FilterPopoverHeaderButton>
50
+ </FilterPopoverHeader>
51
+ <FilterContent
52
+ setFilterTerm={setFilterTerm}
53
+ filters={filters}
54
+ filterTerm={filterTerm}
55
+ filterValuesCasing={filterValuesCasing}
56
+ isMobile
57
+ />
58
+ <FilterControls>
59
+ <StyledInput
60
+ placeholder={translate(translationKeys.placeholder, 'Type to filter...')}
61
+ value={filterTerm}
62
+ onChange={(e) => setFilterTerm(e.target.value)}
63
+ />
64
+ </FilterControls>
65
+ <FilterItems>
66
+ {filteredFilters.map((filter, idx) => (
67
+ <Filter filter={filter} key={filter.property + '-' + idx} />
68
+ ))}
69
+ </FilterItems>
70
+ </FilterPopoverWrapper>
71
+ );
72
+ }
73
+
74
+ const FilterPopoverWrapper = styled.aside<{ isActiveInMobileMode?: boolean }>`
75
+ position: absolute;
76
+ top: 0;
77
+ z-index: var(--z-index-popover);
78
+ height: 100vh;
79
+ overflow: auto;
80
+ transition: height 0.2s ease-in-out;
81
+ width: 100%;
82
+ background-color: var(--filter-popover-background-color);
83
+ display: block;
84
+
85
+ ${({ theme }) => theme.mediaQueries.medium} {
86
+ display: none;
87
+ }
88
+ `;
89
+
90
+ const FilterPopoverHeader = styled.div`
91
+ height: var(--navbar-height);
92
+ padding: var(--filter-popover-header-padding);
93
+ display: grid;
94
+ align-items: center;
95
+ grid-template-columns: 1fr 1fr 1fr;
96
+ border-bottom: 1px solid var(--filter-popover-header-border-color);
97
+ background-color: var(--filter-popover-header-background-color);
98
+ `;
99
+
100
+ const FilterPopoverHeaderLabel = styled.div`
101
+ color: var(--filter-popover-header-label-color);
102
+ justify-self: center;
103
+ grid-column-start: 2;
104
+ font-size: var(--filter-popover-header-label-font-size);
105
+ font-weight: var(--filter-popover-header-label-font-weight);
106
+ `;
107
+
108
+ const FilterPopoverHeaderButton = styled.div.attrs({
109
+ 'data-cy': 'FilterPopover/DoneButton',
110
+ })`
111
+ color: var(--filter-popover-header-button-color);
112
+ justify-self: end;
113
+ font-size: var(--filter-popover-header-button-font-size);
114
+ font-weight: var(--filter-popover-header-button-font-weight);
115
+ height: var(--filter-popover-header-button-height);
116
+ line-height: var(--filter-popover-header-button-height);
117
+ `;
118
+
119
+ export const StyledInput = styled.input.attrs({ 'data-cy': 'FilterPopover/Input' })`
120
+ border: var(--filter-input-border);
121
+ min-width: var(--filter-input-min-width);
122
+ width: 100%;
123
+ outline: none;
124
+ padding: var(--filter-input-padding);
125
+ border-radius: var(--filter-input-border-radius);
126
+ background-color: var(--filter-input-background-color);
127
+ color: var(--filter-input-color);
128
+ font-family: var(--filter-input-font-family);
129
+ font-size: var(--filter-input-font-size);
130
+ line-height: var(--filter-input-line-height);
131
+
132
+ &::placeholder {
133
+ opacity: var(--filter-input-placeholder-opacity);
134
+ color: var(--filter-input-placeholder-color);
135
+ }
136
+
137
+ &:hover {
138
+ color: var(--filter-input-hover-color);
139
+ border: var(--filter-input-hover-border);
140
+ }
141
+
142
+ &:focus {
143
+ color: var(--filter-input-focus-color);
144
+ border: var(--filter-input-focus-border);
145
+ }
146
+
147
+ &:-webkit-autofill {
148
+ background-color: var(--filter-input-background-color);
149
+ }
150
+ `;
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import styled from 'styled-components';
3
+
4
+ import { ClearIcon } from '@theme/components/Search/ClearIcon';
5
+
6
+ interface FilterTagProps {
7
+ label: string;
8
+ onClick: () => void;
9
+ }
10
+
11
+ export function FilterTag({ label, onClick }: FilterTagProps) {
12
+ return (
13
+ <TagWrapper onClick={onClick}>
14
+ <TagLabel>{label}</TagLabel>
15
+ <ClearIcon />
16
+ </TagWrapper>
17
+ );
18
+ }
19
+
20
+ const TagWrapper = styled.div.attrs({ 'data-cy': 'Filter/FilterTag' })`
21
+ display: flex;
22
+ align-items: center;
23
+ white-space: nowrap;
24
+ cursor: pointer;
25
+ color: var(--filter-tag-color);
26
+ border-radius: var(--filter-tag-border-radius);
27
+ border: 1px solid var(--filter-tag-border-color);
28
+ background-color: var(--filter-tag-background-color);
29
+ padding: var(--filter-tag-padding);
30
+ font-size: var(--filter-tag-font-size);
31
+ font-weight: var(--filter-tag-font-weight);
32
+ margin: var(--filter-tag-margin);
33
+ `;
34
+
35
+ const TagLabel = styled.div`
36
+ margin: var(--filter-tag-label-margin);
37
+ `;
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+ import styled from 'styled-components';
3
+
4
+ import type { ResolvedFilter } from '@theme/types/portal/src/shared/types/catalog';
5
+ import { FilterTag } from '@theme/components/Filter/FilterTag';
6
+
7
+ interface FilterTagsProps {
8
+ filters: ResolvedFilter[];
9
+ }
10
+
11
+ export function FilterTags({ filters }: FilterTagsProps) {
12
+ const selectedFilters: { filter: ResolvedFilter; selectedOption: string }[] = [];
13
+ filters.forEach((filter: ResolvedFilter & { selectedOptions: any }) => {
14
+ if (filter.selectedOptions?.size) {
15
+ for (let selectedOption of filter.selectedOptions) {
16
+ selectedFilters.push({
17
+ filter,
18
+ selectedOption,
19
+ });
20
+ }
21
+ }
22
+ });
23
+
24
+ return (
25
+ <FilterTagsWrapper>
26
+ {selectedFilters.map(({ filter, selectedOption }) => (
27
+ <FilterTag
28
+ key={`${filter.title}: ${selectedOption}`}
29
+ onClick={() => filter.toggleOption(selectedOption)}
30
+ label={`${filter.title}: ${selectedOption}`}
31
+ />
32
+ ))}
33
+ </FilterTagsWrapper>
34
+ );
35
+ }
36
+
37
+ const FilterTagsWrapper = styled.div`
38
+ display: flex;
39
+ `;
@@ -1 +1,3 @@
1
1
  export * from '@theme/components/Filter/Filter';
2
+ export * from '@theme/components/Filter/FilterContent';
3
+ export * from '@theme/components/Filter/styledVariables';