services/web/frontend/stories/docs/foundations.mdx
import { Meta, ColorItem, ColorPalette, Title, Typeset, } from '@storybook/blocks' import colors from '../../stylesheets/foundations/tokens/colors.json' import typography from '../../stylesheets/foundations/tokens/typography.json' import borderRadius from '../../stylesheets/foundations/tokens/borderRadius.json' import spacing from '../../stylesheets/foundations/tokens/spacing.json'
<Meta title="Storybook Guideline / Foundations" />Foundations in UX design are the basic rules and core elements, like colors, fonts, and spacing, that ensure consistency across the design.
<p> These palettes are generated from our token files. The tokens were exported from Figma and split into separate files to categorise:{' '} <a href="https://github.com/overleaf/internal/tree/main/services/web/frontend/stylesheets/bootstrap-5/foundations/tokens" target="_blank" rel="noopener noreferrer" > Token files on GitHub </a> </p>Table of Contents
Colors used for page and component backgrounds.
<ColorPalette> {Object.entries(colors) .filter(([name]) => name.startsWith('bg-')) .map(([name, colors]) => ( <ColorItem key={name} title={name} subtitle={colors.$primitive} colors={[colors.$value]} /> ))} </ColorPalette>Colors used for text and icons.
<ColorPalette> {Object.entries(colors) .filter(([name]) => name.startsWith('content-')) .map(([name, colors]) => ( <ColorItem key={name} title={name} subtitle={colors.$primitive} colors={[colors.$value]} /> ))} </ColorPalette>Colors used for borders and dividers.
<ColorPalette> {Object.entries(colors) .filter(([name]) => name.startsWith('border-')) .map(([name, colors]) => ( <ColorItem key={name} title={name} subtitle={colors.$primitive} colors={[colors.$value]} /> ))} </ColorPalette>Colors used for hyperlink states.
<ColorPalette> {Object.entries(colors) .filter(([name]) => name.startsWith('link-')) .map(([name, colors]) => ( <ColorItem key={name} title={name} subtitle={colors.$primitive} colors={[colors.$value]} /> ))} </ColorPalette>Colors used for specific UI elements like color pickers.
<ColorPalette> {Object.entries(colors) .filter(([name]) => name.startsWith('special-')) .map(([name, colors]) => ( <ColorItem key={name} title={name} subtitle={colors.$primitive} colors={[colors.$value]} /> ))} </ColorPalette>{Object.entries(typography.Fontweight).map(([name, typography]) => (
<div key={name}> <strong>{name}</strong> <Typeset fontSizes={[14]} fontWeight={typography.$value} sampleText="The quick brown fox jumps over the lazy dog" /> </div> ))}{Object.entries(typography['Fontsize']).map(([name, typography]) => { const mixins = typography.$mixin ? [].concat(typography.$mixin) : [];
return (
<div key={name} style={{ marginBottom: '2rem' }}> <strong> {name} {mixins.map(mixin => ( <span key={mixin}> / @mixin {mixin}</span> ))} </strong> <Typeset fontSizes={[`${typography.$value}px`]} fontWeight={500} sampleText="The quick brown fox jumps over the lazy dog" /> </div> ); })}