diff --git a/packages/react-components/package.json b/packages/react-components/package.json
index 78f583a4f3388..c38532f099345 100644
--- a/packages/react-components/package.json
+++ b/packages/react-components/package.json
@@ -10,6 +10,9 @@
"type": "git",
"url": "https://github.com/microsoft/fluentui"
},
+ "storybook": {
+ "url": "https://master--6002298f95a00c00213f4d55.chromatic.com"
+ },
"license": "MIT",
"scripts": {
"build": "just-scripts build",
diff --git a/packages/react-components/src/DocsComponents/FluentDocsHeader.stories.tsx b/packages/react-components/src/DocsComponents/FluentDocsHeader.stories.tsx
index db785df905411..1d07f43c337a6 100644
--- a/packages/react-components/src/DocsComponents/FluentDocsHeader.stories.tsx
+++ b/packages/react-components/src/DocsComponents/FluentDocsHeader.stories.tsx
@@ -3,6 +3,7 @@ import { FluentGlobals, THEME_ID } from '@fluentui/react-storybook-addon';
import { tokens } from '@fluentui/react-theme';
import { shorthands, makeStyles } from '../index';
import { ThemePicker } from './ThemePicker.stories';
+import { VersionSelector } from './VersionSelector.stories';
const useStyles = makeStyles({
root: {
@@ -25,6 +26,7 @@ export const FluentDocsHeader: React.FC<{ storybookGlobals: FluentGlobals }> = (
return (
+
);
};
diff --git a/packages/react-components/src/DocsComponents/VersionSelector.stories.tsx b/packages/react-components/src/DocsComponents/VersionSelector.stories.tsx
new file mode 100644
index 0000000000000..f1dec1e2415af
--- /dev/null
+++ b/packages/react-components/src/DocsComponents/VersionSelector.stories.tsx
@@ -0,0 +1,93 @@
+import * as React from 'react';
+import {
+ MenuButton,
+ Menu,
+ MenuPopover,
+ MenuItemRadio,
+ MenuList,
+ MenuTrigger,
+ makeStyles,
+ MenuProps,
+ MenuItem,
+} from '../index';
+import { version as packageJsonVersion } from '../../package.json';
+
+const useStyles = makeStyles({
+ menuButton: {
+ minWidth: '210px',
+ justifyContent: 'flex-start',
+ marginLeft: '5px',
+ },
+ chevronIcon: {
+ marginLeft: 'auto',
+ },
+ menuPopover: {
+ minWidth: '210px',
+ zIndex: 1000,
+ },
+ menuList: {
+ overflowY: 'auto',
+ maxHeight: '30vh',
+ },
+ menuItemRadio: {
+ height: 'auto',
+ paddingTop: '7px',
+ paddingBottom: '7px',
+ },
+});
+
+const onCheckedValueChange: MenuProps['onCheckedValueChange'] = (e, data) => {
+ const selectedUrl = data.checkedItems[0] + window.location.search;
+ if (window.top) {
+ window.top.location.href = selectedUrl;
+ } else {
+ window.location.href = selectedUrl;
+ }
+};
+
+/**
+ * Theme picker used in the react-components docs header
+ */
+export const VersionSelector: React.FC = () => {
+ const styles = useStyles();
+ const [versions, setVersions] = React.useState([]);
+
+ React.useEffect(() => {
+ // metadata.json is populated only in Chromatic
+ // an example of the file is available here:
+ // https://master--5ccbc373887ca40020446347.chromatic.com/metadata.json
+ fetch('/metadata.json').then(async response => {
+ if (response.ok) {
+ const metadata = await response.json();
+ setVersions(Object.entries(metadata.versions));
+ }
+ });
+ }, []);
+
+ return (
+
+ );
+};
diff --git a/packages/react-components/tsconfig.json b/packages/react-components/tsconfig.json
index affceae1828ae..5d0fb725bbebb 100644
--- a/packages/react-components/tsconfig.json
+++ b/packages/react-components/tsconfig.json
@@ -7,7 +7,8 @@
"importHelpers": true,
"jsx": "react",
"noUnusedLocals": true,
- "preserveConstEnums": true
+ "preserveConstEnums": true,
+ "resolveJsonModule": true
},
"include": [],
"files": [],