Auto-generate docs for most important design tokens

pull/8427/head
Thibaud Colas 2022-04-06 14:40:05 +01:00
rodzic bd874c63c9
commit a395d9c565
6 zmienionych plików z 144 dodań i 96 usunięć

Wyświetl plik

@ -2,7 +2,7 @@ import React from 'react';
import colors, { Hues, Shade } from './colors';
const description = `
Wagtails color palette is structured as design tokens, available as CSS classes.
Wagtails typographic styles are made available as separate design tokens, but in most scenarios its better to use one of the predefined text styles.
`;
interface PaletteProps {
@ -57,13 +57,21 @@ const Palette = ({ color, hues }: PaletteProps) => (
</div>
);
/**
* Displays all icons within our sprite.
*/
const ColorPalette = () => (
export default {
title: 'Foundation / Colors',
parameters: {
docs: {
extractComponentDescription: () => description,
},
},
};
export const ColorPalette = () => (
<>
<p>
View <a href={getContrastGridLink()}>Contrast Grid</a>
View <a href={getContrastGridLink()}>Contrast Grid</a>. Here is our full
color palette, with contrasting text chosen for readability of this
example only.
</p>
{Object.entries(colors).map(([color, hues]) => (
<div key={color}>
@ -73,21 +81,3 @@ const ColorPalette = () => (
))}
</>
);
export default {
title: 'Foundation / Colors',
parameters: {
docs: {
extractComponentDescription: () => description,
},
},
// argTypes: {
// color: {
// description: 'Only intended for demo purposes',
// },
// },
};
export const AllColors = (args) => <ColorPalette {...args} />;
AllColors.args = {};

Wyświetl plik

@ -1,70 +0,0 @@
// eslint-disable-next-line @typescript-eslint/no-var-requires
const plugin = require('tailwindcss/plugin');
// TypeScale plugin:
// This plugin generates component classes using tailwind's configuration for each object inside of the typeScale const.
// If the tailwind config is using a prefix such as 'w-' this will be included in the compiled css class eg. .w-h1
module.exports = plugin(({ addComponents, theme }) => {
const headingBaseStyles = {
fontWeight: theme('fontWeight.bold'),
color: theme('colors.primary.DEFAULT'),
lineHeight: theme('lineHeight.tight'),
};
const typeScale = {
'.h1': {
fontSize: theme('fontSize.30'),
fontWeight: theme('fontWeight.extrabold'),
color: theme('colors.primary.DEFAULT'),
lineHeight: theme('lineHeight.tight'),
},
'.h2': {
fontSize: theme('fontSize.24'),
...headingBaseStyles,
},
'.h3': {
fontSize: theme('fontSize.22'),
...headingBaseStyles,
},
'.h4': {
fontSize: theme('fontSize.18'),
...headingBaseStyles,
},
'.label-1': {
fontSize: theme('fontSize.16'),
fontWeight: theme('fontWeight.bold'),
color: theme('colors.primary.DEFAULT'),
lineHeight: theme('lineHeight.tight'),
},
'.label-2': {
fontSize: theme('fontSize.15'),
fontWeight: theme('fontWeight.semibold'),
color: theme('colors.primary.DEFAULT'),
lineHeight: theme('lineHeight.tight'),
},
'.label-3': {
fontSize: theme('fontSize.14'),
fontWeight: theme('fontWeight.medium'),
color: theme('colors.primary.DEFAULT'),
lineHeight: theme('lineHeight.tight'),
},
'.body-text': {
fontSize: theme('fontSize.16'),
fontWeight: theme('fontWeight.normal'),
lineHeight: theme('lineHeight.normal'),
},
'.body-text-large': {
fontSize: theme('fontSize.18'),
fontWeight: theme('fontWeight.normal'),
lineHeight: theme('lineHeight.normal'),
},
'.help-text': {
fontSize: theme('fontSize.14'),
fontWeight: theme('fontWeight.normal'),
color: theme('colors.grey.400'),
lineHeight: theme('lineHeight.tight'),
},
};
addComponents(typeScale);
});

Wyświetl plik

@ -86,6 +86,71 @@ const lineHeight = {
normal: '1.5',
};
const headingBaseStyles = {
fontWeight: 'fontWeight.bold',
color: 'colors.primary.DEFAULT',
lineHeight: 'lineHeight.tight',
};
/**
* Wagtails type scale styles, written with Tailwind theme function values,
* but in vanilla JS so the type scale can be reused outside of Tailwind.
*/
const typeScale = {
'w-h1': {
fontSize: 'fontSize.30',
fontWeight: 'fontWeight.extrabold',
color: 'colors.primary.DEFAULT',
lineHeight: 'lineHeight.tight',
},
'w-h2': {
fontSize: 'fontSize.24',
...headingBaseStyles,
},
'w-h3': {
fontSize: 'fontSize.22',
...headingBaseStyles,
},
'w-h4': {
fontSize: 'fontSize.18',
...headingBaseStyles,
},
'w-label-1': {
fontSize: 'fontSize.16',
fontWeight: 'fontWeight.bold',
color: 'colors.primary.DEFAULT',
lineHeight: 'lineHeight.tight',
},
'w-label-2': {
fontSize: 'fontSize.15',
fontWeight: 'fontWeight.semibold',
color: 'colors.primary.DEFAULT',
lineHeight: 'lineHeight.tight',
},
'w-label-3': {
fontSize: 'fontSize.14',
fontWeight: 'fontWeight.medium',
color: 'colors.primary.DEFAULT',
lineHeight: 'lineHeight.tight',
},
'w-body-text': {
fontSize: 'fontSize.16',
fontWeight: 'fontWeight.normal',
lineHeight: 'lineHeight.normal',
},
'w-body-text-large': {
fontSize: 'fontSize.18',
fontWeight: 'fontWeight.normal',
lineHeight: 'lineHeight.normal',
},
'w-help-text': {
fontSize: 'fontSize.14',
fontWeight: 'fontWeight.normal',
color: 'colors.grey.400',
lineHeight: 'lineHeight.tight',
},
};
module.exports = {
systemUIFontStack,
monoFontStack,
@ -94,4 +159,5 @@ module.exports = {
fontWeight,
letterSpacing,
lineHeight,
typeScale,
};

Wyświetl plik

@ -0,0 +1,48 @@
import React from 'react';
import { fontFamily, typeScale } from './typography';
const description = `
Wagtails color palette is structured as design tokens, available as CSS classes.
`;
export default {
title: 'Foundation / Typography',
parameters: {
docs: {
extractComponentDescription: () => description,
},
},
};
export const FontFamilies = () => (
<div>
<p>Wagtails brand font is a system font stack:</p>
<pre>{fontFamily.sans.join(', ')}</pre>
</div>
);
export const TypeScale = () => (
<table>
<caption>All text styles</caption>
<thead>
<tr>
<th scope="col">Style</th>
<th scope="col">Class</th>
</tr>
</thead>
<tbody>
{Object.keys(typeScale).map((textStyle) => (
<tr key={textStyle}>
<td>
<span className={`${textStyle} w-mt-4`}>
{textStyle.replace('w-', '')}
</span>
</td>
<td>
<code>{`.${textStyle}`}</code>
</td>
</tr>
))}
</tbody>
</table>
);

Wyświetl plik

@ -10,6 +10,7 @@ const {
fontWeight,
letterSpacing,
lineHeight,
typeScale,
} = require('./src/tokens/typography');
const { breakpoints } = require('./src/tokens/breakpoints');
const {
@ -22,7 +23,6 @@ const { spacing } = require('./src/tokens/spacing');
/**
* Plugins
*/
const typeScale = require('./src/tokens/typeScale');
const scrollbarThin = require('./src/plugins/scrollbarThin');
/**
@ -91,6 +91,20 @@ module.exports = {
plugin(({ addVariant }) => {
addVariant('forced-colors', '@media (forced-colors: active)');
}),
/**
* TypeScale plugin.
* This plugin generates component classes using tailwind's configuration for each object inside of the typeScale const.
* If the tailwind config is using a prefix such as 'w-' this will be included in the compiled css class eg. .w-h1
*/
plugin(({ addComponents, theme }) => {
const scale = {};
Object.entries(typeScale).forEach(([name, styles]) => {
scale[`.${name.replace('w-', '')}`] = Object.fromEntries(
Object.entries(styles).map(([key, value]) => [key, theme(value)]),
);
});
addComponents(scale);
}),
],
corePlugins: {
...vanillaRTL.disabledCorePlugins,

Wyświetl plik

@ -8,7 +8,7 @@ module.exports = {
content: [
'./wagtail/**/*.{py,html,ts,tsx}',
'./wagtail/**/static_src/**/*.js',
'./client/**/*.{js,ts,tsx}',
'./client/**/*.{js,ts,tsx,mdx}',
'./docs/**/*.{md,rst}',
],
corePlugins: {