@redocly/theme 0.69.0-next.0 → 0.69.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/lib/components/Markdown/Markdown.js +1 -1
  2. package/lib/core/constants/accordion.d.ts +3 -0
  3. package/lib/core/constants/accordion.js +7 -0
  4. package/lib/core/constants/index.d.ts +1 -0
  5. package/lib/core/constants/index.js +1 -0
  6. package/lib/core/styles/global.js +40 -38
  7. package/lib/markdoc/components/Accordion/Accordion.d.ts +9 -0
  8. package/lib/markdoc/components/Accordion/Accordion.js +132 -0
  9. package/lib/markdoc/components/Accordion/AccordionGroup.d.ts +5 -0
  10. package/lib/markdoc/components/Accordion/AccordionGroup.js +29 -0
  11. package/lib/markdoc/components/Accordion/variables.d.ts +1 -0
  12. package/lib/markdoc/components/Accordion/variables.js +40 -0
  13. package/lib/markdoc/components/default.d.ts +2 -0
  14. package/lib/markdoc/components/default.js +2 -0
  15. package/lib/markdoc/default.d.ts +4 -0
  16. package/lib/markdoc/default.js +4 -0
  17. package/lib/markdoc/tags/accordion-group.d.ts +2 -0
  18. package/lib/markdoc/tags/accordion-group.js +10 -0
  19. package/lib/markdoc/tags/accordion.d.ts +2 -0
  20. package/lib/markdoc/tags/accordion.js +14 -0
  21. package/package.json +2 -2
  22. package/src/components/Markdown/Markdown.tsx +2 -1
  23. package/src/core/constants/accordion.ts +4 -0
  24. package/src/core/constants/index.ts +1 -0
  25. package/src/core/styles/global.ts +2 -0
  26. package/src/markdoc/components/Accordion/Accordion.tsx +128 -0
  27. package/src/markdoc/components/Accordion/AccordionGroup.tsx +41 -0
  28. package/src/markdoc/components/Accordion/variables.ts +37 -0
  29. package/src/markdoc/components/default.ts +2 -0
  30. package/src/markdoc/default.ts +4 -0
  31. package/src/markdoc/tags/accordion-group.ts +8 -0
  32. package/src/markdoc/tags/accordion.ts +12 -0
@@ -184,7 +184,7 @@ exports.Markdown = styled_components_1.default.main
184
184
  margin: var(--md-hr-margin-vertical) 0;
185
185
  }
186
186
 
187
- details {
187
+ details:not(${constants_1.ACCORDION_SELECTOR}) {
188
188
  margin: 1.125em 0;
189
189
 
190
190
  summary {
@@ -0,0 +1,3 @@
1
+ export declare const ACCORDION_COMPONENT_NAME = "Markdoc/Accordion/Accordion";
2
+ export declare const ACCORDION_GROUP_COMPONENT_NAME = "Markdoc/Accordion/AccordionGroup";
3
+ export declare const ACCORDION_SELECTOR = "[data-component-name='Markdoc/Accordion/Accordion']";
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ACCORDION_SELECTOR = exports.ACCORDION_GROUP_COMPONENT_NAME = exports.ACCORDION_COMPONENT_NAME = void 0;
4
+ exports.ACCORDION_COMPONENT_NAME = 'Markdoc/Accordion/Accordion';
5
+ exports.ACCORDION_GROUP_COMPONENT_NAME = 'Markdoc/Accordion/AccordionGroup';
6
+ exports.ACCORDION_SELECTOR = `[data-component-name='${exports.ACCORDION_COMPONENT_NAME}']`;
7
+ //# sourceMappingURL=accordion.js.map
@@ -1,3 +1,4 @@
1
+ export * from './accordion';
1
2
  export * from './common';
2
3
  export * from './environments';
3
4
  export * from './code-walkthrough';
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./accordion"), exports);
17
18
  __exportStar(require("./common"), exports);
18
19
  __exportStar(require("./environments"), exports);
19
20
  __exportStar(require("./code-walkthrough"), exports);
@@ -30,25 +30,26 @@ const variables_25 = require("../../components/CodeBlock/variables");
30
30
  const variables_26 = require("../../components/Product/variables");
31
31
  const variables_27 = require("../../components/Markdown/variables");
32
32
  const variables_28 = require("../../components/Banner/variables");
33
- const variables_29 = require("../../markdoc/components/Tabs/variables");
34
- const variables_30 = require("../../markdoc/components/NumberedList/variables");
35
- const variables_31 = require("../../markdoc/components/Diagram/variables");
36
- const variables_32 = require("../../components/LastUpdated/variables");
37
- const variables_33 = require("../../components/Logo/variables");
38
- const variables_34 = require("../../components/StatusCode/variables");
39
- const variables_35 = require("../../components/Segmented/variables");
40
- const variables_36 = require("../../components/UserMenu/variables");
41
- const variables_37 = require("../../components/Tags/variables");
42
- const variables_38 = require("../../components/VersionPicker/variables");
43
- const variables_39 = require("../../components/DatePicker/variables");
44
- const variables_40 = require("../../components/Switch/variables");
45
- const variables_41 = require("../../markdoc/components/Cards/variables");
46
- const variables_42 = require("../../markdoc/components/CodeWalkthrough/variables");
47
- const variables_43 = require("../../components/SkipContent/variables");
48
- const variables_44 = require("../../components/PageActions/variables");
49
- const variables_45 = require("../../components/SvgViewer/variables");
50
- const variables_46 = require("../../components/Toast/variables");
51
- const variables_47 = require("../../components/PageNavigation/variables");
33
+ const variables_29 = require("../../markdoc/components/Accordion/variables");
34
+ const variables_30 = require("../../markdoc/components/Tabs/variables");
35
+ const variables_31 = require("../../markdoc/components/NumberedList/variables");
36
+ const variables_32 = require("../../markdoc/components/Diagram/variables");
37
+ const variables_33 = require("../../components/LastUpdated/variables");
38
+ const variables_34 = require("../../components/Logo/variables");
39
+ const variables_35 = require("../../components/StatusCode/variables");
40
+ const variables_36 = require("../../components/Segmented/variables");
41
+ const variables_37 = require("../../components/UserMenu/variables");
42
+ const variables_38 = require("../../components/Tags/variables");
43
+ const variables_39 = require("../../components/VersionPicker/variables");
44
+ const variables_40 = require("../../components/DatePicker/variables");
45
+ const variables_41 = require("../../components/Switch/variables");
46
+ const variables_42 = require("../../markdoc/components/Cards/variables");
47
+ const variables_43 = require("../../markdoc/components/CodeWalkthrough/variables");
48
+ const variables_44 = require("../../components/SkipContent/variables");
49
+ const variables_45 = require("../../components/PageActions/variables");
50
+ const variables_46 = require("../../components/SvgViewer/variables");
51
+ const variables_47 = require("../../components/Toast/variables");
52
+ const variables_48 = require("../../components/PageNavigation/variables");
52
53
  const palette_1 = require("./palette");
53
54
  const dark_1 = require("./dark");
54
55
  const themeColors = (0, styled_components_1.css) `
@@ -1309,29 +1310,30 @@ exports.styles = (0, styled_components_1.css) `
1309
1310
  ${variables_20.button}
1310
1311
  ${variables_21.aiAssistantButton}
1311
1312
  ${variables_21.connectMCPButton}
1312
- ${variables_41.cards}
1313
+ ${variables_42.cards}
1313
1314
  ${variables_8.catalog}
1314
1315
  ${variables_11.catalogClassic}
1315
1316
  ${variables_25.code}
1316
- ${variables_42.codeWalkthrough}
1317
+ ${variables_43.codeWalkthrough}
1317
1318
  ${docsDropdown}
1318
1319
  ${variables_15.dropdown}
1319
1320
  ${error}
1320
1321
  ${variables_10.filter}
1321
1322
  ${variables_19.footer}
1322
1323
  ${headingsTypography}
1323
- ${variables_37.httpTag}
1324
+ ${variables_38.httpTag}
1324
1325
  ${variables_9.image}
1325
1326
  ${inputs}
1326
1327
  ${variables_1.languagePicker}
1327
- ${variables_32.lastUpdated}
1328
+ ${variables_33.lastUpdated}
1328
1329
  ${links}
1329
1330
  ${loadProgressBar}
1330
- ${variables_33.logo}
1331
+ ${variables_34.logo}
1331
1332
  ${variables_27.markdown}
1332
- ${variables_29.markdownTabs}
1333
- ${variables_30.markdownNumberedList}
1334
- ${variables_31.diagram}
1333
+ ${variables_29.markdownAccordion}
1334
+ ${variables_30.markdownTabs}
1335
+ ${variables_31.markdownNumberedList}
1336
+ ${variables_32.diagram}
1335
1337
  ${variables_24.menu}
1336
1338
  ${variables_24.mobileMenu}
1337
1339
  ${modal}
@@ -1350,26 +1352,26 @@ exports.styles = (0, styled_components_1.css) `
1350
1352
  ${variables_7.toc}
1351
1353
  ${variables_16.tooltip}
1352
1354
  ${typography}
1353
- ${variables_36.userMenu}
1354
- ${variables_38.versionPicker}
1355
+ ${variables_37.userMenu}
1356
+ ${variables_39.versionPicker}
1355
1357
  ${zIndexDepth}
1356
1358
  ${scorecardColors}
1357
- ${variables_34.statusCode}
1359
+ ${variables_35.statusCode}
1358
1360
  ${tab}
1359
1361
  ${icon}
1360
1362
  ${tree}
1361
- ${variables_35.segmented}
1362
- ${variables_40.switcher}
1363
+ ${variables_36.segmented}
1364
+ ${variables_41.switcher}
1363
1365
  ${variables_17.checkbox}
1364
1366
  ${variables_3.feedback}
1365
1367
  ${variables_2.scorecard}
1366
- ${variables_39.datePicker}
1368
+ ${variables_40.datePicker}
1367
1369
  ${replay}
1368
- ${variables_43.skipContent}
1369
- ${variables_44.pageActions}
1370
- ${variables_45.svgViewer}
1371
- ${variables_46.toast}
1372
- ${variables_47.pageNavigation}
1370
+ ${variables_44.skipContent}
1371
+ ${variables_45.pageActions}
1372
+ ${variables_46.svgViewer}
1373
+ ${variables_47.toast}
1374
+ ${variables_48.pageNavigation}
1373
1375
 
1374
1376
  background-color: var(--bg-color);
1375
1377
  color: var(--text-color-primary);
@@ -0,0 +1,9 @@
1
+ import type { JSX, PropsWithChildren } from 'react';
2
+ export type AccordionProps = {
3
+ title: string;
4
+ expanded?: boolean;
5
+ className?: string;
6
+ 'data-source'?: string;
7
+ 'data-hash'?: string;
8
+ };
9
+ export declare function Accordion({ title, expanded, className, children, 'data-source': dataSource, 'data-hash': dataHash, }: PropsWithChildren<AccordionProps>): JSX.Element;
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.Accordion = Accordion;
40
+ const react_1 = __importDefault(require("react"));
41
+ const styled_components_1 = __importStar(require("styled-components"));
42
+ const ChevronRightIcon_1 = require("../../../icons/ChevronRightIcon/ChevronRightIcon");
43
+ const constants_1 = require("../../../core/constants");
44
+ function Accordion({ title, expanded = false, className, children, 'data-source': dataSource, 'data-hash': dataHash, }) {
45
+ return (react_1.default.createElement(AccordionWrapper, { className: className, open: expanded, "data-component-name": constants_1.ACCORDION_COMPONENT_NAME, "data-source": dataSource, "data-hash": dataHash },
46
+ react_1.default.createElement(AccordionSummary, null,
47
+ react_1.default.createElement(ChevronRightIcon_1.ChevronRightIcon, { color: "--md-accordion-chevron-icon-color", size: "var(--md-accordion-chevron-icon-size)" }),
48
+ title),
49
+ react_1.default.createElement(AccordionBody, null, children)));
50
+ }
51
+ const AccordionWrapper = styled_components_1.default.details `
52
+ margin: var(--md-accordion-margin);
53
+ border: var(--md-accordion-border);
54
+ border-radius: var(--md-accordion-border-radius);
55
+ font-family: var(--md-accordion-font-family);
56
+ overflow: hidden;
57
+
58
+ &[open] > summary svg {
59
+ transform: rotate(90deg);
60
+ }
61
+ `;
62
+ const AccordionSummary = styled_components_1.default.summary `
63
+ display: flex;
64
+ align-items: center;
65
+ gap: var(--md-accordion-gap);
66
+ cursor: pointer;
67
+ list-style: none;
68
+
69
+ background-color: var(--md-accordion-header-bg-color);
70
+ color: var(--md-accordion-header-text-color);
71
+ font-weight: var(--md-accordion-header-font-weight);
72
+ font-size: var(--md-accordion-header-font-size);
73
+ line-height: var(--md-accordion-header-line-height);
74
+ padding: var(--md-accordion-header-padding);
75
+
76
+ &::-webkit-details-marker {
77
+ display: none;
78
+ }
79
+
80
+ &:hover {
81
+ background-color: var(--md-accordion-header-bg-color-hover);
82
+ }
83
+
84
+ &:focus-visible {
85
+ outline: none;
86
+ position: relative;
87
+
88
+ &::after {
89
+ content: '';
90
+ position: absolute;
91
+ inset: 2px;
92
+ border: 1px solid var(--button-border-color-focused);
93
+ border-radius: calc(var(--md-accordion-border-radius) - 2px);
94
+ pointer-events: none;
95
+ }
96
+ }
97
+
98
+ svg {
99
+ flex-shrink: 0;
100
+ transition: transform 0.15s ease-out;
101
+ }
102
+ `;
103
+ const showAccordionBody = (0, styled_components_1.keyframes) `
104
+ 0% {
105
+ opacity: 0;
106
+ transform: translateY(-5px);
107
+ }
108
+ 100% {
109
+ opacity: 1;
110
+ transform: translateY(0);
111
+ }
112
+ `;
113
+ const AccordionBody = styled_components_1.default.div `
114
+ padding: var(--md-accordion-body-padding);
115
+ background-color: var(--md-accordion-body-bg-color);
116
+ color: var(--md-accordion-body-text-color);
117
+ font-size: var(--md-accordion-body-font-size);
118
+ line-height: var(--md-accordion-body-line-height);
119
+
120
+ details[open] > & {
121
+ animation: ${showAccordionBody} 0.15s ease-out;
122
+ }
123
+
124
+ > :first-child {
125
+ margin-top: 0;
126
+ }
127
+
128
+ > :last-child {
129
+ margin-bottom: 0;
130
+ }
131
+ `;
132
+ //# sourceMappingURL=Accordion.js.map
@@ -0,0 +1,5 @@
1
+ import type { JSX, PropsWithChildren } from 'react';
2
+ export type AccordionGroupProps = {
3
+ className?: string;
4
+ };
5
+ export declare function AccordionGroup({ className, children, }: PropsWithChildren<AccordionGroupProps>): JSX.Element;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AccordionGroup = AccordionGroup;
7
+ const react_1 = __importDefault(require("react"));
8
+ const styled_components_1 = __importDefault(require("styled-components"));
9
+ const constants_1 = require("../../../core/constants");
10
+ function AccordionGroup({ className, children, }) {
11
+ return (react_1.default.createElement(AccordionGroupWrapper, { className: className, "data-component-name": constants_1.ACCORDION_GROUP_COMPONENT_NAME }, children));
12
+ }
13
+ const AccordionGroupWrapper = styled_components_1.default.div `
14
+ margin: var(--md-accordion-group-margin);
15
+ border: var(--md-accordion-group-border);
16
+ border-radius: var(--md-accordion-group-border-radius);
17
+ overflow: hidden;
18
+
19
+ & > ${constants_1.ACCORDION_SELECTOR} {
20
+ margin: 0;
21
+ border: none;
22
+ border-radius: 0;
23
+ }
24
+
25
+ & > ${constants_1.ACCORDION_SELECTOR} + ${constants_1.ACCORDION_SELECTOR} {
26
+ border-top: var(--md-accordion-group-divider);
27
+ }
28
+ `;
29
+ //# sourceMappingURL=AccordionGroup.js.map
@@ -0,0 +1 @@
1
+ export declare const markdownAccordion: import("styled-components").RuleSet<object>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.markdownAccordion = void 0;
4
+ const styled_components_1 = require("styled-components");
5
+ exports.markdownAccordion = (0, styled_components_1.css) `
6
+ /**
7
+ * @tokens Markdown Accordion
8
+ */
9
+
10
+ --md-accordion-group-margin: var(--spacing-base) 0; // @presenter Spacing
11
+ --md-accordion-group-border: 1px solid var(--border-color-secondary); // @presenter Border
12
+ --md-accordion-group-border-radius: var(--border-radius-xl); // @presenter BorderRadius
13
+ --md-accordion-group-divider: 1px solid var(--border-color-secondary); // @presenter Border
14
+
15
+ --md-accordion-margin: var(--spacing-base) 0; // @presenter Spacing
16
+ --md-accordion-border: 1px solid var(--border-color-secondary); // @presenter Border
17
+ --md-accordion-border-radius: var(--border-radius-xl); // @presenter BorderRadius
18
+ --md-accordion-gap: var(--spacing-xs); // @presenter Spacing
19
+ --md-accordion-font-family: var(--font-family-base); // @presenter FontFamily
20
+
21
+ --md-accordion-chevron-icon-color: var(--text-color-primary); // @presenter Color
22
+ --md-accordion-chevron-icon-size: 16px;
23
+
24
+ --md-accordion-header-bg-color: var(--layer-color); // @presenter Color
25
+ --md-accordion-header-bg-color-hover: var(--layer-color-hover); // @presenter Color
26
+ --md-accordion-header-text-color: var(--text-color-primary); // @presenter Color
27
+ --md-accordion-header-font-weight: var(--font-weight-semibold); // @presenter FontWeight
28
+ --md-accordion-header-line-height: var(--line-height-lg); // @presenter LineHeight
29
+ --md-accordion-header-font-size: var(--font-size-lg); // @presenter FontSize
30
+ --md-accordion-header-padding: var(--spacing-sm) var(--spacing-md); // @presenter Spacing
31
+
32
+ --md-accordion-body-bg-color: var(--bg-color); // @presenter Color
33
+ --md-accordion-body-text-color: var(--text-color-primary); // @presenter Color
34
+ --md-accordion-body-font-size: var(--font-size-base); // @presenter FontSize
35
+ --md-accordion-body-line-height: var(--line-height-base); // @presenter LineHeight
36
+ --md-accordion-body-padding: var(--spacing-sm) var(--spacing-md) var(--spacing-md); // @presenter Spacing
37
+
38
+ // @tokens End
39
+ `;
40
+ //# sourceMappingURL=variables.js.map
@@ -1,3 +1,5 @@
1
+ export * from '../../markdoc/components/Accordion/Accordion';
2
+ export * from '../../markdoc/components/Accordion/AccordionGroup';
1
3
  export * from '../../markdoc/components/Admonition/Admonition';
2
4
  export * from '../../markdoc/components/InlineSvg/InlineSvg';
3
5
  export * from '../../markdoc/components/MarkdocExample/MarkdocExample';
@@ -14,6 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("../../markdoc/components/Accordion/Accordion"), exports);
18
+ __exportStar(require("../../markdoc/components/Accordion/AccordionGroup"), exports);
17
19
  __exportStar(require("../../markdoc/components/Admonition/Admonition"), exports);
18
20
  __exportStar(require("../../markdoc/components/InlineSvg/InlineSvg"), exports);
19
21
  __exportStar(require("../../markdoc/components/MarkdocExample/MarkdocExample"), exports);
@@ -5,6 +5,8 @@ export * from '../markdoc/attributes/img-srcset';
5
5
  export * from '../markdoc/attributes/relative-path';
6
6
  export * from '../markdoc/attributes/svg-content';
7
7
  export * as components from '../markdoc/components/default';
8
+ import { accordion } from '../markdoc/tags/accordion';
9
+ import { accordionGroup } from '../markdoc/tags/accordion-group';
8
10
  import { admonition } from '../markdoc/tags/admonition';
9
11
  import { html } from '../markdoc/tags/html';
10
12
  import { markdocExample } from '../markdoc/tags/markdoc-example';
@@ -29,6 +31,8 @@ import { connectMcp } from '../markdoc/tags/connect-mcp';
29
31
  import { loginButton } from '../markdoc/tags/login-button';
30
32
  import { diagram } from '../markdoc/tags/diagram';
31
33
  export declare const tags: {
34
+ [accordion.tagName]: import("./tags/types").MarkdocTagSchema;
35
+ [accordionGroup.tagName]: import("./tags/types").MarkdocTagSchema;
32
36
  [admonition.tagName]: import("./tags/types").MarkdocTagSchema;
33
37
  [debug.tagName]: import("./tags/types").MarkdocTagSchema;
34
38
  [html.tagName]: import("./tags/types").MarkdocTagSchema;
@@ -47,6 +47,8 @@ __exportStar(require("../markdoc/attributes/svg-content"), exports);
47
47
  /* Components */
48
48
  exports.components = __importStar(require("../markdoc/components/default"));
49
49
  /* Tags */
50
+ const accordion_1 = require("../markdoc/tags/accordion");
51
+ const accordion_group_1 = require("../markdoc/tags/accordion-group");
50
52
  const admonition_1 = require("../markdoc/tags/admonition");
51
53
  const html_1 = require("../markdoc/tags/html");
52
54
  const markdoc_example_1 = require("../markdoc/tags/markdoc-example");
@@ -71,6 +73,8 @@ const connect_mcp_1 = require("../markdoc/tags/connect-mcp");
71
73
  const login_button_1 = require("../markdoc/tags/login-button");
72
74
  const diagram_1 = require("../markdoc/tags/diagram");
73
75
  exports.tags = {
76
+ [accordion_1.accordion.tagName]: accordion_1.accordion.schema,
77
+ [accordion_group_1.accordionGroup.tagName]: accordion_group_1.accordionGroup.schema,
74
78
  [admonition_1.admonition.tagName]: admonition_1.admonition.schema,
75
79
  [debug_1.debug.tagName]: debug_1.debug.schema,
76
80
  [html_1.html.tagName]: html_1.html.schema,
@@ -0,0 +1,2 @@
1
+ import type { MarkdocSchemaWrapper } from '../../markdoc/tags/types';
2
+ export declare const accordionGroup: MarkdocSchemaWrapper;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.accordionGroup = void 0;
4
+ exports.accordionGroup = {
5
+ schema: {
6
+ render: 'AccordionGroup',
7
+ },
8
+ tagName: 'accordion-group',
9
+ };
10
+ //# sourceMappingURL=accordion-group.js.map
@@ -0,0 +1,2 @@
1
+ import type { MarkdocSchemaWrapper } from '../../markdoc/tags/types';
2
+ export declare const accordion: MarkdocSchemaWrapper;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.accordion = void 0;
4
+ exports.accordion = {
5
+ schema: {
6
+ render: 'Accordion',
7
+ attributes: {
8
+ title: { type: String, required: true },
9
+ expanded: { type: Boolean, default: false },
10
+ },
11
+ },
12
+ tagName: 'accordion',
13
+ };
14
+ //# sourceMappingURL=accordion.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/theme",
3
- "version": "0.69.0-next.0",
3
+ "version": "0.69.0-next.1",
4
4
  "description": "Shared UI components lib",
5
5
  "keywords": [
6
6
  "theme",
@@ -68,7 +68,7 @@
68
68
  "vitest": "4.1.10",
69
69
  "vitest-when": "0.6.2",
70
70
  "webpack": "5.105.2",
71
- "@redocly/realm-asyncapi-sdk": "0.14.0"
71
+ "@redocly/realm-asyncapi-sdk": "0.15.0-next.0"
72
72
  },
73
73
  "dependencies": {
74
74
  "@tanstack/react-query": "5.62.3",
@@ -7,6 +7,7 @@ import { markdownBaseTableCss } from '@redocly/theme/components/Markdown/styles/
7
7
  import { markdownLinksCss } from '@redocly/theme/components/Markdown/styles/links';
8
8
  import { headingAnchorCss } from '@redocly/theme/components/Markdown/styles/heading-anchor';
9
9
  import {
10
+ ACCORDION_SELECTOR,
10
11
  ANCHOR_CLASS,
11
12
  H1_CLASS,
12
13
  H2_CLASS,
@@ -172,7 +173,7 @@ export const Markdown = styled.main
172
173
  margin: var(--md-hr-margin-vertical) 0;
173
174
  }
174
175
 
175
- details {
176
+ details:not(${ACCORDION_SELECTOR}) {
176
177
  margin: 1.125em 0;
177
178
 
178
179
  summary {
@@ -0,0 +1,4 @@
1
+ export const ACCORDION_COMPONENT_NAME = 'Markdoc/Accordion/Accordion';
2
+ export const ACCORDION_GROUP_COMPONENT_NAME = 'Markdoc/Accordion/AccordionGroup';
3
+
4
+ export const ACCORDION_SELECTOR = `[data-component-name='${ACCORDION_COMPONENT_NAME}']`;
@@ -1,3 +1,4 @@
1
+ export * from './accordion';
1
2
  export * from './common';
2
3
  export * from './environments';
3
4
  export * from './code-walkthrough';
@@ -28,6 +28,7 @@ import { code } from '@redocly/theme/components/CodeBlock/variables';
28
28
  import { productPicker } from '@redocly/theme/components/Product/variables';
29
29
  import { markdown } from '@redocly/theme/components/Markdown/variables';
30
30
  import { banner } from '@redocly/theme/components/Banner/variables';
31
+ import { markdownAccordion } from '@redocly/theme/markdoc/components/Accordion/variables';
31
32
  import { markdownTabs } from '@redocly/theme/markdoc/components/Tabs/variables';
32
33
  import { markdownNumberedList } from '@redocly/theme/markdoc/components/NumberedList/variables';
33
34
  import { diagram } from '@redocly/theme/markdoc/components/Diagram/variables';
@@ -1352,6 +1353,7 @@ export const styles = css<{ palette?: string }>`
1352
1353
  ${loadProgressBar}
1353
1354
  ${logo}
1354
1355
  ${markdown}
1356
+ ${markdownAccordion}
1355
1357
  ${markdownTabs}
1356
1358
  ${markdownNumberedList}
1357
1359
  ${diagram}
@@ -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';
@@ -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,8 @@
1
+ import type { MarkdocSchemaWrapper } from '@redocly/theme/markdoc/tags/types';
2
+
3
+ export const accordionGroup: MarkdocSchemaWrapper = {
4
+ schema: {
5
+ render: 'AccordionGroup',
6
+ },
7
+ tagName: 'accordion-group',
8
+ };
@@ -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
+ };