diff --git a/packages/vkui/.storybook/addons/source-button/SourceButton.tsx b/packages/vkui/.storybook/addons/source-button/SourceButton.tsx new file mode 100644 index 0000000000..63f72bbd05 --- /dev/null +++ b/packages/vkui/.storybook/addons/source-button/SourceButton.tsx @@ -0,0 +1,32 @@ +import { IconButton } from '@storybook/components'; +import { useStorybookState } from '@storybook/manager-api'; +import { GithubIcon } from '@storybook/icons'; +import * as React from 'react'; +import { BASE_COMPONENTS_URL } from './constants'; + +const getComponentUrl = (importPath: string): string => { + const pathWithoutFile = importPath.replace(/\/[^/]+\.stories\.tsx$/, ''); + const cleanPath = pathWithoutFile.replace(/^\.\//, ''); + return `${BASE_COMPONENTS_URL}/${cleanPath}/`; +}; + +export const SourceButton = () => { + const { index, storyId } = useStorybookState(); + + const story = index?.[storyId]; + const importPath = story && 'importPath' in story && story.importPath; + + if (!importPath) { + return null; + } + + const sourceUrl = getComponentUrl(importPath); + + return ( + + + + + + ); +}; diff --git a/packages/vkui/.storybook/addons/source-button/constants.ts b/packages/vkui/.storybook/addons/source-button/constants.ts new file mode 100644 index 0000000000..72a6e7cf08 --- /dev/null +++ b/packages/vkui/.storybook/addons/source-button/constants.ts @@ -0,0 +1,2 @@ +export const ADDON_ID = 'storybook/source'; +export const BASE_COMPONENTS_URL = 'https://github.com/VKCOM/VKUI/tree/master/packages/vkui'; diff --git a/packages/vkui/.storybook/addons/source-button/register.ts b/packages/vkui/.storybook/addons/source-button/register.ts new file mode 100644 index 0000000000..5a83afeebd --- /dev/null +++ b/packages/vkui/.storybook/addons/source-button/register.ts @@ -0,0 +1,11 @@ +import { addons, types } from '@storybook/manager-api'; +import { ADDON_ID } from './constants'; +import { SourceButton } from './SourceButton'; + +addons.register(ADDON_ID, () => { + addons.add(ADDON_ID, { + title: 'Source', + type: types.TOOL, + render: SourceButton, + }); +}); diff --git a/packages/vkui/.storybook/main.ts b/packages/vkui/.storybook/main.ts index 047f06768c..66a7c0bc6c 100644 --- a/packages/vkui/.storybook/main.ts +++ b/packages/vkui/.storybook/main.ts @@ -31,6 +31,7 @@ const config: StorybookConfig = { './addons/colorScheme', './addons/pointer', './addons/customPanelHeaderAfter', + './addons/source-button', './addons/storybook-theme', getAbsolutePath('@storybook/addon-webpack5-compiler-swc'), ],