Skip to content

Commit 2c24406

Browse files
author
Hector Arce De Las Heras
committed
Added Storybook addon for linking to Figma or GitHub in component stories
This commit includes a Storybook addon that allows linking to Figma or GitHub directly from any component's story. This enhancement provides a convenient way to access the design or source code of the component, improving the workflow for developers and designers.
1 parent 72859b5 commit 2c24406

File tree

3 files changed

+96
-0
lines changed

3 files changed

+96
-0
lines changed

.storybook/figmaAddon/register.tsx

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { addons, types } from '@storybook/addons';
2+
import { IconButton } from '@storybook/components';
3+
import { useParameter } from '@storybook/manager-api';
4+
import { styled } from '@storybook/theming';
5+
6+
import React from 'react';
7+
8+
const ADDON_ID = 'myaddon/figma';
9+
const PARAM_KEY = 'figmaUrl';
10+
11+
const FigmaIcon = styled.img({
12+
width: '20px',
13+
height: '20px',
14+
marginRight: '10px',
15+
});
16+
17+
addons.register(ADDON_ID, () => {
18+
addons.add(ADDON_ID, {
19+
title: 'Figma',
20+
type: types.TOOL,
21+
match: ({ viewMode }) => viewMode === 'story',
22+
render: () => {
23+
const figmaLink = useParameter(PARAM_KEY, '#');
24+
25+
if (figmaLink === '#') {
26+
return null;
27+
}
28+
29+
return (
30+
<IconButton
31+
key="figma"
32+
title="Open in Figma"
33+
onClick={() => window.open(figmaLink, '_blank')}
34+
placeholder={''}
35+
onPointerEnterCapture={undefined}
36+
onPointerLeaveCapture={undefined}
37+
>
38+
<FigmaIcon
39+
src="data:image/svg+xml;base64,PHN2ZyBpZD0iRmxhdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjU2IDI1NiI+CiAgPHBhdGggZD0iTTE4My4wMzk1NSw5NC4wMDA0OUEzOS45ODcwNiwzOS45ODcwNiwwLDAsMCwxNjIsMjAuMDAxSDk0QTM5Ljk4NzA2LDM5Ljk4NzA2LDAsMCwwLDcyLjk2MDQ1LDk0LjAwMDQ5LDM5Ljk2Mzc1LDM5Ljk2Mzc1LDAsMCwwLDcyLjk2MTQzLDE2MiwzOS45OTI0LDM5Ljk5MjQsMCwxLDAsMTM0LDE5NS45OTk1MXYtMzkuNDdhMzkuOTgwODQsMzkuOTgwODQsMCwxLDAsNDkuMDM5NTUtNjIuNTI5Wk0xOTAsNjAuMDAxYTI4LjAzMTE0LDI4LjAzMTE0LDAsMCwxLTI3Ljk4MDQ3LDI3Ljk5OTUxTDE2Miw4OGwtLjAzODU3LjAwMUwxMzQsODhWMzIuMDAxaDI4QTI4LjAzMTQ1LDI4LjAzMTQ1LDAsMCwxLDE5MCw2MC4wMDFabS0xMjQsMGEyOC4wMzE0NSwyOC4wMzE0NSwwLDAsMSwyOC0yOGgyOFY4OEg5NGwtLjAxOS4wMDA0OUEyOC4wMzEzMiwyOC4wMzEzMiwwLDAsMSw2Niw2MC4wMDFaTTY2LDEyOGEyOC4wMzEyMywyOC4wMzEyMywwLDAsMSwyNy45ODEtMjcuOTk5NTFMOTQsMTAwLjAwMWwyOC0uMDAwNzRWMTU1Ljk5OUw5NCwxNTZBMjguMDMxNDYsMjguMDMxNDYsMCwwLDEsNjYsMTI4Wm0yOCw5NS45OTlBMjcuOTk5NTEsMjcuOTk5NTEsMCwxLDEsOTQsMTY4bDI4LS4wMDA3M3YyOC4wMDAyNEEyOC4wMzEzNSwyOC4wMzEzNSwwLDAsMSw5NCwyMjMuOTk5Wk0xNjIsMTU2YTI3Ljk5OTUyLDI3Ljk5OTUyLDAsMCwxLS4wMzg1Ny01NS45OTlIMTYybC4wMTktLjAwMDQ5QTI3Ljk5OTc2LDI3Ljk5OTc2LDAsMCwxLDE2MiwxNTZaIi8+Cjwvc3ZnPgo="
40+
alt="Figma"
41+
/>
42+
Figma
43+
</IconButton>
44+
);
45+
},
46+
});
47+
});

.storybook/githubAddon/register.tsx

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { addons, types } from '@storybook/addons';
2+
import { IconButton } from '@storybook/components';
3+
import { useParameter } from '@storybook/manager-api';
4+
import { styled } from '@storybook/theming';
5+
6+
import React from 'react';
7+
8+
const ADDON_ID = 'myaddon/github';
9+
const PARAM_KEY = 'githubUrl';
10+
11+
const GithubIcon = styled.img({
12+
width: '20px',
13+
height: '20px',
14+
marginRight: '10px',
15+
});
16+
17+
addons.register(ADDON_ID, () => {
18+
addons.add(ADDON_ID, {
19+
title: 'Github',
20+
type: types.TOOL,
21+
match: ({ viewMode }) => viewMode === 'story',
22+
render: () => {
23+
const githubLink = useParameter(PARAM_KEY, '#');
24+
25+
if (githubLink === '#') {
26+
return null;
27+
}
28+
29+
return (
30+
<IconButton
31+
key="github"
32+
title="Open in Github"
33+
onClick={() => window.open(githubLink, '_blank')}
34+
placeholder={''}
35+
onPointerEnterCapture={undefined}
36+
onPointerLeaveCapture={undefined}
37+
>
38+
<GithubIcon
39+
src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgaWQ9Imljb25fZ2l0aHViIj4KPHBhdGggaWQ9IlZlY3RvciIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMiAxQzUuOTIyNSAxIDEgNS45MjI1IDEgMTJDMSAxNi44Njc1IDQuMTQ4NzUgMjAuOTc4OCA4LjUyMTI1IDIyLjQzNjNDOS4wNzEyNSAyMi41MzI1IDkuMjc3NSAyMi4yMDI1IDkuMjc3NSAyMS45MTM3QzkuMjc3NSAyMS42NTI1IDkuMjYzNzUgMjAuNzg2MyA5LjI2Mzc1IDE5Ljg2NUM2LjUgMjAuMzczOCA1Ljc4NSAxOS4xOTEyIDUuNTY1IDE4LjU3MjVDNS40NDEyNSAxOC4yNTYzIDQuOTA1IDE3LjI4IDQuNDM3NSAxNy4wMTg3QzQuMDUyNSAxNi44MTI1IDMuNTAyNSAxNi4zMDM4IDQuNDIzNzUgMTYuMjlDNS4yOSAxNi4yNzYyIDUuOTA4NzUgMTcuMDg3NSA2LjExNSAxNy40MTc1QzcuMTA1IDE5LjA4MTIgOC42ODYyNSAxOC42MTM4IDkuMzE4NzUgMTguMzI1QzkuNDE1IDE3LjYxIDkuNzAzNzUgMTcuMTI4NyAxMC4wMiAxNi44NTM3QzcuNTcyNSAxNi41Nzg3IDUuMDE1IDE1LjYzIDUuMDE1IDExLjQyMjVDNS4wMTUgMTAuMjI2MiA1LjQ0MTI1IDkuMjM2MjUgNi4xNDI1IDguNDY2MjVDNi4wMzI1IDguMTkxMjUgNS42NDc1IDcuMDYzNzUgNi4yNTI1IDUuNTUxMjVDNi4yNTI1IDUuNTUxMjUgNy4xNzM3NSA1LjI2MjUgOS4yNzc1IDYuNjc4NzVDMTAuMTU3NSA2LjQzMTI1IDExLjA5MjUgNi4zMDc1IDEyLjAyNzUgNi4zMDc1QzEyLjk2MjUgNi4zMDc1IDEzLjg5NzUgNi40MzEyNSAxNC43Nzc1IDYuNjc4NzVDMTYuODgxMyA1LjI0ODc1IDE3LjgwMjUgNS41NTEyNSAxNy44MDI1IDUuNTUxMjVDMTguNDA3NSA3LjA2Mzc1IDE4LjAyMjUgOC4xOTEyNSAxNy45MTI1IDguNDY2MjVDMTguNjEzOCA5LjIzNjI1IDE5LjA0IDEwLjIxMjUgMTkuMDQgMTEuNDIyNUMxOS4wNCAxNS42NDM4IDE2LjQ2ODggMTYuNTc4NyAxNC4wMjEzIDE2Ljg1MzdDMTQuNDIgMTcuMTk3NSAxNC43NjM4IDE3Ljg1NzUgMTQuNzYzOCAxOC44ODg4QzE0Ljc2MzggMjAuMzYgMTQuNzUgMjEuNTQyNSAxNC43NSAyMS45MTM3QzE0Ljc1IDIyLjIwMjUgMTQuOTU2MyAyMi41NDYyIDE1LjUwNjMgMjIuNDM2M0MxOS44NTEyIDIwLjk3ODggMjMgMTYuODUzOCAyMyAxMkMyMyA1LjkyMjUgMTguMDc3NSAxIDEyIDFaIiBmaWxsPSIjMUIxRjIzIi8+CjwvZz4KPC9zdmc+Cg=="
40+
alt="github"
41+
/>
42+
Github
43+
</IconButton>
44+
);
45+
},
46+
});
47+
});

.storybook/main.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ const config: StorybookConfig = {
1414
'@storybook/addon-a11y',
1515
'@storybook/addon-coverage',
1616
'./tokensAddons/register.tsx',
17+
'./figmaAddon/register.tsx',
18+
'./githubAddon/register.tsx',
1719
],
1820
framework: {
1921
name: '@storybook/react-vite',

0 commit comments

Comments
 (0)