@redocly/theme 0.59.0-rc.3 → 0.60.0-custom.2

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 (427) hide show
  1. package/LICENSE +7 -1
  2. package/lib/components/AsyncApiDocs/hooks/AfterAsyncApiChannelDescription.js +1 -0
  3. package/lib/components/Buttons/AIAssistantButton.js +6 -2
  4. package/lib/components/Buttons/ConnectMCPButton.d.ts +8 -0
  5. package/lib/components/Buttons/ConnectMCPButton.js +145 -0
  6. package/lib/components/Buttons/variables.d.ts +1 -0
  7. package/lib/components/Buttons/variables.js +44 -2
  8. package/lib/components/Catalog/CatalogCardView/CatalogCard.js +4 -3
  9. package/lib/components/Catalog/CatalogEntity/CatalogEntity.js +5 -1
  10. package/lib/components/Catalog/CatalogEntity/CatalogEntityGraph/CatalogEntityRelationsGraph.js +2 -2
  11. package/lib/components/Catalog/CatalogEntity/CatalogEntityInfoBar.js +1 -0
  12. package/lib/components/Catalog/CatalogEntity/CatalogEntityLinks.js +4 -1
  13. package/lib/components/Catalog/CatalogEntity/CatalogEntityMetadata.js +1 -0
  14. package/lib/components/Catalog/CatalogEntity/CatalogEntityMethodAndPath.js +4 -1
  15. package/lib/components/Catalog/CatalogEntity/CatalogEntityProperties/ContactProperty.js +4 -1
  16. package/lib/components/Catalog/CatalogEntity/CatalogEntityProperties/DomainsProperty.js +4 -1
  17. package/lib/components/Catalog/CatalogEntity/CatalogEntityProperties/EntityTypeProperty.js +4 -1
  18. package/lib/components/Catalog/CatalogEntity/CatalogEntityProperties/FormatProperty.js +4 -1
  19. package/lib/components/Catalog/CatalogEntity/CatalogEntityProperties/GitProperty.js +4 -1
  20. package/lib/components/Catalog/CatalogEntity/CatalogEntityProperties/OwnersProperty.js +4 -1
  21. package/lib/components/Catalog/CatalogEntity/CatalogEntityProperties/TagsProperty.js +4 -1
  22. package/lib/components/Catalog/CatalogEntity/CatalogEntityProperties/UserEmailProperty.js +4 -1
  23. package/lib/components/Catalog/CatalogEntity/CatalogEntityRelations/CatalogEntityApiDescriptionRelations.js +1 -1
  24. package/lib/components/Catalog/CatalogEntity/CatalogEntityRelations/CatalogEntityTeamRelations.js +1 -1
  25. package/lib/components/Catalog/CatalogEntity/CatalogEntitySchema.js +2 -2
  26. package/lib/components/Catalog/CatalogEntityIcon.js +2 -1
  27. package/lib/components/Catalog/CatalogFilter/CatalogFilter.js +4 -0
  28. package/lib/components/Catalog/CatalogFilter/CatalogFilterDateRange.js +2 -2
  29. package/lib/components/Catalog/CatalogSelector.js +1 -1
  30. package/lib/components/Catalog/CatalogSortButton.js +4 -1
  31. package/lib/components/Catalog/CatalogTableView/CatalogTableHeaderCell.js +2 -2
  32. package/lib/components/Catalog/CatalogTableView/CatalogTableViewRow.js +2 -2
  33. package/lib/components/Catalog/CatalogTagsWithTooltip.js +5 -1
  34. package/lib/components/Catalog/variables.dark.js +1 -1
  35. package/lib/components/Catalog/variables.js +6 -4
  36. package/lib/components/CatalogClassic/variables.js +1 -1
  37. package/lib/components/CodeBlock/CodeBlock.js +3 -1
  38. package/lib/components/CodeBlock/CodeBlockTabs.js +3 -3
  39. package/lib/components/DatePicker/variables.js +2 -0
  40. package/lib/components/Dropdown/Dropdown.d.ts +16 -2
  41. package/lib/components/Dropdown/Dropdown.js +5 -5
  42. package/lib/components/Feedback/Mood.js +2 -2
  43. package/lib/components/Feedback/Rating.js +2 -2
  44. package/lib/components/Filter/FilterDateRange.js +2 -2
  45. package/lib/components/Filter/FilterSelect.js +5 -1
  46. package/lib/components/Link/Link.d.ts +1 -0
  47. package/lib/components/Loaders/Loading.js +4 -1
  48. package/lib/components/Markdown/Markdown.js +9 -9
  49. package/lib/components/Markdown/styles/{baseTable.js → base-table.js} +1 -1
  50. package/lib/components/Markdown/styles/{headingAnchor.js → heading-anchor.js} +1 -1
  51. package/lib/components/Menu/MenuItem.js +6 -2
  52. package/lib/components/Navbar/NavbarItem.js +3 -3
  53. package/lib/components/OpenApiDocs/hooks/AdditionalOverviewInfo.js +1 -0
  54. package/lib/components/OpenApiDocs/hooks/AfterOpenApiDescription.js +1 -0
  55. package/lib/components/OpenApiDocs/hooks/AfterOpenApiOperation.js +1 -0
  56. package/lib/components/OpenApiDocs/hooks/AfterOpenApiTitle.js +1 -0
  57. package/lib/components/OpenApiDocs/hooks/BeforeOpenApiOperation.js +1 -0
  58. package/lib/components/OpenApiDocs/hooks/OpenApiFooter.js +3 -2
  59. package/lib/components/OpenApiDocs/hooks/OpenApiHeader.js +3 -2
  60. package/lib/components/PageActions/PageActions.js +4 -1
  61. package/lib/components/PageActions/variables.js +2 -0
  62. package/lib/components/Search/FilterFields/SearchFilterFieldSelect.js +2 -1
  63. package/lib/components/Search/FilterFields/SearchFilterFieldTags.js +8 -3
  64. package/lib/components/Search/SearchAiActionButtons.d.ts +10 -0
  65. package/lib/components/Search/SearchAiActionButtons.js +43 -0
  66. package/lib/components/Search/SearchAiConversationInput.d.ts +3 -1
  67. package/lib/components/Search/SearchAiConversationInput.js +39 -7
  68. package/lib/components/Search/SearchAiDialog.d.ts +3 -6
  69. package/lib/components/Search/SearchAiDialog.js +20 -9
  70. package/lib/components/Search/SearchAiMessage.d.ts +9 -5
  71. package/lib/components/Search/SearchAiMessage.js +147 -21
  72. package/lib/components/Search/SearchAiNegativeFeedbackForm.d.ts +10 -0
  73. package/lib/components/Search/SearchAiNegativeFeedbackForm.js +170 -0
  74. package/lib/components/Search/SearchDialog.js +36 -5
  75. package/lib/components/Search/SearchGroups.js +5 -2
  76. package/lib/components/Search/SearchHighlight.js +1 -0
  77. package/lib/components/Search/SearchItem.js +9 -2
  78. package/lib/components/Search/variables.js +38 -64
  79. package/lib/components/Segmented/Segmented.d.ts +1 -8
  80. package/lib/components/Segmented/Segmented.js +5 -3
  81. package/lib/components/Select/Select.d.ts +1 -1
  82. package/lib/components/Select/Select.js +4 -2
  83. package/lib/components/Select/SelectInput.d.ts +1 -1
  84. package/lib/components/Select/SelectInput.js +3 -1
  85. package/lib/components/SidebarActions/styled.d.ts +5 -4
  86. package/lib/components/SidebarActions/styled.js +9 -5
  87. package/lib/components/Tag/Tag.d.ts +3 -2
  88. package/lib/components/Tag/Tag.js +65 -16
  89. package/lib/components/Tag/variables.dark.js +143 -36
  90. package/lib/components/Tag/variables.js +85 -60
  91. package/lib/components/Tooltip/Tooltip.js +2 -0
  92. package/lib/components/VersionPicker/VersionPicker.d.ts +1 -1
  93. package/lib/config.d.ts +2 -2
  94. package/lib/core/constants/index.d.ts +2 -0
  95. package/lib/core/constants/index.js +2 -0
  96. package/lib/core/constants/mcp.d.ts +1 -0
  97. package/lib/core/constants/mcp.js +5 -0
  98. package/lib/core/constants/request-methods.d.ts +1 -0
  99. package/lib/core/constants/request-methods.js +14 -0
  100. package/lib/core/constants/search.d.ts +5 -4
  101. package/lib/core/constants/search.js +4 -5
  102. package/lib/core/hoc/index.d.ts +1 -1
  103. package/lib/core/hoc/index.js +1 -1
  104. package/lib/core/hoc/{typedMemo.js → typed-memo.js} +1 -1
  105. package/lib/core/hooks/__tests__/mocks/mock-intersection-observer.d.ts +1 -1
  106. package/lib/core/hooks/__tests__/mocks/mock-intersection-observer.js +1 -3
  107. package/lib/core/hooks/catalog/{useCatalogEntities.js → use-catalog-entities.js} +1 -1
  108. package/lib/core/hooks/catalog/{useCatalogEntitySchema.d.ts → use-catalog-entity-schema.d.ts} +1 -1
  109. package/lib/core/hooks/catalog/{useCatalogEntitySchema.js → use-catalog-entity-schema.js} +1 -1
  110. package/lib/core/hooks/catalog/{useCatalogTableHeaderCellActions.js → use-catalog-table-header-cell-actions.js} +1 -1
  111. package/lib/core/hooks/catalog/{useCatalogTableViewRow.js → use-catalog-table-view-row.js} +1 -1
  112. package/lib/core/hooks/catalog/{useGraph.js → use-graph.js} +2 -2
  113. package/lib/core/hooks/code-walkthrough/use-code-walkthrough-controls.js +1 -0
  114. package/lib/core/hooks/code-walkthrough/use-code-walkthrough-steps.d.ts +1 -0
  115. package/lib/core/hooks/code-walkthrough/use-renderable-files.js +2 -2
  116. package/lib/core/hooks/index.d.ts +8 -2
  117. package/lib/core/hooks/index.js +8 -2
  118. package/lib/core/hooks/menu/use-collapse.js +1 -0
  119. package/lib/core/hooks/menu/use-mobile-menu-items.js +1 -0
  120. package/lib/core/hooks/menu/use-nested-menu.js +1 -1
  121. package/lib/core/hooks/search/use-feedback-tooltip.d.ts +6 -0
  122. package/lib/core/hooks/search/use-feedback-tooltip.js +26 -0
  123. package/lib/core/hooks/use-connect-mcp-button.d.ts +13 -0
  124. package/lib/core/hooks/use-connect-mcp-button.js +50 -0
  125. package/lib/core/hooks/use-mcp-config.d.ts +9 -0
  126. package/lib/core/hooks/use-mcp-config.js +30 -0
  127. package/lib/core/hooks/use-page-actions.d.ts +1 -1
  128. package/lib/core/hooks/use-page-actions.js +120 -120
  129. package/lib/core/hooks/use-product-picker.js +2 -1
  130. package/lib/core/hooks/use-tabs.d.ts +3 -2
  131. package/lib/core/hooks/use-tabs.js +115 -57
  132. package/lib/core/hooks/use-telemetry-fallback.d.ts +10 -8
  133. package/lib/core/hooks/use-telemetry-fallback.js +11 -8
  134. package/lib/core/hooks/use-theme-config.js +1 -0
  135. package/lib/core/hooks/use-theme-hooks.js +1 -0
  136. package/lib/core/openapi/index.d.ts +3 -1
  137. package/lib/core/openapi/index.js +5 -3
  138. package/lib/core/styles/dark.js +4 -0
  139. package/lib/core/styles/global.js +5 -0
  140. package/lib/core/templates/Markdown.js +1 -0
  141. package/lib/core/types/hooks.d.ts +8 -2
  142. package/lib/core/types/index.d.ts +20 -18
  143. package/lib/core/types/index.js +0 -18
  144. package/lib/core/types/l10n.d.ts +1 -1
  145. package/lib/core/types/mcp.d.ts +6 -0
  146. package/lib/core/types/mcp.js +3 -0
  147. package/lib/core/types/search.d.ts +12 -4
  148. package/lib/core/types/search.js +6 -0
  149. package/lib/core/types/segmented.d.ts +12 -0
  150. package/lib/core/types/segmented.js +3 -0
  151. package/lib/core/types/sidebar.d.ts +1 -0
  152. package/lib/core/utils/{dynamic.js → Dynamic.js} +1 -1
  153. package/lib/core/utils/{get-file-icon.js → GetFileIcon.js} +1 -1
  154. package/lib/core/utils/args-typecheck.d.ts +2 -2
  155. package/lib/core/utils/clipboard-service.js +2 -0
  156. package/lib/core/utils/frontmatter-translate.d.ts +6 -0
  157. package/lib/core/utils/frontmatter-translate.js +14 -0
  158. package/lib/core/utils/get-operation-color.d.ts +7 -0
  159. package/lib/core/utils/get-operation-color.js +13 -0
  160. package/lib/core/utils/get-user-agent.js +1 -0
  161. package/lib/core/utils/index.d.ts +5 -2
  162. package/lib/core/utils/index.js +5 -2
  163. package/lib/core/utils/js-utils.d.ts +1 -1
  164. package/lib/core/utils/load-and-navigate.js +1 -0
  165. package/lib/core/utils/markdoc.js +1 -0
  166. package/lib/core/utils/mcp.d.ts +2 -0
  167. package/lib/core/utils/mcp.js +31 -0
  168. package/lib/core/utils/parse-style-string.js +1 -0
  169. package/lib/ext/configure.d.ts +2 -2
  170. package/lib/ext/configure.js +12 -6
  171. package/lib/ext/{useConfigureReplay.js → use-configure-replay.js} +5 -4
  172. package/lib/icons/AiStarsGradientIcon/AiStarsGradientIcon.js +44 -4
  173. package/lib/icons/AiStarsIcon/AiStarsIcon.js +11 -2
  174. package/lib/icons/ConnectIcon/ConnectIcon.d.ts +9 -0
  175. package/lib/icons/ConnectIcon/ConnectIcon.js +17 -0
  176. package/lib/icons/CubeIcon/CubeIcon.d.ts +9 -0
  177. package/lib/icons/CubeIcon/CubeIcon.js +17 -0
  178. package/lib/icons/HashtagIcon/HashtagIcon.d.ts +9 -0
  179. package/lib/icons/HashtagIcon/HashtagIcon.js +22 -0
  180. package/lib/icons/RedoclyIcon/RedoclyIcon.js +4 -7
  181. package/lib/icons/ThumbDownFilledIcon/ThumbDownFilledIcon.d.ts +9 -0
  182. package/lib/icons/ThumbDownFilledIcon/ThumbDownFilledIcon.js +34 -0
  183. package/lib/icons/ThumbUpFilledIcon/ThumbUpFilledIcon.d.ts +9 -0
  184. package/lib/icons/ThumbUpFilledIcon/ThumbUpFilledIcon.js +34 -0
  185. package/lib/icons/VSCodeIcon/VSCodeIcon.d.ts +9 -0
  186. package/lib/icons/VSCodeIcon/VSCodeIcon.js +17 -0
  187. package/lib/index.d.ts +4 -3
  188. package/lib/index.js +3 -3
  189. package/lib/layouts/ThreePanelLayout.js +4 -4
  190. package/lib/markdoc/components/Cards/Card.js +1 -28
  191. package/lib/markdoc/components/Cards/variables.dark.js +2 -0
  192. package/lib/markdoc/components/Cards/variables.js +2 -0
  193. package/lib/markdoc/components/CodeWalkthrough/CodePanelHeader.js +1 -0
  194. package/lib/markdoc/components/ConnectMCP/ConnectMCP.d.ts +8 -0
  195. package/lib/markdoc/components/ConnectMCP/ConnectMCP.js +19 -0
  196. package/lib/markdoc/components/Tabs/TabList.d.ts +3 -1
  197. package/lib/markdoc/components/Tabs/TabList.js +197 -47
  198. package/lib/markdoc/components/Tabs/Tabs.d.ts +2 -1
  199. package/lib/markdoc/components/Tabs/Tabs.js +57 -12
  200. package/lib/markdoc/components/default.d.ts +1 -0
  201. package/lib/markdoc/components/default.js +1 -0
  202. package/lib/markdoc/default.d.ts +6 -0
  203. package/lib/markdoc/default.js +2 -0
  204. package/lib/markdoc/tags/card.js +0 -1
  205. package/lib/markdoc/tags/code-walkthrough.js +1 -0
  206. package/lib/markdoc/tags/connect-mcp.d.ts +2 -0
  207. package/lib/markdoc/tags/connect-mcp.js +27 -0
  208. package/lib/markdoc/tags/html.js +1 -0
  209. package/package.json +6 -6
  210. package/src/components/AsyncApiDocs/hooks/AfterAsyncApiChannelDescription.tsx +1 -0
  211. package/src/components/Button/Button.tsx +1 -0
  212. package/src/components/Buttons/AIAssistantButton.tsx +6 -2
  213. package/src/components/Buttons/ConnectMCPButton.tsx +180 -0
  214. package/src/components/Buttons/variables.ts +44 -1
  215. package/src/components/Catalog/CatalogCardView/CatalogCard.tsx +4 -3
  216. package/src/components/Catalog/CatalogEntity/CatalogEntity.tsx +4 -0
  217. package/src/components/Catalog/CatalogEntity/CatalogEntityGraph/CatalogEntityRelationsGraph.tsx +1 -1
  218. package/src/components/Catalog/CatalogEntity/CatalogEntityInfoBar.tsx +1 -0
  219. package/src/components/Catalog/CatalogEntity/CatalogEntityLinks.tsx +5 -1
  220. package/src/components/Catalog/CatalogEntity/CatalogEntityMetadata.tsx +1 -0
  221. package/src/components/Catalog/CatalogEntity/CatalogEntityMethodAndPath.tsx +5 -1
  222. package/src/components/Catalog/CatalogEntity/CatalogEntityProperties/ContactProperty.tsx +5 -1
  223. package/src/components/Catalog/CatalogEntity/CatalogEntityProperties/DomainsProperty.tsx +5 -1
  224. package/src/components/Catalog/CatalogEntity/CatalogEntityProperties/EntityTypeProperty.tsx +5 -1
  225. package/src/components/Catalog/CatalogEntity/CatalogEntityProperties/FormatProperty.tsx +5 -1
  226. package/src/components/Catalog/CatalogEntity/CatalogEntityProperties/GitProperty.tsx +5 -1
  227. package/src/components/Catalog/CatalogEntity/CatalogEntityProperties/OwnersProperty.tsx +5 -1
  228. package/src/components/Catalog/CatalogEntity/CatalogEntityProperties/TagsProperty.tsx +5 -1
  229. package/src/components/Catalog/CatalogEntity/CatalogEntityProperties/UserEmailProperty.tsx +5 -1
  230. package/src/components/Catalog/CatalogEntity/CatalogEntityRelations/CatalogEntityApiDescriptionRelations.tsx +1 -1
  231. package/src/components/Catalog/CatalogEntity/CatalogEntityRelations/CatalogEntityTeamRelations.tsx +1 -1
  232. package/src/components/Catalog/CatalogEntity/CatalogEntitySchema.tsx +3 -1
  233. package/src/components/Catalog/CatalogEntityIcon.tsx +2 -1
  234. package/src/components/Catalog/CatalogFilter/CatalogFilter.tsx +5 -0
  235. package/src/components/Catalog/CatalogFilter/CatalogFilterDateRange.tsx +2 -2
  236. package/src/components/Catalog/CatalogSelector.tsx +2 -2
  237. package/src/components/Catalog/CatalogSortButton.tsx +5 -1
  238. package/src/components/Catalog/CatalogTableView/CatalogTableHeaderCell.tsx +1 -1
  239. package/src/components/Catalog/CatalogTableView/CatalogTableViewRow.tsx +1 -1
  240. package/src/components/Catalog/CatalogTagsWithTooltip.tsx +8 -1
  241. package/src/components/Catalog/variables.dark.ts +1 -1
  242. package/src/components/Catalog/variables.ts +6 -4
  243. package/src/components/CatalogClassic/CatalogClassicInfoBlock.tsx +1 -0
  244. package/src/components/CatalogClassic/variables.ts +1 -1
  245. package/src/components/CodeBlock/CodeBlock.tsx +4 -0
  246. package/src/components/CodeBlock/CodeBlockControls.tsx +1 -0
  247. package/src/components/CodeBlock/CodeBlockTabs.tsx +1 -1
  248. package/src/components/DatePicker/variables.ts +3 -1
  249. package/src/components/Dropdown/Dropdown.tsx +84 -79
  250. package/src/components/Feedback/Mood.tsx +2 -2
  251. package/src/components/Feedback/Rating.tsx +2 -2
  252. package/src/components/Filter/FilterDateRange.tsx +2 -2
  253. package/src/components/Filter/FilterSelect.tsx +1 -0
  254. package/src/components/JsonViewer/JsonViewer.tsx +1 -0
  255. package/src/components/JsonViewer/helpers.tsx +3 -0
  256. package/src/components/LastUpdated/LastUpdated.tsx +1 -0
  257. package/src/components/Link/Link.tsx +1 -0
  258. package/src/components/Loaders/Loading.tsx +5 -1
  259. package/src/components/Markdown/Markdown.tsx +2 -2
  260. package/src/components/Menu/MenuItem.tsx +7 -2
  261. package/src/components/Navbar/NavbarItem.tsx +6 -5
  262. package/src/components/OpenApiDocs/hooks/AdditionalOverviewInfo.tsx +1 -0
  263. package/src/components/OpenApiDocs/hooks/AfterOpenApiDescription.tsx +1 -0
  264. package/src/components/OpenApiDocs/hooks/AfterOpenApiOperation.tsx +1 -1
  265. package/src/components/OpenApiDocs/hooks/AfterOpenApiTitle.tsx +1 -1
  266. package/src/components/OpenApiDocs/hooks/BeforeOpenApiOperation.tsx +1 -1
  267. package/src/components/OpenApiDocs/hooks/OpenApiFooter.tsx +1 -1
  268. package/src/components/OpenApiDocs/hooks/OpenApiHeader.tsx +1 -1
  269. package/src/components/PageActions/PageActions.tsx +5 -1
  270. package/src/components/PageActions/variables.ts +2 -0
  271. package/src/components/Search/FilterFields/SearchFilterFieldSelect.tsx +4 -1
  272. package/src/components/Search/FilterFields/SearchFilterFieldTags.tsx +10 -4
  273. package/src/components/Search/SearchAiActionButtons.tsx +76 -0
  274. package/src/components/Search/SearchAiConversationInput.tsx +61 -18
  275. package/src/components/Search/SearchAiDialog.tsx +52 -23
  276. package/src/components/Search/SearchAiMessage.tsx +173 -39
  277. package/src/components/Search/SearchAiNegativeFeedbackForm.tsx +212 -0
  278. package/src/components/Search/SearchDialog.tsx +49 -13
  279. package/src/components/Search/SearchGroups.tsx +6 -1
  280. package/src/components/Search/SearchHighlight.tsx +1 -0
  281. package/src/components/Search/SearchItem.tsx +15 -3
  282. package/src/components/Search/variables.ts +38 -64
  283. package/src/components/Segmented/Segmented.tsx +16 -21
  284. package/src/components/Select/Select.tsx +8 -4
  285. package/src/components/Select/SelectInput.tsx +11 -1
  286. package/src/components/SidebarActions/{styled.tsx → styled.ts} +11 -4
  287. package/src/components/Tag/Tag.tsx +36 -18
  288. package/src/components/Tag/variables.dark.ts +143 -36
  289. package/src/components/Tag/variables.ts +85 -60
  290. package/src/components/Tooltip/Tooltip.tsx +2 -1
  291. package/src/components/VersionPicker/VersionPicker.tsx +2 -1
  292. package/src/config.ts +2 -0
  293. package/src/core/constants/index.ts +2 -0
  294. package/src/core/constants/mcp.ts +1 -0
  295. package/src/core/constants/request-methods.ts +10 -0
  296. package/src/core/constants/search.ts +8 -4
  297. package/src/core/hoc/index.ts +1 -1
  298. package/src/core/hooks/__mocks__/use-theme-hooks.ts +2 -2
  299. package/src/core/hooks/__tests__/mocks/mock-intersection-observer.ts +9 -8
  300. package/src/core/hooks/catalog/{useCatalogEntitySchema.ts → use-catalog-entity-schema.ts} +3 -3
  301. package/src/core/hooks/catalog/{useGraph.ts → use-graph.ts} +1 -1
  302. package/src/core/hooks/code-walkthrough/__mocks__/MockIntersectionObserver.ts +1 -1
  303. package/src/core/hooks/code-walkthrough/__mocks__/mock-intersection-observer.ts +24 -0
  304. package/src/core/hooks/code-walkthrough/use-code-walkthrough-controls.ts +1 -0
  305. package/src/core/hooks/code-walkthrough/use-code-walkthrough-steps.ts +2 -2
  306. package/src/core/hooks/code-walkthrough/use-renderable-files.ts +1 -1
  307. package/src/core/hooks/index.ts +8 -2
  308. package/src/core/hooks/menu/use-collapse.ts +3 -3
  309. package/src/core/hooks/menu/use-mobile-menu-items.ts +1 -0
  310. package/src/core/hooks/menu/use-nested-menu.ts +2 -2
  311. package/src/core/hooks/search/use-feedback-tooltip.ts +32 -0
  312. package/src/core/hooks/use-connect-mcp-button.ts +79 -0
  313. package/src/core/hooks/use-mcp-config.ts +49 -0
  314. package/src/core/hooks/use-page-actions.ts +164 -146
  315. package/src/core/hooks/use-product-picker.ts +2 -1
  316. package/src/core/hooks/use-tabs.ts +168 -86
  317. package/src/core/hooks/use-telemetry-fallback.ts +11 -8
  318. package/src/core/hooks/use-theme-config.ts +1 -0
  319. package/src/core/hooks/use-theme-hooks.ts +2 -1
  320. package/src/core/openapi/index.ts +3 -1
  321. package/src/core/styles/dark.ts +4 -0
  322. package/src/core/styles/global.ts +6 -1
  323. package/src/core/templates/Markdown.tsx +1 -0
  324. package/src/core/types/catalog.ts +3 -1
  325. package/src/core/types/filter.ts +1 -0
  326. package/src/core/types/hooks.ts +11 -1
  327. package/src/core/types/index.ts +20 -18
  328. package/src/core/types/l10n.ts +37 -1
  329. package/src/core/types/mcp.ts +8 -0
  330. package/src/core/types/search.ts +15 -5
  331. package/src/core/types/segmented.ts +15 -0
  332. package/src/core/types/select.ts +1 -0
  333. package/src/core/types/sidebar.ts +1 -0
  334. package/src/core/utils/args-typecheck.ts +2 -2
  335. package/src/core/utils/clipboard-service.ts +2 -0
  336. package/src/core/utils/frontmatter-translate.ts +9 -0
  337. package/src/core/utils/get-operation-color.ts +18 -0
  338. package/src/core/utils/get-user-agent.ts +1 -0
  339. package/src/core/utils/index.ts +5 -2
  340. package/src/core/utils/js-utils.ts +1 -1
  341. package/src/core/utils/load-and-navigate.ts +1 -0
  342. package/src/core/utils/markdoc.ts +1 -0
  343. package/src/core/utils/mcp.ts +34 -0
  344. package/src/core/utils/parse-style-string.ts +1 -0
  345. package/src/ext/configure.ts +15 -8
  346. package/src/ext/process-scorecard.ts +1 -0
  347. package/src/ext/{useConfigureReplay.ts → use-configure-replay.ts} +5 -3
  348. package/src/icons/AiStarsGradientIcon/AiStarsGradientIcon.tsx +13 -4
  349. package/src/icons/AiStarsIcon/AiStarsIcon.tsx +11 -2
  350. package/src/icons/ConnectIcon/ConnectIcon.tsx +27 -0
  351. package/src/icons/CubeIcon/CubeIcon.tsx +27 -0
  352. package/src/icons/HashtagIcon/HashtagIcon.tsx +23 -0
  353. package/src/icons/RedoclyIcon/RedoclyIcon.tsx +4 -22
  354. package/src/icons/ThumbDownFilledIcon/ThumbDownFilledIcon.tsx +38 -0
  355. package/src/icons/ThumbUpFilledIcon/ThumbUpFilledIcon.tsx +35 -0
  356. package/src/icons/VSCodeIcon/VSCodeIcon.tsx +29 -0
  357. package/src/index.ts +4 -3
  358. package/src/layouts/ThreePanelLayout.tsx +1 -1
  359. package/src/markdoc/components/Cards/Card.tsx +1 -28
  360. package/src/markdoc/components/Cards/variables.dark.ts +2 -0
  361. package/src/markdoc/components/Cards/variables.ts +3 -1
  362. package/src/markdoc/components/CodeWalkthrough/CodePanelHeader.tsx +1 -1
  363. package/src/markdoc/components/ConnectMCP/ConnectMCP.tsx +28 -0
  364. package/src/markdoc/components/Tabs/TabList.tsx +312 -105
  365. package/src/markdoc/components/Tabs/Tabs.tsx +136 -11
  366. package/src/markdoc/components/default.ts +1 -0
  367. package/src/markdoc/default.ts +2 -0
  368. package/src/markdoc/tags/card.ts +0 -1
  369. package/src/markdoc/tags/code-walkthrough.ts +2 -0
  370. package/src/markdoc/tags/connect-mcp.ts +25 -0
  371. package/src/markdoc/tags/html.ts +1 -0
  372. package/lib/core/hooks/__mocks__/index.d.ts +0 -28
  373. package/lib/core/hooks/__mocks__/index.js +0 -45
  374. package/lib/core/hooks/__mocks__/search/use-recent-searches.d.ts +0 -5
  375. package/lib/core/hooks/__mocks__/search/use-recent-searches.js +0 -13
  376. package/lib/core/hooks/__mocks__/search/use-search-filter.d.ts +0 -8
  377. package/lib/core/hooks/__mocks__/search/use-search-filter.js +0 -15
  378. package/lib/core/hooks/__mocks__/search/use-suggested-pages.d.ts +0 -4
  379. package/lib/core/hooks/__mocks__/search/use-suggested-pages.js +0 -13
  380. package/lib/core/hooks/__mocks__/use-controlled-state.d.ts +0 -1
  381. package/lib/core/hooks/__mocks__/use-controlled-state.js +0 -7
  382. package/lib/core/hooks/__mocks__/use-element-size.d.ts +0 -4
  383. package/lib/core/hooks/__mocks__/use-element-size.js +0 -9
  384. package/lib/core/hooks/__mocks__/use-input-key-commands.d.ts +0 -3
  385. package/lib/core/hooks/__mocks__/use-input-key-commands.js +0 -8
  386. package/lib/core/hooks/__mocks__/use-mobile-menu.d.ts +0 -1
  387. package/lib/core/hooks/__mocks__/use-mobile-menu.js +0 -7
  388. package/lib/core/hooks/__mocks__/use-theme-config.d.ts +0 -8
  389. package/lib/core/hooks/__mocks__/use-theme-config.js +0 -13
  390. package/lib/core/hooks/__mocks__/use-theme-hooks.d.ts +0 -69
  391. package/lib/core/hooks/__mocks__/use-theme-hooks.js +0 -94
  392. package/lib/core/hooks/__mocks__/use-time-ago.d.ts +0 -3
  393. package/lib/core/hooks/__mocks__/use-time-ago.js +0 -8
  394. package/lib/core/hooks/code-walkthrough/__mocks__/MockIntersectionObserver.d.ts +0 -10
  395. package/lib/core/hooks/code-walkthrough/__mocks__/MockIntersectionObserver.js +0 -56
  396. package/lib/core/hooks/menu/__mocks__/use-mobile-menu-items.d.ts +0 -1
  397. package/lib/core/hooks/menu/__mocks__/use-mobile-menu-items.js +0 -35
  398. /package/lib/components/Markdown/styles/{baseTable.d.ts → base-table.d.ts} +0 -0
  399. /package/lib/components/Markdown/styles/{headingAnchor.d.ts → heading-anchor.d.ts} +0 -0
  400. /package/lib/core/hoc/{typedMemo.d.ts → typed-memo.d.ts} +0 -0
  401. /package/lib/core/hooks/catalog/{useCatalogEntities.d.ts → use-catalog-entities.d.ts} +0 -0
  402. /package/lib/core/hooks/catalog/{useCatalogTableHeaderCellActions.d.ts → use-catalog-table-header-cell-actions.d.ts} +0 -0
  403. /package/lib/core/hooks/catalog/{useCatalogTableViewRow.d.ts → use-catalog-table-view-row.d.ts} +0 -0
  404. /package/lib/core/hooks/catalog/{useGraph.d.ts → use-graph.d.ts} +0 -0
  405. /package/lib/core/utils/{dynamic.d.ts → Dynamic.d.ts} +0 -0
  406. /package/lib/core/utils/{get-file-icon.d.ts → GetFileIcon.d.ts} +0 -0
  407. /package/lib/ext/{useConfigureReplay.d.ts → use-configure-replay.d.ts} +0 -0
  408. /package/src/components/Markdown/styles/{baseTable.ts → base-table.ts} +0 -0
  409. /package/src/components/Markdown/styles/{headingAnchor.ts → heading-anchor.ts} +0 -0
  410. /package/src/components/Panel/{PanelBody.ts → PanelBody.tsx} +0 -0
  411. /package/src/components/Panel/{PanelHeader.ts → PanelHeader.tsx} +0 -0
  412. /package/src/components/Panel/{PanelHeaderTitle.ts → PanelHeaderTitle.tsx} +0 -0
  413. /package/src/components/StatusCode/{StatusCode.ts → StatusCode.tsx} +0 -0
  414. /package/src/components/Typography/{CompactTypography.ts → CompactTypography.tsx} +0 -0
  415. /package/src/components/Typography/{Emphasis.ts → Emphasis.tsx} +0 -0
  416. /package/src/components/Typography/{H1.ts → H1.tsx} +0 -0
  417. /package/src/components/Typography/{H2.ts → H2.tsx} +0 -0
  418. /package/src/components/Typography/{H3.ts → H3.tsx} +0 -0
  419. /package/src/components/Typography/{H4.ts → H4.tsx} +0 -0
  420. /package/src/components/Typography/{SectionHeader.ts → SectionHeader.tsx} +0 -0
  421. /package/src/components/Typography/{Typography.ts → Typography.tsx} +0 -0
  422. /package/src/core/hoc/{typedMemo.ts → typed-memo.ts} +0 -0
  423. /package/src/core/hooks/catalog/{useCatalogEntities.ts → use-catalog-entities.ts} +0 -0
  424. /package/src/core/hooks/catalog/{useCatalogTableHeaderCellActions.ts → use-catalog-table-header-cell-actions.ts} +0 -0
  425. /package/src/core/hooks/catalog/{useCatalogTableViewRow.ts → use-catalog-table-view-row.ts} +0 -0
  426. /package/src/core/utils/{dynamic.tsx → Dynamic.tsx} +0 -0
  427. /package/src/core/utils/{get-file-icon.tsx → GetFileIcon.tsx} +0 -0
@@ -1,5 +1,6 @@
1
1
  import { css } from 'styled-components';
2
2
 
3
+ /* eslint-disable theme/no-raw-colors-in-styles */
3
4
  export const tag = css`
4
5
  /**
5
6
  * @tokens Tag borders
@@ -16,6 +17,7 @@ export const tag = css`
16
17
  --tag-badge-border-width: 2px;
17
18
  --tag-badge-border-color: var(--border-color-secondary); // @presenter Color
18
19
  --tag-border-color-focused: var(--color-blue-4); // @presenter Color
20
+ --tag-close-button-bg-color-focus: var(--color-warm-grey-4); // @presenter Color
19
21
 
20
22
  /**
21
23
  * @tokens Tag spacing
@@ -62,6 +64,7 @@ export const tag = css`
62
64
  --tag-icon-width: 14px; // @presenter Spacing
63
65
  --tag-icon-height: 14px; // @presenter Spacing
64
66
 
67
+
65
68
  /**
66
69
  * @tokens Tag colors
67
70
  */
@@ -157,8 +160,7 @@ export const tag = css`
157
160
  --tag-border-color-hover: var(--color-info-border-hover); // @presenter Color
158
161
  }
159
162
 
160
- .tag-purple,
161
- .tag-head {
163
+ .tag-purple {
162
164
  --tag-color: var(--color-purple-7); // @presenter Color
163
165
  --tag-bg-color: var(--color-purple-1); // @presenter Color
164
166
  --tag-border-color: var(--color-purple-4); // @presenter Color
@@ -269,110 +271,133 @@ export const tag = css`
269
271
  * @tokens Operation tag colors
270
272
  */
271
273
 
272
- --tag-operation-color-delete: #e70b46; // @presenter Color
273
- --tag-operation-bg-color-delete: #fee2e9; // @presenter Color
274
-
275
- --tag-operation-color-get: #25b869; // @presenter Color
276
- --tag-operation-bg-color-get: #e5faef; // @presenter Color
277
-
278
- --tag-operation-color-post: #1e65f5; // @presenter Color
279
- --tag-operation-bg-color-post: #e2ebfe; // @presenter Color
280
-
281
- --tag-operation-color-put: #f5901d; // @presenter Color
282
- --tag-operation-bg-color-put: #fef1e2; // @presenter Color
283
-
284
- --tag-operation-color-patch: #f5c31d; // @presenter Color
285
- --tag-operation-bg-color-patch: #fdf6dd; // @presenter Color
286
-
287
- --tag-operation-color-head: #5b4ccc; // @presenter Color
288
- --tag-operation-bg-color-head: #e6e1fe; // @presenter Color
289
-
290
- --tag-operation-color-options: #1a1c21; // @presenter Color
291
- --tag-operation-bg-color-options: #ededf2; // @presenter Color
292
-
293
- --tag-operation-color-deprecated: var(--text-color-disabled); // @presenter Color
294
-
295
- --tag-action-color-receive: #4db144; // @presenter Color
296
- --tag-action-color-sub: #4db144; // @presenter Color
297
- --tag-action-color-cons: #4db144; // @presenter Color
298
-
299
- --tag-action-color-send: #4144f6; // @presenter Color
300
- --tag-action-color-pub: #4144f6; // @presenter Color
301
- --tag-action-color-publish: #4144f6; // @presenter Color
302
-
303
- --tag-action-color-channel: #F0870E; // @presenter Color
304
- --tag-action-color-topic: #F0870E; // @presenter Color
305
- --tag-action-color-queue: #D72E81; // @presenter Color
306
- --tag-action-color-exchange: #9B51E0; // @presenter Color
274
+ .tag-head {
275
+ --tag-color: #6355CA; // @presenter Color
276
+ --tag-bg-color: #ECEBFA; // @presenter Color
277
+ --tag-bg-color-hover: #E0DEF7; // @presenter Color
278
+ }
307
279
 
308
280
  .tag-delete {
309
- --tag-color: var(--tag-operation-color-delete); // @presenter Color
281
+ --tag-color: #e70b46; // @presenter Color
282
+ --tag-bg-color: #fee2e9; // @presenter Color
283
+ --tag-bg-color-hover: #fdd3dd; // @presenter Color
310
284
  }
311
285
 
312
286
  .tag-get {
313
- --tag-color: var(--tag-operation-color-get); // @presenter Color
287
+ --tag-color: #25b869; // @presenter Color
288
+ --tag-bg-color: #e5faef; // @presenter Color
289
+ --tag-bg-color-hover: #D4F7E5; // @presenter Color
314
290
  }
315
291
 
316
292
  .tag-post {
317
- --tag-color: var(--tag-operation-color-post); // @presenter Color
293
+ --tag-color: #1e65f5; // @presenter Color
294
+ --tag-bg-color: #e2ebfe; // @presenter Color
295
+ --tag-bg-color-hover: #CEDDFD; // @presenter Color
318
296
  }
319
297
 
320
298
  .tag-put {
321
- --tag-color: var(--tag-operation-color-put); // @presenter Color
299
+ --tag-color: #f5901d; // @presenter Color
300
+ --tag-bg-color: #fef1e2; // @presenter Color
301
+ --tag-bg-color-hover: #FDE2C4; // @presenter Color
322
302
  }
323
-
303
+
324
304
  .tag-patch {
325
- --tag-color: var(--tag-operation-color-patch); // @presenter Color
305
+ --tag-color: #f5c31d; // @presenter Color
306
+ --tag-bg-color: #fdf6dd; // @presenter Color
307
+ --tag-bg-color-hover: #FCF0C5; // @presenter Color
326
308
  }
327
309
 
328
310
  .tag-http-deprecated {
329
- --tag-color: var(--tag-operation-color-deprecated) // @presenter Color
311
+ --tag-color: var(--text-color-disabled); // @presenter Color
330
312
  }
331
-
332
- .tag-receive {
333
- --tag-color: var(--tag-action-color-receive); // @presenter Color
313
+
314
+ .tag-http-additional-operation {
315
+ --tag-color: #F97316; // @presenter Color
316
+ --tag-bg-color: #faede3; // @presenter Color
317
+ --tag-bg-color-hover: #fae2cf; // @presenter Color
334
318
  }
335
319
 
336
320
  .tag-send {
337
- --tag-color: var(--tag-action-color-send); // @presenter Color
321
+ --tag-color: #4144F6; // @presenter Color
322
+ --tag-bg-color: #ECECFE; // @presenter Color
323
+ --tag-bg-color-hover: #CFCFFC; // @presenter Color
338
324
  }
339
325
 
340
326
  .tag-pub {
341
- --tag-color: var(--tag-action-color-pub); // @presenter Color
327
+ --tag-color: #4144F6; // @presenter Color
328
+ --tag-bg-color: #ECECFE; // @presenter Color
329
+ --tag-bg-color-hover: #CFCFFC; // @presenter Color
342
330
  }
343
331
 
344
- .tag-sub {
345
- --tag-color: var(--tag-action-color-sub); // @presenter Color
332
+ .tag-publish {
333
+ --tag-color: #4144F6; // @presenter Color
334
+ --tag-bg-color: #ECECFE; // @presenter Color
335
+ --tag-bg-color-hover: #CFCFFC; // @presenter Color
346
336
  }
347
337
 
348
- .tag-cons {
349
- --tag-color: var(--tag-action-color-cons); // @presenter Color
338
+ .tag-receive {
339
+ --tag-color: #4db144; // @presenter Color
340
+ --tag-bg-color: #E5FDE2; // @presenter Color
341
+ --tag-bg-color-hover: #D4FCCF; // @presenter Color
350
342
  }
351
343
 
352
- .tag-publish {
353
- --tag-color: var(--tag-action-color-publish); // @presenter Color
344
+ .tag-sub {
345
+ --tag-color: #4db144; // @presenter Color
346
+ --tag-bg-color: #E5FDE2; // @presenter Color
347
+ --tag-bg-color-hover: #D4FCCF; // @presenter Color
348
+ }
349
+
350
+ .tag-cons {
351
+ --tag-color: #4db144; // @presenter Color
352
+ --tag-bg-color: #E5FDE2; // @presenter Color
353
+ --tag-bg-color-hover: #D4FCCF; // @presenter Color
354
354
  }
355
355
 
356
356
  .tag-channel {
357
- --tag-color: var(--tag-action-color-channel); // @presenter Color
357
+ --tag-color: #F0870E; // @presenter Color
358
+ --tag-bg-color: #FDF1E2; // @presenter Color
359
+ --tag-bg-color-hover: #FBE1C1; // @presenter Color
358
360
  }
359
361
 
360
362
  .tag-topic {
361
- --tag-color: var(--tag-action-color-channel); // @presenter Color
363
+ --tag-color: #F0870E; // @presenter Color
364
+ --tag-bg-color: #FDF1E2; // @presenter Color
365
+ --tag-bg-color-hover: #FBE1C1; // @presenter Color
362
366
  }
363
367
 
364
368
  .tag-queue {
365
- --tag-color: var(--tag-action-color-queue); // @presenter Color
369
+ --tag-color: #D72E81; // @presenter Color
370
+ --tag-bg-color: #FAE5F0; // @presenter Color
371
+ --tag-bg-color-hover: #F7D4E6; // @presenter Color
366
372
  }
367
373
 
368
374
  .tag-exchange {
369
- --tag-color: var(--tag-action-color-exchange); // @presenter Color
375
+ --tag-color: #9B51E0; // @presenter Color
376
+ --tag-bg-color: #F0E5FA; // @presenter Color
377
+ --tag-bg-color-hover: #E6D4F7; // @presenter Color
370
378
  }
371
379
 
372
380
  // shorten alias for exchange tag:
373
381
  .tag-exch {
374
- --tag-color: var(--tag-action-color-exchange); // @presenter Color
382
+ --tag-color: #9B51E0; // @presenter Color
383
+ --tag-bg-color: #F0E5FA; // @presenter Color
384
+ --tag-bg-color-hover: #E6D4F7; // @presenter Color
385
+ }
386
+
387
+ /**
388
+ * @tokens Tag variants
389
+ */
390
+
391
+ .tag-variant-filled {
392
+ --tag-border-color: transparent;
393
+ --tag-border-color-hover: transparent;
394
+ }
395
+
396
+ .tag-variant-outline {
397
+ --tag-bg-color: transparent;
398
+ --tag-bg-color-hover: transparent;
375
399
  }
376
400
 
377
401
  // @tokens End
378
402
  `;
403
+ /* eslint-enable theme/no-raw-colors-in-styles */
@@ -259,7 +259,7 @@ const TooltipWrapper = styled.div`
259
259
  position: relative;
260
260
  display: flex;
261
261
  `;
262
-
262
+ /* eslint-disable theme/no-raw-colors-in-styles */
263
263
  const TooltipBody = styled.span<
264
264
  Pick<Required<TooltipProps>, 'placement' | 'withArrow' | 'arrowPosition'> & { width?: string }
265
265
  >`
@@ -302,3 +302,4 @@ const TooltipBody = styled.span<
302
302
  ${PLACEMENTS[placement]};
303
303
  `}
304
304
  `;
305
+ /* eslint-enable theme/no-raw-colors-in-styles */
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import styled from 'styled-components';
3
3
 
4
4
  import type { Version } from '@redocly/config';
5
- import type { SelectProps } from '@redocly/theme/core/types/select';
5
+ import type { SelectProps } from '@redocly/theme/core/types';
6
6
 
7
7
  import { useThemeHooks, useThemeConfig } from '@redocly/theme/core/hooks';
8
8
  import { Select } from '@redocly/theme/components/Select/Select';
@@ -58,6 +58,7 @@ export function VersionPicker(props: { versions?: Version[]; onChange: (v: Versi
58
58
  'aria-label': translate('versionPicker.label', 'Select version'),
59
59
  }}
60
60
  />
61
+ {/* eslint-disable-next-line theme/require-translate */}
61
62
  <SrOnly id="version-picker-description">
62
63
  This is version picker select, using it you can select a version of the API.
63
64
  </SrOnly>
package/src/config.ts CHANGED
@@ -8,6 +8,7 @@ import type {
8
8
  RudderstackAnalyticsConfig,
9
9
  GtmAnalyticsConfig,
10
10
  ScorecardConfig,
11
+ ScorecardsConfig,
11
12
  ProductGoogleAnalyticsConfig,
12
13
  ProductThemeOverrideConfig,
13
14
  ProductUiConfig,
@@ -27,6 +28,7 @@ export type {
27
28
  RudderstackAnalyticsConfig,
28
29
  GtmAnalyticsConfig,
29
30
  ScorecardConfig,
31
+ ScorecardsConfig,
30
32
  ProductGoogleAnalyticsConfig,
31
33
  ProductThemeOverrideConfig,
32
34
  ProductUiConfig,
@@ -4,3 +4,5 @@ export * from './code-walkthrough';
4
4
  export * from './search';
5
5
  export * from './catalog';
6
6
  export * from './breadcrumb';
7
+ export * from './request-methods';
8
+ export * from './mcp';
@@ -0,0 +1 @@
1
+ export const DEFAULT_MCP_SERVER_NAME = 'mcp-server';
@@ -0,0 +1,10 @@
1
+ export const REQUEST_METHODS = [
2
+ 'GET',
3
+ 'POST',
4
+ 'PUT',
5
+ 'DELETE',
6
+ 'PATCH',
7
+ 'OPTIONS',
8
+ 'HEAD',
9
+ 'TRACE',
10
+ ];
@@ -7,10 +7,14 @@ export enum AiSearchError {
7
7
  EmptyResponse = 'empty_response',
8
8
  ErrorProcessingResponse = 'error_processing_response',
9
9
  }
10
- export const enum AiSearchConversationRole {
11
- USER = 'user',
12
- ASSISTANT = 'assistant',
13
- }
10
+
11
+ export const AiSearchConversationRole = {
12
+ USER: 'user',
13
+ ASSISTANT: 'assistant',
14
+ } as const;
15
+
16
+ export type AiSearchConversationRole =
17
+ (typeof AiSearchConversationRole)[keyof typeof AiSearchConversationRole];
14
18
 
15
19
  const defaultErrorConfig: AiSearchErrorConfig = {
16
20
  headerKey: 'search.ai.error.header',
@@ -1 +1 @@
1
- export * from './typedMemo';
1
+ export * from './typed-memo';
@@ -2,10 +2,10 @@ import { vi } from 'vitest';
2
2
 
3
3
  export const useThemeHooks = vi.fn(() => ({
4
4
  useTranslate: vi.fn(() => ({
5
- translate: vi.fn((key: string, defaultValue: string) =>
5
+ translate: vi.fn((key: string, defaultValue: string | { defaultValue: string }) =>
6
6
  defaultValue
7
7
  ? typeof defaultValue !== 'string'
8
- ? (defaultValue as any).defaultValue
8
+ ? (defaultValue as { defaultValue: string }).defaultValue
9
9
  : defaultValue
10
10
  : key,
11
11
  ),
@@ -3,8 +3,8 @@ export class MockIntersectionObserver {
3
3
  public readonly rootMargin: string;
4
4
  public readonly thresholds: ReadonlyArray<number>;
5
5
 
6
- private viewPort: any;
7
- private entries: any[];
6
+ private viewPort: Element | Document | Window;
7
+ private entries: Array<Partial<IntersectionObserverEntry> & { target: HTMLElement }>;
8
8
  private readonly callback: IntersectionObserverCallback;
9
9
 
10
10
  constructor(callback: IntersectionObserverCallback, options?: IntersectionObserverInit) {
@@ -19,10 +19,11 @@ export class MockIntersectionObserver {
19
19
  }
20
20
 
21
21
  private intersect = () => {
22
- this.entries.map((entry) => {
23
- entry.isIntersecting = this.isInViewPort(entry.target);
24
- });
25
- this.callback(this.entries, this);
22
+ this.entries = this.entries.map((entry) => ({
23
+ ...entry,
24
+ isIntersecting: this.isInViewPort(entry.target),
25
+ }));
26
+ this.callback(this.entries as IntersectionObserverEntry[], this);
26
27
  };
27
28
 
28
29
  isInViewPort(target: HTMLElement): boolean {
@@ -42,7 +43,7 @@ export class MockIntersectionObserver {
42
43
  this.entries = [];
43
44
  }
44
45
 
45
- takeRecords(): any[] {
46
- return this.entries;
46
+ takeRecords(): IntersectionObserverEntry[] {
47
+ return this.entries as IntersectionObserverEntry[];
47
48
  }
48
49
  }
@@ -16,17 +16,17 @@ export function useCatalogEntitySchema({ entity, relatedEntity }: CatalogEntityS
16
16
  parsedSchema = undefined;
17
17
  }
18
18
 
19
- let parsedApiDefinition: any | undefined;
19
+ let parsedApiDefinition: Record<string, unknown> | undefined;
20
20
 
21
21
  try {
22
22
  parsedApiDefinition = relatedEntity?.metadata?.schema
23
- ? JSON.parse(relatedEntity.metadata.schema)
23
+ ? (JSON.parse(relatedEntity.metadata.schema) as Record<string, unknown>)
24
24
  : undefined;
25
25
  } catch (err) {
26
26
  parsedApiDefinition = undefined;
27
27
  }
28
28
 
29
- const definition: any =
29
+ const definition: Record<string, unknown> =
30
30
  !parsedApiDefinition || relatedEntity?.metadata?.specType !== 'openapi'
31
31
  ? {
32
32
  openapi: '3.0.0',
@@ -42,7 +42,7 @@ type EntityGraphData = {
42
42
  key: string;
43
43
  };
44
44
 
45
- // TODO: This isn't final implementation, leaved comments for future reference.
45
+ // Note: This isn't final implementation, leaved comments for future reference.
46
46
  export function useGraph({ entity, relations }: UseGraphProps): UseGraphReturn {
47
47
  const rootNodeId = entity.id;
48
48
 
@@ -18,7 +18,7 @@ export class MockIntersectionObserver {
18
18
  this.disconnect = vi.fn();
19
19
  }
20
20
 
21
- takeRecords(): any[] {
21
+ takeRecords(): IntersectionObserverEntry[] {
22
22
  return [];
23
23
  }
24
24
  }
@@ -0,0 +1,24 @@
1
+ import { vi } from 'vitest';
2
+
3
+ export class MockIntersectionObserver {
4
+ public readonly root: Element | Document | null;
5
+ public readonly rootMargin: string;
6
+ public readonly thresholds: ReadonlyArray<number>;
7
+ observe: (target: HTMLElement) => void;
8
+ unobserve: (target: HTMLElement) => void;
9
+ disconnect: () => void;
10
+
11
+ // @ts-ignore
12
+ constructor(callback: IntersectionObserverCallback, options?: IntersectionObserverInit) {
13
+ this.root = null;
14
+ this.rootMargin = '0px';
15
+ this.thresholds = [1];
16
+ this.observe = vi.fn();
17
+ this.unobserve = vi.fn();
18
+ this.disconnect = vi.fn();
19
+ }
20
+
21
+ takeRecords(): IntersectionObserverEntry[] {
22
+ return [];
23
+ }
24
+ }
@@ -211,6 +211,7 @@ export function useCodeWalkthroughControls(
211
211
  continue;
212
212
  }
213
213
 
214
+ // eslint-disable-next-line no-warning-comments
214
215
  // code-walk-todo: need to check if we have a default fallback
215
216
  const items = Array.isArray(filter?.items) ? filter.items : [];
216
217
 
@@ -299,7 +299,7 @@ type StepsGroup = {
299
299
  freeSpace: number;
300
300
  usedSpace: number;
301
301
  offset: number;
302
- steps: { offset: number; height: number }[];
302
+ steps: { offset: number; height: number; ref?: HTMLElement }[];
303
303
  };
304
304
  /**
305
305
  * This function analyzes the offset and height of each step to determine
@@ -358,7 +358,7 @@ function getGroups(steps: CodeWalkthroughStep[]): StepsGroup[] {
358
358
  offset: stepOffset - currentGroup.offset,
359
359
  height: stepHeight,
360
360
  ref: step.compRef,
361
- } as any);
361
+ });
362
362
  currentGroup.usedSpace += stepHeight + margin;
363
363
  }
364
364
 
@@ -3,7 +3,7 @@ import { useMemo } from 'react';
3
3
  import type { CodeWalkthroughFile } from '@redocly/config';
4
4
 
5
5
  import { findClosestCommonDirectory } from '../../utils/find-closest-common-directory';
6
- import { getFileIconByExt } from '../../utils/get-file-icon';
6
+ import { getFileIconByExt } from '../../utils/GetFileIcon';
7
7
  import { removeLeadingSlash } from '../../utils/urls';
8
8
 
9
9
  export type RenderableFile = CodeWalkthroughFile & {
@@ -26,6 +26,7 @@ export * from './use-language-picker';
26
26
  export * from './use-product-picker';
27
27
  export * from './search/use-search-dialog';
28
28
  export * from './search/use-search-filter';
29
+ export * from './search/use-feedback-tooltip';
29
30
  export * from './use-controlled-state';
30
31
  export * from './use-codeblock-tabs-controls';
31
32
  export * from './code-walkthrough/use-code-walkthrough';
@@ -36,9 +37,14 @@ export * from './code-walkthrough/use-renderable-files';
36
37
  export * from './use-element-size';
37
38
  export * from './use-time-ago';
38
39
  export * from './use-input-key-commands';
39
- export * from './catalog/useCatalogEntities';
40
- export * from './catalog/useGraph';
40
+ export * from './catalog/use-catalog-entities';
41
+ export * from './catalog/use-graph';
41
42
  export * from './use-active-page-version';
42
43
  export * from './use-page-versions';
43
44
  export * from './use-user-teams';
44
45
  export * from './use-page-actions';
46
+ export * from './use-mcp-config';
47
+ export * from './use-connect-mcp-button';
48
+ export * from './catalog/use-catalog-table-view-row';
49
+ export * from './catalog/use-catalog-entity-schema';
50
+ export * from './catalog/use-catalog-table-header-cell-actions';
@@ -199,13 +199,13 @@ function setStyles<T extends Partial<CSSStyleDeclaration>>(
199
199
  }
200
200
  }
201
201
  }
202
-
203
- export function useEvent<T extends (...args: any[]) => any>(callback?: T) {
202
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
203
+ export function useEvent<T extends (...args: any[]) => any>(callback?: T): T {
204
204
  const ref = useRef<T | undefined>(callback);
205
205
 
206
206
  useEffect(() => {
207
207
  ref.current = callback;
208
208
  });
209
209
 
210
- return useCallback(((...args: any) => ref.current?.(...args)) as T, []);
210
+ return useCallback(((...args: Parameters<T>) => ref.current?.(...args)) as T, []);
211
211
  }
@@ -42,6 +42,7 @@ export const useMobileMenuItems = (menuType: MobileMenuType) => {
42
42
 
43
43
  if (menuType === MobileMenuType.PAGE) {
44
44
  if (activeVersion) {
45
+ // eslint-disable-next-line no-warning-comments
45
46
  // TODO: consider to refactor
46
47
  const versionsSection = buildVersionSection(translate, versions, activeVersion);
47
48
  menuItems.push(...versionsSection);
@@ -6,7 +6,7 @@ import type { MenuItemProps } from '../../types/sidebar';
6
6
  import { useMenuItemExpanded } from './use-menu-item-expanded';
7
7
  import { useCollapse } from './use-collapse';
8
8
  import { loadAndNavigate } from '../../utils/load-and-navigate';
9
- import { withoutPathPrefix } from '../../utils/urls';
9
+ import { withoutPathPrefix, withPathPrefix } from '../../utils/urls';
10
10
 
11
11
  type NestedMenuProps = MenuItemProps & {
12
12
  labelRef?: React.RefObject<HTMLElement | null>;
@@ -78,7 +78,7 @@ export function useNestedMenu({ item, labelRef, nestedMenuRef }: NestedMenuProps
78
78
 
79
79
  const [firstChild] = item.items;
80
80
  if (!isExpanded && item.selectFirstItemOnExpand && firstChild.link) {
81
- await loadAndNavigate({ navigate, to: firstChild.link });
81
+ await loadAndNavigate({ navigate, to: withPathPrefix(firstChild.link) });
82
82
  }
83
83
  setIsExpanded(!isExpanded);
84
84
  }, [item, isExpanded, navigate, location.pathname, setIsExpanded]);
@@ -0,0 +1,32 @@
1
+ import { useState } from 'react';
2
+
3
+ import { useControl } from '../use-control';
4
+
5
+ type UseFeedbackTooltipReturn = {
6
+ isOpen: boolean;
7
+ showTooltip: () => void;
8
+ };
9
+
10
+ const DEFAULT_TOOLTIP_DURATION = 1500;
11
+
12
+ export function useFeedbackTooltip(): UseFeedbackTooltipReturn {
13
+ const [closeTooltipTimeout, setCloseTooltipTimeout] = useState<NodeJS.Timeout | null>(null);
14
+ const tooltipControl = useControl();
15
+
16
+ const showTooltip = () => {
17
+ tooltipControl.handleOpen();
18
+ if (closeTooltipTimeout) {
19
+ clearTimeout(closeTooltipTimeout);
20
+ }
21
+ const newCloseTooltipTimeout = setTimeout(() => {
22
+ tooltipControl.handleClose();
23
+ setCloseTooltipTimeout(null);
24
+ }, DEFAULT_TOOLTIP_DURATION);
25
+ setCloseTooltipTimeout(newCloseTooltipTimeout);
26
+ };
27
+
28
+ return {
29
+ isOpen: tooltipControl.isOpened,
30
+ showTooltip,
31
+ };
32
+ }
@@ -0,0 +1,79 @@
1
+ import { useState, useCallback, useMemo } from 'react';
2
+ import debounce from 'lodash.debounce';
3
+
4
+ import type { MCPOption } from '../types';
5
+
6
+ import { useThemeHooks } from './use-theme-hooks';
7
+ import { useMCPConfig } from './use-mcp-config';
8
+ import { ClipboardService } from '../utils/clipboard-service';
9
+
10
+ export type McpButtonOptions = {
11
+ options?: MCPOption[];
12
+ };
13
+
14
+ export type McpButtonSettings = {
15
+ isCopied: boolean;
16
+ cursorUrl: string;
17
+ vscodeUrl: string;
18
+ triggerButtonText: string;
19
+ visibleOptions: MCPOption[];
20
+ handleAction: (action: MCPOption) => void;
21
+ };
22
+
23
+ const COPIED_RESET_TIMEOUT = 1000;
24
+
25
+ export function useConnectMCPButton({
26
+ options = ['cursor', 'vscode', 'copy'],
27
+ }: McpButtonOptions = {}): McpButtonSettings {
28
+ const { useTranslate } = useThemeHooks();
29
+ const { translate } = useTranslate();
30
+ const { serverName, serverUrl, cursorUrl, vscodeUrl } = useMCPConfig();
31
+ const [isCopied, setIsCopied] = useState(false);
32
+
33
+ // eslint-disable-next-line react-hooks/exhaustive-deps
34
+ const resetCopied = useCallback(
35
+ debounce(() => setIsCopied(false), COPIED_RESET_TIMEOUT),
36
+ [],
37
+ );
38
+
39
+ const handleAction = useCallback(
40
+ (action: MCPOption) => {
41
+ if (action === 'copy') {
42
+ const config = {
43
+ [serverName]: {
44
+ url: serverUrl,
45
+ description: 'MCP Server',
46
+ },
47
+ };
48
+ ClipboardService.copyCustom(JSON.stringify(config, null, 2));
49
+ setIsCopied(true);
50
+ resetCopied();
51
+ return;
52
+ }
53
+
54
+ const urlMap: Record<Exclude<MCPOption, 'copy'>, string> = {
55
+ cursor: cursorUrl,
56
+ vscode: vscodeUrl,
57
+ };
58
+
59
+ window.open(urlMap[action], '_blank');
60
+ },
61
+ [cursorUrl, vscodeUrl, serverUrl, serverName, resetCopied],
62
+ );
63
+
64
+ const triggerButtonText = useMemo(
65
+ () => translate('page.actions.connectMcp', 'Connect MCP'),
66
+ [translate],
67
+ );
68
+
69
+ const visibleOptions = useMemo(() => options.filter(Boolean), [options]);
70
+
71
+ return {
72
+ isCopied,
73
+ cursorUrl,
74
+ vscodeUrl,
75
+ triggerButtonText,
76
+ visibleOptions,
77
+ handleAction,
78
+ };
79
+ }