@carbon/layout
Version:
Layout helpers for digital and software products using the Carbon Design System
182 lines (163 loc) • 3.95 kB
text/typescript
/**
* Copyright IBM Corp. 2018, 2026
*
* This source code is licensed under the Apache-2.0 license found in the
* LICENSE file in the root directory of this source tree.
*/
import { unstable_tokens } from './tokens';
export { unstable_tokens };
export type BreakpointName = 'sm' | 'md' | 'lg' | 'xlg' | 'max';
export type Breakpoint = {
width: string;
columns: number;
margin: string;
};
export type SizeName =
| 'XSmall'
| 'Small'
| 'Medium'
| 'Large'
| 'XLarge'
| '2XLarge';
// Convert
// Default, Use with em() and rem() functions
export const baseFontSize = 16;
export const rem = (px: number) => {
return `${px / baseFontSize}rem`;
};
export const em = (px: number) => {
return `${px / baseFontSize}em`;
};
export const px = (value: number) => {
return `${value}px`;
};
// Breakpoint
// Initial map of our breakpoints and their values
export const breakpoints: Record<BreakpointName, Breakpoint> = {
sm: {
width: rem(320),
columns: 4,
margin: '0',
},
md: {
width: rem(672),
columns: 8,
margin: rem(16),
},
lg: {
width: rem(1056),
columns: 16,
margin: rem(16),
},
xlg: {
width: rem(1312),
columns: 16,
margin: rem(16),
},
max: {
width: rem(1584),
columns: 16,
margin: rem(24),
},
};
export const breakpointUp = (name: BreakpointName) => {
return `@media (min-width: ${breakpoints[name].width})`;
};
export const breakpointDown = (name: BreakpointName) => {
return `@media (max-width: ${breakpoints[name].width})`;
};
export const breakpoint = breakpointUp;
// Mini-unit
export const miniUnit = 8;
export const miniUnits = (count: number) => {
return rem(miniUnit * count);
};
// Spacing
export const spacing01 = miniUnits(0.25);
export const spacing02 = miniUnits(0.5);
export const spacing03 = miniUnits(1);
export const spacing04 = miniUnits(1.5);
export const spacing05 = miniUnits(2);
export const spacing06 = miniUnits(3);
export const spacing07 = miniUnits(4);
export const spacing08 = miniUnits(5);
export const spacing09 = miniUnits(6);
export const spacing10 = miniUnits(8);
export const spacing11 = miniUnits(10);
export const spacing12 = miniUnits(12);
export const spacing13 = miniUnits(20);
export const spacing = [
spacing01,
spacing02,
spacing03,
spacing04,
spacing05,
spacing06,
spacing07,
spacing08,
spacing09,
spacing10,
spacing11,
spacing12,
spacing13,
];
// Fluid spacing
export const fluidSpacing01 = 0;
export const fluidSpacing02 = '2vw';
export const fluidSpacing03 = '5vw';
export const fluidSpacing04 = '10vw';
export const fluidSpacing = [
fluidSpacing01,
fluidSpacing02,
fluidSpacing03,
fluidSpacing04,
];
// Layout
// Deprecated
export const layout01 = miniUnits(2);
export const layout02 = miniUnits(3);
export const layout03 = miniUnits(4);
export const layout04 = miniUnits(6);
export const layout05 = miniUnits(8);
export const layout06 = miniUnits(12);
export const layout07 = miniUnits(20);
export const layout = [
layout01,
layout02,
layout03,
layout04,
layout05,
layout06,
layout07,
];
// Container
export const container01 = miniUnits(3);
export const container02 = miniUnits(4);
export const container03 = miniUnits(5);
export const container04 = miniUnits(6);
export const container05 = miniUnits(8);
export const container = [
container01,
container02,
container03,
container04,
container05,
];
export const sizeXSmall = rem(24);
export const sizeSmall = rem(32);
export const sizeMedium = rem(40);
export const sizeLarge = rem(48);
export const sizeXLarge = rem(64);
export const size2XLarge = rem(80);
export const sizes: Record<SizeName, string> = {
XSmall: sizeXSmall,
Small: sizeSmall,
Medium: sizeMedium,
Large: sizeLarge,
XLarge: sizeXLarge,
'2XLarge': size2XLarge,
};
// Icon
export const iconSize01 = '1rem';
export const iconSize02 = '1.25rem';
export const iconSize = [iconSize01, iconSize02];