browsertrix/frontend/tailwind.config.js

103 lines
2.9 KiB
JavaScript

/**
* Use Shoelace CSS variables in Tailwind theme for consistency
*
* Customize Shoelace variables in `theme.ts`
*/
function makeTheme() {
// Map color palettes:
const colors = [
"gray",
"red",
"yellow",
"green",
"blue",
"indigo",
"purple",
"pink",
];
// Map color grading:
const colorGrades = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900];
const makeColorPalette = (color) =>
colorGrades.reduce((acc, v) => ({
...acc,
[v]: `var(--sl-color-${color}-${v})`,
}));
return {
// https://github.com/tailwindlabs/tailwindcss/blob/52ab3154392ba3d7a05cae643694384e72dc24b2/stubs/defaultConfig.stub.js
colors: {
current: "currentColor",
...colors.map(makeColorPalette),
primary: `var(--primary)`,
success: `var(--success)`,
warning: `var(--warning)`,
danger: `var(--danger)`,
neutral: {
...makeColorPalette("neutral"),
// Shoelace supports additional neutral variables:
0: `var(--sl-color-neutral-0)`,
950: `var(--sl-color-neutral-950)`,
1000: `var(--sl-color-neutral-1000)`,
},
},
fontFamily: {
sans: `var(--sl-font-sans)`,
serif: `var(--sl-font-serif)`,
mono: `var(--sl-font-mono)`,
},
fontSize: {
xs: ["var(--sl-font-size-x-small)", { lineHeight: "1.33" }],
sm: ["var(--sl-font-size-small)", { lineHeight: "1.25rem" }],
// base: ["var(--sl-font-size-medium)", { lineHeight: "1.5" }],
lg: ["var(--sl-font-size-large)", { lineHeight: "1.6" }],
xl: ["var(--sl-font-size-x-large)", { lineHeight: "1.5" }],
"2xl": ["var(--sl-font-size-2x-large)", { lineHeight: "1.5" }],
"3xl": ["var(--sl-font-size-3x-large)", { lineHeight: "1" }],
"4xl": ["var(--sl-font-size-4x-large)", { lineHeight: "1" }],
},
fontWeight: {
light: "var(--sl-font-weight-light)",
normal: "var(--sl-font-weight-normal)",
medium: "var(--sl-font-weight-medium)",
semibold: "var(--sl-font-weight-semibold)",
bold: "var(--sl-font-weight-bold)",
},
borderRadius: {
sm: `var(--sl-border-radius-small)`,
DEFAULT: `var(--sl-border-radius-medium)`,
md: `var(--sl-border-radius-medium)`,
lg: `var(--sl-border-radius-large)`,
xl: `var(--sl-border-radius-x-large)`,
},
boxShadow: {
sm: `var(--sl-shadow-small)`,
DEFAULT: `var(--sl-shadow-medium)`,
md: `var(--sl-shadow-medium)`,
lg: `var(--sl-shadow-large)`,
xl: `var(--sl-shadow-x-large)`,
},
aspectRatio: {
"4/3": "4 / 3", // For Browsertrix watch/replay
},
screens: {
lg: "1124px",
// Override default of:
// => @media (min-width: 1024px) { ... }
},
};
}
module.exports = {
theme: {
extend: makeTheme(),
},
content: ["./**/*.html", "./src/**/*.{ts,js,ejs}"],
extract: {
include: ["./src/**/*.{ts,js}"],
},
};