@redocly/theme 0.69.0-next.0 → 0.69.0-next.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.
- package/lib/components/Buttons/ConnectMCPButton.js +43 -14
- package/lib/components/MCP/McpConnectionTabs.d.ts +7 -0
- package/lib/components/MCP/McpConnectionTabs.js +151 -0
- package/lib/components/Markdown/Markdown.js +1 -1
- package/lib/core/constants/accordion.d.ts +3 -0
- package/lib/core/constants/accordion.js +7 -0
- package/lib/core/constants/index.d.ts +1 -0
- package/lib/core/constants/index.js +1 -0
- package/lib/core/constants/mcp.d.ts +2 -0
- package/lib/core/constants/mcp.js +8 -1
- package/lib/core/hooks/use-active-section-id.js +3 -1
- package/lib/core/hooks/use-connect-mcp-button.d.ts +1 -1
- package/lib/core/hooks/use-connect-mcp-button.js +16 -13
- package/lib/core/styles/global.js +46 -39
- package/lib/core/types/catalog.d.ts +2 -0
- package/lib/core/types/l10n.d.ts +1 -1
- package/lib/core/types/mcp.d.ts +1 -1
- package/lib/core/utils/mcp.d.ts +5 -0
- package/lib/core/utils/mcp.js +35 -0
- package/lib/icons/CodexIcon/CodexIcon.d.ts +25 -0
- package/lib/icons/CodexIcon/CodexIcon.js +22 -0
- package/lib/layouts/McpNotAllowed.js +5 -3
- package/lib/markdoc/components/Accordion/Accordion.d.ts +9 -0
- package/lib/markdoc/components/Accordion/Accordion.js +132 -0
- package/lib/markdoc/components/Accordion/AccordionGroup.d.ts +5 -0
- package/lib/markdoc/components/Accordion/AccordionGroup.js +29 -0
- package/lib/markdoc/components/Accordion/variables.d.ts +1 -0
- package/lib/markdoc/components/Accordion/variables.js +40 -0
- package/lib/markdoc/components/default.d.ts +2 -0
- package/lib/markdoc/components/default.js +2 -0
- package/lib/markdoc/default.d.ts +4 -0
- package/lib/markdoc/default.js +4 -0
- package/lib/markdoc/tags/accordion-group.d.ts +2 -0
- package/lib/markdoc/tags/accordion-group.js +10 -0
- package/lib/markdoc/tags/accordion.d.ts +2 -0
- package/lib/markdoc/tags/accordion.js +14 -0
- package/lib/markdoc/tags/connect-mcp.js +2 -1
- package/package.json +2 -2
- package/src/components/Buttons/ConnectMCPButton.tsx +44 -14
- package/src/components/MCP/McpConnectionTabs.tsx +263 -0
- package/src/components/Markdown/Markdown.tsx +2 -1
- package/src/core/constants/accordion.ts +4 -0
- package/src/core/constants/index.ts +1 -0
- package/src/core/constants/mcp.ts +10 -0
- package/src/core/hooks/use-active-section-id.ts +3 -1
- package/src/core/hooks/use-connect-mcp-button.ts +23 -15
- package/src/core/styles/global.ts +8 -1
- package/src/core/types/catalog.ts +3 -0
- package/src/core/types/l10n.ts +17 -0
- package/src/core/types/mcp.ts +1 -1
- package/src/core/utils/mcp.ts +39 -0
- package/src/icons/CodexIcon/CodexIcon.tsx +23 -0
- package/src/layouts/McpNotAllowed.tsx +4 -2
- package/src/markdoc/components/Accordion/Accordion.tsx +128 -0
- package/src/markdoc/components/Accordion/AccordionGroup.tsx +41 -0
- package/src/markdoc/components/Accordion/variables.ts +37 -0
- package/src/markdoc/components/default.ts +2 -0
- package/src/markdoc/default.ts +4 -0
- package/src/markdoc/tags/accordion-group.ts +8 -0
- package/src/markdoc/tags/accordion.ts +12 -0
- package/src/markdoc/tags/connect-mcp.ts +3 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
|
|
4
|
+
import type { IconProps } from '@redocly/theme/icons/types';
|
|
5
|
+
|
|
6
|
+
import { getCssColorVariable } from '@redocly/theme/core/utils';
|
|
7
|
+
|
|
8
|
+
const Icon = (props: IconProps) => (
|
|
9
|
+
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}>
|
|
10
|
+
<path d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.073zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.8956zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997z" />
|
|
11
|
+
</svg>
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
export const CodexIcon = styled(Icon).attrs({
|
|
15
|
+
'data-component-name': 'icons/CodexIcon/CodexIcon',
|
|
16
|
+
})`
|
|
17
|
+
path {
|
|
18
|
+
fill: ${({ color }) => getCssColorVariable(color)};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
height: ${({ size }) => size || '16px'};
|
|
22
|
+
width: ${({ size }) => size || '16px'};
|
|
23
|
+
`;
|
|
@@ -5,6 +5,7 @@ import type { JSX } from 'react';
|
|
|
5
5
|
|
|
6
6
|
import { useThemeHooks } from '@redocly/theme/core/hooks';
|
|
7
7
|
import { ConnectMCPButton } from '@redocly/theme/components/Buttons/ConnectMCPButton';
|
|
8
|
+
import { McpConnectionTabs } from '@redocly/theme/components/MCP/McpConnectionTabs';
|
|
8
9
|
|
|
9
10
|
export default function McpNotAllowed(): JSX.Element {
|
|
10
11
|
const { useTranslate } = useThemeHooks();
|
|
@@ -14,17 +15,18 @@ export default function McpNotAllowed(): JSX.Element {
|
|
|
14
15
|
<NotAllowedWrapper data-component-name="layouts/McpNotAllowed">
|
|
15
16
|
<StatusText>405</StatusText>
|
|
16
17
|
<Title data-translation-key="page.mcpNotAllowed.title">
|
|
17
|
-
{translate('page.mcpNotAllowed.title', '
|
|
18
|
+
{translate('page.mcpNotAllowed.title', 'Connect to the MCP server')}
|
|
18
19
|
</Title>
|
|
19
20
|
<Description data-translation-key="page.mcpNotAllowed.description">
|
|
20
21
|
{translate(
|
|
21
22
|
'page.mcpNotAllowed.description',
|
|
22
|
-
'To use this MCP server, register it in your MCP
|
|
23
|
+
'To use this MCP server, register it in your MCP client (for example: VS Code, Cursor, or Claude Code).',
|
|
23
24
|
)}
|
|
24
25
|
</Description>
|
|
25
26
|
<ButtonWrapper>
|
|
26
27
|
<ConnectMCPButton alignment="start" />
|
|
27
28
|
</ButtonWrapper>
|
|
29
|
+
<McpConnectionTabs />
|
|
28
30
|
</NotAllowedWrapper>
|
|
29
31
|
);
|
|
30
32
|
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled, { keyframes } from 'styled-components';
|
|
3
|
+
|
|
4
|
+
import type { JSX, PropsWithChildren } from 'react';
|
|
5
|
+
|
|
6
|
+
import { ChevronRightIcon } from '@redocly/theme/icons/ChevronRightIcon/ChevronRightIcon';
|
|
7
|
+
import { ACCORDION_COMPONENT_NAME } from '@redocly/theme/core/constants';
|
|
8
|
+
|
|
9
|
+
export type AccordionProps = {
|
|
10
|
+
title: string;
|
|
11
|
+
expanded?: boolean;
|
|
12
|
+
className?: string;
|
|
13
|
+
'data-source'?: string;
|
|
14
|
+
'data-hash'?: string;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export function Accordion({
|
|
18
|
+
title,
|
|
19
|
+
expanded = false,
|
|
20
|
+
className,
|
|
21
|
+
children,
|
|
22
|
+
'data-source': dataSource,
|
|
23
|
+
'data-hash': dataHash,
|
|
24
|
+
}: PropsWithChildren<AccordionProps>): JSX.Element {
|
|
25
|
+
return (
|
|
26
|
+
<AccordionWrapper
|
|
27
|
+
className={className}
|
|
28
|
+
open={expanded}
|
|
29
|
+
data-component-name={ACCORDION_COMPONENT_NAME}
|
|
30
|
+
data-source={dataSource}
|
|
31
|
+
data-hash={dataHash}
|
|
32
|
+
>
|
|
33
|
+
<AccordionSummary>
|
|
34
|
+
<ChevronRightIcon
|
|
35
|
+
color="--md-accordion-chevron-icon-color"
|
|
36
|
+
size="var(--md-accordion-chevron-icon-size)"
|
|
37
|
+
/>
|
|
38
|
+
{title}
|
|
39
|
+
</AccordionSummary>
|
|
40
|
+
<AccordionBody>{children}</AccordionBody>
|
|
41
|
+
</AccordionWrapper>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const AccordionWrapper = styled.details`
|
|
46
|
+
margin: var(--md-accordion-margin);
|
|
47
|
+
border: var(--md-accordion-border);
|
|
48
|
+
border-radius: var(--md-accordion-border-radius);
|
|
49
|
+
font-family: var(--md-accordion-font-family);
|
|
50
|
+
overflow: hidden;
|
|
51
|
+
|
|
52
|
+
&[open] > summary svg {
|
|
53
|
+
transform: rotate(90deg);
|
|
54
|
+
}
|
|
55
|
+
`;
|
|
56
|
+
|
|
57
|
+
const AccordionSummary = styled.summary`
|
|
58
|
+
display: flex;
|
|
59
|
+
align-items: center;
|
|
60
|
+
gap: var(--md-accordion-gap);
|
|
61
|
+
cursor: pointer;
|
|
62
|
+
list-style: none;
|
|
63
|
+
|
|
64
|
+
background-color: var(--md-accordion-header-bg-color);
|
|
65
|
+
color: var(--md-accordion-header-text-color);
|
|
66
|
+
font-weight: var(--md-accordion-header-font-weight);
|
|
67
|
+
font-size: var(--md-accordion-header-font-size);
|
|
68
|
+
line-height: var(--md-accordion-header-line-height);
|
|
69
|
+
padding: var(--md-accordion-header-padding);
|
|
70
|
+
|
|
71
|
+
&::-webkit-details-marker {
|
|
72
|
+
display: none;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
&:hover {
|
|
76
|
+
background-color: var(--md-accordion-header-bg-color-hover);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
&:focus-visible {
|
|
80
|
+
outline: none;
|
|
81
|
+
position: relative;
|
|
82
|
+
|
|
83
|
+
&::after {
|
|
84
|
+
content: '';
|
|
85
|
+
position: absolute;
|
|
86
|
+
inset: 2px;
|
|
87
|
+
border: 1px solid var(--button-border-color-focused);
|
|
88
|
+
border-radius: calc(var(--md-accordion-border-radius) - 2px);
|
|
89
|
+
pointer-events: none;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
svg {
|
|
94
|
+
flex-shrink: 0;
|
|
95
|
+
transition: transform 0.15s ease-out;
|
|
96
|
+
}
|
|
97
|
+
`;
|
|
98
|
+
|
|
99
|
+
const showAccordionBody = keyframes`
|
|
100
|
+
0% {
|
|
101
|
+
opacity: 0;
|
|
102
|
+
transform: translateY(-5px);
|
|
103
|
+
}
|
|
104
|
+
100% {
|
|
105
|
+
opacity: 1;
|
|
106
|
+
transform: translateY(0);
|
|
107
|
+
}
|
|
108
|
+
`;
|
|
109
|
+
|
|
110
|
+
const AccordionBody = styled.div`
|
|
111
|
+
padding: var(--md-accordion-body-padding);
|
|
112
|
+
background-color: var(--md-accordion-body-bg-color);
|
|
113
|
+
color: var(--md-accordion-body-text-color);
|
|
114
|
+
font-size: var(--md-accordion-body-font-size);
|
|
115
|
+
line-height: var(--md-accordion-body-line-height);
|
|
116
|
+
|
|
117
|
+
details[open] > & {
|
|
118
|
+
animation: ${showAccordionBody} 0.15s ease-out;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
> :first-child {
|
|
122
|
+
margin-top: 0;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
> :last-child {
|
|
126
|
+
margin-bottom: 0;
|
|
127
|
+
}
|
|
128
|
+
`;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
|
|
4
|
+
import type { JSX, PropsWithChildren } from 'react';
|
|
5
|
+
|
|
6
|
+
import { ACCORDION_GROUP_COMPONENT_NAME, ACCORDION_SELECTOR } from '@redocly/theme/core/constants';
|
|
7
|
+
|
|
8
|
+
export type AccordionGroupProps = {
|
|
9
|
+
className?: string;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export function AccordionGroup({
|
|
13
|
+
className,
|
|
14
|
+
children,
|
|
15
|
+
}: PropsWithChildren<AccordionGroupProps>): JSX.Element {
|
|
16
|
+
return (
|
|
17
|
+
<AccordionGroupWrapper
|
|
18
|
+
className={className}
|
|
19
|
+
data-component-name={ACCORDION_GROUP_COMPONENT_NAME}
|
|
20
|
+
>
|
|
21
|
+
{children}
|
|
22
|
+
</AccordionGroupWrapper>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const AccordionGroupWrapper = styled.div`
|
|
27
|
+
margin: var(--md-accordion-group-margin);
|
|
28
|
+
border: var(--md-accordion-group-border);
|
|
29
|
+
border-radius: var(--md-accordion-group-border-radius);
|
|
30
|
+
overflow: hidden;
|
|
31
|
+
|
|
32
|
+
& > ${ACCORDION_SELECTOR} {
|
|
33
|
+
margin: 0;
|
|
34
|
+
border: none;
|
|
35
|
+
border-radius: 0;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
& > ${ACCORDION_SELECTOR} + ${ACCORDION_SELECTOR} {
|
|
39
|
+
border-top: var(--md-accordion-group-divider);
|
|
40
|
+
}
|
|
41
|
+
`;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { css } from 'styled-components';
|
|
2
|
+
|
|
3
|
+
export const markdownAccordion = css`
|
|
4
|
+
/**
|
|
5
|
+
* @tokens Markdown Accordion
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
--md-accordion-group-margin: var(--spacing-base) 0; // @presenter Spacing
|
|
9
|
+
--md-accordion-group-border: 1px solid var(--border-color-secondary); // @presenter Border
|
|
10
|
+
--md-accordion-group-border-radius: var(--border-radius-xl); // @presenter BorderRadius
|
|
11
|
+
--md-accordion-group-divider: 1px solid var(--border-color-secondary); // @presenter Border
|
|
12
|
+
|
|
13
|
+
--md-accordion-margin: var(--spacing-base) 0; // @presenter Spacing
|
|
14
|
+
--md-accordion-border: 1px solid var(--border-color-secondary); // @presenter Border
|
|
15
|
+
--md-accordion-border-radius: var(--border-radius-xl); // @presenter BorderRadius
|
|
16
|
+
--md-accordion-gap: var(--spacing-xs); // @presenter Spacing
|
|
17
|
+
--md-accordion-font-family: var(--font-family-base); // @presenter FontFamily
|
|
18
|
+
|
|
19
|
+
--md-accordion-chevron-icon-color: var(--text-color-primary); // @presenter Color
|
|
20
|
+
--md-accordion-chevron-icon-size: 16px;
|
|
21
|
+
|
|
22
|
+
--md-accordion-header-bg-color: var(--layer-color); // @presenter Color
|
|
23
|
+
--md-accordion-header-bg-color-hover: var(--layer-color-hover); // @presenter Color
|
|
24
|
+
--md-accordion-header-text-color: var(--text-color-primary); // @presenter Color
|
|
25
|
+
--md-accordion-header-font-weight: var(--font-weight-semibold); // @presenter FontWeight
|
|
26
|
+
--md-accordion-header-line-height: var(--line-height-lg); // @presenter LineHeight
|
|
27
|
+
--md-accordion-header-font-size: var(--font-size-lg); // @presenter FontSize
|
|
28
|
+
--md-accordion-header-padding: var(--spacing-sm) var(--spacing-md); // @presenter Spacing
|
|
29
|
+
|
|
30
|
+
--md-accordion-body-bg-color: var(--bg-color); // @presenter Color
|
|
31
|
+
--md-accordion-body-text-color: var(--text-color-primary); // @presenter Color
|
|
32
|
+
--md-accordion-body-font-size: var(--font-size-base); // @presenter FontSize
|
|
33
|
+
--md-accordion-body-line-height: var(--line-height-base); // @presenter LineHeight
|
|
34
|
+
--md-accordion-body-padding: var(--spacing-sm) var(--spacing-md) var(--spacing-md); // @presenter Spacing
|
|
35
|
+
|
|
36
|
+
// @tokens End
|
|
37
|
+
`;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export * from '@redocly/theme/markdoc/components/Accordion/Accordion';
|
|
2
|
+
export * from '@redocly/theme/markdoc/components/Accordion/AccordionGroup';
|
|
1
3
|
export * from '@redocly/theme/markdoc/components/Admonition/Admonition';
|
|
2
4
|
export * from '@redocly/theme/markdoc/components/InlineSvg/InlineSvg';
|
|
3
5
|
export * from '@redocly/theme/markdoc/components/MarkdocExample/MarkdocExample';
|
package/src/markdoc/default.ts
CHANGED
|
@@ -8,6 +8,8 @@ export * from '@redocly/theme/markdoc/attributes/svg-content';
|
|
|
8
8
|
/* Components */
|
|
9
9
|
export * as components from '@redocly/theme/markdoc/components/default';
|
|
10
10
|
/* Tags */
|
|
11
|
+
import { accordion } from '@redocly/theme/markdoc/tags/accordion';
|
|
12
|
+
import { accordionGroup } from '@redocly/theme/markdoc/tags/accordion-group';
|
|
11
13
|
import { admonition } from '@redocly/theme/markdoc/tags/admonition';
|
|
12
14
|
import { html } from '@redocly/theme/markdoc/tags/html';
|
|
13
15
|
import { markdocExample } from '@redocly/theme/markdoc/tags/markdoc-example';
|
|
@@ -33,6 +35,8 @@ import { loginButton } from '@redocly/theme/markdoc/tags/login-button';
|
|
|
33
35
|
import { diagram } from '@redocly/theme/markdoc/tags/diagram';
|
|
34
36
|
|
|
35
37
|
export const tags = {
|
|
38
|
+
[accordion.tagName]: accordion.schema,
|
|
39
|
+
[accordionGroup.tagName]: accordionGroup.schema,
|
|
36
40
|
[admonition.tagName]: admonition.schema,
|
|
37
41
|
[debug.tagName]: debug.schema,
|
|
38
42
|
[html.tagName]: html.schema,
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MarkdocSchemaWrapper } from '@redocly/theme/markdoc/tags/types';
|
|
2
|
+
|
|
3
|
+
export const accordion: MarkdocSchemaWrapper = {
|
|
4
|
+
schema: {
|
|
5
|
+
render: 'Accordion',
|
|
6
|
+
attributes: {
|
|
7
|
+
title: { type: String, required: true },
|
|
8
|
+
expanded: { type: Boolean, default: false },
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
tagName: 'accordion',
|
|
12
|
+
};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { MarkdocSchemaWrapper } from '@redocly/theme/markdoc/tags/types';
|
|
2
2
|
|
|
3
|
+
import { DEFAULT_MCP_OPTIONS } from '@redocly/theme/core/constants';
|
|
4
|
+
|
|
3
5
|
export const connectMcp: MarkdocSchemaWrapper = {
|
|
4
6
|
schema: {
|
|
5
7
|
render: 'ConnectMCP',
|
|
@@ -16,7 +18,7 @@ export const connectMcp: MarkdocSchemaWrapper = {
|
|
|
16
18
|
},
|
|
17
19
|
options: {
|
|
18
20
|
type: Array,
|
|
19
|
-
default:
|
|
21
|
+
default: DEFAULT_MCP_OPTIONS,
|
|
20
22
|
},
|
|
21
23
|
},
|
|
22
24
|
selfClosing: true,
|