@mui/internal-core-docs 0.0.1 → 9.0.0-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Ad/Ad.d.ts +5 -0
- package/Ad/Ad.js +226 -0
- package/Ad/AdCarbon.d.ts +2 -0
- package/Ad/AdCarbon.js +125 -0
- package/Ad/AdDisplay.d.ts +16 -0
- package/Ad/AdDisplay.js +86 -0
- package/Ad/AdGuest.d.ts +10 -0
- package/Ad/AdGuest.js +29 -0
- package/Ad/AdInHouse.d.ts +4 -0
- package/Ad/AdInHouse.js +14 -0
- package/Ad/AdManager.d.ts +19 -0
- package/Ad/AdManager.js +36 -0
- package/Ad/AdProvider.d.ts +15 -0
- package/Ad/AdProvider.js +24 -0
- package/Ad/ad.styles.d.ts +4 -0
- package/Ad/ad.styles.js +91 -0
- package/Ad/index.d.ts +5 -0
- package/Ad/index.js +7 -0
- package/ApiPage/ApiWarningAlert.d.ts +10 -0
- package/ApiPage/ApiWarningAlert.js +22 -0
- package/ApiPage/definitions/classes.d.ts +18 -0
- package/ApiPage/definitions/classes.js +54 -0
- package/ApiPage/definitions/index.d.ts +4 -0
- package/ApiPage/definitions/index.js +4 -0
- package/ApiPage/definitions/properties.d.ts +58 -0
- package/ApiPage/definitions/properties.js +110 -0
- package/ApiPage/definitions/slots.d.ts +16 -0
- package/ApiPage/definitions/slots.js +39 -0
- package/ApiPage/definitions/types.d.ts +53 -0
- package/ApiPage/definitions/types.js +1 -0
- package/ApiPage/index.d.ts +2 -0
- package/ApiPage/index.js +2 -0
- package/ApiPage/list/ClassesList.d.ts +11 -0
- package/ApiPage/list/ClassesList.js +103 -0
- package/ApiPage/list/ExpandableApiItem.d.ts +18 -0
- package/ApiPage/list/ExpandableApiItem.js +241 -0
- package/ApiPage/list/PropertiesList.d.ts +7 -0
- package/ApiPage/list/PropertiesList.js +263 -0
- package/ApiPage/list/SlotsList.d.ts +7 -0
- package/ApiPage/list/SlotsList.js +93 -0
- package/ApiPage/list/index.d.ts +1 -0
- package/ApiPage/list/index.js +1 -0
- package/ApiPage/private.d.ts +3 -0
- package/ApiPage/private.js +3 -0
- package/ApiPage/sections/ClassesSection.d.ts +34 -0
- package/ApiPage/sections/ClassesSection.js +76 -0
- package/ApiPage/sections/PropertiesSection.d.ts +45 -0
- package/ApiPage/sections/PropertiesSection.js +59 -0
- package/ApiPage/sections/SlotsSection.d.ts +24 -0
- package/ApiPage/sections/SlotsSection.js +61 -0
- package/ApiPage/sections/ToggleDisplayOption.d.ts +17 -0
- package/ApiPage/sections/ToggleDisplayOption.js +161 -0
- package/ApiPage/sections/index.d.ts +4 -0
- package/ApiPage/sections/index.js +4 -0
- package/ApiPage/table/ClassesTable.d.ts +7 -0
- package/ApiPage/table/ClassesTable.js +116 -0
- package/ApiPage/table/PropertiesTable.d.ts +6 -0
- package/ApiPage/table/PropertiesTable.js +286 -0
- package/ApiPage/table/SlotsTable.d.ts +6 -0
- package/ApiPage/table/SlotsTable.js +126 -0
- package/ApiPage/table/StyledTableContainer.d.ts +1 -0
- package/ApiPage/table/StyledTableContainer.js +42 -0
- package/ApiPage/types.d.ts +11 -0
- package/ApiPage/types.js +1 -0
- package/CHANGELOG.md +1651 -0
- package/CodeCopy/CodeCopy.d.ts +22 -0
- package/CodeCopy/CodeCopy.js +172 -0
- package/CodeCopy/CodeCopyButton.d.ts +4 -0
- package/CodeCopy/CodeCopyButton.js +40 -0
- package/CodeCopy/index.d.ts +3 -0
- package/CodeCopy/index.js +3 -0
- package/CodeCopy/useClipboardCopy.d.ts +4 -0
- package/CodeCopy/useClipboardCopy.js +21 -0
- package/ComponentLinkHeader/ComponentLinkHeader.d.ts +8 -0
- package/ComponentLinkHeader/ComponentLinkHeader.js +197 -0
- package/ComponentLinkHeader/index.d.ts +2 -0
- package/ComponentLinkHeader/index.js +2 -0
- package/DemoContext/DemoContext.d.ts +86 -0
- package/DemoContext/DemoContext.js +13 -0
- package/DemoContext/index.d.ts +2 -0
- package/DemoContext/index.js +1 -0
- package/DocsApp/AnalyticsProvider.d.ts +17 -0
- package/DocsApp/AnalyticsProvider.js +229 -0
- package/DocsApp/DocsApp.d.ts +79 -0
- package/DocsApp/DocsApp.js +105 -0
- package/DocsApp/GoogleAnalytics.d.ts +9 -0
- package/DocsApp/GoogleAnalytics.js +129 -0
- package/DocsApp/StyledEngineProvider.d.ts +8 -0
- package/DocsApp/StyledEngineProvider.js +38 -0
- package/DocsApp/consoleBanner.d.ts +1 -0
- package/DocsApp/consoleBanner.js +18 -0
- package/DocsApp/createEmotionCache.d.ts +1 -0
- package/DocsApp/createEmotionCache.js +12 -0
- package/DocsApp/createGetInitialProps.d.ts +30 -0
- package/DocsApp/createGetInitialProps.js +29 -0
- package/DocsApp/index.d.ts +5 -0
- package/DocsApp/index.js +4 -0
- package/DocsApp/loadDependencies.d.ts +1 -0
- package/DocsApp/loadDependencies.js +9 -0
- package/DocsApp/reportWebVitals.d.ts +13 -0
- package/DocsApp/reportWebVitals.js +22 -0
- package/DocsApp/serviceWorker.d.ts +1 -0
- package/DocsApp/serviceWorker.js +59 -0
- package/DocsProvider/DocsProvider.d.ts +24 -0
- package/DocsProvider/DocsProvider.js +31 -0
- package/DocsProvider/index.d.ts +1 -0
- package/DocsProvider/index.js +1 -0
- package/Document/Document.d.ts +16 -0
- package/Document/Document.js +147 -0
- package/Document/getInitialProps.d.ts +18 -0
- package/Document/getInitialProps.js +60 -0
- package/Document/index.d.ts +2 -0
- package/Document/index.js +2 -0
- package/HighlightedCode/HighlightedCode.d.ts +14 -0
- package/HighlightedCode/HighlightedCode.js +67 -0
- package/HighlightedCode/index.d.ts +1 -0
- package/HighlightedCode/index.js +1 -0
- package/HighlightedCodeWithTabs/HighlightedCodeWithTabs.d.ts +28 -0
- package/HighlightedCodeWithTabs/HighlightedCodeWithTabs.js +362 -0
- package/HighlightedCodeWithTabs/index.d.ts +2 -0
- package/HighlightedCodeWithTabs/index.js +2 -0
- package/IconImage/IconImage.d.ts +11 -0
- package/IconImage/IconImage.js +83 -0
- package/IconImage/index.d.ts +1 -0
- package/IconImage/index.js +1 -0
- package/InfoCard/InfoCard.d.ts +22 -0
- package/InfoCard/InfoCard.js +91 -0
- package/InfoCard/index.d.ts +1 -0
- package/InfoCard/index.js +1 -0
- package/LICENSE +21 -0
- package/Link/Link.d.ts +25 -0
- package/Link/Link.js +75 -0
- package/Link/MarkdownLinks.d.ts +2 -0
- package/Link/MarkdownLinks.js +84 -0
- package/Link/SkipLink.d.ts +1 -0
- package/Link/SkipLink.js +64 -0
- package/Link/index.d.ts +3 -0
- package/Link/index.js +3 -0
- package/MarkdownElement/MarkdownElement.d.ts +7 -0
- package/MarkdownElement/MarkdownElement.js +847 -0
- package/MarkdownElement/index.d.ts +1 -0
- package/MarkdownElement/index.js +1 -0
- package/MuiPage/MuiPage.d.ts +67 -0
- package/MuiPage/MuiPage.js +1 -0
- package/MuiPage/index.d.ts +1 -0
- package/MuiPage/index.js +1 -0
- package/NextNProgressBar/NProgressBar.d.ts +6 -0
- package/NextNProgressBar/NProgressBar.js +91 -0
- package/NextNProgressBar/NextNProgressBar.d.ts +1 -0
- package/NextNProgressBar/NextNProgressBar.js +42 -0
- package/NextNProgressBar/index.d.ts +1 -0
- package/NextNProgressBar/index.js +1 -0
- package/PageContext/PageContext.d.ts +32 -0
- package/PageContext/PageContext.js +6 -0
- package/PageContext/index.d.ts +2 -0
- package/PageContext/index.js +1 -0
- package/README.md +26 -0
- package/SectionHeadline/SectionHeadline.d.ts +13 -0
- package/SectionHeadline/SectionHeadline.js +81 -0
- package/SectionHeadline/index.d.ts +2 -0
- package/SectionHeadline/index.js +2 -0
- package/SectionTitle/SectionTitle.d.ts +6 -0
- package/SectionTitle/SectionTitle.js +29 -0
- package/SectionTitle/index.d.ts +1 -0
- package/SectionTitle/index.js +1 -0
- package/ThemeContext/ThemeContext.d.ts +92 -0
- package/ThemeContext/ThemeContext.js +200 -0
- package/ThemeContext/index.d.ts +1 -0
- package/ThemeContext/index.js +1 -0
- package/branding/BrandingCssVarsProvider.d.ts +27 -0
- package/branding/BrandingCssVarsProvider.js +170 -0
- package/branding/BrandingProvider.d.ts +9 -0
- package/branding/BrandingProvider.js +17 -0
- package/branding/brandingTheme.d.ts +147 -0
- package/branding/brandingTheme.js +1534 -0
- package/branding/index.d.ts +3 -0
- package/branding/index.js +3 -0
- package/codeStyling/codeStyling.d.ts +7 -0
- package/codeStyling/codeStyling.js +80 -0
- package/codeStyling/index.d.ts +1 -0
- package/codeStyling/index.js +1 -0
- package/codeVariant/codeVariant.d.ts +7 -0
- package/codeVariant/codeVariant.js +69 -0
- package/codeVariant/index.d.ts +1 -0
- package/codeVariant/index.js +1 -0
- package/constants/constants.d.ts +13 -0
- package/constants/constants.js +15 -0
- package/constants/index.d.ts +1 -0
- package/constants/index.js +1 -0
- package/findActivePage/findActivePage.d.ts +5 -0
- package/findActivePage/findActivePage.js +35 -0
- package/findActivePage/index.d.ts +1 -0
- package/findActivePage/index.js +1 -0
- package/getProductInfoFromUrl/getProductInfoFromUrl.d.ts +8 -0
- package/getProductInfoFromUrl/getProductInfoFromUrl.js +50 -0
- package/getProductInfoFromUrl/index.d.ts +2 -0
- package/getProductInfoFromUrl/index.js +1 -0
- package/globalSelector/globalSelector.d.ts +2 -0
- package/globalSelector/globalSelector.js +17 -0
- package/globalSelector/index.d.ts +1 -0
- package/globalSelector/index.js +1 -0
- package/helpers/helpers.d.ts +31 -0
- package/helpers/helpers.js +87 -0
- package/helpers/index.d.ts +2 -0
- package/helpers/index.js +1 -0
- package/i18n/i18n.d.ts +27 -0
- package/i18n/i18n.js +111 -0
- package/i18n/index.d.ts +1 -0
- package/i18n/index.js +1 -0
- package/mapApiPageTranslations/index.d.ts +1 -0
- package/mapApiPageTranslations/index.js +1 -0
- package/mapApiPageTranslations/mapApiPageTranslations.d.ts +11 -0
- package/mapApiPageTranslations/mapApiPageTranslations.js +46 -0
- package/nextFonts/fonts/GeneralSans-Bold.ttf +0 -0
- package/nextFonts/fonts/GeneralSans-Bold.woff2 +0 -0
- package/nextFonts/fonts/GeneralSans-Medium.ttf +0 -0
- package/nextFonts/fonts/GeneralSans-Medium.woff2 +0 -0
- package/nextFonts/fonts/GeneralSans-Regular.ttf +0 -0
- package/nextFonts/fonts/GeneralSans-Regular.woff2 +0 -0
- package/nextFonts/fonts/GeneralSans-Semibold-subset.woff2 +0 -0
- package/nextFonts/fonts/GeneralSans-Semibold.ttf +0 -0
- package/nextFonts/fonts/GeneralSans-Semibold.woff2 +0 -0
- package/nextFonts/fonts/IBMPlexSans-Bold.ttf +0 -0
- package/nextFonts/fonts/IBMPlexSans-Bold.woff +0 -0
- package/nextFonts/fonts/IBMPlexSans-Bold.woff2 +0 -0
- package/nextFonts/fonts/IBMPlexSans-Medium.ttf +0 -0
- package/nextFonts/fonts/IBMPlexSans-Medium.woff +0 -0
- package/nextFonts/fonts/IBMPlexSans-Medium.woff2 +0 -0
- package/nextFonts/fonts/IBMPlexSans-Regular-subset.woff2 +0 -0
- package/nextFonts/fonts/IBMPlexSans-Regular.ttf +0 -0
- package/nextFonts/fonts/IBMPlexSans-Regular.woff +0 -0
- package/nextFonts/fonts/IBMPlexSans-Regular.woff2 +0 -0
- package/nextFonts/fonts/IBMPlexSans-SemiBold.ttf +0 -0
- package/nextFonts/fonts/IBMPlexSans-SemiBold.woff +0 -0
- package/nextFonts/fonts/IBMPlexSans-SemiBold.woff2 +0 -0
- package/nextFonts/index.d.ts +6 -0
- package/nextFonts/index.js +59 -0
- package/package.json +426 -3
- package/svgIcons/BundleSizeIcon.d.ts +4 -0
- package/svgIcons/BundleSizeIcon.js +13 -0
- package/svgIcons/FigmaIcon.d.ts +4 -0
- package/svgIcons/FigmaIcon.js +22 -0
- package/svgIcons/FileDownload.d.ts +6 -0
- package/svgIcons/FileDownload.js +13 -0
- package/svgIcons/JavaScript.d.ts +6 -0
- package/svgIcons/JavaScript.js +13 -0
- package/svgIcons/MarkdownIcon.d.ts +2 -0
- package/svgIcons/MarkdownIcon.js +22 -0
- package/svgIcons/MaterialDesignIcon.d.ts +4 -0
- package/svgIcons/MaterialDesignIcon.js +18 -0
- package/svgIcons/SketchIcon.d.ts +4 -0
- package/svgIcons/SketchIcon.js +27 -0
- package/svgIcons/TypeScript.d.ts +6 -0
- package/svgIcons/TypeScript.js +13 -0
- package/svgIcons/W3CIcon.d.ts +4 -0
- package/svgIcons/W3CIcon.js +15 -0
- package/translations/index.d.ts +3 -0
- package/translations/index.js +4 -0
- package/translations/translations.json +222 -0
- package/useLazyCSS/index.d.ts +1 -0
- package/useLazyCSS/index.js +1 -0
- package/useLazyCSS/useLazyCSS.d.ts +11 -0
- package/useLazyCSS/useLazyCSS.js +70 -0
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- package/utils/loadScript.d.ts +1 -0
- package/utils/loadScript.js +7 -0
- package/webpack/index.d.ts +17 -0
- package/webpack/index.js +1 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* How to use: spread the handlers to the .MuiCode-root
|
|
4
|
+
*
|
|
5
|
+
* The html structure should be:
|
|
6
|
+
* <div className="MuiCode-root">
|
|
7
|
+
* <pre>...</pre>
|
|
8
|
+
* <button className="MuiCode-copy">...</button>
|
|
9
|
+
* </div>
|
|
10
|
+
*/
|
|
11
|
+
export declare function useCodeCopy(): React.HTMLAttributes<HTMLDivElement>;
|
|
12
|
+
interface CodeCopyProviderProps {
|
|
13
|
+
children: React.ReactNode;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Place <CodeCopyProvider> at the page level. It will check the keydown event and try to initiate copy click if rootNode exist.
|
|
17
|
+
* Any code block inside the tree can set the rootNode when mouse enter to leverage keyboard copy.
|
|
18
|
+
*/
|
|
19
|
+
export declare function CodeCopyProvider({
|
|
20
|
+
children
|
|
21
|
+
}: CodeCopyProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
var _InitCodeCopy;
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { useRouter } from 'next/router';
|
|
4
|
+
import clipboardCopy from 'clipboard-copy';
|
|
5
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
|
+
const CodeBlockContext = /*#__PURE__*/React.createContext({
|
|
7
|
+
current: null
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* How to use: spread the handlers to the .MuiCode-root
|
|
12
|
+
*
|
|
13
|
+
* The html structure should be:
|
|
14
|
+
* <div className="MuiCode-root">
|
|
15
|
+
* <pre>...</pre>
|
|
16
|
+
* <button className="MuiCode-copy">...</button>
|
|
17
|
+
* </div>
|
|
18
|
+
*/
|
|
19
|
+
export function useCodeCopy() {
|
|
20
|
+
const rootNode = React.useContext(CodeBlockContext);
|
|
21
|
+
return {
|
|
22
|
+
onMouseEnter: event => {
|
|
23
|
+
rootNode.current = event.currentTarget;
|
|
24
|
+
},
|
|
25
|
+
onMouseLeave: event => {
|
|
26
|
+
if (rootNode.current === event.currentTarget) {
|
|
27
|
+
rootNode.current.querySelector('.MuiCode-copy')?.blur();
|
|
28
|
+
rootNode.current = null;
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
onFocus: event => {
|
|
32
|
+
rootNode.current = event.currentTarget;
|
|
33
|
+
},
|
|
34
|
+
onBlur: event => {
|
|
35
|
+
if (rootNode.current === event.currentTarget) {
|
|
36
|
+
rootNode.current = null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function InitCodeCopy() {
|
|
42
|
+
const rootNode = React.useContext(CodeBlockContext);
|
|
43
|
+
const router = useRouter();
|
|
44
|
+
React.useEffect(() => {
|
|
45
|
+
let key = 'Ctrl + ';
|
|
46
|
+
if (typeof window !== 'undefined') {
|
|
47
|
+
const macOS = window.navigator.platform.toUpperCase().includes('MAC');
|
|
48
|
+
if (macOS) {
|
|
49
|
+
key = '⌘';
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const codeRoots = document.getElementsByClassName('MuiCode-root');
|
|
53
|
+
if (codeRoots !== null) {
|
|
54
|
+
const listeners = [];
|
|
55
|
+
Array.from(codeRoots).forEach(elm => {
|
|
56
|
+
const handleMouseEnter = () => {
|
|
57
|
+
rootNode.current = elm;
|
|
58
|
+
};
|
|
59
|
+
elm.addEventListener('mouseenter', handleMouseEnter);
|
|
60
|
+
listeners.push(() => elm.removeEventListener('mouseenter', handleMouseEnter));
|
|
61
|
+
const handleMouseLeave = () => {
|
|
62
|
+
if (rootNode.current === elm) {
|
|
63
|
+
rootNode.current.querySelector('.MuiCode-copy')?.blur();
|
|
64
|
+
rootNode.current = null;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
elm.addEventListener('mouseleave', handleMouseLeave);
|
|
68
|
+
listeners.push(() => elm.removeEventListener('mouseleave', handleMouseLeave));
|
|
69
|
+
const handleFocusin = () => {
|
|
70
|
+
// use `focusin` because it bubbles from the copy button
|
|
71
|
+
rootNode.current = elm;
|
|
72
|
+
};
|
|
73
|
+
elm.addEventListener('focusin', handleFocusin);
|
|
74
|
+
listeners.push(() => elm.removeEventListener('focusin', handleFocusin));
|
|
75
|
+
const handleFocusout = () => {
|
|
76
|
+
// use `focusout` because it bubbles from the copy button
|
|
77
|
+
if (rootNode.current === elm) {
|
|
78
|
+
rootNode.current = null;
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
elm.addEventListener('focusout', handleFocusout);
|
|
82
|
+
listeners.push(() => elm.removeEventListener('focusout', handleFocusout));
|
|
83
|
+
async function handleClick(event) {
|
|
84
|
+
const trigger = event.currentTarget;
|
|
85
|
+
const pre = event.currentTarget?.previousElementSibling;
|
|
86
|
+
const textNode = trigger.childNodes[0];
|
|
87
|
+
textNode.nodeValue = textNode.textContent?.replace('Copy', 'Copied') || null;
|
|
88
|
+
trigger.dataset.copied = 'true';
|
|
89
|
+
setTimeout(() => {
|
|
90
|
+
if (trigger) {
|
|
91
|
+
textNode.nodeValue = textNode.textContent?.replace('Copied', 'Copy') || null;
|
|
92
|
+
delete trigger.dataset.copied;
|
|
93
|
+
}
|
|
94
|
+
}, 2000);
|
|
95
|
+
try {
|
|
96
|
+
if (pre.textContent) {
|
|
97
|
+
await clipboardCopy(pre.textContent);
|
|
98
|
+
}
|
|
99
|
+
// eslint-disable-next-line no-empty
|
|
100
|
+
} catch (error) {}
|
|
101
|
+
}
|
|
102
|
+
const btn = elm.querySelector('.MuiCode-copy');
|
|
103
|
+
if (btn) {
|
|
104
|
+
const keyNode = btn.querySelector('.MuiCode-copyKeypress')?.childNodes[1];
|
|
105
|
+
if (!keyNode) {
|
|
106
|
+
// skip the logic if the btn is not generated from the markdown.
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
keyNode.textContent = keyNode?.textContent?.replace('$key', key) || null;
|
|
110
|
+
btn.addEventListener('click', handleClick);
|
|
111
|
+
listeners.push(() => btn.removeEventListener('click', handleClick));
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
return () => {
|
|
115
|
+
listeners.forEach(removeEventListener => {
|
|
116
|
+
removeEventListener();
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
return undefined;
|
|
121
|
+
}, [rootNode, router.pathname]);
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
function hasNativeSelection(element) {
|
|
125
|
+
if (window.getSelection()?.toString()) {
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// window.getSelection() returns an empty string in Firefox for selections inside a form element.
|
|
130
|
+
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=85686.
|
|
131
|
+
// Instead, we can use element.selectionStart that is only defined on form elements.
|
|
132
|
+
if (element && (element.selectionEnd || 0) - (element.selectionStart || 0) > 0) {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Place <CodeCopyProvider> at the page level. It will check the keydown event and try to initiate copy click if rootNode exist.
|
|
139
|
+
* Any code block inside the tree can set the rootNode when mouse enter to leverage keyboard copy.
|
|
140
|
+
*/
|
|
141
|
+
export function CodeCopyProvider({
|
|
142
|
+
children
|
|
143
|
+
}) {
|
|
144
|
+
const rootNode = React.useRef(null);
|
|
145
|
+
React.useEffect(() => {
|
|
146
|
+
document.addEventListener('keydown', event => {
|
|
147
|
+
if (!rootNode.current) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Skip if user is highlighting a text.
|
|
152
|
+
if (hasNativeSelection(event.target)) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Skip if it's not a copy keyboard event
|
|
157
|
+
if (!((event.ctrlKey || event.metaKey) && String.fromCharCode(event.keyCode) === 'C' && !event.shiftKey && !event.altKey)) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const copyBtn = rootNode.current.querySelector('.MuiCode-copy');
|
|
161
|
+
const initialEventAction = copyBtn.getAttribute('data-ga-event-action');
|
|
162
|
+
// update the 'data-ga-event-action' on the button to track keyboard interaction
|
|
163
|
+
copyBtn.dataset.gaEventAction = initialEventAction?.replace('click', 'keyboard') || 'copy-keyboard';
|
|
164
|
+
copyBtn.click(); // let the GA setup in GoogleAnalytics.js do the job
|
|
165
|
+
copyBtn.dataset.gaEventAction = initialEventAction; // reset the 'data-ga-event-action' back to initial
|
|
166
|
+
});
|
|
167
|
+
}, []);
|
|
168
|
+
return /*#__PURE__*/_jsxs(CodeBlockContext.Provider, {
|
|
169
|
+
value: rootNode,
|
|
170
|
+
children: [_InitCodeCopy || (_InitCodeCopy = /*#__PURE__*/_jsx(InitCodeCopy, {})), children]
|
|
171
|
+
});
|
|
172
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
var _span, _span2;
|
|
2
|
+
import useClipboardCopy from "./useClipboardCopy.js";
|
|
3
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
|
+
export function CodeCopyButton(props) {
|
|
5
|
+
const {
|
|
6
|
+
code,
|
|
7
|
+
...other
|
|
8
|
+
} = props;
|
|
9
|
+
const {
|
|
10
|
+
copy,
|
|
11
|
+
isCopied
|
|
12
|
+
} = useClipboardCopy();
|
|
13
|
+
// This component is designed to be wrapped in NoSsr
|
|
14
|
+
const macOS = window.navigator.platform.toUpperCase().includes('MAC');
|
|
15
|
+
const key = macOS ? '⌘' : 'Ctrl + ';
|
|
16
|
+
return /*#__PURE__*/_jsx("div", {
|
|
17
|
+
className: "MuiCode-copy-container",
|
|
18
|
+
children: /*#__PURE__*/_jsxs("button", {
|
|
19
|
+
...other,
|
|
20
|
+
"aria-label": "Copy the code",
|
|
21
|
+
type: "button",
|
|
22
|
+
className: "MuiCode-copy",
|
|
23
|
+
onClick: async () => {
|
|
24
|
+
// event.stopPropagation();
|
|
25
|
+
await copy(code);
|
|
26
|
+
},
|
|
27
|
+
children: [isCopied ? 'Copied' : 'Copy', /*#__PURE__*/_jsxs("span", {
|
|
28
|
+
className: "MuiCode-copyKeypress",
|
|
29
|
+
style: {
|
|
30
|
+
opacity: isCopied ? 0 : 1
|
|
31
|
+
},
|
|
32
|
+
children: [_span || (_span = /*#__PURE__*/_jsx("span", {
|
|
33
|
+
children: "(or"
|
|
34
|
+
})), " ", key, "C", _span2 || (_span2 = /*#__PURE__*/_jsx("span", {
|
|
35
|
+
children: ")"
|
|
36
|
+
}))]
|
|
37
|
+
})]
|
|
38
|
+
})
|
|
39
|
+
});
|
|
40
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import clipboardCopy from 'clipboard-copy';
|
|
3
|
+
export default function useClipboardCopy() {
|
|
4
|
+
const [isCopied, setIsCopied] = React.useState(false);
|
|
5
|
+
const timeout = React.useRef(undefined);
|
|
6
|
+
React.useEffect(() => () => {
|
|
7
|
+
clearTimeout(timeout.current);
|
|
8
|
+
}, []);
|
|
9
|
+
const copy = async text => {
|
|
10
|
+
await clipboardCopy(text);
|
|
11
|
+
setIsCopied(true);
|
|
12
|
+
clearTimeout(timeout.current);
|
|
13
|
+
timeout.current = setTimeout(() => {
|
|
14
|
+
setIsCopied(false);
|
|
15
|
+
}, 1200);
|
|
16
|
+
};
|
|
17
|
+
return {
|
|
18
|
+
copy,
|
|
19
|
+
isCopied
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MarkdownHeaders } from '@mui/internal-markdown';
|
|
2
|
+
export interface ComponentLinkHeaderProps {
|
|
3
|
+
design?: boolean;
|
|
4
|
+
markdown: {
|
|
5
|
+
headers: MarkdownHeaders;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export declare function ComponentLinkHeader(props: ComponentLinkHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
var _MarkdownIcon, _ChatRounded, _BundleSizeIcon, _GitHubIcon, _W3CIcon, _MaterialDesignIcon, _li, _li2;
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { useRouter } from 'next/router';
|
|
4
|
+
import Chip from '@mui/material/Chip';
|
|
5
|
+
import Tooltip from '@mui/material/Tooltip';
|
|
6
|
+
import ChatRounded from '@mui/icons-material/ChatRounded';
|
|
7
|
+
import GitHubIcon from '@mui/icons-material/GitHub';
|
|
8
|
+
import { styled } from '@mui/material/styles';
|
|
9
|
+
import MarkdownIcon from "../svgIcons/MarkdownIcon.js";
|
|
10
|
+
import SketchIcon from "../svgIcons/SketchIcon.js";
|
|
11
|
+
import FigmaIcon from "../svgIcons/FigmaIcon.js";
|
|
12
|
+
import BundleSizeIcon from "../svgIcons/BundleSizeIcon.js";
|
|
13
|
+
import W3CIcon from "../svgIcons/W3CIcon.js";
|
|
14
|
+
import MaterialDesignIcon from "../svgIcons/MaterialDesignIcon.js";
|
|
15
|
+
import { useTranslate } from "../i18n/index.js";
|
|
16
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
|
+
const Root = styled('ul')(({
|
|
18
|
+
theme
|
|
19
|
+
}) => ({
|
|
20
|
+
margin: theme.spacing(2, 0),
|
|
21
|
+
padding: 0,
|
|
22
|
+
listStyle: 'none',
|
|
23
|
+
display: 'flex',
|
|
24
|
+
flexWrap: 'wrap',
|
|
25
|
+
gap: 8,
|
|
26
|
+
'& .MuiChip-root': {
|
|
27
|
+
height: 26,
|
|
28
|
+
padding: '0 8px',
|
|
29
|
+
gap: 6,
|
|
30
|
+
'& .MuiChip-label': {
|
|
31
|
+
padding: 0
|
|
32
|
+
},
|
|
33
|
+
'& .MuiChip-iconSmall': {
|
|
34
|
+
margin: 0,
|
|
35
|
+
fontSize: 14
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}));
|
|
39
|
+
const defaultPackageNames = {
|
|
40
|
+
'material-ui': '@mui/material',
|
|
41
|
+
'joy-ui': '@mui/joy',
|
|
42
|
+
'base-ui': '@mui/base',
|
|
43
|
+
system: '@mui/system'
|
|
44
|
+
};
|
|
45
|
+
export function ComponentLinkHeader(props) {
|
|
46
|
+
const {
|
|
47
|
+
markdown: {
|
|
48
|
+
headers
|
|
49
|
+
},
|
|
50
|
+
design
|
|
51
|
+
} = props;
|
|
52
|
+
const t = useTranslate();
|
|
53
|
+
const router = useRouter();
|
|
54
|
+
const packageName = headers.packageName ?? defaultPackageNames[headers.productId] ?? '@mui/material';
|
|
55
|
+
return /*#__PURE__*/_jsxs(Root, {
|
|
56
|
+
children: [packageName === '@mui/material' && /*#__PURE__*/_jsx("li", {
|
|
57
|
+
children: /*#__PURE__*/_jsx(Chip, {
|
|
58
|
+
clickable: true,
|
|
59
|
+
role: undefined,
|
|
60
|
+
component: "a",
|
|
61
|
+
size: "small",
|
|
62
|
+
variant: "outlined",
|
|
63
|
+
href: `${router.pathname}.md`,
|
|
64
|
+
icon: _MarkdownIcon || (_MarkdownIcon = /*#__PURE__*/_jsx(MarkdownIcon, {})),
|
|
65
|
+
"data-ga-event-category": "ComponentLinkHeader",
|
|
66
|
+
"data-ga-event-action": "click",
|
|
67
|
+
"data-ga-event-label": "Markdown",
|
|
68
|
+
"data-ga-event-split": "0.1",
|
|
69
|
+
label: "View as Markdown"
|
|
70
|
+
})
|
|
71
|
+
}), headers.githubLabel ? /*#__PURE__*/_jsx("li", {
|
|
72
|
+
children: /*#__PURE__*/_jsx(Chip, {
|
|
73
|
+
clickable: true,
|
|
74
|
+
role: undefined,
|
|
75
|
+
component: "a",
|
|
76
|
+
size: "small",
|
|
77
|
+
variant: "outlined",
|
|
78
|
+
rel: "nofollow",
|
|
79
|
+
href: `${process.env.SOURCE_CODE_REPO}/labels/${encodeURIComponent(headers.githubLabel)}`,
|
|
80
|
+
icon: _ChatRounded || (_ChatRounded = /*#__PURE__*/_jsx(ChatRounded, {
|
|
81
|
+
color: "primary"
|
|
82
|
+
})),
|
|
83
|
+
"data-ga-event-category": "ComponentLinkHeader",
|
|
84
|
+
"data-ga-event-action": "click",
|
|
85
|
+
"data-ga-event-label": t('githubLabel'),
|
|
86
|
+
"data-ga-event-split": "0.1",
|
|
87
|
+
label: t('githubLabel')
|
|
88
|
+
})
|
|
89
|
+
}) : null, /*#__PURE__*/_jsx("li", {
|
|
90
|
+
children: /*#__PURE__*/_jsx(Tooltip, {
|
|
91
|
+
title: t('bundleSizeTooltip'),
|
|
92
|
+
describeChild: true,
|
|
93
|
+
children: /*#__PURE__*/_jsx(Chip, {
|
|
94
|
+
clickable: true,
|
|
95
|
+
role: undefined,
|
|
96
|
+
component: "a",
|
|
97
|
+
size: "small",
|
|
98
|
+
variant: "outlined",
|
|
99
|
+
rel: "nofollow",
|
|
100
|
+
href: `https://bundlephobia.com/package/${packageName}@latest`,
|
|
101
|
+
icon: _BundleSizeIcon || (_BundleSizeIcon = /*#__PURE__*/_jsx(BundleSizeIcon, {
|
|
102
|
+
color: "primary"
|
|
103
|
+
})),
|
|
104
|
+
"data-ga-event-category": "ComponentLinkHeader",
|
|
105
|
+
"data-ga-event-action": "click",
|
|
106
|
+
"data-ga-event-label": t('bundleSize'),
|
|
107
|
+
"data-ga-event-split": "0.1",
|
|
108
|
+
label: t('bundleSize')
|
|
109
|
+
})
|
|
110
|
+
})
|
|
111
|
+
}), headers.githubSource ? /*#__PURE__*/_jsx("li", {
|
|
112
|
+
children: /*#__PURE__*/_jsx(Chip, {
|
|
113
|
+
clickable: true,
|
|
114
|
+
role: undefined,
|
|
115
|
+
component: "a",
|
|
116
|
+
size: "small",
|
|
117
|
+
variant: "outlined",
|
|
118
|
+
rel: "nofollow",
|
|
119
|
+
href: `${process.env.SOURCE_CODE_REPO}/tree/v${process.env.LIB_VERSION}/${headers.githubSource}`,
|
|
120
|
+
icon: _GitHubIcon || (_GitHubIcon = /*#__PURE__*/_jsx(GitHubIcon, {})),
|
|
121
|
+
"data-ga-event-category": "ComponentLinkHeader",
|
|
122
|
+
"data-ga-event-action": "click",
|
|
123
|
+
"data-ga-event-label": "Source",
|
|
124
|
+
"data-ga-event-split": "0.1",
|
|
125
|
+
label: "Source"
|
|
126
|
+
})
|
|
127
|
+
}) : null, headers.waiAria ? /*#__PURE__*/_jsx("li", {
|
|
128
|
+
children: /*#__PURE__*/_jsx(Chip, {
|
|
129
|
+
clickable: true,
|
|
130
|
+
role: undefined,
|
|
131
|
+
component: "a",
|
|
132
|
+
size: "small",
|
|
133
|
+
variant: "outlined",
|
|
134
|
+
rel: "nofollow",
|
|
135
|
+
href: headers.waiAria,
|
|
136
|
+
icon: _W3CIcon || (_W3CIcon = /*#__PURE__*/_jsx(W3CIcon, {
|
|
137
|
+
color: "primary"
|
|
138
|
+
})),
|
|
139
|
+
"data-ga-event-category": "ComponentLinkHeader",
|
|
140
|
+
"data-ga-event-action": "click",
|
|
141
|
+
"data-ga-event-label": "WAI-ARIA",
|
|
142
|
+
"data-ga-event-split": "0.1",
|
|
143
|
+
label: "WAI-ARIA"
|
|
144
|
+
})
|
|
145
|
+
}) : null, headers.materialDesign ? /*#__PURE__*/_jsx("li", {
|
|
146
|
+
children: /*#__PURE__*/_jsx(Chip, {
|
|
147
|
+
clickable: true,
|
|
148
|
+
role: undefined,
|
|
149
|
+
component: "a",
|
|
150
|
+
size: "small",
|
|
151
|
+
variant: "outlined",
|
|
152
|
+
rel: "nofollow",
|
|
153
|
+
href: headers.materialDesign,
|
|
154
|
+
icon: _MaterialDesignIcon || (_MaterialDesignIcon = /*#__PURE__*/_jsx(MaterialDesignIcon, {})),
|
|
155
|
+
"data-ga-event-category": "ComponentLinkHeader",
|
|
156
|
+
"data-ga-event-action": "click",
|
|
157
|
+
"data-ga-event-label": "Material Design",
|
|
158
|
+
"data-ga-event-split": "0.1",
|
|
159
|
+
label: "Material Design"
|
|
160
|
+
})
|
|
161
|
+
}) : null, design === false ? null : /*#__PURE__*/_jsxs(React.Fragment, {
|
|
162
|
+
children: [_li || (_li = /*#__PURE__*/_jsx("li", {
|
|
163
|
+
children: /*#__PURE__*/_jsx(Chip, {
|
|
164
|
+
clickable: true,
|
|
165
|
+
role: undefined,
|
|
166
|
+
component: "a",
|
|
167
|
+
size: "small",
|
|
168
|
+
variant: "outlined",
|
|
169
|
+
rel: "nofollow",
|
|
170
|
+
href: "https://mui.com/store/items/figma-react/?utm_source=docs&utm_medium=referral&utm_campaign=component-link-header",
|
|
171
|
+
icon: /*#__PURE__*/_jsx(FigmaIcon, {}),
|
|
172
|
+
"data-ga-event-category": "ComponentLinkHeader",
|
|
173
|
+
"data-ga-event-action": "click",
|
|
174
|
+
"data-ga-event-label": "Figma",
|
|
175
|
+
"data-ga-event-split": "0.1",
|
|
176
|
+
label: "Figma"
|
|
177
|
+
})
|
|
178
|
+
})), packageName === '@mui/joy' ? null : _li2 || (_li2 = /*#__PURE__*/_jsx("li", {
|
|
179
|
+
children: /*#__PURE__*/_jsx(Chip, {
|
|
180
|
+
clickable: true,
|
|
181
|
+
role: undefined,
|
|
182
|
+
component: "a",
|
|
183
|
+
size: "small",
|
|
184
|
+
variant: "outlined",
|
|
185
|
+
rel: "nofollow",
|
|
186
|
+
href: "https://mui.com/store/items/sketch-react/?utm_source=docs&utm_medium=referral&utm_campaign=component-link-header",
|
|
187
|
+
icon: /*#__PURE__*/_jsx(SketchIcon, {}),
|
|
188
|
+
"data-ga-event-category": "ComponentLinkHeader",
|
|
189
|
+
"data-ga-event-action": "click",
|
|
190
|
+
"data-ga-event-label": "Sketch",
|
|
191
|
+
"data-ga-event-split": "0.1",
|
|
192
|
+
label: "Sketch"
|
|
193
|
+
})
|
|
194
|
+
}))]
|
|
195
|
+
})]
|
|
196
|
+
});
|
|
197
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { MuiProductId } from "../getProductInfoFromUrl/index.js";
|
|
3
|
+
export type CodeVariant = 'TS' | 'JS';
|
|
4
|
+
type RelativeModule = {
|
|
5
|
+
module: string;
|
|
6
|
+
raw: string;
|
|
7
|
+
};
|
|
8
|
+
export interface DemoData {
|
|
9
|
+
title: string;
|
|
10
|
+
language: string;
|
|
11
|
+
raw: string;
|
|
12
|
+
codeVariant: CodeVariant;
|
|
13
|
+
githubLocation: string;
|
|
14
|
+
productId?: Exclude<MuiProductId, 'null'>;
|
|
15
|
+
relativeModules?: RelativeModule[];
|
|
16
|
+
}
|
|
17
|
+
export interface SandboxConfig {
|
|
18
|
+
/**
|
|
19
|
+
* Generates the root index.js/tsx content for CodeSandbox/StackBlitz.
|
|
20
|
+
* Receives codeVariant ('TS' | 'JS') for type assertion.
|
|
21
|
+
*/
|
|
22
|
+
getRootIndex?: (codeVariant: CodeVariant) => string;
|
|
23
|
+
/**
|
|
24
|
+
* Primary npm package for this product, used in sandbox generation.
|
|
25
|
+
* e.g., "@mui/material", "@mui/joy", "@mui/x-data-grid"
|
|
26
|
+
*/
|
|
27
|
+
primaryPackage: string;
|
|
28
|
+
/**
|
|
29
|
+
* Default dependency to add when generating sandbox (e.g., '@mui/material' for StyledEngineProvider)
|
|
30
|
+
* Used when the root index template requires a specific package.
|
|
31
|
+
*/
|
|
32
|
+
fallbackDependency?: {
|
|
33
|
+
name: string;
|
|
34
|
+
version: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Hook to add extra peer dependencies to sandbox.
|
|
38
|
+
*/
|
|
39
|
+
includePeerDependencies?: (deps: Record<string, string>, options: {
|
|
40
|
+
versions: Record<string, string>;
|
|
41
|
+
}) => Record<string, string>;
|
|
42
|
+
/**
|
|
43
|
+
* Hook to override default package versions.
|
|
44
|
+
*/
|
|
45
|
+
getVersions?: (versions: Record<string, string>, options: {
|
|
46
|
+
muiCommitRef?: string;
|
|
47
|
+
}) => Record<string, string>;
|
|
48
|
+
/**
|
|
49
|
+
* Hook to resolve custom imports to dependencies.
|
|
50
|
+
*/
|
|
51
|
+
postProcessImport?: (importName: string) => Record<string, string> | null;
|
|
52
|
+
}
|
|
53
|
+
export interface IframeWrapperProps {
|
|
54
|
+
/**
|
|
55
|
+
* The demo content (already cloned with `window` prop by FramedDemo).
|
|
56
|
+
* The wrapper should just render {children} - no cloning needed.
|
|
57
|
+
*/
|
|
58
|
+
children: React.ReactElement;
|
|
59
|
+
/** The iframe's document, for setting attributes or observing color scheme */
|
|
60
|
+
document: Document;
|
|
61
|
+
/** If true, the demo is isolated and should not inject theme CSS variables */
|
|
62
|
+
isolated?: boolean;
|
|
63
|
+
}
|
|
64
|
+
export interface DemoContextValue {
|
|
65
|
+
/**
|
|
66
|
+
* Display name shown in demo titles, e.g., "Material UI", "Joy UI", "MUI X"
|
|
67
|
+
*/
|
|
68
|
+
productDisplayName: string;
|
|
69
|
+
/**
|
|
70
|
+
* Optional wrapper component for iframe demo content.
|
|
71
|
+
* Responsible for:
|
|
72
|
+
* - Creating and injecting CSS theme variables (via GlobalStyles)
|
|
73
|
+
* - Any product-specific observers (e.g., JoyIframeObserver)
|
|
74
|
+
*
|
|
75
|
+
* If not provided, defaults to MaterialIframeWrapper (creates Material theme).
|
|
76
|
+
* Pass `null` explicitly to disable iframe wrapping entirely.
|
|
77
|
+
*/
|
|
78
|
+
IframeWrapper?: React.ComponentType<IframeWrapperProps> | null;
|
|
79
|
+
/**
|
|
80
|
+
* Configuration for CodeSandbox/StackBlitz sandbox generation.
|
|
81
|
+
*/
|
|
82
|
+
csb: SandboxConfig;
|
|
83
|
+
}
|
|
84
|
+
declare const DemoContext: React.Context<DemoContextValue | null>;
|
|
85
|
+
export declare function useDemoContext(): DemoContextValue;
|
|
86
|
+
export default DemoContext;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
const DemoContext = /*#__PURE__*/React.createContext(null);
|
|
3
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
4
|
+
DemoContext.displayName = 'DemoContext';
|
|
5
|
+
}
|
|
6
|
+
export function useDemoContext() {
|
|
7
|
+
const context = React.useContext(DemoContext);
|
|
8
|
+
if (!context) {
|
|
9
|
+
throw new Error('useDemoContext must be used within a DemoContext.Provider');
|
|
10
|
+
}
|
|
11
|
+
return context;
|
|
12
|
+
}
|
|
13
|
+
export default DemoContext;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default, useDemoContext } from "./DemoContext.js";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
type ConsentStatus = 'analytics' | 'essential' | null;
|
|
3
|
+
interface AnalyticsContextValue {
|
|
4
|
+
consentStatus: ConsentStatus;
|
|
5
|
+
hasAnalyticsConsent: boolean;
|
|
6
|
+
needsConsent: boolean;
|
|
7
|
+
setAnalyticsConsent: () => void;
|
|
8
|
+
setEssentialOnly: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function useAnalyticsConsent(): AnalyticsContextValue;
|
|
11
|
+
export declare function CookieConsentDialog(): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare function AnalyticsProvider({
|
|
13
|
+
children
|
|
14
|
+
}: {
|
|
15
|
+
children: React.ReactNode;
|
|
16
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export {};
|