@mui/internal-docs-infra 0.1.0 → 0.1.1-alpha.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 (177) hide show
  1. package/CodeControllerContext/CodeControllerContext.d.ts +22 -0
  2. package/CodeControllerContext/CodeControllerContext.d.ts.map +1 -0
  3. package/CodeControllerContext/CodeControllerContext.js +14 -0
  4. package/CodeControllerContext/index.d.ts +1 -0
  5. package/CodeControllerContext/index.d.ts.map +1 -0
  6. package/CodeControllerContext/index.js +1 -0
  7. package/CodeHighlighter/CodeHighlighter.d.ts +2 -0
  8. package/CodeHighlighter/CodeHighlighter.d.ts.map +1 -0
  9. package/CodeHighlighter/CodeHighlighter.js +321 -0
  10. package/CodeHighlighter/CodeHighlighterClient.d.ts +2 -0
  11. package/CodeHighlighter/CodeHighlighterClient.d.ts.map +1 -0
  12. package/CodeHighlighter/CodeHighlighterClient.js +399 -0
  13. package/CodeHighlighter/CodeHighlighterContext.d.ts +14 -0
  14. package/CodeHighlighter/CodeHighlighterContext.d.ts.map +1 -0
  15. package/CodeHighlighter/CodeHighlighterContext.js +14 -0
  16. package/CodeHighlighter/CodeHighlighterFallbackContext.d.ts +7 -0
  17. package/CodeHighlighter/CodeHighlighterFallbackContext.d.ts.map +1 -0
  18. package/CodeHighlighter/CodeHighlighterFallbackContext.js +11 -0
  19. package/CodeHighlighter/applyTransform.d.ts +19 -0
  20. package/CodeHighlighter/applyTransform.d.ts.map +1 -0
  21. package/CodeHighlighter/applyTransform.js +75 -0
  22. package/CodeHighlighter/codeToFallbackProps.d.ts +2 -0
  23. package/CodeHighlighter/codeToFallbackProps.d.ts.map +1 -0
  24. package/CodeHighlighter/codeToFallbackProps.js +70 -0
  25. package/CodeHighlighter/errors.d.ts +0 -0
  26. package/CodeHighlighter/errors.d.ts.map +1 -0
  27. package/CodeHighlighter/errors.js +1 -0
  28. package/CodeHighlighter/hasAllVariants.d.ts +2 -0
  29. package/CodeHighlighter/hasAllVariants.d.ts.map +1 -0
  30. package/CodeHighlighter/hasAllVariants.js +31 -0
  31. package/CodeHighlighter/index.d.ts +4 -0
  32. package/CodeHighlighter/index.d.ts.map +1 -0
  33. package/CodeHighlighter/index.js +4 -0
  34. package/CodeHighlighter/loadFallbackCode.d.ts +9 -0
  35. package/CodeHighlighter/loadFallbackCode.d.ts.map +1 -0
  36. package/CodeHighlighter/loadFallbackCode.js +468 -0
  37. package/CodeHighlighter/loadVariant.d.ts +11 -0
  38. package/CodeHighlighter/loadVariant.d.ts.map +1 -0
  39. package/CodeHighlighter/loadVariant.js +708 -0
  40. package/CodeHighlighter/maybeInitialData.d.ts +10 -0
  41. package/CodeHighlighter/maybeInitialData.d.ts.map +1 -0
  42. package/CodeHighlighter/maybeInitialData.js +94 -0
  43. package/CodeHighlighter/parseCode.d.ts +6 -0
  44. package/CodeHighlighter/parseCode.d.ts.map +1 -0
  45. package/CodeHighlighter/parseCode.js +122 -0
  46. package/CodeHighlighter/parseControlledCode.d.ts +6 -0
  47. package/CodeHighlighter/parseControlledCode.d.ts.map +1 -0
  48. package/CodeHighlighter/parseControlledCode.js +76 -0
  49. package/CodeHighlighter/transformCode.d.ts +20 -0
  50. package/CodeHighlighter/transformCode.d.ts.map +1 -0
  51. package/CodeHighlighter/transformCode.js +223 -0
  52. package/CodeHighlighter/transformParsedSource.d.ts +3 -0
  53. package/CodeHighlighter/transformParsedSource.d.ts.map +1 -0
  54. package/CodeHighlighter/transformParsedSource.js +66 -0
  55. package/CodeHighlighter/transformSource.d.ts +2 -0
  56. package/CodeHighlighter/transformSource.d.ts.map +1 -0
  57. package/CodeHighlighter/transformSource.js +107 -0
  58. package/CodeHighlighter/types.d.ts +138 -0
  59. package/CodeHighlighter/types.d.ts.map +1 -0
  60. package/CodeHighlighter/types.js +1 -0
  61. package/CodeProvider/CodeContext.d.ts +12 -0
  62. package/CodeProvider/CodeContext.d.ts.map +1 -0
  63. package/CodeProvider/CodeContext.js +8 -0
  64. package/CodeProvider/CodeProvider.d.ts +13 -0
  65. package/CodeProvider/CodeProvider.d.ts.map +1 -0
  66. package/CodeProvider/CodeProvider.js +50 -0
  67. package/CodeProvider/index.d.ts +2 -0
  68. package/CodeProvider/index.d.ts.map +1 -0
  69. package/CodeProvider/index.js +2 -0
  70. package/README.md +3 -1
  71. package/hast/hast.d.ts +11 -0
  72. package/hast/hast.d.ts.map +1 -0
  73. package/hast/hast.js +66 -0
  74. package/hast/index.d.ts +1 -0
  75. package/hast/index.d.ts.map +1 -0
  76. package/hast/index.js +1 -0
  77. package/loadPrecomputedCodeHighlighter/index.d.ts +2 -0
  78. package/loadPrecomputedCodeHighlighter/index.d.ts.map +1 -0
  79. package/loadPrecomputedCodeHighlighter/index.js +4 -0
  80. package/loadPrecomputedCodeHighlighter/loadPrecomputedCodeHighlighter.d.ts +57 -0
  81. package/loadPrecomputedCodeHighlighter/loadPrecomputedCodeHighlighter.d.ts.map +1 -0
  82. package/loadPrecomputedCodeHighlighter/loadPrecomputedCodeHighlighter.js +194 -0
  83. package/loadPrecomputedCodeHighlighter/parseCreateFactoryCall.d.ts +20 -0
  84. package/loadPrecomputedCodeHighlighter/parseCreateFactoryCall.d.ts.map +1 -0
  85. package/loadPrecomputedCodeHighlighter/parseCreateFactoryCall.js +243 -0
  86. package/loadPrecomputedCodeHighlighter/parseFunctionParameters.d.ts +15 -0
  87. package/loadPrecomputedCodeHighlighter/parseFunctionParameters.d.ts.map +1 -0
  88. package/loadPrecomputedCodeHighlighter/parseFunctionParameters.js +168 -0
  89. package/loadPrecomputedCodeHighlighter/replacePrecomputeValue.d.ts +27 -0
  90. package/loadPrecomputedCodeHighlighter/replacePrecomputeValue.d.ts.map +1 -0
  91. package/loadPrecomputedCodeHighlighter/replacePrecomputeValue.js +37 -0
  92. package/loadServerCodeMeta/index.d.ts +1 -0
  93. package/loadServerCodeMeta/index.d.ts.map +1 -0
  94. package/loadServerCodeMeta/index.js +1 -0
  95. package/loadServerCodeMeta/serverLoadCodeMeta.d.ts +24 -0
  96. package/loadServerCodeMeta/serverLoadCodeMeta.d.ts.map +1 -0
  97. package/loadServerCodeMeta/serverLoadCodeMeta.js +77 -0
  98. package/loadServerSource/index.d.ts +1 -0
  99. package/loadServerSource/index.d.ts.map +1 -0
  100. package/loadServerSource/index.js +1 -0
  101. package/loadServerSource/serverLoadSource.d.ts +25 -0
  102. package/loadServerSource/serverLoadSource.d.ts.map +1 -0
  103. package/loadServerSource/serverLoadSource.js +100 -0
  104. package/loaderUtils/getFileNameFromUrl.d.ts +11 -0
  105. package/loaderUtils/getFileNameFromUrl.d.ts.map +1 -0
  106. package/loaderUtils/getFileNameFromUrl.js +32 -0
  107. package/loaderUtils/index.d.ts +5 -0
  108. package/loaderUtils/index.d.ts.map +1 -0
  109. package/loaderUtils/index.js +5 -0
  110. package/loaderUtils/processImports.d.ts +19 -0
  111. package/loaderUtils/processImports.d.ts.map +1 -0
  112. package/loaderUtils/processImports.js +82 -0
  113. package/loaderUtils/resolveImports.d.ts +4 -0
  114. package/loaderUtils/resolveImports.d.ts.map +1 -0
  115. package/loaderUtils/resolveImports.js +71 -0
  116. package/loaderUtils/resolveModulePath.d.ts +74 -0
  117. package/loaderUtils/resolveModulePath.d.ts.map +1 -0
  118. package/loaderUtils/resolveModulePath.js +862 -0
  119. package/loaderUtils/resolveModulePathWithFs.d.ts +44 -0
  120. package/loaderUtils/resolveModulePathWithFs.d.ts.map +1 -0
  121. package/loaderUtils/resolveModulePathWithFs.js +159 -0
  122. package/loaderUtils/rewriteImports.d.ts +9 -0
  123. package/loaderUtils/rewriteImports.d.ts.map +1 -0
  124. package/loaderUtils/rewriteImports.js +57 -0
  125. package/package.json +20 -7
  126. package/parseSource/grammars.d.ts +2 -0
  127. package/parseSource/grammars.d.ts.map +1 -0
  128. package/parseSource/grammars.js +27 -0
  129. package/parseSource/index.d.ts +1 -0
  130. package/parseSource/index.d.ts.map +1 -0
  131. package/parseSource/index.js +1 -0
  132. package/parseSource/parseSource.d.ts +3 -0
  133. package/parseSource/parseSource.d.ts.map +1 -0
  134. package/parseSource/parseSource.js +37 -0
  135. package/transformRelativeMarkdownPaths/index.d.ts +2 -0
  136. package/transformRelativeMarkdownPaths/index.d.ts.map +1 -0
  137. package/transformRelativeMarkdownPaths/index.js +4 -0
  138. package/transformRelativeMarkdownPaths/transformRelativeMarkdownPaths.d.ts +12 -0
  139. package/transformRelativeMarkdownPaths/transformRelativeMarkdownPaths.d.ts.map +1 -0
  140. package/transformRelativeMarkdownPaths/transformRelativeMarkdownPaths.js +30 -0
  141. package/transformTsToJs/index.d.ts +1 -0
  142. package/transformTsToJs/index.d.ts.map +1 -0
  143. package/transformTsToJs/index.js +1 -0
  144. package/transformTsToJs/removeTypes.d.ts +13 -0
  145. package/transformTsToJs/removeTypes.d.ts.map +1 -0
  146. package/transformTsToJs/removeTypes.js +134 -0
  147. package/transformTsToJs/transformTsToJs.d.ts +3 -0
  148. package/transformTsToJs/transformTsToJs.d.ts.map +1 -0
  149. package/transformTsToJs/transformTsToJs.js +34 -0
  150. package/useCode/index.d.ts +1 -0
  151. package/useCode/index.d.ts.map +1 -0
  152. package/useCode/index.js +1 -0
  153. package/{esm/useDemo/index.d.ts → useCode/useCode.d.ts} +14 -28
  154. package/useCode/useCode.d.ts.map +1 -0
  155. package/useCode/useCode.js +393 -0
  156. package/useCopier/index.js +10 -18
  157. package/useDemo/index.d.ts +12 -24
  158. package/useDemo/index.d.ts.map +1 -0
  159. package/useDemo/index.js +14 -109
  160. package/useOnHydrate/index.d.ts +1 -0
  161. package/useOnHydrate/index.d.ts.map +1 -0
  162. package/useOnHydrate/index.js +1 -0
  163. package/useOnHydrate/useOnHydrate.d.ts +1 -0
  164. package/useOnHydrate/useOnHydrate.d.ts.map +1 -0
  165. package/useOnHydrate/useOnHydrate.js +18 -0
  166. package/useOnIdle/index.d.ts +1 -0
  167. package/useOnIdle/index.d.ts.map +1 -0
  168. package/useOnIdle/index.js +1 -0
  169. package/useOnIdle/useOnIdle.d.ts +1 -0
  170. package/useOnIdle/useOnIdle.d.ts.map +1 -0
  171. package/useOnIdle/useOnIdle.js +39 -0
  172. package/esm/package.json +0 -1
  173. package/esm/useCopier/index.d.ts +0 -15
  174. package/esm/useCopier/index.js +0 -62
  175. package/esm/useDemo/index.d.ts.map +0 -1
  176. package/esm/useDemo/index.js +0 -104
  177. /package/{esm/useCopier → useCopier}/index.d.ts.map +0 -0
@@ -0,0 +1,3 @@
1
+ import type { SourceTransformer, TransformSource } from "../CodeHighlighter/index.js";
2
+ export declare const transformTsToJs: TransformSource;
3
+ export declare const TsToJsTransformer: SourceTransformer;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformTsToJs.d.ts","sourceRoot":"","sources":["../../../src/transformTsToJs/transformTsToJs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE7E,eAAO,MAAM,eAAe,EAAE,eAO7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,iBAG/B,CAAC"}
@@ -0,0 +1,34 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ import { removeTypes } from "./removeTypes.js";
4
+ export var transformTsToJs = /*#__PURE__*/function () {
5
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(source, fileName) {
6
+ var transformed, transformedFileName;
7
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
8
+ while (1) switch (_context.prev = _context.next) {
9
+ case 0:
10
+ _context.next = 2;
11
+ return removeTypes(source, fileName);
12
+ case 2:
13
+ transformed = _context.sent;
14
+ transformedFileName = fileName.replace(/\.ts$/, '.js').replace(/\.tsx$/, '.jsx');
15
+ return _context.abrupt("return", {
16
+ js: {
17
+ source: transformed,
18
+ fileName: transformedFileName
19
+ }
20
+ });
21
+ case 5:
22
+ case "end":
23
+ return _context.stop();
24
+ }
25
+ }, _callee);
26
+ }));
27
+ return function transformTsToJs(_x, _x2) {
28
+ return _ref.apply(this, arguments);
29
+ };
30
+ }();
31
+ export var TsToJsTransformer = {
32
+ extensions: ['ts', 'tsx'],
33
+ transformer: transformTsToJs
34
+ };
@@ -0,0 +1 @@
1
+ export * from "./useCode.js";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/useCode/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
@@ -0,0 +1 @@
1
+ export * from "./useCode.js";
@@ -1,44 +1,26 @@
1
1
  import * as React from 'react';
2
- import { Nodes } from 'hast';
3
2
  import { UseCopierOpts } from "../useCopier/index.js";
4
- type Source = Nodes;
5
- export type Variant = {
6
- component: React.ReactNode;
7
- fileName: string;
8
- source: Source;
9
- extraSource?: {
10
- [key: string]: Source;
11
- };
12
- };
13
- export type Demo = {
14
- name?: string;
15
- slug?: string;
16
- description?: string;
17
- variants: {
18
- [key: string]: Variant;
19
- };
20
- };
21
- type UseDemoOpts = {
3
+ import { ContentProps } from "../CodeHighlighter/types.js";
4
+ type UseCodeOpts = {
22
5
  defaultOpen?: boolean;
23
6
  copy?: UseCopierOpts;
24
7
  githubUrlPrefix?: string;
25
8
  codeSandboxUrlPrefix?: string;
26
9
  stackBlitzPrefix?: string;
10
+ initialVariant?: string;
11
+ initialTransform?: string;
27
12
  };
28
- export declare function useDemo(demo: Demo, opts?: UseDemoOpts): {
13
+ export interface UseCodeResult {
29
14
  component: React.ReactNode;
30
- name: string | undefined;
31
- slug: string | undefined;
32
- description: string | undefined;
33
15
  ref: React.RefObject<HTMLDivElement | null>;
34
16
  variants: string[];
35
17
  selectedVariant: string;
36
18
  selectVariant: React.Dispatch<React.SetStateAction<string>>;
37
- files: {
19
+ files: Array<{
38
20
  name: string;
39
- component: JSX.Element;
40
- }[];
41
- selectedFile: any;
21
+ component: React.ReactNode;
22
+ }>;
23
+ selectedFile: React.ReactNode;
42
24
  selectedFileName: string;
43
25
  selectFileName: React.Dispatch<React.SetStateAction<string>>;
44
26
  expanded: boolean;
@@ -47,5 +29,9 @@ export declare function useDemo(demo: Demo, opts?: UseDemoOpts): {
47
29
  resetFocus: () => void;
48
30
  copy: (event: React.MouseEvent<HTMLButtonElement>) => Promise<void>;
49
31
  copyDisabled: boolean;
50
- };
32
+ availableTransforms: string[];
33
+ selectedTransform: string | null | undefined;
34
+ selectTransform: (transformName: string | null) => void;
35
+ }
36
+ export declare function useCode(contentProps: ContentProps, opts?: UseCodeOpts): UseCodeResult;
51
37
  export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCode.d.ts","sourceRoot":"","sources":["../../../src/useCode/useCode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAa,aAAa,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAKxD,KAAK,WAAW,GAAG;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC5C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAC;IAC3D,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,YAAY,EAAE,OAAO,CAAC;IACtB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7C,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACzD;AAMD,wBAAgB,OAAO,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,aAAa,CA0XrF"}
@@ -0,0 +1,393 @@
1
+ import _typeof from "@babel/runtime/helpers/esm/typeof";
2
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
+ import * as React from 'react';
4
+ import { Fragment, jsx, jsxs } from 'react/jsx-runtime';
5
+ import { toText } from 'hast-util-to-text';
6
+ import { toJsxRuntime } from 'hast-util-to-jsx-runtime';
7
+ import { useCopier } from "../useCopier/index.js";
8
+ import { useCodeHighlighterContextOptional } from "../CodeHighlighter/CodeHighlighterContext.js";
9
+ import { applyTransform } from "../CodeHighlighter/applyTransform.js";
10
+ function toComponent(source) {
11
+ return toJsxRuntime(source, {
12
+ Fragment: Fragment,
13
+ jsx: jsx,
14
+ jsxs: jsxs
15
+ });
16
+ }
17
+ export function useCode(contentProps, opts) {
18
+ var _ref = opts || {},
19
+ copyOpts = _ref.copy,
20
+ _ref$defaultOpen = _ref.defaultOpen,
21
+ defaultOpen = _ref$defaultOpen === void 0 ? false : _ref$defaultOpen,
22
+ initialVariant = _ref.initialVariant,
23
+ initialTransform = _ref.initialTransform;
24
+
25
+ // Safely try to get context values - will be undefined if not in context
26
+ var context = useCodeHighlighterContextOptional();
27
+ var _React$useState = React.useState(defaultOpen),
28
+ _React$useState2 = _slicedToArray(_React$useState, 2),
29
+ expanded = _React$useState2[0],
30
+ setExpanded = _React$useState2[1];
31
+ var expand = React.useCallback(function () {
32
+ return setExpanded(true);
33
+ }, []);
34
+ var ref = React.useRef(null);
35
+ var resetFocus = React.useCallback(function () {
36
+ var _ref$current;
37
+ (_ref$current = ref.current) == null || _ref$current.focus();
38
+ }, []);
39
+
40
+ // Get the effective code - context overrides contentProps if available
41
+ var effectiveCode = React.useMemo(function () {
42
+ return (context == null ? void 0 : context.code) || contentProps.code || {};
43
+ }, [context == null ? void 0 : context.code, contentProps.code]);
44
+
45
+ // Get variant keys from effective code
46
+ var variantKeys = React.useMemo(function () {
47
+ return Object.keys(effectiveCode).filter(function (key) {
48
+ var variant = effectiveCode[key];
49
+ return variant && _typeof(variant) === 'object' && 'source' in variant;
50
+ });
51
+ }, [effectiveCode]);
52
+ var _React$useState3 = React.useState(initialVariant || variantKeys[0] || ''),
53
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
54
+ selectedVariantKey = _React$useState4[0],
55
+ setSelectedVariantKey = _React$useState4[1];
56
+ var selectedVariant = React.useMemo(function () {
57
+ var variant = effectiveCode[selectedVariantKey];
58
+ if (variant && _typeof(variant) === 'object' && 'source' in variant) {
59
+ return variant;
60
+ }
61
+ return null;
62
+ }, [effectiveCode, selectedVariantKey]);
63
+
64
+ // Safety check: if selectedVariant doesn't exist, fall back to first variant
65
+ React.useEffect(function () {
66
+ if (!selectedVariant && variantKeys.length > 0) {
67
+ setSelectedVariantKey(variantKeys[0]);
68
+ }
69
+ }, [selectedVariant, variantKeys]);
70
+
71
+ // Transform state - get available transforms from context or from the effective code data
72
+ var availableTransforms = React.useMemo(function () {
73
+ // First try to get from context
74
+ if (context != null && context.availableTransforms && context.availableTransforms.length > 0) {
75
+ return context.availableTransforms;
76
+ }
77
+
78
+ // Otherwise, get from the effective code data
79
+ var transforms = new Set();
80
+ if (effectiveCode && selectedVariantKey) {
81
+ var variantCode = effectiveCode[selectedVariantKey];
82
+ if (variantCode && _typeof(variantCode) === 'object' && 'transforms' in variantCode && variantCode.transforms) {
83
+ Object.keys(variantCode.transforms).forEach(function (transformKey) {
84
+ transforms.add(transformKey);
85
+ });
86
+ }
87
+ }
88
+ return Array.from(transforms);
89
+ }, [context == null ? void 0 : context.availableTransforms, effectiveCode, selectedVariantKey]);
90
+ var _React$useState5 = React.useState(initialTransform || null),
91
+ _React$useState6 = _slicedToArray(_React$useState5, 2),
92
+ selectedTransform = _React$useState6[0],
93
+ setSelectedTransform = _React$useState6[1];
94
+
95
+ // Memoize all transformed files based on selectedTransform
96
+ var transformedFiles = React.useMemo(function () {
97
+ // Only create transformed files when there's actually a transform selected
98
+ if (!selectedVariant || !selectedTransform) {
99
+ return undefined;
100
+ }
101
+ var files = [];
102
+ var filenameMap = {};
103
+
104
+ // Helper function to apply transform to a source
105
+ var applyTransformToSource = function applyTransformToSource(source, fileName, transforms) {
106
+ if (!(transforms != null && transforms[selectedTransform])) {
107
+ return {
108
+ transformedSource: source,
109
+ transformedName: fileName
110
+ };
111
+ }
112
+ try {
113
+ // Get transform data
114
+ var transformData = transforms[selectedTransform];
115
+ if (!transformData || _typeof(transformData) !== 'object' || !('delta' in transformData)) {
116
+ return {
117
+ transformedSource: source,
118
+ transformedName: fileName
119
+ };
120
+ }
121
+
122
+ // Apply transform
123
+ var result = applyTransform(source, transforms, selectedTransform);
124
+ var transformedName = transformData.fileName || fileName;
125
+ return {
126
+ transformedSource: result,
127
+ transformedName: transformedName
128
+ };
129
+ } catch (error) {
130
+ console.error("Transform failed for ".concat(fileName, ":"), error);
131
+ return {
132
+ transformedSource: source,
133
+ transformedName: fileName
134
+ };
135
+ }
136
+ };
137
+
138
+ // Process main file - get transforms from selectedVariant
139
+ var variantTransforms = 'transforms' in selectedVariant ? selectedVariant.transforms : undefined;
140
+ var _applyTransformToSour = applyTransformToSource(selectedVariant.source, selectedVariant.fileName, variantTransforms),
141
+ mainSource = _applyTransformToSour.transformedSource,
142
+ mainName = _applyTransformToSour.transformedName;
143
+ filenameMap[selectedVariant.fileName] = mainName;
144
+ files.push({
145
+ name: mainName,
146
+ originalName: selectedVariant.fileName,
147
+ source: mainSource,
148
+ component: toComponent(mainSource)
149
+ });
150
+
151
+ // Process extra files
152
+ if (selectedVariant.extraFiles) {
153
+ Object.entries(selectedVariant.extraFiles).forEach(function (_ref2) {
154
+ var _transforms;
155
+ var _ref3 = _slicedToArray(_ref2, 2),
156
+ fileName = _ref3[0],
157
+ fileData = _ref3[1];
158
+ var source;
159
+ var transforms;
160
+
161
+ // Handle different extraFile structures
162
+ if (typeof fileData === 'string') {
163
+ source = fileData;
164
+ transforms = variantTransforms;
165
+ } else if (fileData && _typeof(fileData) === 'object' && 'source' in fileData) {
166
+ source = fileData.source;
167
+ transforms = fileData.transforms || variantTransforms;
168
+ } else {
169
+ return; // Skip invalid entries
170
+ }
171
+
172
+ // Apply transforms if available
173
+ var transformedSource = source;
174
+ var transformedName = fileName;
175
+ if ((_transforms = transforms) != null && _transforms[selectedTransform]) {
176
+ try {
177
+ var transformData = transforms[selectedTransform];
178
+ if (transformData && _typeof(transformData) === 'object' && 'delta' in transformData) {
179
+ transformedSource = applyTransform(source, transforms, selectedTransform);
180
+ transformedName = transformData.fileName || fileName;
181
+ }
182
+ } catch (error) {
183
+ console.error("Transform failed for ".concat(fileName, ":"), error);
184
+ }
185
+ }
186
+ filenameMap[fileName] = transformedName;
187
+ files.push({
188
+ name: transformedName,
189
+ originalName: fileName,
190
+ source: transformedSource,
191
+ component: toComponent(transformedSource)
192
+ });
193
+ });
194
+ }
195
+ return {
196
+ files: files,
197
+ filenameMap: filenameMap
198
+ };
199
+ }, [selectedVariant, selectedTransform]);
200
+
201
+ // Keep selectedFileName as untransformed filename for internal tracking
202
+ var _React$useState7 = React.useState((selectedVariant == null ? void 0 : selectedVariant.fileName) || ''),
203
+ _React$useState8 = _slicedToArray(_React$useState7, 2),
204
+ selectedFileNameInternal = _React$useState8[0],
205
+ setSelectedFileNameInternal = _React$useState8[1];
206
+
207
+ // Reset selectedFileName when variant changes
208
+ React.useEffect(function () {
209
+ if (selectedVariant && selectedFileNameInternal !== selectedVariant.fileName) {
210
+ // Only reset if current selectedFileName doesn't exist in the new variant
211
+ var hasFile = selectedVariant.fileName === selectedFileNameInternal || selectedVariant.extraFiles && selectedVariant.extraFiles[selectedFileNameInternal];
212
+ if (!hasFile) {
213
+ setSelectedFileNameInternal(selectedVariant.fileName);
214
+ }
215
+ }
216
+ }, [selectedVariant, selectedFileNameInternal]);
217
+
218
+ // Compute the displayed filename (transformed if applicable)
219
+ var selectedFileName = React.useMemo(function () {
220
+ if (!selectedVariant) {
221
+ return '';
222
+ }
223
+
224
+ // If we have transformed files, return the transformed name
225
+ if (transformedFiles) {
226
+ var file = transformedFiles.files.find(function (f) {
227
+ return f.originalName === selectedFileNameInternal;
228
+ });
229
+ return file ? file.name : selectedFileNameInternal;
230
+ }
231
+
232
+ // Otherwise, return the original filename
233
+ return selectedFileNameInternal;
234
+ }, [selectedVariant, selectedFileNameInternal, transformedFiles]);
235
+ var selectedFile = React.useMemo(function () {
236
+ if (!selectedVariant) {
237
+ return null;
238
+ }
239
+
240
+ // If we have transformed files, use them
241
+ if (transformedFiles) {
242
+ var file = transformedFiles.files.find(function (f) {
243
+ return f.originalName === selectedFileNameInternal;
244
+ });
245
+ return file ? file.source : null;
246
+ }
247
+
248
+ // Otherwise, use the original untransformed files
249
+ if (selectedFileNameInternal === selectedVariant.fileName) {
250
+ return selectedVariant.source;
251
+ }
252
+
253
+ // Look in extraFiles
254
+ if (selectedVariant.extraFiles && selectedVariant.extraFiles[selectedFileNameInternal]) {
255
+ var extraFile = selectedVariant.extraFiles[selectedFileNameInternal];
256
+ if (typeof extraFile === 'string') {
257
+ return extraFile;
258
+ }
259
+ if (extraFile && _typeof(extraFile) === 'object' && 'source' in extraFile) {
260
+ return extraFile.source;
261
+ }
262
+ }
263
+ return null;
264
+ }, [selectedVariant, selectedFileNameInternal, transformedFiles]);
265
+ var selectedFileComponent = React.useMemo(function () {
266
+ if (!selectedVariant) {
267
+ return null;
268
+ }
269
+
270
+ // If we have transformed files, use them
271
+ if (transformedFiles) {
272
+ var file = transformedFiles.files.find(function (f) {
273
+ return f.originalName === selectedFileNameInternal;
274
+ });
275
+ return file ? file.component : null;
276
+ }
277
+
278
+ // Otherwise, create component from original untransformed files
279
+ if (selectedFileNameInternal === selectedVariant.fileName) {
280
+ return toComponent(selectedVariant.source);
281
+ }
282
+
283
+ // Look in extraFiles
284
+ if (selectedVariant.extraFiles && selectedVariant.extraFiles[selectedFileNameInternal]) {
285
+ var extraFile = selectedVariant.extraFiles[selectedFileNameInternal];
286
+ var source;
287
+ if (typeof extraFile === 'string') {
288
+ source = extraFile;
289
+ } else if (extraFile && _typeof(extraFile) === 'object' && 'source' in extraFile) {
290
+ source = extraFile.source;
291
+ } else {
292
+ return null;
293
+ }
294
+ return toComponent(source);
295
+ }
296
+ return null;
297
+ }, [selectedVariant, selectedFileNameInternal, transformedFiles]);
298
+
299
+ // Convert files for the return interface
300
+ var files = React.useMemo(function () {
301
+ if (!selectedVariant) {
302
+ return [];
303
+ }
304
+
305
+ // If we have transformed files, use them
306
+ if (transformedFiles) {
307
+ return transformedFiles.files.map(function (f) {
308
+ return {
309
+ name: f.name,
310
+ component: f.component
311
+ };
312
+ });
313
+ }
314
+
315
+ // Otherwise, create files from original untransformed data
316
+ var result = [{
317
+ name: selectedVariant.fileName,
318
+ component: toComponent(selectedVariant.source)
319
+ }];
320
+ if (selectedVariant.extraFiles) {
321
+ Object.entries(selectedVariant.extraFiles).forEach(function (_ref4) {
322
+ var _ref5 = _slicedToArray(_ref4, 2),
323
+ fileName = _ref5[0],
324
+ fileData = _ref5[1];
325
+ var source;
326
+ if (typeof fileData === 'string') {
327
+ source = fileData;
328
+ } else if (fileData && _typeof(fileData) === 'object' && 'source' in fileData) {
329
+ source = fileData.source;
330
+ } else {
331
+ return; // Skip invalid entries
332
+ }
333
+ result.push({
334
+ name: fileName,
335
+ component: toComponent(source)
336
+ });
337
+ });
338
+ }
339
+ return result;
340
+ }, [selectedVariant, transformedFiles]);
341
+ var sourceFileToText = React.useCallback(function () {
342
+ if (!selectedFile) {
343
+ return undefined;
344
+ }
345
+ if (typeof selectedFile === 'string') {
346
+ return selectedFile;
347
+ }
348
+ if (selectedFile && _typeof(selectedFile) === 'object' && 'hastJson' in selectedFile) {
349
+ return selectedFile.hastJson;
350
+ }
351
+ return toText(selectedFile, {
352
+ whitespace: 'pre'
353
+ });
354
+ }, [selectedFile]);
355
+ var _useCopier = useCopier(sourceFileToText, copyOpts),
356
+ copy = _useCopier.copy,
357
+ copyDisabled = _useCopier.disabled;
358
+
359
+ // Function to switch to a specific transform
360
+ var selectTransform = React.useCallback(function (transformName) {
361
+ if (!transformName || availableTransforms.includes(transformName)) {
362
+ setSelectedTransform(transformName);
363
+ } else {
364
+ setSelectedTransform(null);
365
+ }
366
+ }, [availableTransforms]);
367
+
368
+ // Get the effective components object - context overrides contentProps
369
+ // Components are kept separate from variant data to maintain clean separation of concerns
370
+ var effectiveComponents = React.useMemo(function () {
371
+ return (context == null ? void 0 : context.components) || contentProps.components || {};
372
+ }, [context == null ? void 0 : context.components, contentProps.components]);
373
+ return {
374
+ component: effectiveComponents[selectedVariantKey] || null,
375
+ ref: ref,
376
+ variants: variantKeys,
377
+ selectedVariant: selectedVariantKey,
378
+ selectVariant: setSelectedVariantKey,
379
+ files: files,
380
+ selectedFile: selectedFileComponent,
381
+ selectedFileName: selectedFileName,
382
+ selectFileName: setSelectedFileNameInternal,
383
+ expanded: expanded,
384
+ expand: expand,
385
+ setExpanded: setExpanded,
386
+ resetFocus: resetFocus,
387
+ copy: copy,
388
+ copyDisabled: copyDisabled,
389
+ availableTransforms: availableTransforms,
390
+ selectedTransform: selectedTransform,
391
+ selectTransform: selectTransform
392
+ };
393
+ }
@@ -1,17 +1,9 @@
1
- "use strict";
2
-
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
4
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.useCopier = useCopier;
9
- var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
10
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
- var React = _interopRequireWildcard(require("react"));
13
- var _clipboardCopy = _interopRequireDefault(require("clipboard-copy"));
14
- function useCopier(contents, opts) {
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
+ import * as React from 'react';
5
+ import copyToClipboard from 'clipboard-copy';
6
+ export function useCopier(contents, opts) {
15
7
  var _ref = opts || {},
16
8
  onCopied = _ref.onCopied,
17
9
  onError = _ref.onError,
@@ -20,13 +12,13 @@ function useCopier(contents, opts) {
20
12
  timeout = _ref$timeout === void 0 ? 2000 : _ref$timeout;
21
13
  var copyTimeoutRef = React.useRef(undefined);
22
14
  var _React$useState = React.useState(false),
23
- _React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
15
+ _React$useState2 = _slicedToArray(_React$useState, 2),
24
16
  disabled = _React$useState2[0],
25
17
  setDisabled = _React$useState2[1];
26
18
  var copy = React.useCallback(/*#__PURE__*/function () {
27
- var _ref2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee(event) {
19
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(event) {
28
20
  var content;
29
- return (0, _regeneratorRuntime2["default"])().wrap(function _callee$(_context) {
21
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
30
22
  while (1) switch (_context.prev = _context.next) {
31
23
  case 0:
32
24
  clearTimeout(copyTimeoutRef.current);
@@ -38,7 +30,7 @@ function useCopier(contents, opts) {
38
30
  break;
39
31
  }
40
32
  _context.next = 7;
41
- return (0, _clipboardCopy["default"])(content);
33
+ return copyToClipboard(content);
42
34
  case 7:
43
35
  onCopied == null || onCopied();
44
36
  _context.next = 13;
@@ -1,44 +1,29 @@
1
1
  import * as React from 'react';
2
- import { Nodes } from 'hast';
3
2
  import { UseCopierOpts } from "../useCopier/index.js";
4
- type Source = Nodes;
5
- export type Variant = {
6
- component: React.ReactNode;
7
- fileName: string;
8
- source: Source;
9
- extraSource?: {
10
- [key: string]: Source;
11
- };
12
- };
13
- export type Demo = {
14
- name?: string;
15
- slug?: string;
16
- description?: string;
17
- variants: {
18
- [key: string]: Variant;
19
- };
20
- };
3
+ import { ContentProps } from "../CodeHighlighter/types.js";
21
4
  type UseDemoOpts = {
22
5
  defaultOpen?: boolean;
23
6
  copy?: UseCopierOpts;
24
7
  githubUrlPrefix?: string;
25
8
  codeSandboxUrlPrefix?: string;
26
9
  stackBlitzPrefix?: string;
10
+ initialVariant?: string;
11
+ initialTransform?: string;
27
12
  };
28
- export declare function useDemo(demo: Demo, opts?: UseDemoOpts): {
29
- component: React.ReactNode;
13
+ export declare function useDemo(contentProps: ContentProps, opts?: UseDemoOpts): {
30
14
  name: string | undefined;
31
15
  slug: string | undefined;
32
16
  description: string | undefined;
17
+ component: React.ReactNode;
33
18
  ref: React.RefObject<HTMLDivElement | null>;
34
19
  variants: string[];
35
20
  selectedVariant: string;
36
21
  selectVariant: React.Dispatch<React.SetStateAction<string>>;
37
- files: {
22
+ files: Array<{
38
23
  name: string;
39
- component: JSX.Element;
40
- }[];
41
- selectedFile: any;
24
+ component: React.ReactNode;
25
+ }>;
26
+ selectedFile: React.ReactNode;
42
27
  selectedFileName: string;
43
28
  selectFileName: React.Dispatch<React.SetStateAction<string>>;
44
29
  expanded: boolean;
@@ -47,5 +32,8 @@ export declare function useDemo(demo: Demo, opts?: UseDemoOpts): {
47
32
  resetFocus: () => void;
48
33
  copy: (event: React.MouseEvent<HTMLButtonElement>) => Promise<void>;
49
34
  copyDisabled: boolean;
35
+ availableTransforms: string[];
36
+ selectedTransform: string | null | undefined;
37
+ selectTransform: (transformName: string | null) => void;
50
38
  };
51
39
  export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/useDemo/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,KAAK,WAAW,GAAG;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAGF,wBAAgB,OAAO,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;EAgBrE"}