| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- import {
- Meta,
- ColorItem,
- ColorPalette,
- Title,
- Typeset,
- } from '@storybook/addon-docs/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
- 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**
- - [Primitive colors](#primitive-colors)
- - [Background colors](#background-colors)
- - [Content colors](#content-colors)
- - [Border colors](#border-colors)
- - [Link colors](#link-colors)
- - [Special colors](#special-colors)
- - [Font weight](#font-weight)
- - [Font size](#font-size)
- - [Border radius](#border-radius)
- - [Spacing](#spacing)
- # Colors
- <br />
- ## Primitive colors
- <ColorPalette>
- {Object.entries(colors.PrimitiveColor).map(([name, color]) => (
- <ColorItem key={name} title={name} colors={[color.$value]} />
- ))}
- </ColorPalette>
- ## Background colors
- 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>
- ## Content colors
- 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>
- ## Border colors
- 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>
- ## Link colors
- 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>
- ## Special colors
- 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>
- # Typography
- <br />
- ## Font weight
- <br />
- {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>
- ))}
- ## Font size
- <br />
- {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>
- );
- })}
- ## Border radius
- <br />
- <table style={{ width: '100%' }}>
- <thead>
- <tr>
- <th>Variable name</th>
- <th>Value</th>
- <th style={{ textAlign: 'center' }}>Example</th>
- </tr>
- </thead>
- <tbody>
- {Object.entries(borderRadius['BorderRadius']).map(
- ([name, borderRadius]) => (
- <tr key={name}>
- <td>
- <strong>{name}</strong>
- </td>
- <td style={{ textAlign: 'center' }}>{borderRadius.$value}px</td>
- <td style={{ textAlign: 'center', padding: '0.5rem' }}>
- <div
- style={{
- width: '80px',
- height: '80px',
- borderRadius: `${borderRadius.$value}px`,
- backgroundColor: '#098842',
- display: 'inline-block',
- }}
- />
- </td>
- </tr>
- )
- )}
- </tbody>
- </table>
- ## Spacing
- <br />
- <table style={{ width: '100%' }}>
- <thead>
- <tr>
- <th>Variable Name</th>
- <th>Value</th>
- <th style={{ textAlign: 'left', paddingLeft: '1rem' }}>Example</th>
- </tr>
- </thead>
- <tbody>
- {Object.entries(spacing.Spacing)
- .filter(([, spacing]) => spacing.$value > 0)
- .map(([name, spacing]) => (
- <tr key={name}>
- <td>
- <strong>{name}</strong>
- </td>
- <td style={{ textAlign: 'center' }}>{spacing.$value}px</td>
- <td style={{ padding: '0.5rem 1rem', verticalAlign: 'middle' }}>
- <div
- style={{
- height: `${spacing.$value}px`,
- width: '100%',
- backgroundColor: '#098842',
- }}
- />
- </td>
- </tr>
- ))}
- </tbody>
- </table>
|