@redocly/theme 0.46.5 → 0.47.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 (202) hide show
  1. package/lib/components/Buttons/CopyButton.d.ts +8 -3
  2. package/lib/components/Buttons/CopyButton.js +4 -3
  3. package/lib/components/Image/Image.d.ts +5 -0
  4. package/lib/components/Image/Image.js +3 -2
  5. package/lib/components/Search/SearchAiResponse.js +1 -1
  6. package/lib/components/Search/SearchDialog.js +6 -4
  7. package/lib/components/StatusCode/StatusCode.js +11 -14
  8. package/lib/core/constants/code-walkthrough.d.ts +1 -0
  9. package/lib/core/constants/code-walkthrough.js +5 -0
  10. package/lib/core/constants/index.d.ts +1 -0
  11. package/lib/core/constants/index.js +1 -0
  12. package/lib/core/contexts/CodeWalkthrough/CodeWalkthroughControlsContext.d.ts +2 -0
  13. package/lib/core/contexts/CodeWalkthrough/CodeWalkthroughControlsContext.js +18 -0
  14. package/lib/core/contexts/CodeWalkthrough/CodeWalkthroughStepsContext.d.ts +2 -0
  15. package/lib/core/contexts/CodeWalkthrough/CodeWalkthroughStepsContext.js +11 -0
  16. package/lib/core/contexts/index.d.ts +2 -0
  17. package/lib/core/contexts/index.js +2 -0
  18. package/lib/core/hooks/code-walkthrough/__mocks__/MockIntersectionObserver.d.ts +10 -0
  19. package/lib/core/hooks/code-walkthrough/__mocks__/MockIntersectionObserver.js +55 -0
  20. package/lib/core/hooks/code-walkthrough/use-code-panel.d.ts +6 -0
  21. package/lib/core/hooks/code-walkthrough/use-code-panel.js +93 -0
  22. package/lib/core/hooks/code-walkthrough/use-code-walkthrough-controls.d.ts +22 -0
  23. package/lib/core/hooks/code-walkthrough/use-code-walkthrough-controls.js +183 -0
  24. package/lib/core/hooks/code-walkthrough/use-code-walkthrough-steps.d.ts +16 -0
  25. package/lib/core/hooks/code-walkthrough/use-code-walkthrough-steps.js +117 -0
  26. package/lib/core/hooks/code-walkthrough/use-code-walkthrough.d.ts +14 -0
  27. package/lib/core/hooks/code-walkthrough/use-code-walkthrough.js +22 -0
  28. package/lib/core/hooks/index.d.ts +4 -0
  29. package/lib/core/hooks/index.js +4 -0
  30. package/lib/core/styles/global.js +24 -9
  31. package/lib/core/templates/Markdown.d.ts +8 -2
  32. package/lib/core/templates/Markdown.js +5 -2
  33. package/lib/core/types/hooks.d.ts +2 -0
  34. package/lib/core/types/l10n.d.ts +1 -1
  35. package/lib/core/utils/download-code-walkthrough.d.ts +4 -0
  36. package/lib/core/utils/download-code-walkthrough.js +32 -0
  37. package/lib/core/utils/get-code-walkthrough-file-text.d.ts +4 -0
  38. package/lib/core/utils/get-code-walkthrough-file-text.js +22 -0
  39. package/lib/core/utils/get-file-icon.d.ts +2 -0
  40. package/lib/core/utils/get-file-icon.js +31 -0
  41. package/lib/core/utils/index.d.ts +5 -0
  42. package/lib/core/utils/index.js +5 -0
  43. package/lib/core/utils/js-utils.d.ts +30 -0
  44. package/lib/core/utils/js-utils.js +41 -0
  45. package/lib/core/utils/match-code-walkthrough-conditions.d.ts +4 -0
  46. package/lib/core/utils/match-code-walkthrough-conditions.js +23 -0
  47. package/lib/core/utils/replace-inputs-with-value.d.ts +3 -0
  48. package/lib/core/utils/replace-inputs-with-value.js +16 -0
  49. package/lib/icons/DocumentCssIcon/DocumentCssIcon.d.ts +9 -0
  50. package/lib/icons/DocumentCssIcon/DocumentCssIcon.js +23 -0
  51. package/lib/icons/DocumentCssIcon/index.d.ts +1 -0
  52. package/lib/icons/DocumentCssIcon/index.js +6 -0
  53. package/lib/icons/DocumentGraphqlIcon/DocumentGraphqlIcon.d.ts +9 -0
  54. package/lib/icons/DocumentGraphqlIcon/DocumentGraphqlIcon.js +31 -0
  55. package/lib/icons/DocumentGraphqlIcon/index.d.ts +1 -0
  56. package/lib/icons/DocumentGraphqlIcon/index.js +6 -0
  57. package/lib/icons/DocumentHtmlIcon/DocumentHtmlIcon.d.ts +9 -0
  58. package/lib/icons/DocumentHtmlIcon/DocumentHtmlIcon.js +23 -0
  59. package/lib/icons/DocumentHtmlIcon/index.d.ts +1 -0
  60. package/lib/icons/DocumentHtmlIcon/index.js +6 -0
  61. package/lib/icons/DocumentJsIcon/DocumentJsIcon.d.ts +9 -0
  62. package/lib/icons/DocumentJsIcon/DocumentJsIcon.js +23 -0
  63. package/lib/icons/DocumentJsIcon/index.d.ts +1 -0
  64. package/lib/icons/DocumentJsIcon/index.js +6 -0
  65. package/lib/icons/DocumentJsonIcon/DocumentJsonIcon.d.ts +9 -0
  66. package/lib/icons/DocumentJsonIcon/DocumentJsonIcon.js +23 -0
  67. package/lib/icons/DocumentJsonIcon/index.d.ts +1 -0
  68. package/lib/icons/DocumentJsonIcon/index.js +6 -0
  69. package/lib/icons/DocumentMarkdownIcon/DocumentMarkdownIcon.d.ts +9 -0
  70. package/lib/icons/DocumentMarkdownIcon/DocumentMarkdownIcon.js +23 -0
  71. package/lib/icons/DocumentMarkdownIcon/index.d.ts +1 -0
  72. package/lib/icons/DocumentMarkdownIcon/index.js +6 -0
  73. package/lib/icons/DocumentReactIcon/DocumentReactIcon.d.ts +9 -0
  74. package/lib/icons/DocumentReactIcon/DocumentReactIcon.js +23 -0
  75. package/lib/icons/DocumentReactIcon/index.d.ts +1 -0
  76. package/lib/icons/DocumentReactIcon/index.js +6 -0
  77. package/lib/icons/DocumentTsIcon/DocumentTsIcon.d.ts +9 -0
  78. package/lib/icons/DocumentTsIcon/DocumentTsIcon.js +23 -0
  79. package/lib/icons/DocumentTsIcon/index.d.ts +1 -0
  80. package/lib/icons/DocumentTsIcon/index.js +6 -0
  81. package/lib/icons/DocumentYamlIcon/DocumentYamlIcon.d.ts +9 -0
  82. package/lib/icons/DocumentYamlIcon/DocumentYamlIcon.js +23 -0
  83. package/lib/icons/DocumentYamlIcon/index.d.ts +1 -0
  84. package/lib/icons/DocumentYamlIcon/index.js +6 -0
  85. package/lib/index.d.ts +1 -0
  86. package/lib/index.js +1 -0
  87. package/lib/layouts/CodeWalkthroughLayout.d.ts +5 -0
  88. package/lib/layouts/CodeWalkthroughLayout.js +72 -0
  89. package/lib/markdoc/attributes/code-walkthrough-filesets.d.ts +5 -0
  90. package/lib/markdoc/attributes/code-walkthrough-filesets.js +16 -0
  91. package/lib/markdoc/attributes/code-walkthrough-filters.d.ts +5 -0
  92. package/lib/markdoc/attributes/code-walkthrough-filters.js +16 -0
  93. package/lib/markdoc/components/CodeWalkthrough/CodeContainer.d.ts +5 -0
  94. package/lib/markdoc/components/CodeWalkthrough/CodeContainer.js +81 -0
  95. package/lib/markdoc/components/CodeWalkthrough/CodeFilters.d.ts +12 -0
  96. package/lib/markdoc/components/CodeWalkthrough/CodeFilters.js +58 -0
  97. package/lib/markdoc/components/CodeWalkthrough/CodePanel.d.ts +8 -0
  98. package/lib/markdoc/components/CodeWalkthrough/CodePanel.js +64 -0
  99. package/lib/markdoc/components/CodeWalkthrough/CodePanelHeader.d.ts +8 -0
  100. package/lib/markdoc/components/CodeWalkthrough/CodePanelHeader.js +155 -0
  101. package/lib/markdoc/components/CodeWalkthrough/CodePanelPreview.d.ts +2 -0
  102. package/lib/markdoc/components/CodeWalkthrough/CodePanelPreview.js +73 -0
  103. package/lib/markdoc/components/CodeWalkthrough/CodePanelToolbar.d.ts +5 -0
  104. package/lib/markdoc/components/CodeWalkthrough/CodePanelToolbar.js +47 -0
  105. package/lib/markdoc/components/CodeWalkthrough/CodeStep.d.ts +12 -0
  106. package/lib/markdoc/components/CodeWalkthrough/CodeStep.js +128 -0
  107. package/lib/markdoc/components/CodeWalkthrough/CodeToggle.d.ts +9 -0
  108. package/lib/markdoc/components/CodeWalkthrough/CodeToggle.js +69 -0
  109. package/lib/markdoc/components/CodeWalkthrough/CodeWalkthrough.d.ts +4 -0
  110. package/lib/markdoc/components/CodeWalkthrough/CodeWalkthrough.js +121 -0
  111. package/lib/markdoc/components/CodeWalkthrough/Input.d.ts +8 -0
  112. package/lib/markdoc/components/CodeWalkthrough/Input.js +99 -0
  113. package/lib/markdoc/components/CodeWalkthrough/variables.d.ts +1 -0
  114. package/lib/markdoc/components/CodeWalkthrough/variables.js +19 -0
  115. package/lib/markdoc/components/Image/Image.d.ts +7 -0
  116. package/lib/markdoc/components/Image/Image.js +45 -0
  117. package/lib/markdoc/components/default.d.ts +6 -0
  118. package/lib/markdoc/components/default.js +6 -0
  119. package/lib/markdoc/default.js +10 -0
  120. package/lib/markdoc/tags/code-step.d.ts +2 -0
  121. package/lib/markdoc/tags/code-step.js +28 -0
  122. package/lib/markdoc/tags/code-toggle.d.ts +2 -0
  123. package/lib/markdoc/tags/code-toggle.js +40 -0
  124. package/lib/markdoc/tags/code-walkthrough.d.ts +8 -0
  125. package/lib/markdoc/tags/code-walkthrough.js +242 -0
  126. package/lib/markdoc/tags/img.d.ts +2 -0
  127. package/lib/markdoc/tags/img.js +48 -0
  128. package/lib/markdoc/tags/input.d.ts +2 -0
  129. package/lib/markdoc/tags/input.js +37 -0
  130. package/lib/plugin.d.ts +2 -1
  131. package/lib/plugin.js +2 -4
  132. package/package.json +10 -3
  133. package/src/components/Buttons/CopyButton.tsx +24 -6
  134. package/src/components/Image/Image.tsx +21 -2
  135. package/src/components/Image/__tests__/images/test-image.png +0 -0
  136. package/src/components/Search/SearchAiResponse.tsx +1 -1
  137. package/src/components/Search/SearchDialog.tsx +5 -4
  138. package/src/components/StatusCode/StatusCode.ts +11 -10
  139. package/src/core/constants/code-walkthrough.ts +1 -0
  140. package/src/core/constants/index.ts +1 -0
  141. package/src/core/contexts/CodeWalkthrough/CodeWalkthroughControlsContext.tsx +21 -0
  142. package/src/core/contexts/CodeWalkthrough/CodeWalkthroughStepsContext.tsx +10 -0
  143. package/src/core/contexts/index.ts +2 -0
  144. package/src/core/hooks/code-walkthrough/__mocks__/MockIntersectionObserver.ts +22 -0
  145. package/src/core/hooks/code-walkthrough/use-code-panel.ts +164 -0
  146. package/src/core/hooks/code-walkthrough/use-code-walkthrough-controls.ts +302 -0
  147. package/src/core/hooks/code-walkthrough/use-code-walkthrough-steps.ts +165 -0
  148. package/src/core/hooks/code-walkthrough/use-code-walkthrough.ts +51 -0
  149. package/src/core/hooks/index.ts +4 -0
  150. package/src/core/styles/global.ts +24 -10
  151. package/src/core/templates/Markdown.tsx +16 -5
  152. package/src/core/types/hooks.ts +2 -0
  153. package/src/core/types/l10n.ts +3 -1
  154. package/src/core/utils/download-code-walkthrough.ts +25 -0
  155. package/src/core/utils/get-code-walkthrough-file-text.ts +32 -0
  156. package/src/core/utils/get-file-icon.ts +35 -0
  157. package/src/core/utils/index.ts +5 -0
  158. package/src/core/utils/js-utils.ts +48 -0
  159. package/src/core/utils/match-code-walkthrough-conditions.ts +29 -0
  160. package/src/core/utils/replace-inputs-with-value.ts +11 -0
  161. package/src/icons/DocumentCssIcon/DocumentCssIcon.tsx +36 -0
  162. package/src/icons/DocumentCssIcon/index.ts +1 -0
  163. package/src/icons/DocumentGraphqlIcon/DocumentGraphqlIcon.tsx +64 -0
  164. package/src/icons/DocumentGraphqlIcon/index.ts +1 -0
  165. package/src/icons/DocumentHtmlIcon/DocumentHtmlIcon.tsx +36 -0
  166. package/src/icons/DocumentHtmlIcon/index.ts +1 -0
  167. package/src/icons/DocumentJsIcon/DocumentJsIcon.tsx +36 -0
  168. package/src/icons/DocumentJsIcon/index.ts +1 -0
  169. package/src/icons/DocumentJsonIcon/DocumentJsonIcon.tsx +36 -0
  170. package/src/icons/DocumentJsonIcon/index.ts +1 -0
  171. package/src/icons/DocumentMarkdownIcon/DocumentMarkdownIcon.tsx +36 -0
  172. package/src/icons/DocumentMarkdownIcon/index.ts +1 -0
  173. package/src/icons/DocumentReactIcon/DocumentReactIcon.tsx +36 -0
  174. package/src/icons/DocumentReactIcon/index.ts +1 -0
  175. package/src/icons/DocumentTsIcon/DocumentTsIcon.tsx +38 -0
  176. package/src/icons/DocumentTsIcon/index.ts +1 -0
  177. package/src/icons/DocumentYamlIcon/DocumentYamlIcon.tsx +36 -0
  178. package/src/icons/DocumentYamlIcon/index.ts +1 -0
  179. package/src/index.ts +1 -0
  180. package/src/layouts/CodeWalkthroughLayout.tsx +78 -0
  181. package/src/markdoc/attributes/code-walkthrough-filesets.ts +9 -0
  182. package/src/markdoc/attributes/code-walkthrough-filters.ts +9 -0
  183. package/src/markdoc/components/CodeWalkthrough/CodeContainer.tsx +76 -0
  184. package/src/markdoc/components/CodeWalkthrough/CodeFilters.tsx +87 -0
  185. package/src/markdoc/components/CodeWalkthrough/CodePanel.tsx +68 -0
  186. package/src/markdoc/components/CodeWalkthrough/CodePanelHeader.tsx +192 -0
  187. package/src/markdoc/components/CodeWalkthrough/CodePanelPreview.tsx +53 -0
  188. package/src/markdoc/components/CodeWalkthrough/CodePanelToolbar.tsx +31 -0
  189. package/src/markdoc/components/CodeWalkthrough/CodeStep.tsx +149 -0
  190. package/src/markdoc/components/CodeWalkthrough/CodeToggle.tsx +63 -0
  191. package/src/markdoc/components/CodeWalkthrough/CodeWalkthrough.tsx +111 -0
  192. package/src/markdoc/components/CodeWalkthrough/Input.tsx +101 -0
  193. package/src/markdoc/components/CodeWalkthrough/variables.ts +16 -0
  194. package/src/markdoc/components/Image/Image.tsx +38 -0
  195. package/src/markdoc/components/default.ts +6 -0
  196. package/src/markdoc/default.ts +10 -0
  197. package/src/markdoc/tags/code-step.ts +27 -0
  198. package/src/markdoc/tags/code-toggle.ts +37 -0
  199. package/src/markdoc/tags/code-walkthrough.ts +315 -0
  200. package/src/markdoc/tags/img.ts +46 -0
  201. package/src/markdoc/tags/input.ts +35 -0
  202. package/src/plugin.js +2 -2
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useCodeWalkthroughSteps = useCodeWalkthroughSteps;
4
+ const react_1 = require("react");
5
+ const react_router_dom_1 = require("react-router-dom");
6
+ const utils_1 = require("../../../core/utils");
7
+ const constants_1 = require("../../../core/constants");
8
+ function useCodeWalkthroughSteps(steps) {
9
+ const location = (0, react_router_dom_1.useLocation)();
10
+ const navigate = (0, react_router_dom_1.useNavigate)();
11
+ const searchParams = (0, react_1.useMemo)(() => new URLSearchParams(location.search), [location.search]);
12
+ const observerRef = (0, react_1.useRef)(null);
13
+ const filtersElementRef = (0, react_1.useRef)(null);
14
+ const lockObserver = (0, react_1.useRef)(false);
15
+ // Track observed elements in case new observer needs to be created
16
+ const observedElementsRef = (0, react_1.useRef)(new Set());
17
+ const [activeStep, setActiveStep] = (0, react_1.useState)(searchParams.get(constants_1.ACTIVE_STEP_QUERY_PARAM));
18
+ const register = (0, react_1.useCallback)((element) => {
19
+ // for some reason, the observer is not ready immediately
20
+ setTimeout(() => {
21
+ if (observerRef.current) {
22
+ const stepKey = Number(element.dataset.stepKey);
23
+ if (Number.isInteger(stepKey) && stepKey >= 0) {
24
+ steps[stepKey].compRef = element;
25
+ }
26
+ observerRef.current.observe(element);
27
+ observedElementsRef.current.add(element);
28
+ }
29
+ }, 10);
30
+ }, [steps]);
31
+ const unregister = (0, react_1.useCallback)((element) => {
32
+ if (observerRef.current) {
33
+ const stepKey = Number(element.dataset.stepKey);
34
+ if (Number.isInteger(stepKey) && stepKey >= 0) {
35
+ steps[stepKey].compRef = undefined;
36
+ }
37
+ observerRef.current.unobserve(element);
38
+ observedElementsRef.current.delete(element);
39
+ }
40
+ }, [steps]);
41
+ const observerCallback = (0, react_1.useCallback)((entries) => {
42
+ var _a, _b, _c;
43
+ if (lockObserver.current) {
44
+ return;
45
+ }
46
+ const stepsEntries = [];
47
+ for (const entry of entries) {
48
+ const { target } = entry;
49
+ const stepKey = Number((_a = target === null || target === void 0 ? void 0 : target.dataset) === null || _a === void 0 ? void 0 : _a.stepKey);
50
+ const stepActive = ((_b = target === null || target === void 0 ? void 0 : target.dataset) === null || _b === void 0 ? void 0 : _b.stepActive) === 'true';
51
+ if (!Number.isInteger(stepKey) || stepKey < 0) {
52
+ continue;
53
+ }
54
+ const step = steps[stepKey];
55
+ step.active = stepActive;
56
+ stepsEntries.push(entry);
57
+ }
58
+ for (const stepEntry of stepsEntries) {
59
+ const { target, intersectionRatio, boundingClientRect, rootBounds, isIntersecting } = stepEntry;
60
+ const stepKey = Number((_c = target === null || target === void 0 ? void 0 : target.dataset) === null || _c === void 0 ? void 0 : _c.stepKey);
61
+ const step = steps[stepKey];
62
+ const renderedSteps = steps.filter((step) => Boolean(step.compRef));
63
+ const stepIndex = renderedSteps.findIndex((renderedStep) => renderedStep.stepKey === step.stepKey);
64
+ const { next } = (0, utils_1.getAdjacentValues)(renderedSteps, stepIndex);
65
+ const intersectionAtTop = (rootBounds === null || rootBounds === void 0 ? void 0 : rootBounds.bottom) !== undefined && boundingClientRect.top < rootBounds.top;
66
+ const stepGoesIn = isIntersecting;
67
+ if (intersectionRatio < 1 && intersectionRatio !== 0 && intersectionAtTop) {
68
+ let newStep = null;
69
+ if (stepGoesIn) {
70
+ newStep = step.id;
71
+ }
72
+ else if (next) {
73
+ newStep = next.id;
74
+ }
75
+ if (newStep !== activeStep) {
76
+ setActiveStep(newStep);
77
+ }
78
+ break;
79
+ }
80
+ }
81
+ }, [steps, activeStep]);
82
+ (0, react_1.useEffect)(() => {
83
+ var _a, _b, _c;
84
+ const filtersElementHeight = ((_a = filtersElementRef.current) === null || _a === void 0 ? void 0 : _a.clientHeight) || 0;
85
+ const navbarHeight = ((_b = document.querySelector('nav')) === null || _b === void 0 ? void 0 : _b.clientHeight) || 0;
86
+ const newObserver = new IntersectionObserver(observerCallback, {
87
+ threshold: [0.8],
88
+ rootMargin: `-${filtersElementHeight + navbarHeight}px 0px 0px 0px`,
89
+ });
90
+ for (const observedElement of observedElementsRef.current) {
91
+ newObserver.observe(observedElement);
92
+ }
93
+ // Unobserve all from the old observer
94
+ (_c = observerRef.current) === null || _c === void 0 ? void 0 : _c.disconnect();
95
+ observerRef.current = newObserver;
96
+ }, [observerCallback]);
97
+ /**
98
+ * Update the URL search params with the current state of the filters and inputs
99
+ */
100
+ (0, react_1.useEffect)(() => {
101
+ const newSearchParams = new URLSearchParams(Array.from(searchParams.entries()));
102
+ if (activeStep) {
103
+ newSearchParams.set(constants_1.ACTIVE_STEP_QUERY_PARAM, activeStep);
104
+ }
105
+ else {
106
+ newSearchParams.delete(constants_1.ACTIVE_STEP_QUERY_PARAM);
107
+ }
108
+ const newSearch = newSearchParams.toString();
109
+ if (newSearch === location.search.substring(1))
110
+ return;
111
+ navigate({ search: newSearch });
112
+ // Ignore searchParams in dependency array to avoid infinite re-renders
113
+ // eslint-disable-next-line react-hooks/exhaustive-deps
114
+ }, [activeStep, navigate, location]);
115
+ return { register, unregister, lockObserver, filtersElementRef, activeStep, setActiveStep };
116
+ }
117
+ //# sourceMappingURL=use-code-walkthrough-steps.js.map
@@ -0,0 +1,14 @@
1
+ import type { CodeWalkthroughFileset, CodeWalkthroughFile, CodeWalkthroughStepAttr, CodeWalkthroughFilter, InputsMarkdocAttr, TogglesMarkdocAttr } from '@redocly/config';
2
+ import { type WalkthroughControlsState, type WalkthroughStepsState } from '../../../core/hooks';
3
+ export type WalkthroughState = {
4
+ stepsState: WalkthroughStepsState;
5
+ controlsState: WalkthroughControlsState;
6
+ downloadAssociatedFiles: CodeWalkthroughFile[];
7
+ files: CodeWalkthroughFile[];
8
+ };
9
+ export declare function useCodeWalkthrough(steps: CodeWalkthroughStepAttr[], attributes: {
10
+ filters: Record<string, CodeWalkthroughFilter>;
11
+ filesets: CodeWalkthroughFileset[];
12
+ inputs: InputsMarkdocAttr;
13
+ toggles: TogglesMarkdocAttr;
14
+ }): WalkthroughState;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useCodeWalkthrough = useCodeWalkthrough;
4
+ const hooks_1 = require("../../../core/hooks");
5
+ function useCodeWalkthrough(steps, attributes) {
6
+ const { filters, filesets, inputs, toggles } = attributes;
7
+ const stepsState = (0, hooks_1.useCodeWalkthroughSteps)(steps);
8
+ const controlsState = (0, hooks_1.useCodeWalkthroughControls)(filters, inputs, toggles);
9
+ const files = filesets
10
+ .filter((fileset) => controlsState.areConditionsMet(fileset))
11
+ .flatMap((fileset) => fileset.files || []);
12
+ const downloadAssociatedFiles = filesets
13
+ .filter((fileset) => controlsState.areConditionsMet(fileset))
14
+ .flatMap((fileset) => fileset.downloadAssociatedFiles || []);
15
+ return {
16
+ stepsState,
17
+ controlsState,
18
+ downloadAssociatedFiles,
19
+ files,
20
+ };
21
+ }
22
+ //# sourceMappingURL=use-code-walkthrough.js.map
@@ -28,3 +28,7 @@ export * from '../../core/hooks/search/use-search-dialog';
28
28
  export * from '../../core/hooks/search/use-search-filter';
29
29
  export * from '../../core/hooks/use-controlled-state';
30
30
  export * from '../../core/hooks/use-codeblock-tabs-controls';
31
+ export * from '../../core/hooks/code-walkthrough/use-code-walkthrough';
32
+ export * from '../../core/hooks/code-walkthrough/use-code-walkthrough-steps';
33
+ export * from '../../core/hooks/code-walkthrough/use-code-walkthrough-controls';
34
+ export * from '../../core/hooks/code-walkthrough/use-code-panel';
@@ -44,4 +44,8 @@ __exportStar(require("../../core/hooks/search/use-search-dialog"), exports);
44
44
  __exportStar(require("../../core/hooks/search/use-search-filter"), exports);
45
45
  __exportStar(require("../../core/hooks/use-controlled-state"), exports);
46
46
  __exportStar(require("../../core/hooks/use-codeblock-tabs-controls"), exports);
47
+ __exportStar(require("../../core/hooks/code-walkthrough/use-code-walkthrough"), exports);
48
+ __exportStar(require("../../core/hooks/code-walkthrough/use-code-walkthrough-steps"), exports);
49
+ __exportStar(require("../../core/hooks/code-walkthrough/use-code-walkthrough-controls"), exports);
50
+ __exportStar(require("../../core/hooks/code-walkthrough/use-code-panel"), exports);
47
51
  //# sourceMappingURL=index.js.map
@@ -38,6 +38,7 @@ const variables_32 = require("../../components/VersionPicker/variables");
38
38
  const variables_33 = require("../../components/DatePicker/variables");
39
39
  const variables_34 = require("../../components/Switch/variables");
40
40
  const variables_35 = require("../../markdoc/components/Cards/variables");
41
+ const variables_36 = require("../../markdoc/components/CodeWalkthrough/variables");
41
42
  const themeColors = (0, styled_components_1.css) `
42
43
  /* === Palette === */
43
44
  /**
@@ -214,6 +215,7 @@ const themeColors = (0, styled_components_1.css) `
214
215
 
215
216
  --color-black: #000000;
216
217
  --color-white: #ffffff;
218
+ --color-static-white: #ffffff;
217
219
 
218
220
  --color-primary-bg: var(--color-blueberry-1);
219
221
  --color-primary-bg-hover: var(--color-blueberry-2);
@@ -331,7 +333,7 @@ const typography = (0, styled_components_1.css) `
331
333
  --text-color-description: var(--color-warm-grey-7); // Caption, Description, Icon
332
334
  --text-color-helper: var(--color-warm-grey-6);
333
335
  --text-color-disabled: var(--color-warm-grey-5);
334
- --text-color-on-color: var(--color-warm-grey-1);
336
+ --text-color-on-color: var(--color-static-white);
335
337
  --text-color-inverse: var(--color-white);
336
338
 
337
339
  /**
@@ -677,7 +679,7 @@ const apiReferenceDocs = (0, styled_components_1.css) `
677
679
  * @presenter Color
678
680
  */
679
681
 
680
- --schema-recursive-text-color: var(--text-color-on-color); // @presenter Color
682
+ --schema-recursive-text-color: var(--color-warm-grey-1); // @presenter Color
681
683
  --schema-recursive-bg-color: var(--color-persian-green-6); // @presenter Color
682
684
  --schema-recursive-border-color: var(--schema-recursive-bg-color); // @presenter Color
683
685
 
@@ -781,7 +783,7 @@ const badges = (0, styled_components_1.css) `
781
783
  * @tokens Deprecated Badge
782
784
  */
783
785
 
784
- --badge-deprecated-text-color: var(--text-color-on-color); // @presenter Color
786
+ --badge-deprecated-text-color: var(--color-warm-grey-1); // @presenter Color
785
787
  --badge-deprecated-bg-color: var(--color-warning-base); // @presenter Color
786
788
  --badge-deprecated-border-radius: var(--border-radius); // @presenter BorderRadius
787
789
 
@@ -949,18 +951,30 @@ const pages = (0, styled_components_1.css) `
949
951
 
950
952
  // @tokens End
951
953
  `;
954
+ // //
955
+ // --color-raspberry-1: #612241;
956
+ // --color-raspberry-2: #77214c;
957
+ // --color-raspberry-3: #901d56;
958
+ // --color-raspberry-4: #b3185e;
959
+ // --color-raspberry-5: #d6236a;
960
+ // --color-raspberry-6: #f9316d;
961
+ // --color-raspberry-7: #fb6382;
962
+ // --color-raspberry-8: #fd838f;
963
+ // --color-raspberry-9: #feacad;
964
+ // --color-raspberry-10: #fed9d5;
965
+ // --color-raspberry-11: #fef0ef;
952
966
  const error = (0, styled_components_1.css) `
953
967
  --error-bubble-padding: var(--spacing-sm);
954
968
  --error-bubble-gap: var(--spacing-xxs);
955
969
  --error-bubble-font-family: var(--font-family-base);
956
970
  --error-bubble-font-size: var(--font-size-base);
957
971
  --error-bubble-z-index: var(--z-index-popover);
958
- --error-bubble-bg-color: var(--color-raspberry-1);
959
- --error-bubble-bg-color-hover: var(--color-raspberry-2);
960
- --error-bubble-bg-color-pressed: var(--color-raspberry-3);
961
- --error-bubble-content-color: var(--color-raspberry-6);
962
- --error-bubble-content-color-hover: var(--color-raspberry-6);
963
- --error-bubble-content-color-pressed: var(--color-raspberry-6);
972
+ --error-bubble-bg-color: #612241;
973
+ --error-bubble-bg-color-hover: #77214c;
974
+ --error-bubble-bg-color-pressed: #901d56;
975
+ --error-bubble-content-color: #f9316d;
976
+ --error-bubble-content-color-hover: #f9316d;
977
+ --error-bubble-content-color-pressed: #f9316d;
964
978
 
965
979
 
966
980
  --detailed-error-overlay-bg-color: #4f4f4f;
@@ -1139,6 +1153,7 @@ exports.styles = (0, styled_components_1.css) `
1139
1153
  ${variables_35.cards}
1140
1154
  ${variables_8.catalog}
1141
1155
  ${variables_21.code}
1156
+ ${variables_36.codeWalkthrough}
1142
1157
  ${docsDropdown}
1143
1158
  ${variables_12.dropdown}
1144
1159
  ${error}
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import type { UiAccessibleConfig } from '../../config';
3
3
  import type { MdHeading } from '../../core/types';
4
- type MarkdownTemplateProps = {
4
+ export type MarkdownTemplateProps = {
5
5
  pageProps: {
6
6
  frontmatter?: UiAccessibleConfig;
7
7
  headings?: (MdHeading | null)[];
@@ -9,7 +9,13 @@ type MarkdownTemplateProps = {
9
9
  to: string;
10
10
  };
11
11
  lastModified?: string | null;
12
+ metadata: {
13
+ markdoc: {
14
+ tagList: string[];
15
+ [key: string]: unknown;
16
+ };
17
+ [key: string]: unknown;
18
+ };
12
19
  };
13
20
  };
14
21
  export default function ({ pageProps, children }: React.PropsWithChildren<MarkdownTemplateProps>): React.JSX.Element;
15
- export {};
@@ -32,6 +32,7 @@ const Markdown_1 = require("../../components/Markdown/Markdown");
32
32
  const TableOfContent_1 = require("../../components/TableOfContent/TableOfContent");
33
33
  const Feedback_1 = require("../../components/Feedback/Feedback");
34
34
  const utils_1 = require("../../core/utils");
35
+ const CodeWalkthroughLayout_1 = require("../../layouts/CodeWalkthroughLayout");
35
36
  function default_1({ pageProps, children }) {
36
37
  var _a;
37
38
  const [wrapperElement, setWrapperElement] = React.useState(null);
@@ -63,7 +64,9 @@ function default_1({ pageProps, children }) {
63
64
  if (utils_1.IS_BROWSER) {
64
65
  (0, utils_1.onDocumentReady)(utils_1.extendDetailsBehaviour);
65
66
  }
66
- return (React.createElement(DocumentationLayout_1.DocumentationLayout, Object.assign({}, documentationLayoutProps),
67
- React.createElement(Markdown_1.Markdown, { ref: wrapperRefCb }, children)));
67
+ const document = React.createElement(Markdown_1.Markdown, { ref: wrapperRefCb }, children);
68
+ const tagList = pageProps.metadata.markdoc.tagList;
69
+ const withCodeWalkthrough = Boolean(Array.isArray(tagList) && tagList.includes('code-walkthrough'));
70
+ return withCodeWalkthrough ? (React.createElement(CodeWalkthroughLayout_1.CodeWalkthroughLayout, null, document)) : (React.createElement(DocumentationLayout_1.DocumentationLayout, Object.assign({}, documentationLayoutProps), document));
68
71
  }
69
72
  //# sourceMappingURL=Markdown.js.map
@@ -1,4 +1,5 @@
1
1
  import type { PageProps, ResolvedNavItemWithLink, Version } from '@redocly/config';
2
+ import type { ShikiTransformer } from '@shikijs/types';
2
3
  import type { Callback, TFunction as TFunc } from 'i18next';
3
4
  import type { To, Location, NavigateFunction } from 'react-router-dom';
4
5
  import type { CatalogConfig, ProductUiConfig } from '../../config';
@@ -103,6 +104,7 @@ export type ThemeHooks = {
103
104
  withLineNumbers?: boolean;
104
105
  startLineNumber?: number;
105
106
  highlight?: string;
107
+ customTransformer?: ShikiTransformer;
106
108
  }) => string;
107
109
  };
108
110
  useLoadAndNavigate: () => (options: {
@@ -1,5 +1,5 @@
1
1
  import type { TOptions } from 'i18next';
2
- export type TranslationKey = 'dev.newApp' | 'dev.newApp.text' | 'dev.sidebar.header' | 'dev.sidebar.footer.text' | 'dev.create.app.dialog.appName.placeholder' | 'dev.create.app.dialog.appName.error' | 'dev.create.app.dialog.selectAPIs' | 'dev.create.app.dialog.description' | 'dev.create.app.dialog.description.placeholder' | 'dev.create.app.dialog.create' | 'dev.create.app.dialog.cancel' | 'dev.main.tab.appKeys' | 'dev.main.tab.logs' | 'dev.app.description.title' | 'dev.edit.description.dialog.title' | 'dev.edit.description.dialog.save' | 'dev.edit.description.dialog.cancel' | 'dev.edit.apis.dialog.selectedAPIs' | 'dev.app.key.create' | 'dev.create.key.dialog.title' | 'dev.create.key.dialog.create' | 'dev.create.key.dialog.cancel' | 'dev.app.edit' | 'dev.app.delete' | 'dev.edit.app.dialog.title' | 'dev.edit.app.dialog.save' | 'dev.edit.app.dialog.cancel' | 'dev.delete.app.dialog.title' | 'dev.delete.app.dialog.confirmation' | 'dev.delete.app.dialog.delete' | 'dev.delete.app.dialog.cancel' | 'dev.app.key.roll' | 'dev.roll.key.dialog.title' | 'dev.roll.key.dialog.apiKey' | 'dev.roll.key.dialog.expires' | 'dev.roll.key.dialog.confirmation' | 'dev.roll.key.dialog.cancel' | 'dev.roll.key.dialog.roll' | 'dev.update.key.dialog.title' | 'dev.update.key.dialog.update' | 'dev.update.key.dialog.cancel' | 'dev.app.key.api.name' | 'dev.app.key.api.status' | 'dev.app.key.api.edit' | 'dev.edit.apis.dialog.title' | 'dev.edit.apis.dialog.apiKey' | 'dev.edit.apis.dialog.save' | 'dev.edit.apis.dialog.cancel' | 'dev.select.placeholder' | 'dev.app.overview.status.pending' | 'dev.app.overview.status.approved' | 'dev.app.overview.status.revoked' | 'dev.app.overview.status' | 'dev.app.overview.non-production' | 'dev.app.overview.production' | 'dev.app.overview.clientId' | 'dev.app.overview.apiKey' | 'dev.app.key.revoke' | 'dev.revoke.key.dialog.title' | 'dev.revoke.key.dialog.apiKey' | 'dev.revoke.key.dialog.expires' | 'dev.revoke.key.dialog.confirmation' | 'dev.revoke.key.dialog.revoke' | 'dev.revoke.key.dialog.cancel' | 'dev.app.overview.expires' | 'dev.app.overview.created' | 'dev.app.overview.visibilityToggle.hide' | 'dev.app.overview.visibilityToggle.show' | 'search.loading' | 'search.noResults.title' | 'search.keys.navigate' | 'search.keys.select' | 'search.keys.exit' | 'search.label' | 'search.cancel' | 'search.recent' | 'search.navbar.label' | 'search.suggested' | 'search.showMore' | 'search.filter.title' | 'search.filter.reset' | 'search.filter.field.reset' | 'search.ai.thinkingText' | 'search.ai.resourcesFound' | 'search.aiButton' | 'search.ai.label' | 'toc.header' | 'footer.copyrightText' | 'page.homeButton' | 'page.forbidden.title' | 'page.notFound.title' | 'page.notFound.description' | 'page.lastUpdated.timeago' | 'page.lastUpdated.on' | 'catalog.filters.placeholder' | 'catalog.filters.title' | 'catalog.filters.clearAll' | 'catalog.filters.select.addFilter' | 'catalog.filters.select.all' | 'catalog.filters.done' | 'sidebar.menu.backLabel' | 'sidebar.menu.backToLabel' | 'sidebar.actions.show' | 'sidebar.actions.hide' | 'sidebar.actions.changeLayout' | 'versionPicker.label' | 'versionPicker.unversioned' | 'codeSnippet.copy.buttonText' | 'codeSnippet.copy.tooltipText' | 'codeSnippet.copy.toasterText' | 'markdown.editPage.text' | 'feedback.settings.comment.submitText' | 'feedback.settings.comment.label' | 'feedback.settings.comment.send' | 'feedback.settings.comment.cancel' | 'feedback.settings.comment.satisfiedLabel' | 'feedback.settings.comment.neutralLabel' | 'feedback.settings.comment.dissatisfiedLabel' | 'feedback.settings.submitText' | 'feedback.settings.label' | 'feedback.settings.reasons.label' | 'feedback.settings.reasons.send' | 'feedback.settings.comment.likeLabel' | 'feedback.settings.comment.dislikeLabel' | 'feedback.sentiment.thumbUp' | 'feedback.sentiment.thumbDown' | 'feedback.settings.leftScaleLabel' | 'feedback.settings.rightScaleLabel' | 'feedback.settings.anonymousUserEmail.placeholder' | 'feedback.settings.anonymousUserEmail.label' | 'codeSnippet.report.buttonText' | 'codeSnippet.report.tooltipText' | 'codeSnippet.report.label' | 'userMenu.login' | 'userMenu.logout' | 'userMenu.devOnboardingLabel' | 'mobileMenu.mainMenu' | 'mobileMenu.previous' | 'mobileMenu.products' | 'page.nextButton' | 'page.previousButton' | 'openapi.download.description.title' | 'openapi.info.title' | 'openapi.info.contact.url' | 'openapi.info.contact.name' | 'openapi.info.license' | 'openapi.info.termsOfService' | 'openapi.info.metadata.title' | 'openapi.key' | 'openapi.value' | 'openapi.enum' | 'openapi.items' | 'openapi.default' | 'openapi.variable' | 'openapi.variables' | 'openapi.actions.show' | 'openapi.actions.hide' | 'openapi.actions.more' | 'openapi.languages.title' | 'openapi.servers.title' | 'openapi.operations' | 'openapi.webhooks' | 'openapi.description' | 'openapi.badges.deprecated' | 'openapi.badges.required' | 'openapi.badges.webhook' | 'openapi.request' | 'openapi.path' | 'openapi.query' | 'openapi.cookie' | 'openapi.header' | 'openapi.body' | 'openapi.responses' | 'openapi.response' | 'openapi.callbacks' | 'openapi.callbackRequest' | 'openapi.callbackResponse' | 'openapi.payload' | 'openapi.discriminator' | 'openapi.contentType' | 'openapi.tryIt' | 'openapi.loading' | 'openapi.example' | 'openapi.examples' | 'openapi.additionalProperties' | 'openapi.patternProperties' | 'openapi.required' | 'openapi.recursive' | 'openapi.complex' | 'openapi.deprecated' | 'openapi.hideExample' | 'openapi.showExample' | 'openapi.expandAll' | 'openapi.collapseAll' | 'openapi.noResponseExample' | 'openapi.noRequestPayload' | 'openapi.hidePattern' | 'openapi.showPattern' | 'openapi.authorizationUrl' | 'openapi.tokenUrl' | 'openapi.refreshUrl' | 'openapi.scopes' | 'openapi.security' | 'openapi.httpAuthorizationScheme' | 'openapi.bearerFormat' | 'openapi.parameterName' | 'openapi.flowType' | 'openapi.connectUrl' | 'openapi.requiredScopes' | 'openapi.unsupportedLanguage' | 'openapi.failedToGenerateCodeSample' | 'graphql.queries' | 'graphql.mutations' | 'graphql.subscriptions' | 'graphql.directives' | 'graphql.objects' | 'graphql.interfaces' | 'graphql.unions' | 'graphql.enums' | 'graphql.inputs' | 'graphql.scalars' | 'graphql.arguments.label' | 'graphql.arguments.show' | 'graphql.arguments.hide' | 'graphql.arguments.here' | 'graphql.returnTypes.label' | 'graphql.returnTypes.show' | 'graphql.returnTypes.hide' | 'graphql.possibleTypes' | 'graphql.defaultValue' | 'graphql.deprecationReason' | 'graphql.implementedInterfaces' | 'graphql.nonNull' | 'graphql.required' | 'graphql.deprecated' | 'graphql.variables' | 'graphql.querySample' | 'graphql.mutationSample' | 'graphql.subscriptionSample' | 'graphql.responseSample' | 'graphql.locations' | 'graphql.sample' | 'graphql.referenced';
2
+ export type TranslationKey = 'dev.newApp' | 'dev.newApp.text' | 'dev.sidebar.header' | 'dev.sidebar.footer.text' | 'dev.create.app.dialog.appName.placeholder' | 'dev.create.app.dialog.appName.error' | 'dev.create.app.dialog.selectAPIs' | 'dev.create.app.dialog.description' | 'dev.create.app.dialog.description.placeholder' | 'dev.create.app.dialog.create' | 'dev.create.app.dialog.cancel' | 'dev.main.tab.appKeys' | 'dev.main.tab.logs' | 'dev.app.description.title' | 'dev.edit.description.dialog.title' | 'dev.edit.description.dialog.save' | 'dev.edit.description.dialog.cancel' | 'dev.edit.apis.dialog.selectedAPIs' | 'dev.app.key.create' | 'dev.create.key.dialog.title' | 'dev.create.key.dialog.create' | 'dev.create.key.dialog.cancel' | 'dev.app.edit' | 'dev.app.delete' | 'dev.edit.app.dialog.title' | 'dev.edit.app.dialog.save' | 'dev.edit.app.dialog.cancel' | 'dev.delete.app.dialog.title' | 'dev.delete.app.dialog.confirmation' | 'dev.delete.app.dialog.delete' | 'dev.delete.app.dialog.cancel' | 'dev.app.key.roll' | 'dev.roll.key.dialog.title' | 'dev.roll.key.dialog.apiKey' | 'dev.roll.key.dialog.expires' | 'dev.roll.key.dialog.confirmation' | 'dev.roll.key.dialog.cancel' | 'dev.roll.key.dialog.roll' | 'dev.update.key.dialog.title' | 'dev.update.key.dialog.update' | 'dev.update.key.dialog.cancel' | 'dev.app.key.api.name' | 'dev.app.key.api.status' | 'dev.app.key.api.edit' | 'dev.edit.apis.dialog.title' | 'dev.edit.apis.dialog.apiKey' | 'dev.edit.apis.dialog.save' | 'dev.edit.apis.dialog.cancel' | 'dev.select.placeholder' | 'dev.app.overview.status.pending' | 'dev.app.overview.status.approved' | 'dev.app.overview.status.revoked' | 'dev.app.overview.status' | 'dev.app.overview.non-production' | 'dev.app.overview.production' | 'dev.app.overview.clientId' | 'dev.app.overview.apiKey' | 'dev.app.key.revoke' | 'dev.revoke.key.dialog.title' | 'dev.revoke.key.dialog.apiKey' | 'dev.revoke.key.dialog.expires' | 'dev.revoke.key.dialog.confirmation' | 'dev.revoke.key.dialog.revoke' | 'dev.revoke.key.dialog.cancel' | 'dev.app.overview.expires' | 'dev.app.overview.created' | 'dev.app.overview.visibilityToggle.hide' | 'dev.app.overview.visibilityToggle.show' | 'search.loading' | 'search.noResults.title' | 'search.keys.navigate' | 'search.keys.select' | 'search.keys.exit' | 'search.label' | 'search.cancel' | 'search.recent' | 'search.navbar.label' | 'search.suggested' | 'search.showMore' | 'search.filter.title' | 'search.filter.reset' | 'search.filter.field.reset' | 'search.ai.thinkingText' | 'search.ai.resourcesFound' | 'search.aiButton' | 'search.ai.label' | 'toc.header' | 'footer.copyrightText' | 'page.homeButton' | 'page.forbidden.title' | 'page.notFound.title' | 'page.notFound.description' | 'page.lastUpdated.timeago' | 'page.lastUpdated.on' | 'catalog.filters.placeholder' | 'catalog.filters.title' | 'catalog.filters.clearAll' | 'catalog.filters.select.addFilter' | 'catalog.filters.select.all' | 'catalog.filters.done' | 'sidebar.menu.backLabel' | 'sidebar.menu.backToLabel' | 'sidebar.actions.show' | 'sidebar.actions.hide' | 'sidebar.actions.changeLayout' | 'versionPicker.label' | 'versionPicker.unversioned' | 'codeSnippet.copy.buttonText' | 'codeSnippet.copy.tooltipText' | 'codeSnippet.copy.toasterText' | 'markdown.editPage.text' | 'feedback.settings.comment.submitText' | 'feedback.settings.comment.label' | 'feedback.settings.comment.send' | 'feedback.settings.comment.cancel' | 'feedback.settings.comment.satisfiedLabel' | 'feedback.settings.comment.neutralLabel' | 'feedback.settings.comment.dissatisfiedLabel' | 'feedback.settings.submitText' | 'feedback.settings.label' | 'feedback.settings.reasons.label' | 'feedback.settings.reasons.send' | 'feedback.settings.comment.likeLabel' | 'feedback.settings.comment.dislikeLabel' | 'feedback.sentiment.thumbUp' | 'feedback.sentiment.thumbDown' | 'feedback.settings.leftScaleLabel' | 'feedback.settings.rightScaleLabel' | 'feedback.settings.anonymousUserEmail.placeholder' | 'feedback.settings.anonymousUserEmail.label' | 'codeSnippet.report.buttonText' | 'codeSnippet.report.tooltipText' | 'codeSnippet.report.label' | 'userMenu.login' | 'userMenu.logout' | 'userMenu.devOnboardingLabel' | 'mobileMenu.mainMenu' | 'mobileMenu.previous' | 'mobileMenu.products' | 'page.nextButton' | 'page.previousButton' | 'openapi.download.description.title' | 'openapi.info.title' | 'openapi.info.contact.url' | 'openapi.info.contact.name' | 'openapi.info.license' | 'openapi.info.termsOfService' | 'openapi.info.metadata.title' | 'openapi.key' | 'openapi.value' | 'openapi.enum' | 'openapi.items' | 'openapi.default' | 'openapi.variable' | 'openapi.variables' | 'openapi.actions.show' | 'openapi.actions.hide' | 'openapi.actions.more' | 'openapi.languages.title' | 'openapi.servers.title' | 'openapi.operations' | 'openapi.webhooks' | 'openapi.description' | 'openapi.badges.deprecated' | 'openapi.badges.required' | 'openapi.badges.webhook' | 'openapi.request' | 'openapi.path' | 'openapi.query' | 'openapi.cookie' | 'openapi.header' | 'openapi.body' | 'openapi.responses' | 'openapi.response' | 'openapi.callbacks' | 'openapi.callbackRequest' | 'openapi.callbackResponse' | 'openapi.payload' | 'openapi.discriminator' | 'openapi.contentType' | 'openapi.tryIt' | 'openapi.loading' | 'openapi.example' | 'openapi.examples' | 'openapi.additionalProperties' | 'openapi.patternProperties' | 'openapi.required' | 'openapi.recursive' | 'openapi.complex' | 'openapi.deprecated' | 'openapi.hideExample' | 'openapi.showExample' | 'openapi.expandAll' | 'openapi.collapseAll' | 'openapi.noResponseExample' | 'openapi.noRequestPayload' | 'openapi.hidePattern' | 'openapi.showPattern' | 'openapi.authorizationUrl' | 'openapi.tokenUrl' | 'openapi.refreshUrl' | 'openapi.scopes' | 'openapi.security' | 'openapi.httpAuthorizationScheme' | 'openapi.bearerFormat' | 'openapi.parameterName' | 'openapi.flowType' | 'openapi.connectUrl' | 'openapi.requiredScopes' | 'openapi.unsupportedLanguage' | 'openapi.failedToGenerateCodeSample' | 'graphql.queries' | 'graphql.mutations' | 'graphql.subscriptions' | 'graphql.directives' | 'graphql.objects' | 'graphql.interfaces' | 'graphql.unions' | 'graphql.enums' | 'graphql.inputs' | 'graphql.scalars' | 'graphql.arguments.label' | 'graphql.arguments.show' | 'graphql.arguments.hide' | 'graphql.arguments.here' | 'graphql.returnTypes.label' | 'graphql.returnTypes.show' | 'graphql.returnTypes.hide' | 'graphql.possibleTypes' | 'graphql.defaultValue' | 'graphql.deprecationReason' | 'graphql.implementedInterfaces' | 'graphql.nonNull' | 'graphql.required' | 'graphql.deprecated' | 'graphql.variables' | 'graphql.querySample' | 'graphql.mutationSample' | 'graphql.subscriptionSample' | 'graphql.responseSample' | 'graphql.locations' | 'graphql.sample' | 'graphql.referenced' | 'codeWalkthrough.download' | 'codeWalkthrough.preview';
3
3
  export type Locale = {
4
4
  code: string;
5
5
  name: string;
@@ -0,0 +1,4 @@
1
+ import type { CodeWalkthroughFile, InputsState } from '@redocly/config';
2
+ export declare function downloadCodeWalkthrough(files: CodeWalkthroughFile[], state: Record<string, {
3
+ value: string | boolean;
4
+ }>, inputsState: InputsState): Promise<void>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.downloadCodeWalkthrough = downloadCodeWalkthrough;
16
+ const file_saver_1 = require("file-saver");
17
+ const jszip_1 = __importDefault(require("jszip"));
18
+ const utils_1 = require("../../core/utils");
19
+ // https://github.com/Stuk/jszip/issues/196#issuecomment-69503828
20
+ jszip_1.default.support.nodebuffer = false;
21
+ function downloadCodeWalkthrough(files, state, inputsState) {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ const zip = new jszip_1.default();
24
+ for (const file of files) {
25
+ const fileContent = (0, utils_1.getCodeWalkthroughFileText)(file, state, inputsState);
26
+ zip.file(file.basename, fileContent);
27
+ }
28
+ const zipContent = yield zip.generateAsync({ type: 'blob' });
29
+ (0, file_saver_1.saveAs)(zipContent, 'sample-code.zip');
30
+ });
31
+ }
32
+ //# sourceMappingURL=download-code-walkthrough.js.map
@@ -0,0 +1,4 @@
1
+ import type { CodeWalkthroughFile, InputsState } from '@redocly/config';
2
+ export declare function getCodeWalkthroughFileText(file: CodeWalkthroughFile, state: Record<string, {
3
+ value: string | boolean;
4
+ }>, inputsState: InputsState): string;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCodeWalkthroughFileText = getCodeWalkthroughFileText;
4
+ const utils_1 = require("../../core/utils");
5
+ function getCodeWalkthroughFileText(file, state, inputsState) {
6
+ var _a;
7
+ const contentChunks = (_a = file === null || file === void 0 ? void 0 : file.content.flatMap((node) => getChunkText(node, state, inputsState))) !== null && _a !== void 0 ? _a : [];
8
+ return contentChunks.join('\n');
9
+ }
10
+ function getChunkText(node, state, inputsState) {
11
+ if (typeof node === 'string') {
12
+ const replacedNode = (0, utils_1.replaceInputsWithValue)(node, inputsState);
13
+ return [replacedNode];
14
+ }
15
+ else {
16
+ if (!(0, utils_1.matchCodeWalkthroughConditions)(node.condition || {}, state)) {
17
+ return [];
18
+ }
19
+ return node.children.flatMap((child) => getChunkText(child, state, inputsState));
20
+ }
21
+ }
22
+ //# sourceMappingURL=get-code-walkthrough-file-text.js.map
@@ -0,0 +1,2 @@
1
+ import type { IconProps } from '../../icons/types';
2
+ export declare function getFileIconByExt(ext: string): import("react").FunctionComponent<IconProps>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFileIconByExt = getFileIconByExt;
4
+ const DocumentBlankIcon_1 = require("../../icons/DocumentBlankIcon/DocumentBlankIcon");
5
+ const DocumentYamlIcon_1 = require("../../icons/DocumentYamlIcon/DocumentYamlIcon");
6
+ const DocumentJsonIcon_1 = require("../../icons/DocumentJsonIcon/DocumentJsonIcon");
7
+ const DocumentJsIcon_1 = require("../../icons/DocumentJsIcon/DocumentJsIcon");
8
+ const DocumentTsIcon_1 = require("../../icons/DocumentTsIcon/DocumentTsIcon");
9
+ const DocumentCssIcon_1 = require("../../icons/DocumentCssIcon/DocumentCssIcon");
10
+ const DocumentHtmlIcon_1 = require("../../icons/DocumentHtmlIcon/DocumentHtmlIcon");
11
+ const DocumentReactIcon_1 = require("../../icons/DocumentReactIcon/DocumentReactIcon");
12
+ const DocumentMarkdownIcon_1 = require("../../icons/DocumentMarkdownIcon/DocumentMarkdownIcon");
13
+ const DocumentGraphqlIcon_1 = require("../../icons/DocumentGraphqlIcon/DocumentGraphqlIcon");
14
+ const fileIconMap = {
15
+ yaml: DocumentYamlIcon_1.DocumentYamlIcon,
16
+ yml: DocumentYamlIcon_1.DocumentYamlIcon,
17
+ json: DocumentJsonIcon_1.DocumentJsonIcon,
18
+ js: DocumentJsIcon_1.DocumentJsIcon,
19
+ ts: DocumentTsIcon_1.DocumentTsIcon,
20
+ css: DocumentCssIcon_1.DocumentCssIcon,
21
+ html: DocumentHtmlIcon_1.DocumentHtmlIcon,
22
+ jsx: DocumentReactIcon_1.DocumentReactIcon,
23
+ tsx: DocumentReactIcon_1.DocumentReactIcon,
24
+ md: DocumentMarkdownIcon_1.DocumentMarkdownIcon,
25
+ graphql: DocumentGraphqlIcon_1.DocumentGraphqlIcon,
26
+ gql: DocumentGraphqlIcon_1.DocumentGraphqlIcon,
27
+ };
28
+ function getFileIconByExt(ext) {
29
+ return fileIconMap[ext] || DocumentBlankIcon_1.DocumentBlankIcon;
30
+ }
31
+ //# sourceMappingURL=get-file-icon.js.map
@@ -25,3 +25,8 @@ export * from '../../core/utils/details';
25
25
  export * from '../../core/utils/get-navbar-element';
26
26
  export * from '../../core/utils/with-load-progress';
27
27
  export * from '../../core/utils/text-trimmer';
28
+ export * from '../../core/utils/get-code-walkthrough-file-text';
29
+ export * from '../../core/utils/download-code-walkthrough';
30
+ export * from '../../core/utils/get-file-icon';
31
+ export * from '../../core/utils/match-code-walkthrough-conditions';
32
+ export * from '../../core/utils/replace-inputs-with-value';
@@ -41,4 +41,9 @@ __exportStar(require("../../core/utils/details"), exports);
41
41
  __exportStar(require("../../core/utils/get-navbar-element"), exports);
42
42
  __exportStar(require("../../core/utils/with-load-progress"), exports);
43
43
  __exportStar(require("../../core/utils/text-trimmer"), exports);
44
+ __exportStar(require("../../core/utils/get-code-walkthrough-file-text"), exports);
45
+ __exportStar(require("../../core/utils/download-code-walkthrough"), exports);
46
+ __exportStar(require("../../core/utils/get-file-icon"), exports);
47
+ __exportStar(require("../../core/utils/match-code-walkthrough-conditions"), exports);
48
+ __exportStar(require("../../core/utils/replace-inputs-with-value"), exports);
44
49
  //# sourceMappingURL=index.js.map
@@ -6,3 +6,33 @@ export declare function toStringIfDefined(value: unknown): string | undefined;
6
6
  * Returns true when the function executed in browser.
7
7
  */
8
8
  export declare function isBrowser(): boolean;
9
+ export declare function isPlainObject(obj: any): boolean;
10
+ /**
11
+ * Returns the previous and next values in an array for a given index.
12
+ *
13
+ * Edge cases:
14
+ * - If the index is `0`, `prev` will be `null`.
15
+ * - If the index is the last position in the array, `next` will be `null`.
16
+ * - If the index is out of bounds (negative or greater than the last index), both `prev` and `next` will be `null`.
17
+ *
18
+ * @example
19
+ * const array = [10, 20, 30, 40];
20
+ * getAdjacentValues(array, 2);
21
+ * // returns: { prev: 20, next: 40 }
22
+ *
23
+ * getAdjacentValues(array, 0);
24
+ * // returns: { prev: null, next: 20 }
25
+ *
26
+ * getAdjacentValues(array, 3);
27
+ * // returns: { prev: 30, next: null }
28
+ *
29
+ * getAdjacentValues(array, -1);
30
+ * // returns: { prev: null, next: null }
31
+ *
32
+ * getAdjacentValues(array, 4);
33
+ * // returns: { prev: null, next: null }
34
+ */
35
+ export declare function getAdjacentValues<T>(array: T[], index: number): {
36
+ prev: T | null;
37
+ next: T | null;
38
+ };
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.findDeepFirst = findDeepFirst;
4
4
  exports.toStringIfDefined = toStringIfDefined;
5
5
  exports.isBrowser = isBrowser;
6
+ exports.isPlainObject = isPlainObject;
7
+ exports.getAdjacentValues = getAdjacentValues;
6
8
  function findDeepFirst(list, cb) {
7
9
  for (const item of list) {
8
10
  if (cb(item) === true) {
@@ -24,4 +26,43 @@ function toStringIfDefined(value) {
24
26
  function isBrowser() {
25
27
  return typeof window !== 'undefined' && 'HTMLElement' in window;
26
28
  }
29
+ function isPlainObject(obj) {
30
+ return (typeof obj === 'object' &&
31
+ obj !== null &&
32
+ !Array.isArray(obj) &&
33
+ Object.prototype.toString.call(obj) === '[object Object]');
34
+ }
35
+ /**
36
+ * Returns the previous and next values in an array for a given index.
37
+ *
38
+ * Edge cases:
39
+ * - If the index is `0`, `prev` will be `null`.
40
+ * - If the index is the last position in the array, `next` will be `null`.
41
+ * - If the index is out of bounds (negative or greater than the last index), both `prev` and `next` will be `null`.
42
+ *
43
+ * @example
44
+ * const array = [10, 20, 30, 40];
45
+ * getAdjacentValues(array, 2);
46
+ * // returns: { prev: 20, next: 40 }
47
+ *
48
+ * getAdjacentValues(array, 0);
49
+ * // returns: { prev: null, next: 20 }
50
+ *
51
+ * getAdjacentValues(array, 3);
52
+ * // returns: { prev: 30, next: null }
53
+ *
54
+ * getAdjacentValues(array, -1);
55
+ * // returns: { prev: null, next: null }
56
+ *
57
+ * getAdjacentValues(array, 4);
58
+ * // returns: { prev: null, next: null }
59
+ */
60
+ function getAdjacentValues(array, index) {
61
+ if (index < 0 || index >= array.length) {
62
+ return { prev: null, next: null };
63
+ }
64
+ const prevValue = index > 0 ? array[index - 1] : null;
65
+ const nextValue = index < array.length - 1 ? array[index + 1] : null;
66
+ return { prev: prevValue, next: nextValue };
67
+ }
27
68
  //# sourceMappingURL=js-utils.js.map
@@ -0,0 +1,4 @@
1
+ import type { CodeWalkthroughConditionsObject } from '@redocly/config';
2
+ export declare function matchCodeWalkthroughConditions(conditions: CodeWalkthroughConditionsObject | undefined, state: Record<string, {
3
+ value: string | boolean;
4
+ }>): boolean;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.matchCodeWalkthroughConditions = matchCodeWalkthroughConditions;
4
+ const utils_1 = require("../../core/utils");
5
+ function matchCodeWalkthroughConditions(conditions = {}, state) {
6
+ const { when, unless } = conditions;
7
+ function evaluateCondition(key, value) {
8
+ var _a;
9
+ const stateValue = (_a = state[key]) === null || _a === void 0 ? void 0 : _a.value;
10
+ if (Array.isArray(value) && typeof stateValue === 'string') {
11
+ return value.includes(stateValue);
12
+ }
13
+ return stateValue === value;
14
+ }
15
+ const matchesWhen = (0, utils_1.isObject)(when)
16
+ ? Object.entries(when).every(([key, value]) => evaluateCondition(key, value))
17
+ : true;
18
+ const matchesUnless = (0, utils_1.isObject)(unless)
19
+ ? Object.entries(unless).some(([key, value]) => evaluateCondition(key, value))
20
+ : false;
21
+ return matchesWhen && !matchesUnless;
22
+ }
23
+ //# sourceMappingURL=match-code-walkthrough-conditions.js.map
@@ -0,0 +1,3 @@
1
+ export declare function replaceInputsWithValue(node: string, inputs: Record<string, {
2
+ value: string;
3
+ }>): string;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.replaceInputsWithValue = replaceInputsWithValue;
4
+ const inputRegex = /(?:\/\*|<!--|#|\/\/)\s*@redocly-input\s*\{"id":\s*"(.*?)"\}\s*(?:\*\/|-->)?/g;
5
+ function replaceInputsWithValue(node, inputs) {
6
+ return node.replace(inputRegex, (match, inputKey) => {
7
+ var _a;
8
+ if (Object.prototype.hasOwnProperty.call(inputs, inputKey)) {
9
+ return (_a = inputs[inputKey]) === null || _a === void 0 ? void 0 : _a.value;
10
+ }
11
+ else {
12
+ return match;
13
+ }
14
+ });
15
+ }
16
+ //# sourceMappingURL=replace-inputs-with-value.js.map