browsertrix/frontend/tailwind.config.js
sua yoo 894fc63835
Refactor data table to use btrix-table component (#1474)
- Refactors `btrix-data-table` to use `btrix-table`
- Prevent tables from breaking layout at smaller screen size
2024-01-28 21:17:47 -08:00

144 lines
4.2 KiB
JavaScript

/* eslint-disable @typescript-eslint/no-var-requires */
const { tailwindTransform } = require("postcss-lit");
const Color = require("color");
const PRIMARY_COLOR = "#4876ff";
const primaryColor = Color(PRIMARY_COLOR);
const primary = {
DEFAULT: PRIMARY_COLOR,
50: primaryColor.lighten(0.54).hex(),
100: primaryColor.lighten(0.5).hex(),
200: primaryColor.lighten(0.4).hex(),
300: primaryColor.lighten(0.3).hex(),
400: primaryColor.lighten(0.2).hex(),
500: primaryColor.lighten(0.1).hex(),
600: PRIMARY_COLOR,
700: primaryColor.darken(0.1).hex(),
800: primaryColor.darken(0.2).hex(),
900: primaryColor.darken(0.3).hex(),
950: primaryColor.darken(0.4).hex(),
};
/**
* Use Shoelace CSS variables in Tailwind theme for consistency
*
* Customize Shoelace variables in `theme.ts`
* @returns {import('tailwindcss').Config['theme']}
*/
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,
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)`,
},
// TODO see if there's a way to use Shoelace's box shadows with customizable colors
// 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
},
gridTemplateColumns: {
13: "repeat(13, minmax(0, 1fr))",
14: "repeat(14, minmax(0, 1fr))",
},
screens: {
desktop: "82.5rem", // 14 4.5rem columns with 1.5rem gutter
// Override default of:
// => @media (min-width: 1024px) { ... }
},
transitionDuration: {
"x-slow": "var(--sl-transition-x-slow)",
slow: "var(--sl-transition-slow)",
medium: "var(--sl-transition-medium)",
fast: "var(--sl-transition-fast)",
"x-fast": "var(--sl-transition-x-fast)",
},
};
}
/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
extend: makeTheme(),
},
content: {
files: ["./src/**/*.html", "./src/**/*.{ts,js,ejs}"],
transform: {
ts: tailwindTransform,
},
},
extract: {
include: ["./src/**/*.{ts,js}"],
},
};