@redocly/theme 0.58.0-next.9 → 0.59.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/lib/components/Catalog/CatalogEntity/CatalogEntity.d.ts +5 -1
  2. package/lib/components/Catalog/CatalogEntity/CatalogEntity.js +4 -4
  3. package/lib/components/Catalog/CatalogEntity/CatalogEntityMetadata.js +3 -3
  4. package/lib/components/Catalog/CatalogEntity/CatalogEntityRelations/CatalogEntityApiDescriptionRelations.js +1 -1
  5. package/lib/components/Catalog/CatalogEntity/CatalogEntityRelations/CatalogEntityTeamRelations.js +1 -1
  6. package/lib/components/Catalog/CatalogEntity/CatalogEntitySchema.d.ts +5 -1
  7. package/lib/components/Catalog/CatalogEntity/CatalogEntitySchema.js +9 -7
  8. package/lib/components/CodeBlock/CodeBlock.d.ts +5 -12
  9. package/lib/components/CodeBlock/CodeBlockControls.d.ts +3 -3
  10. package/lib/components/CodeBlock/CodeBlockControls.js +1 -1
  11. package/lib/components/CodeBlock/CodeBlockDropdown.d.ts +2 -2
  12. package/lib/components/CodeBlock/CodeBlockDropdown.js +4 -13
  13. package/lib/components/CodeBlock/CodeBlockTabs.d.ts +2 -2
  14. package/lib/components/CodeBlock/CodeBlockTabs.js +4 -3
  15. package/lib/components/JsonViewer/JsonViewer.d.ts +1 -1
  16. package/lib/components/JsonViewer/JsonViewer.js +9 -10
  17. package/lib/components/PageActions/PageActions.d.ts +4 -1
  18. package/lib/components/PageActions/PageActions.js +2 -2
  19. package/lib/components/Panel/variables.js +1 -0
  20. package/lib/components/Tag/Tag.d.ts +3 -2
  21. package/lib/components/Tag/Tag.js +21 -5
  22. package/lib/components/Tag/variables.dark.js +135 -0
  23. package/lib/components/Tag/variables.js +120 -58
  24. package/lib/core/constants/catalog.js +4 -0
  25. package/lib/core/contexts/CodeSnippetContext.d.ts +14 -6
  26. package/lib/core/contexts/CodeSnippetContext.js +57 -14
  27. package/lib/core/hooks/use-codeblock-tabs-controls.d.ts +2 -2
  28. package/lib/core/hooks/use-local-state.js +22 -18
  29. package/lib/core/hooks/use-page-actions.d.ts +2 -1
  30. package/lib/core/hooks/use-page-actions.js +48 -6
  31. package/lib/core/hooks/use-tabs.d.ts +11 -6
  32. package/lib/core/hooks/use-tabs.js +117 -207
  33. package/lib/core/openapi/index.d.ts +1 -0
  34. package/lib/core/openapi/index.js +3 -1
  35. package/lib/core/types/l10n.d.ts +1 -1
  36. package/lib/core/types/open-api-server.d.ts +1 -0
  37. package/lib/core/utils/index.d.ts +1 -0
  38. package/lib/core/utils/index.js +1 -0
  39. package/lib/core/utils/tabs.d.ts +1 -0
  40. package/lib/core/utils/tabs.js +8 -0
  41. package/lib/icons/CursorIcon/CursorIcon.d.ts +9 -0
  42. package/lib/icons/CursorIcon/CursorIcon.js +22 -0
  43. package/lib/layouts/DocumentationLayout.js +1 -3
  44. package/lib/markdoc/components/CodeGroup/CodeGroup.js +49 -27
  45. package/lib/markdoc/components/Tabs/Tab.js +1 -1
  46. package/lib/markdoc/components/Tabs/TabList.d.ts +2 -14
  47. package/lib/markdoc/components/Tabs/TabList.js +65 -16
  48. package/lib/markdoc/components/Tabs/Tabs.d.ts +2 -2
  49. package/lib/markdoc/components/Tabs/Tabs.js +11 -87
  50. package/lib/markdoc/tags/tabs.js +5 -0
  51. package/package.json +4 -4
  52. package/src/components/Catalog/CatalogEntity/CatalogEntity.tsx +15 -2
  53. package/src/components/Catalog/CatalogEntity/CatalogEntityMetadata.tsx +3 -3
  54. package/src/components/Catalog/CatalogEntity/CatalogEntityRelations/CatalogEntityApiDescriptionRelations.tsx +1 -1
  55. package/src/components/Catalog/CatalogEntity/CatalogEntityRelations/CatalogEntityTeamRelations.tsx +1 -1
  56. package/src/components/Catalog/CatalogEntity/CatalogEntitySchema.tsx +27 -18
  57. package/src/components/CodeBlock/CodeBlock.tsx +5 -11
  58. package/src/components/CodeBlock/CodeBlockControls.tsx +4 -7
  59. package/src/components/CodeBlock/CodeBlockDropdown.tsx +11 -20
  60. package/src/components/CodeBlock/CodeBlockTabs.tsx +8 -8
  61. package/src/components/JsonViewer/JsonViewer.tsx +16 -9
  62. package/src/components/PageActions/PageActions.tsx +6 -4
  63. package/src/components/Panel/variables.ts +1 -0
  64. package/src/components/Tag/Tag.tsx +33 -8
  65. package/src/components/Tag/variables.dark.ts +135 -0
  66. package/src/components/Tag/variables.ts +120 -58
  67. package/src/core/constants/catalog.ts +4 -0
  68. package/src/core/contexts/CodeSnippetContext.tsx +54 -18
  69. package/src/core/hooks/use-codeblock-tabs-controls.ts +2 -2
  70. package/src/core/hooks/use-local-state.ts +28 -19
  71. package/src/core/hooks/use-page-actions.ts +63 -6
  72. package/src/core/hooks/use-tabs.ts +160 -238
  73. package/src/core/openapi/index.ts +1 -0
  74. package/src/core/types/l10n.ts +13 -0
  75. package/src/core/types/open-api-server.ts +1 -0
  76. package/src/core/utils/index.ts +1 -0
  77. package/src/core/utils/tabs.ts +4 -0
  78. package/src/icons/CursorIcon/CursorIcon.tsx +35 -0
  79. package/src/layouts/DocumentationLayout.tsx +3 -10
  80. package/src/markdoc/components/CodeGroup/CodeGroup.tsx +81 -52
  81. package/src/markdoc/components/Tabs/Tab.tsx +1 -0
  82. package/src/markdoc/components/Tabs/TabList.tsx +85 -30
  83. package/src/markdoc/components/Tabs/Tabs.tsx +12 -125
  84. package/src/markdoc/tags/tabs.ts +5 -0
@@ -2,5 +2,9 @@ import React from 'react';
2
2
  export type CatalogEntityProps = {
3
3
  RedocSchema: React.ComponentType<any>;
4
4
  StoreProvider: React.ComponentType<any>;
5
+ GraphqlTypeRenderer?: React.ComponentType<{
6
+ sdl: string;
7
+ typeName: string;
8
+ }>;
5
9
  };
6
- export declare function CatalogEntity({ RedocSchema, StoreProvider }: CatalogEntityProps): React.JSX.Element;
10
+ export declare function CatalogEntity({ RedocSchema, StoreProvider, GraphqlTypeRenderer, }: CatalogEntityProps): React.JSX.Element;
@@ -26,13 +26,13 @@ const renderFirstColumnEntitySection = (entity) => {
26
26
  return react_1.default.createElement(CatalogEntityMetadata_1.CatalogEntityMetadata, { entity: entity });
27
27
  }
28
28
  };
29
- const renderDataSchemaSection = (entity, relatedEntity, RedocSchema, StoreProvider) => {
29
+ const renderDataSchemaSection = (entity, relatedEntity, RedocSchema, StoreProvider, GraphqlTypeRenderer) => {
30
30
  if (entity.type !== 'data-schema') {
31
31
  return null;
32
32
  }
33
- return (react_1.default.createElement(CatalogEntitySchema_1.CatalogEntitySchema, { entity: entity, relatedEntity: relatedEntity, RedocSchema: RedocSchema, StoreProvider: StoreProvider }));
33
+ return (react_1.default.createElement(CatalogEntitySchema_1.CatalogEntitySchema, { entity: entity, relatedEntity: relatedEntity, RedocSchema: RedocSchema, StoreProvider: StoreProvider, GraphqlTypeRenderer: GraphqlTypeRenderer }));
34
34
  };
35
- function CatalogEntity({ RedocSchema, StoreProvider }) {
35
+ function CatalogEntity({ RedocSchema, StoreProvider, GraphqlTypeRenderer, }) {
36
36
  var _a;
37
37
  const { useTranslate, useCatalog, usePageProps } = (0, hooks_1.useThemeHooks)();
38
38
  const { translate } = useTranslate();
@@ -52,7 +52,7 @@ function CatalogEntity({ RedocSchema, StoreProvider }) {
52
52
  react_1.default.createElement(react_router_dom_1.Route, { index: true, element: react_1.default.createElement(react_1.default.Fragment, null,
53
53
  react_1.default.createElement(CatalogPageDescription_1.CatalogPageDescription, { title: entity.title, description: (_a = entity.summary) !== null && _a !== void 0 ? _a : '', tag: entity.key }),
54
54
  react_1.default.createElement(CatalogEntityProperties_1.CatalogEntityProperties, { entity: entity }),
55
- renderDataSchemaSection(entity, relatedEntity, RedocSchema, StoreProvider),
55
+ renderDataSchemaSection(entity, relatedEntity, RedocSchema, StoreProvider, GraphqlTypeRenderer),
56
56
  react_1.default.createElement(CatalogTwoColumnsSection, null,
57
57
  renderFirstColumnEntitySection(entity),
58
58
  react_1.default.createElement(CatalogEntityLinks_1.CatalogEntityLinks, { entity: entity })),
@@ -48,17 +48,17 @@ const CatalogEntityInfoBar_1 = require("../../../components/Catalog/CatalogEntit
48
48
  const MAX_INITIAL_ITEMS = 4;
49
49
  function renderMetadataValue(value) {
50
50
  if ((0, utils_1.isPlainObject)(value)) {
51
- return react_1.default.createElement(JsonViewerWrapper, { data: value, expandLevel: 3, hideHeader: true });
51
+ return react_1.default.createElement(JsonViewerWrapper, { data: value, expandLevel: 3, controls: false });
52
52
  }
53
53
  if (Array.isArray(value)) {
54
- return (react_1.default.createElement(ArrayWrapper, null, value.map((item, index) => (react_1.default.createElement("div", { key: index }, (0, utils_1.isPlainObject)(item) ? (react_1.default.createElement(JsonViewerWrapper, { data: item, expandLevel: 3, hideHeader: true })) : (react_1.default.createElement("span", null, String(item))))))));
54
+ return (react_1.default.createElement(ArrayWrapper, null, value.map((item, index) => (react_1.default.createElement("div", { key: index }, (0, utils_1.isPlainObject)(item) ? (react_1.default.createElement(JsonViewerWrapper, { data: item, expandLevel: 3, controls: false })) : (react_1.default.createElement("span", null, String(item))))))));
55
55
  }
56
56
  return react_1.default.createElement("span", null, String(value));
57
57
  }
58
58
  function CatalogEntityMetadata({ entity }) {
59
59
  const { useTranslate } = (0, hooks_1.useThemeHooks)();
60
60
  const { translate } = useTranslate();
61
- const _a = entity.metadata || {}, { schema } = _a, metadata = __rest(_a, ["schema"]);
61
+ const _a = entity.metadata || {}, { schema, sdl } = _a, metadata = __rest(_a, ["schema", "sdl"]);
62
62
  const metadataToShow = Object.entries(metadata).filter(([key]) => !(entity.type === 'api-description' && key === 'descriptionFile'));
63
63
  const [isOn, setIsOn] = (0, react_1.useState)(false);
64
64
  const hasMoreItems = metadataToShow.length > MAX_INITIAL_ITEMS;
@@ -13,7 +13,7 @@ const MoleculesIcon_1 = require("../../../../icons/MoleculesIcon/MoleculesIcon")
13
13
  const NetworkIcon_1 = require("../../../../icons/NetworkIcon/NetworkIcon");
14
14
  function CatalogEntityApiDescriptionRelations({ entity, relations, query, searchQuery, setSearchQuery, setFilter, entitiesCatalogConfig, catalogConfig, sortOption, setSortOption, handleSortClick, isColumnSorted, shouldShowLoadMore, }) {
15
15
  return (react_1.default.createElement("div", { "data-component-name": "Catalog/CatalogEntity/CatalogEntityRelations/CatalogEntityApiDescriptionRelations" },
16
- react_1.default.createElement(Tabs_1.Tabs, { key: entity.id, forceReady: relations.length > 0, size: Tabs_1.TabsSize.MEDIUM },
16
+ react_1.default.createElement(Tabs_1.Tabs, { key: entity.id, size: Tabs_1.TabsSize.MEDIUM },
17
17
  react_1.default.createElement(TabItem, { label: "Operations", icon: react_1.default.createElement(MoleculesIcon_1.MoleculesIcon, null), onClick: () => setFilter('type:api-operation') },
18
18
  react_1.default.createElement(CatalogEntityDefaultRelations_1.CatalogEntityDefaultRelations, { key: "operations-table", entity: entity, relations: relations, query: query, searchQuery: searchQuery, setSearchQuery: setSearchQuery, entitiesCatalogConfig: entitiesCatalogConfig, catalogConfig: catalogConfig, sortOption: sortOption, setSortOption: setSortOption, handleSortClick: handleSortClick, isColumnSorted: isColumnSorted, shouldShowLoadMore: shouldShowLoadMore, shouldShowHeading: false, listType: "api-operation" })),
19
19
  react_1.default.createElement(TabItem, { label: "Schemas", icon: react_1.default.createElement(NetworkIcon_1.NetworkIcon, null), onClick: () => setFilter('type:data-schema') },
@@ -40,7 +40,7 @@ const teamColumns = [
40
40
  ];
41
41
  function CatalogEntityTeamRelations({ entity, relations, query, searchQuery, setSearchQuery, setFilter, entitiesCatalogConfig, catalogConfig, sortOption, setSortOption, handleSortClick, isColumnSorted, shouldShowLoadMore, }) {
42
42
  return (react_1.default.createElement("div", { "data-component-name": "Catalog/CatalogEntity/CatalogEntityRelations/CatalogEntityTeamRelations" },
43
- react_1.default.createElement(Tabs_1.Tabs, { forceReady: relations.length > 0, size: Tabs_1.TabsSize.MEDIUM },
43
+ react_1.default.createElement(Tabs_1.Tabs, { size: Tabs_1.TabsSize.MEDIUM },
44
44
  react_1.default.createElement(TabItem, { label: "Members", icon: react_1.default.createElement(PeopleIcon_1.PeopleIcon, null), onClick: () => setFilter('type:user') },
45
45
  react_1.default.createElement(CatalogEntityRelationsTable_1.CatalogEntityRelationsTable, { key: "members-table", entity: entity, entitiesCatalogConfig: entitiesCatalogConfig, catalogConfig: catalogConfig, relations: relations, query: query, searchQuery: searchQuery, setSearchQuery: setSearchQuery, columns: teamColumns, sortOption: sortOption, setSortOption: setSortOption, handleSortClick: handleSortClick, isColumnSorted: isColumnSorted, shouldShowLoadMore: shouldShowLoadMore, listType: "team" })),
46
46
  react_1.default.createElement(TabItem, { label: "Related entities", icon: react_1.default.createElement(EntityTypeIcon_1.EntityTypeIcon, null), onClick: () => setFilter('-type:user') },
@@ -5,5 +5,9 @@ export type CatalogEntitySchemaProps = {
5
5
  relatedEntity: BffCatalogRelatedEntity | null;
6
6
  RedocSchema: React.ComponentType<any>;
7
7
  StoreProvider: React.ComponentType<any>;
8
+ GraphqlTypeRenderer?: React.ComponentType<{
9
+ sdl: string;
10
+ typeName: string;
11
+ }>;
8
12
  };
9
- export declare function CatalogEntitySchema({ entity, relatedEntity, RedocSchema, StoreProvider, }: CatalogEntitySchemaProps): React.JSX.Element;
13
+ export declare function CatalogEntitySchema({ entity, relatedEntity, RedocSchema, StoreProvider, GraphqlTypeRenderer, }: CatalogEntitySchemaProps): React.JSX.Element;
@@ -34,20 +34,22 @@ const hooks_1 = require("../../../core/hooks");
34
34
  const useCatalogEntitySchema_1 = require("../../../core/hooks/catalog/useCatalogEntitySchema");
35
35
  const JsonViewer_1 = require("../../../components/JsonViewer/JsonViewer");
36
36
  const CopyButton_1 = require("../../../components/Buttons/CopyButton");
37
- function CatalogEntitySchema({ entity, relatedEntity, RedocSchema, StoreProvider, }) {
37
+ function CatalogEntitySchema({ entity, relatedEntity, RedocSchema, StoreProvider, GraphqlTypeRenderer, }) {
38
+ var _a, _b;
38
39
  const { useTranslate } = (0, hooks_1.useThemeHooks)();
39
40
  const { translate } = useTranslate();
40
41
  const { definition, parsedSchema, rawSchema } = (0, useCatalogEntitySchema_1.useCatalogEntitySchema)({ entity, relatedEntity });
42
+ const isGraphql = ((_a = entity.metadata) === null || _a === void 0 ? void 0 : _a.specType) === 'graphql';
43
+ const graphqlSDL = (_b = entity === null || entity === void 0 ? void 0 : entity.metadata) === null || _b === void 0 ? void 0 : _b.sdl;
41
44
  return (react_1.default.createElement(MetadataWrapper, { "data-component-name": "Catalog/CatalogEntity/CatalogEntityMetadata" },
42
45
  react_1.default.createElement(HeaderWrapper, null,
43
46
  react_1.default.createElement(Heading, null, translate('catalog.entity.schema.title')),
44
- react_1.default.createElement(CopyButton_1.CopyButton, { data: rawSchema, buttonText: "Copy Schema", type: "compound", variant: "secondary", iconPosition: "right", size: "medium" })),
47
+ !isGraphql && (react_1.default.createElement(CopyButton_1.CopyButton, { data: rawSchema, buttonText: "Copy Schema", type: "compound", variant: "secondary", iconPosition: "right", size: "medium" }))),
45
48
  react_1.default.createElement(SplitViewWrapper, null,
46
- react_1.default.createElement(SchemaContentWrapper, null,
47
- react_1.default.createElement(StoreProvider, { definition: definition },
48
- react_1.default.createElement(RedocSchema, { schema: parsedSchema }))),
49
- react_1.default.createElement(SchemaSampleWrapper, null,
50
- react_1.default.createElement(JsonViewer_1.JsonViewer, { data: Sampler.sample(Object.assign({}, parsedSchema)), expandLevel: 3, hideHeader: false })))));
49
+ react_1.default.createElement(SchemaContentWrapper, null, isGraphql && graphqlSDL && GraphqlTypeRenderer ? (react_1.default.createElement(GraphqlTypeRenderer, { sdl: graphqlSDL, typeName: entity.title })) : (react_1.default.createElement(StoreProvider, { definition: definition },
50
+ react_1.default.createElement(RedocSchema, { schema: parsedSchema })))),
51
+ !isGraphql && (react_1.default.createElement(SchemaSampleWrapper, null,
52
+ react_1.default.createElement(JsonViewer_1.JsonViewer, { data: Sampler.sample(Object.assign({}, parsedSchema)), expandLevel: 3 }))))));
51
53
  }
52
54
  const MetadataWrapper = styled_components_1.default.div `
53
55
  display: flex;
@@ -8,8 +8,8 @@ export type CodeBlockProps = {
8
8
  header?: CodeBlockControlsProps;
9
9
  dataTestId?: string;
10
10
  className?: string;
11
- tabs?: CodeBlockTabItems;
12
- dropdown?: CodeBlockDropdownItems;
11
+ tabs?: CodeBlockItems;
12
+ dropdown?: CodeBlockItems;
13
13
  withLineNumbers?: boolean;
14
14
  startLineNumber?: number;
15
15
  highlightedHtml?: string;
@@ -25,20 +25,13 @@ type UnstableExternalCodeSample = {
25
25
  label?: string;
26
26
  get: (source: ExternalSource) => string;
27
27
  };
28
- export type CodeBlockTabItems = {
28
+ export type CodeBlockItems = {
29
29
  items: {
30
30
  name: string;
31
31
  lang?: string;
32
+ id: string;
32
33
  }[];
33
- onChange: (name: string) => void;
34
- value: string;
35
- };
36
- export type CodeBlockDropdownItems = {
37
- items: {
38
- name: string;
39
- lang?: string;
40
- }[];
41
- onChange: (name: string | string[]) => void;
34
+ onChange: (id: string) => void;
42
35
  value: string;
43
36
  };
44
37
  type ExternalSource = {
@@ -1,13 +1,13 @@
1
1
  import React from 'react';
2
2
  import type { JSX } from 'react';
3
- import type { CodeBlockDropdownItems, CodeBlockTabItems } from '../../components/CodeBlock/CodeBlock';
3
+ import type { CodeBlockItems } from '../../components/CodeBlock/CodeBlock';
4
4
  export type CodeBlockControlsProps = {
5
5
  children?: React.ReactNode;
6
6
  className?: string;
7
7
  title?: React.ReactNode | string;
8
8
  controls?: ControlItems | false;
9
- tabs?: CodeBlockTabItems;
10
- dropdown?: CodeBlockDropdownItems;
9
+ tabs?: CodeBlockItems;
10
+ dropdown?: CodeBlockItems;
11
11
  };
12
12
  type ControlItems = {
13
13
  copy?: CopyControlProps;
@@ -38,7 +38,7 @@ function CodeBlockControls({ children, className, title, controls, tabs, dropdow
38
38
  tabs && react_1.default.createElement(CodeBlockTabs_1.CodeBlockTabs, { tabs: tabs }),
39
39
  react_1.default.createElement(ControlsWrapper, null,
40
40
  dropdown && react_1.default.createElement(CodeBlockDropdown_1.CodeBlockDropdown, Object.assign({}, dropdown)),
41
- report && !((_a = report === null || report === void 0 ? void 0 : report.props) === null || _a === void 0 ? void 0 : _a.hide) ? (react_1.default.createElement(TooltipWrapper_1.TooltipWrapper, { tip: translate('codeSnippet.report.tooltipText', 'Report a problem'), placement: "top" },
41
+ report && !report.hidden && !((_a = report === null || report === void 0 ? void 0 : report.props) === null || _a === void 0 ? void 0 : _a.hide) ? (react_1.default.createElement(TooltipWrapper_1.TooltipWrapper, { tip: translate('codeSnippet.report.tooltipText', 'Report a problem'), placement: "top" },
42
42
  react_1.default.createElement(ControlButton, Object.assign({ variant: "text", size: "small", "data-testid": "report-button", icon: controlsType === 'icon' ? react_1.default.createElement(WarningSquareIcon_1.WarningSquareIcon, { size: "18px" }) : undefined }, report.props), controlsType != 'icon' && (((_b = report.props) === null || _b === void 0 ? void 0 : _b.buttonText) || 'Report')))) : null,
43
43
  expand && !((_c = codeSnippet === null || codeSnippet === void 0 ? void 0 : codeSnippet.expand) === null || _c === void 0 ? void 0 : _c.hide) ? (react_1.default.createElement(TooltipWrapper_1.TooltipWrapper, { tip: translate('codeSnippet.expand.tooltipText', 'Expand all'), placement: "top" },
44
44
  react_1.default.createElement(ControlButton, { variant: "text", size: "small", "data-testid": "expand-all", icon: controlsType === 'icon' ? react_1.default.createElement(MaximizeIcon_1.MaximizeIcon, null) : undefined, onClick: expand === null || expand === void 0 ? void 0 : expand.onClick }, controlsType !== 'icon' && ((expand === null || expand === void 0 ? void 0 : expand.label) || 'Expand all')))) : null,
@@ -1,3 +1,3 @@
1
1
  import { type JSX } from 'react';
2
- import type { CodeBlockDropdownItems } from '../../components/CodeBlock/CodeBlock';
3
- export declare function CodeBlockDropdown({ items, onChange, value }: CodeBlockDropdownItems): JSX.Element;
2
+ import type { CodeBlockItems } from '../../components/CodeBlock/CodeBlock';
3
+ export declare function CodeBlockDropdown({ items, onChange, value }: CodeBlockItems): JSX.Element;
@@ -5,31 +5,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.CodeBlockDropdown = CodeBlockDropdown;
7
7
  const react_1 = __importDefault(require("react"));
8
- const styled_components_1 = __importDefault(require("styled-components"));
9
8
  const Dropdown_1 = require("../../components/Dropdown/Dropdown");
10
9
  const DropdownMenu_1 = require("../../components/Dropdown/DropdownMenu");
11
10
  const DropdownMenuItem_1 = require("../../components/Dropdown/DropdownMenuItem");
12
11
  const Button_1 = require("../../components/Button/Button");
13
- const ChevronSortIcon_1 = require("../../icons/ChevronSortIcon/ChevronSortIcon");
14
12
  const NoneIcon_1 = require("../../icons/NoneIcon/NoneIcon");
15
13
  const utils_1 = require("../../core/utils");
16
14
  function CodeBlockDropdown({ items, onChange, value }) {
17
- const activeItem = items.find((item) => item.name === value) || items[0];
15
+ const activeItem = items.find((item) => item.id === value) || items[0];
18
16
  const icon = (activeItem === null || activeItem === void 0 ? void 0 : activeItem.lang) ? (0, utils_1.getFileIconByLanguage)(activeItem === null || activeItem === void 0 ? void 0 : activeItem.lang) : null;
19
- return (react_1.default.createElement(StyledDropdown, { alignment: "end", trigger: react_1.default.createElement(Button_1.Button, { icon: react_1.default.createElement(ChevronSortIcon_1.ChevronSortIcon, null), iconPosition: "right", variant: "text", size: "small" },
17
+ return (react_1.default.createElement(Dropdown_1.Dropdown, { withArrow: true, alignment: "end", trigger: react_1.default.createElement(Button_1.Button, { iconPosition: "right", variant: "ghost", size: "small" },
20
18
  icon,
21
19
  activeItem.name) },
22
20
  react_1.default.createElement(DropdownMenu_1.DropdownMenu, null, items.map((item) => {
23
21
  const icon = (0, utils_1.getFileIconByLanguage)(item.lang || '');
24
- return (react_1.default.createElement(DropdownMenuItem_1.DropdownMenuItem, { key: item.lang, onAction: () => onChange(item.name), active: item.name === activeItem.name, prefix: item.lang ? icon : react_1.default.createElement(NoneIcon_1.NoneIcon, { size: "var(--icon-size)" }) }, item.name));
22
+ const isActive = item.id === value;
23
+ return (react_1.default.createElement(DropdownMenuItem_1.DropdownMenuItem, { key: item.id, onAction: () => onChange(item.id), active: isActive, prefix: item.lang ? icon : react_1.default.createElement(NoneIcon_1.NoneIcon, { size: "var(--icon-size)" }) }, item.name));
25
24
  }))));
26
25
  }
27
- const StyledDropdown = (0, styled_components_1.default)(Dropdown_1.Dropdown) `
28
- margin-left: auto;
29
- --icon-size: 18px;
30
- --button-color: var(--text-color-secondary);
31
- button.button-size-small {
32
- --button-icon-size: 18px;
33
- }
34
- `;
35
26
  //# sourceMappingURL=CodeBlockDropdown.js.map
@@ -1,6 +1,6 @@
1
1
  import type { JSX } from 'react';
2
- import type { CodeBlockTabItems } from '../../components/CodeBlock/CodeBlock';
2
+ import type { CodeBlockItems } from '../../components/CodeBlock/CodeBlock';
3
3
  export type CodeBlockTabsProps = {
4
- tabs: CodeBlockTabItems;
4
+ tabs: CodeBlockItems;
5
5
  };
6
6
  export declare function CodeBlockTabs({ tabs }: CodeBlockTabsProps): JSX.Element;
@@ -40,15 +40,16 @@ function CodeBlockTabs({ tabs }) {
40
40
  tabRefs,
41
41
  });
42
42
  (0, react_1.useEffect)(() => {
43
- const activeTab = tabRefs.current.find((tab) => (tab === null || tab === void 0 ? void 0 : tab.dataset.name) === tabs.value);
43
+ const activeTab = tabRefs.current.find((tab) => (tab === null || tab === void 0 ? void 0 : tab.dataset.id) === tabs.value);
44
44
  if (activeTab) {
45
45
  activeTab.scrollIntoView({ block: 'nearest', inline: 'center' });
46
46
  }
47
47
  }, [tabs.value]);
48
48
  return (react_1.default.createElement(CodeBlockTabsWrapper, { ref: containerRef, "data-component-name": "CodeBlock/CodeBlockTabs" },
49
49
  react_1.default.createElement(ShadowWrapper, null,
50
- react_1.default.createElement(Tabs, null, tabs.items.map(({ name, lang }, i) => {
50
+ react_1.default.createElement(Tabs, null, tabs.items.map((item, i) => {
51
51
  var _a;
52
+ const { name, lang, id } = item;
52
53
  const ext = (_a = name.match(/\.([^.]+)$/)) === null || _a === void 0 ? void 0 : _a[1];
53
54
  const fileIcon = lang
54
55
  ? (0, get_file_icon_1.getFileIconByLanguage)(lang)
@@ -57,7 +58,7 @@ function CodeBlockTabs({ tabs }) {
57
58
  : null;
58
59
  return (react_1.default.createElement(Tab, { ref: (el) => {
59
60
  tabRefs.current[i] = el;
60
- }, "data-name": name, active: name === tabs.value, key: name + i, onClick: () => tabs.onChange(name) },
61
+ }, "data-name": name, active: id === tabs.value, key: id, onClick: () => tabs.onChange(id) },
61
62
  fileIcon,
62
63
  name));
63
64
  }))),
@@ -3,11 +3,11 @@ import type { CodeBlockControlsProps } from '../../components/CodeBlock/CodeBloc
3
3
  export type PanelType = 'request' | 'responses' | 'request-samples' | 'response-samples';
4
4
  export type JsonProps = {
5
5
  title?: CodeBlockControlsProps['title'];
6
+ controls?: CodeBlockControlsProps['controls'];
6
7
  data: any;
7
8
  className?: string;
8
9
  expandLevel: number;
9
10
  startLineNumber?: number;
10
- hideHeader?: boolean;
11
11
  onCopyClick?: () => void;
12
12
  onPanelToggle?: (isExpanded: boolean, panelType?: PanelType) => void;
13
13
  };
@@ -31,7 +31,7 @@ const react_1 = __importStar(require("react"));
31
31
  const styled_components_1 = __importDefault(require("styled-components"));
32
32
  const CodeBlock_1 = require("../../components/CodeBlock/CodeBlock");
33
33
  const helpers_1 = require("./helpers");
34
- function JsonComponent({ data, expandLevel = 1, className, onCopyClick, onPanelToggle, title, hideHeader, }) {
34
+ function JsonComponent({ data, expandLevel = 1, className, onCopyClick, onPanelToggle, title, controls = {}, }) {
35
35
  const showFoldingButtons = data && Object.values(data).some((value) => typeof value === 'object' && value !== null);
36
36
  const [expandAllSignal, setExpandAllSignal] = react_1.default.useState(undefined);
37
37
  const expandAll = () => {
@@ -49,18 +49,17 @@ function JsonComponent({ data, expandLevel = 1, className, onCopyClick, onPanelT
49
49
  });
50
50
  };
51
51
  const source = JSON.stringify(data, null, 2);
52
+ const hasHeader = title || controls;
52
53
  return (react_1.default.createElement(exports.JsonViewerWrap, { "data-testid": "json-viewer", "data-component-name": "JsonViewer/JsonViewer", className: className },
53
- react_1.default.createElement(CodeBlock_1.CodeBlock, { header: hideHeader
54
- ? undefined
55
- : {
54
+ react_1.default.createElement(CodeBlock_1.CodeBlock, { header: hasHeader
55
+ ? {
56
56
  title,
57
57
  className: 'code-block-header',
58
- controls: {
59
- copy: { data, onClick: onCopyClick, handleOutside: true },
60
- expand: showFoldingButtons ? { onClick: expandAll } : undefined,
61
- collapse: showFoldingButtons ? { onClick: collapseAll } : undefined,
62
- },
63
- }, source: source },
58
+ controls: controls && Object.assign(Object.assign({}, controls), { copy: Object.assign(Object.assign({}, controls.copy), { data, onClick: onCopyClick, handleOutside: true }), expand: showFoldingButtons
59
+ ? Object.assign(Object.assign({}, controls.expand), { onClick: expandAll }) : undefined, collapse: showFoldingButtons
60
+ ? Object.assign(Object.assign({}, controls.collapse), { onClick: collapseAll }) : undefined }),
61
+ }
62
+ : undefined, source: source },
64
63
  react_1.default.createElement(FoldingWrap, null,
65
64
  react_1.default.createElement(helpers_1.JsonValue, { value: data, level: 0, standalone: true, expandAllSignal: expandAllSignal, defaultExpandLevel: Math.max(1, expandLevel) })))));
66
65
  }
@@ -1,6 +1,9 @@
1
1
  import type { JSX } from 'react';
2
+ import { PageActionType } from '../../core/hooks';
2
3
  type PageActionProps = {
3
- pageSlug: string;
4
+ pageSlug?: string;
5
+ mcpUrl?: string;
6
+ actions?: PageActionType[];
4
7
  };
5
8
  export declare function PageActions(props: PageActionProps): JSX.Element | null;
6
9
  export {};
@@ -49,8 +49,8 @@ const CheckmarkFilledIcon_1 = require("../../icons/CheckmarkFilledIcon/Checkmark
49
49
  const hooks_1 = require("../../core/hooks");
50
50
  const ACTION_DONE_DISPLAY_DURATION = 1000;
51
51
  function PageActions(props) {
52
- const { pageSlug } = props;
53
- const actions = (0, hooks_1.usePageActions)(pageSlug || '/');
52
+ const { pageSlug, mcpUrl } = props;
53
+ const actions = (0, hooks_1.usePageActions)(pageSlug || '/', mcpUrl, props.actions);
54
54
  const [actionState, setActionState] = (0, react_1.useState)('idle');
55
55
  if (!actions.length) {
56
56
  return null;
@@ -330,6 +330,7 @@ exports.apiReferencePanels = (0, styled_components_1.css) `
330
330
  .panel-language-list,
331
331
  .panel-overview,
332
332
  .panel-download,
333
+ .panel-mcp-overview,
333
334
  .panel-servers-list,
334
335
  .panel-request-samples,
335
336
  .panel-response-samples,
@@ -8,7 +8,7 @@ type ActionColor = 'receive' | 'send';
8
8
  type ChannelColor = 'channel';
9
9
  type HttpStatusColor = 'http-deprecated';
10
10
  type StatusColor = DefaultStatusColor | ActionStatusColor | SubjectStatusColor | HttpColor | ActionColor | ChannelColor | HttpStatusColor;
11
- type Color = 'red' | 'green' | 'blue' | 'grey' | 'gold' | 'cyan' | 'magenta' | 'purple' | 'lime' | 'geekblue' | 'yellow';
11
+ type Color = 'red' | 'green' | 'blue' | 'grey' | 'turquoise' | 'magenta' | 'purple' | 'carrot' | 'raspberry' | 'orange' | 'grass' | 'persian-green' | 'sky' | 'blueberry';
12
12
  export type TagProps = {
13
13
  className?: string;
14
14
  children?: React.ReactNode;
@@ -27,7 +27,8 @@ export type TagProps = {
27
27
  onClose?: (event: React.MouseEvent) => void;
28
28
  maxLength?: number;
29
29
  textTransform?: 'uppercase' | 'lowercase' | 'capitalize' | 'none';
30
+ variant?: 'outline' | 'filled';
30
31
  };
31
- export declare function Tag({ children, color, icon, active, closable, tabIndex, onClick, onKeyDown, onClose, size, borderless, withStatusDot, statusDotColor, maxLength, textTransform, ...otherProps }: TagProps): JSX.Element;
32
+ export declare function Tag({ children, color, icon, active, closable, tabIndex, onClick, onKeyDown, onClose, size, borderless, withStatusDot, statusDotColor, maxLength, textTransform, variant, ...otherProps }: TagProps): JSX.Element;
32
33
  export declare const ContentWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
33
34
  export {};
@@ -21,7 +21,7 @@ const styled_components_1 = __importDefault(require("styled-components"));
21
21
  const CloseIcon_1 = require("../../icons/CloseIcon/CloseIcon");
22
22
  const CheckmarkFilledIcon_1 = require("../../icons/CheckmarkFilledIcon/CheckmarkFilledIcon");
23
23
  function Tag(_a) {
24
- var { children, color, icon, active, closable, tabIndex, onClick, onKeyDown, onClose, size, borderless, withStatusDot, statusDotColor = 'var(--tag-status-dot-color-default)', maxLength, textTransform } = _a, otherProps = __rest(_a, ["children", "color", "icon", "active", "closable", "tabIndex", "onClick", "onKeyDown", "onClose", "size", "borderless", "withStatusDot", "statusDotColor", "maxLength", "textTransform"]);
24
+ var { children, color, icon, active, closable, tabIndex, onClick, onKeyDown, onClose, size, borderless, withStatusDot, statusDotColor = 'var(--tag-status-dot-color-default)', maxLength, textTransform, variant = 'filled' } = _a, otherProps = __rest(_a, ["children", "color", "icon", "active", "closable", "tabIndex", "onClick", "onKeyDown", "onClose", "size", "borderless", "withStatusDot", "statusDotColor", "maxLength", "textTransform", "variant"]);
25
25
  const truncateText = (text, maxLen) => {
26
26
  if (text.length <= maxLen)
27
27
  return text;
@@ -74,7 +74,7 @@ function Tag(_a) {
74
74
  }
75
75
  return children;
76
76
  };
77
- return (react_1.default.createElement(TagWrapper, Object.assign({ tabIndex: tabIndex, "data-component-name": "Tag/Tag", borderless: borderless, color: color, size: size, onClick: onClick, onKeyDown: onKeyDown, hasCloseButton: closable, textTransform: textTransform }, otherProps),
77
+ return (react_1.default.createElement(TagWrapper, Object.assign({ tabIndex: tabIndex, "data-component-name": "Tag/Tag", borderless: borderless, color: color, size: size, onClick: onClick, onKeyDown: onKeyDown, hasCloseButton: closable, textTransform: textTransform, variant: variant }, otherProps),
78
78
  withStatusDot ? react_1.default.createElement(StatusDot, { color: statusDotColor }) : icon ? icon : null,
79
79
  react_1.default.createElement(exports.ContentWrapper, null, renderChildren()),
80
80
  closable && (react_1.default.createElement(CloseButton, { onClick: (event) => {
@@ -131,11 +131,27 @@ const TagWrapper = styled_components_1.default.div.attrs(({ className, color, si
131
131
  ${({ textTransform }) => `text-transform: ${textTransform ? `${textTransform}` : 'var(--tag-text-transform)'};`}
132
132
 
133
133
  color: var(--tag-color);
134
- background-color: var(--tag-bg-color);
135
- ${({ borderless }) => borderless
134
+ background-color: ${({ variant }) => variant === 'filled' ? 'var(--tag-bg-color)' : 'transparent'};
135
+ ${({ borderless, variant }) => borderless
136
136
  ? ''
137
- : 'border: var(--tag-border-width) var(--tag-border-style) var(--tag-border-color);'}
137
+ : `border: var(--tag-border-width) var(--tag-border-style) ${variant === 'filled' ? 'transparent' : 'var(--tag-border-color)'};`}
138
138
  border-radius: var(--tag-border-radius);
139
+
140
+ svg {
141
+ width: var(--tag-icon-width);
142
+ height: var(--tag-icon-height);
143
+ }
144
+
145
+ &:hover {
146
+ background-color: ${({ variant }) => variant === 'filled' ? 'var(--tag-bg-color-hover)' : 'transparent'};
147
+ border-color: ${({ variant }) => variant === 'outline' ? 'var(--tag-border-color-hover)' : 'transparent'};
148
+ }
149
+
150
+ &:focus-visible {
151
+ outline: 1px solid var(--tag-border-color-focused);
152
+ outline-offset: 2px;
153
+ border-radius: var(--tag-border-radius-focused);
154
+ }
139
155
  `;
140
156
  const StatusDot = styled_components_1.default.div `
141
157
  display: inline-block;
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.tagDarkMode = void 0;
4
4
  const styled_components_1 = require("styled-components");
5
5
  exports.tagDarkMode = (0, styled_components_1.css) `
6
+ --tag-border-color-focused: var(--color-blue-8); // @presenter Color
7
+ --tag-badge-border-color: var(--border-color-secondary);
8
+
6
9
  --tag-operation-color-delete: #fa82a2; // @presenter Color
7
10
  --tag-operation-bg-color-delete: #77214C; // @presenter Color
8
11
 
@@ -41,7 +44,139 @@ exports.tagDarkMode = (0, styled_components_1.css) `
41
44
  .tag-draft,
42
45
  .tag-schema,
43
46
  .tag-default {
47
+ --tag-color: var(--color-warm-grey-8); // @presenter Color
44
48
  --tag-bg-color: var(--color-warm-grey-4); // @presenter Color
49
+ --tag-bg-color-hover: var(--color-warm-grey-5); // @presenter Color
50
+ }
51
+
52
+ .tag-red {
53
+ --tag-color: var(--color-red-7); // @presenter Color
54
+ --tag-bg-color: var(--color-red-1); // @presenter Color
55
+ --tag-border-color: var(--color-red-8); // @presenter Color
56
+ --tag-border-color-hover: var(--color-red-6); // @presenter Color
57
+ }
58
+
59
+ .tag-green {
60
+ --tag-color: var(--color-green-6); // @presenter Color
61
+ --tag-bg-color: var(--color-green-1); // @presenter Color
62
+ --tag-border-color: var(--color-green-3); // @presenter Color
63
+ --tag-border-color-hover: var(--color-green-4); // @presenter Color
64
+ --tag-bg-color-hover: var(--color-green-2); // @presenter Color
65
+ }
66
+
67
+ .tag-blue {
68
+ --tag-color: var(--color-blue-7); // @presenter Color
69
+ --tag-bg-color: var(--color-blue-1); // @presenter Color
70
+ --tag-border-color-hover: var(--color-blue-5); // @presenter Color
71
+ --tag-bg-color-hover: var(--color-blue-2); // @presenter Color
72
+ }
73
+
74
+ .tag-magenta,
75
+ .tag-hook {
76
+ --tag-color: var(--color-magenta-4); // @presenter Color
77
+ --tag-bg-color: var(--color-magenta-1); // @presenter Color
78
+ --tag-bg-color-hover: var(--color-magenta-2); // @presenter Color
79
+ }
80
+
81
+ .tag-purple,
82
+ .tag-head {
83
+ --tag-color: var(--color-purple-7); // @presenter Color
84
+ --tag-bg-color: var(--color-purple-1); // @presenter Color
85
+ --tag-bg-color-hover: var(--color-purple-2); // @presenter Color
86
+ --tag-border-color-hover: var(--color-purple-5); // @presenter Color
87
+ }
88
+
89
+ .tag-carrot {
90
+ --tag-color: var(--color-carrot-6); // @presenter Color
91
+ --tag-bg-color: var(--color-carrot-1); // @presenter Color
92
+ --tag-bg-color-hover: var(--color-carrot-2); // @presenter Color
93
+ --tag-border-color: var(--color-carrot-4); // @presenter Color
94
+ }
95
+
96
+ .tag-raspberry {
97
+ --tag-color: var(--color-raspberry-7); // @presenter Color
98
+ --tag-bg-color: var(--color-raspberry-1); // @presenter Color
99
+ --tag-bg-color-hover: var(--color-raspberry-2); // @presenter Color
100
+ }
101
+
102
+ .tag-orange {
103
+ --tag-color: var(--color-orange-7); // @presenter Color
104
+ --tag-bg-color: var(--color-orange-1); // @presenter Color
105
+ --tag-bg-color-hover: var(--color-orange-2); // @presenter Color
106
+ --tag-border-color: var(--color-orange-3); // @presenter Color
107
+ --tag-border-color-hover: var(--color-orange-5); // @presenter Color
108
+ }
109
+
110
+ .tag-grass {
111
+ --tag-bg-color: var(--color-grass-1); // @presenter Color
112
+ --tag-bg-color-hover: var(--color-grass-2); // @presenter Color
113
+ --tag-color: var(--color-grass-7); // @presenter Color
114
+ --tag-border-color: var(--color-grass-3); // @presenter Color
115
+ --tag-border-color-hover: var(--color-grass-5); // @presenter Color
116
+ }
117
+
118
+ .tag-persian-green {
119
+ --tag-color: var(--color-persian-green-7); // @presenter Color
120
+ --tag-bg-color: var(--color-persian-green-1); // @presenter Color
121
+ --tag-bg-color-hover: var(--color-persian-green-2); // @presenter Color
122
+ --tag-border-color: var(--color-persian-green-3); // @presenter Color
123
+ --tag-border-color-hover: var(--color-persian-green-5); // @presenter Color
124
+ }
125
+
126
+ .tag-turquoise,
127
+ .tag-option {
128
+ --tag-color: var(--color-turquoise-6); // @presenter Color
129
+ --tag-bg-color: var(--color-turquoise-1); // @presenter Color
130
+ --tag-bg-color-hover: var(--color-turquoise-2); // @presenter Color
131
+ --tag-border-color: var(--color-turquoise-4); // @presenter Color
132
+ }
133
+
134
+ .tag-sky {
135
+ --tag-color: var(--color-sky-6); // @presenter Color
136
+ --tag-bg-color: var(--color-sky-1); // @presenter Color
137
+ --tag-border-color: var(--color-sky-4); // @presenter Color
138
+ --tag-bg-color-hover: var(--color-sky-2); // @presenter Color
139
+ }
140
+
141
+ .tag-blueberry {
142
+ --tag-color: var(--color-blueberry-7); // @presenter Color
143
+ --tag-bg-color: var(--color-blueberry-1); // @presenter Color
144
+ --tag-border-color-hover: var(--color-blueberry-5); // @presenter Color
145
+ --tag-bg-color-hover: var(--color-blueberry-2); // @presenter Color
146
+ }
147
+
148
+ .tag-warning,
149
+ .tag-deprecated {
150
+ --tag-color: var(--color-warning-active); // @presenter Color
151
+ --tag-bg-color: var(--color-warning-bg); // @presenter Color
152
+ --tag-bg-color-hover: var(--color-warning-bg-hover); // @presenter Color
153
+ }
154
+
155
+ .tag-processing,
156
+ .tag-info {
157
+ --tag-color: var(--color-info-active); // @presenter Color
158
+ --tag-bg-color: var(--color-info-bg); // @presenter Color
159
+ --tag-bg-color-hover: var(--color-info-bg-hover); // @presenter Color
160
+ }
161
+
162
+ .tag-error,
163
+ .tag-declined {
164
+ --tag-color: var(--color-error-active); // @presenter Color
165
+ --tag-bg-color: var(--color-error-bg); // @presenter Color
166
+ --tag-bg-color-hover: var(--color-error-bg-hover); // @presenter Color
167
+ }
168
+
169
+ .tag-success,
170
+ .tag-approved {
171
+ --tag-color: var(--color-success-active); // @presenter Color
172
+ --tag-bg-color: var(--color-success-bg); // @presenter Color
173
+ --tag-bg-color-hover: var(--color-success-bg-hover); // @presenter Color
174
+ }
175
+
176
+ .tag-link {
177
+ --tag-color: var(--color-info-active); // @presenter Color
178
+ --tag-bg-color: var(--color-info-bg); // @presenter Color
179
+ --tag-bg-color-hover: var(--color-info-bg-hover); // @presenter Color
45
180
  }
46
181
  `;
47
182
  //# sourceMappingURL=variables.dark.js.map