Files
triggerdotdev--trigger.dev/apps/webapp/tailwind.config.js
T
Matt Aitken 630e9556b0 Bulk actions 2.0 (and switch all run listing to ClickHouse) (#2264)
* useSearchParams has

* useSearchParams has

* useSearchParams has

* Consistent way to get the run filters

* Consistent way to get the run filters

* Consistent way to get the run filters

* Initial work on the new bulk actions

* Initial work on the new bulk actions

* Initial work on the new bulk actions

* WIP actions and filtering

* WIP actions and filtering

* WIP actions and filtering

* Empty filter arrays are set to undefined

* Empty filter arrays are set to undefined

* Empty filter arrays are set to undefined

* WIP prisma schema

Removed extra runtimeEnvironmentId

* WIP prisma schema

Removed extra runtimeEnvironmentId

* WIP prisma schema

Removed extra runtimeEnvironmentId

* Migrations

* Migrations

* Migrations

* BulkActionGroup changed some columns around

* BulkActionGroup changed some columns around

* BulkActionGroup changed some columns around

* New badge variant, removed unused ones

* New badge variant, removed unused ones

* New badge variant, removed unused ones

* Bulk action button

* Bulk action button

* Bulk action button

* Make the next runs page the default now

* Make the next runs page the default now

* Make the next runs page the default now

* Improved the RadioButton style

* Improved the RadioButton style

* Improved the RadioButton style

* Remove the old bulk action bar

* Remove the old bulk action bar

* Remove the old bulk action bar

* More UI progress

* More UI progress

* More UI progress

* Lots of UI changes to the Runs page

* Lots of UI changes to the Runs page

* Lots of UI changes to the Runs page

* Fixed period filter resetting everything

* Fixed period filter resetting everything

* Fixed period filter resetting everything

* Improved the Switch secondary style

* Improved the Switch secondary style

* Improved the Switch secondary style

* Buggy filter fixes

* Buggy filter fixes

* Buggy filter fixes

* Improved the filter display and fixed a bug with search param from object

* Improved the filter display and fixed a bug with search param from object

* Improved the filter display and fixed a bug with search param from object

* Clear button is minimal

* Clear button is minimal

* Clear button is minimal

* Using a presenter now

* Using a presenter now

* Using a presenter now

* Bulk actions are created, but not actually processed (yet)

* Bulk actions are created, but not actually processed (yet)

* Bulk actions are created, but not actually processed (yet)

* Bulk replay/cancel is working

* Bulk replay/cancel is working

* Bulk replay/cancel is working

* Multiple fixes, added bulk column to PG

* Multiple fixes, added bulk column to PG

* Multiple fixes, added bulk column to PG

* Bulk action run filtering working using CH

* Bulk action run filtering working using CH

* Bulk action run filtering working using CH

* Replay setting the bulk id on the runs

* Replay setting the bulk id on the runs

* Replay setting the bulk id on the runs

* Properly cap the time when doing a bulk action

* Properly cap the time when doing a bulk action

* Properly cap the time when doing a bulk action

* If the bulk action isn't recent, add it to the dropdown anyway

* If the bulk action isn't recent, add it to the dropdown anyway

* If the bulk action isn't recent, add it to the dropdown anyway

* Blank version of the bulk actions page

* Blank version of the bulk actions page

* Blank version of the bulk actions page

* Individually selected runs working

* Individually selected runs working

* Individually selected runs working

* Use selected mode if runs are checked

* Use selected mode if runs are checked

* Use selected mode if runs are checked

* Added the modal

* Added the modal

* Added the modal

* Marked the old bulk actions stuff as deprecated

* Marked the old bulk actions stuff as deprecated

* Marked the old bulk actions stuff as deprecated

* Renamed bulk action file

* Renamed bulk action file

* Renamed bulk action file

* Bulk run filter with the name and a default

* Bulk run filter with the name and a default

* Bulk run filter with the name and a default

* WIP on bulk actions page

* WIP on bulk actions page

* WIP on bulk actions page

* Updated panel, added new truncated id component

* Updated panel, added new truncated id component

* Updated panel, added new truncated id component

* Style improvements to the radio buttons

* Style improvements to the radio buttons

* Style improvements to the radio buttons

* Added an option action completion email

* Added an option action completion email

* Added an option action completion email

* Adds a blank state for the bulk actions page

* Adds a blank state for the bulk actions page

* Adds a blank state for the bulk actions page

* Nicer completed email

* Nicer completed email

* Nicer completed email

* Don't open the bulk action panel if there are no runs

* Don't open the bulk action panel if there are no runs

* Don't open the bulk action panel if there are no runs

* Runs blank state and bulk action accordion

* Runs blank state and bulk action accordion

* Runs blank state and bulk action accordion

* Updates secondary/small switch style

* Updates secondary/small switch style

* Updates secondary/small switch style

* Pagination buttons no longer split in twain (WIP)

* Pagination buttons no longer split in twain (WIP)

* Pagination buttons no longer split in twain (WIP)

* Aborting working

* Aborting working

* Aborting working

* Bulk action live reloading

* Bulk action live reloading

* Bulk action live reloading

* ListPagination works correctly in all states

* ListPagination works correctly in all states

* ListPagination works correctly in all states

* Run page, show friendlyId instead of number

* Run page, show friendlyId instead of number

* Run page, show friendlyId instead of number

* Bulk action help open by default if you have none

* Bulk action help open by default if you have none

* Bulk action help open by default if you have none

* Extra status filtering step because of replication delay

* Extra status filtering step because of replication delay

* Extra status filtering step because of replication delay

* Wider bulk action onboarding

* Wider bulk action onboarding

* Wider bulk action onboarding

* More sensible widths on the bulk action side panel

* More sensible widths on the bulk action side panel

* More sensible widths on the bulk action side panel

* Border color tweak to the RadioButton

* Border color tweak to the RadioButton

* Border color tweak to the RadioButton

* Improved the accordion component hover states

* Improved the accordion component hover states

* Improved the accordion component hover states

* Updates the bulk action blank state images to the latest UI

* Updates the bulk action blank state images to the latest UI

* Updates the bulk action blank state images to the latest UI

* Added R and C shortcuts back in

* Added R and C shortcuts back in

* Added R and C shortcuts back in

* Fix for selecting a single run

* Fix for selecting a single run

* Fix for selecting a single run

* Improved exit icon, added shortcut to modal

* Improved exit icon, added shortcut to modal

* Improved exit icon, added shortcut to modal

* Tidy imports

* Tidy imports

* Tidy imports

* Tidy imports

* Tidy imports

* Tidy imports

* Tidy imports

* Tidy imports

* Tidy imports

* Tidy imports

* Fix for grid layout when 1 page of bulk actions visible

* Fix for grid layout when 1 page of bulk actions visible

* Fix for grid layout when 1 page of bulk actions visible

* Removed the ... on the abort button

* Removed the ... on the abort button

* Removed the ... on the abort button

* Removed the ... on the abort button

* Animate the progress bar

* Set TZ="UTC" in the env example

* Filter summary in the bulk inspector

* Improves the pagination styling

* Improves the pagination styling

* Delete old bulk action routes

* Removed old Postgres RunListPresenter

* Retry any replication error where the message contains "timeout"

* Increase wait to make test less flaky

* The test was using run id instead of friendly id

* Safer array access

* Remove error log if there's a bad status

* Nicer frontend type safety with the bulk action and mode

* Switched a log to a debug log

* Retry replication unless the error is a known non-retry error

Flip the strategy to retry by default

* Make ClickHouse required

* Backfill run replication admin API endpoint

* Set a CLICKHOUSE_URL for unit tests

---------

Co-authored-by: James Ritchie <james@trigger.dev>
2025-07-14 15:50:01 +01:00

344 lines
8.0 KiB
JavaScript

/** @type {import('tailwindcss').Config} */
const colors = require("tailwindcss/colors");
// V2
const slate = {
450: "#7E8FA6",
500: "#6B7C95",
550: "#586981",
600: "#45566D",
650: "#3C4B62",
750: "#293649",
850: "#1A2434",
900: "#131B2B",
950: "#0E1521",
1000: "#0B1018",
};
const toxic = {
50: "#E3FFE6",
100: "#C8FFCD",
200: "#A9FFAB",
300: "#8AFF96",
400: "#6DFC7B",
500: "#41FF54",
600: "#28F03C",
700: "#2AE03C",
800: "#22D834",
900: "#16CC28",
};
const acid = {
50: "#F9FFD1",
100: "#F6FFB6",
200: "#F3FF99",
300: "#EEFF82",
400: "#E7FF52",
500: "#DAF437",
600: "#C5E118",
700: "#B2CD0A",
800: "#A5BE07",
900: "#9FB802",
};
const midnight = {
...colors.slate,
450: colors.slate[850],
500: colors.slate[650],
550: colors.slate[700],
600: colors.slate[750],
650: colors.slate[800],
750: colors.slate[850],
800: colors.slate[900],
850: "#0E1521",
900: "#0B1018",
};
// V3
const charcoal = {
100: "#E8E9EC",
200: "#D7D9DD",
300: "#B5B8C0",
400: "#878C99",
500: "#5F6570",
550: "#4D525B",
600: "#3B3E45",
650: "#2C3034",
700: "#272A2E",
750: "#212327",
775: "#1C1E21",
800: "#1A1B1F",
850: "#15171A",
900: "#121317",
950: "#0D0E12",
1000: "#0B0C0F",
};
const apple = {
100: "#E4FFC9",
200: "#CFFFA0",
300: "#BFFF81",
400: "#AFFF62",
500: "#A8FF53",
600: "#82D134",
700: "#6FB12F",
750: "#5E932A",
800: "#45711A",
850: "#2E4E10",
900: "#20370A",
950: "#152506",
};
const mint = {
50: "#F0FDF4",
100: "#DDFBE6",
200: "#BDF5D0",
300: "#87EBA9",
400: "#4FD97E",
500: "#28BF5C",
600: "#1B9E48",
700: "#197C3C",
800: "#196233",
900: "#16512C",
950: "#062D15",
};
const sun = {
50: "#FDFEE8",
100: "#FDFFC2",
200: "#FFFF89",
300: "#FFF852",
400: "#FDEA12",
500: "#ECCF06",
600: "#CCA302",
700: "#A37505",
800: "#865B0D",
900: "#724B11",
950: "#432705",
};
const lavender = {
50: "##f4f2ff",
100: "#eae8ff",
200: "#d7d4ff",
300: "#bab2ff",
400: "#826dff",
500: "#7655fd",
600: "#6532f5",
700: "#5620e1",
800: "#481abd",
900: "#3d189a",
950: "#230c69",
};
/** Trigger.dev custom palette */
/** Text colors */
const primary = apple[500];
const secondary = charcoal[650];
const tertiary = charcoal[700];
const textLink = lavender[400];
const textDimmed = charcoal[400];
const textBright = charcoal[200];
const backgroundBright = charcoal[800];
const backgroundDimmed = charcoal[850];
const gridBright = charcoal[700];
const gridDimmed = charcoal[750];
const success = mint[500];
const pending = colors.blue[500];
const warning = colors.amber[500];
const error = colors.rose[600];
const devEnv = colors.pink[500];
const stagingEnv = colors.orange[400];
const previewEnv = colors.yellow[400];
const prodEnv = mint[500];
/** Icon colors */
const tasks = colors.blue[500];
const runs = colors.indigo[500];
const batches = colors.pink[500];
const schedules = colors.yellow[500];
const queues = colors.purple[500];
const deployments = colors.green[500];
const tests = colors.lime[500];
const apiKeys = colors.amber[500];
const environmentVariables = colors.pink[500];
const alerts = colors.red[500];
const projectSettings = colors.blue[500];
const orgSettings = colors.blue[500];
const docs = colors.blue[500];
const bulkActions = colors.emerald[500];
/** Other variables */
const radius = "0.5rem";
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./app/**/*.{ts,jsx,tsx}"],
theme: {
container: {
center: true,
padding: "2rem",
screens: {
"2xl": "1400px",
},
},
extend: {
fontFamily: {
sans: ["Geist Variable", "Helvetica Neue", "Helvetica", "Arial", "sans-serif"],
mono: ["Geist Mono Variable", "monaco", "Consolas", "Lucida Console", "monospace"],
},
fontSize: {
xxs: [
"0.65rem",
{
lineHeight: "0.75rem",
letterSpacing: "-0.01em",
fontWeight: "500",
},
],
"2sm": [
"0.8125rem",
{
lineHeight: "0.875rem",
letterSpacing: "-0.01em",
fontWeight: "500",
},
],
},
colors: {
charcoal,
apple,
lavender,
mint,
sun,
primary,
secondary,
tertiary,
"text-link": textLink,
"text-dimmed": textDimmed,
"text-bright": textBright,
"background-bright": backgroundBright,
"background-dimmed": backgroundDimmed,
"grid-bright": gridBright,
"grid-dimmed": gridDimmed,
success,
pending,
warning,
error,
dev: devEnv,
staging: stagingEnv,
prod: prodEnv,
preview: previewEnv,
tasks,
runs,
batches,
schedules,
queues,
deployments,
tests,
apiKeys,
environmentVariables,
alerts,
projectSettings,
orgSettings,
docs,
bulkActions,
},
focusStyles: {
outline: "1px solid",
outlineOffset: "0px",
outlineColor: textLink,
borderRadius: "3px",
},
borderRadius: {
lg: radius,
md: `calc(${radius} - 2px)`,
sm: `calc(${radius} - 4px)`,
},
boxShadow: {
"glow-primary": "0 0 10px 5px rgba(218, 244, 55, 0.2)",
"glow-secondary": "0 0 10px 5px rgba(79, 70, 229, 0.2)",
"glow-pink": "0 0 10px 5px rgba(236, 72, 153, 0.2)",
},
outlineWidth: {
3: "3px",
},
textShadow: {
custom: "1px 1px 1px rgba(0, 0, 0, 0.5)", // Offset-X | Offset-Y | Blur radius | Color
},
keyframes: {
"accordion-down": {
from: { height: 0 },
to: { height: "var(--radix-accordion-content-height)" },
},
"accordion-up": {
from: { height: "var(--radix-accordion-content-height)" },
to: { height: 0 },
},
float: {
"0%": { transform: "translatey(0px)" },
"50%": { transform: "translatey(7px)" },
"100%": { transform: "translatey(0px)" },
},
"tile-move": {
"0%": { "background-position": "0px" },
"100%": { "background-position": "8px" },
},
"tile-move-offset": {
"0%": { "background-position": "-1px" },
"100%": { "background-position": "7px" },
},
},
animation: {
"accordion-down": "accordion-down 0.2s ease-out",
"accordion-up": "accordion-up 0.2s ease-out",
"tile-scroll": "tile-move 0.5s infinite linear",
"tile-scroll-offset": "tile-move-offset 0.5s infinite linear",
},
backgroundImage: {
"gradient-radial": "radial-gradient(closest-side, var(--tw-gradient-stops))",
"gradient-primary": `linear-gradient(90deg, acid-500 0%, toxic-500 100%)`,
"gradient-primary-hover": `linear-gradient(80deg, acid-600 0%, toxic-600 100%)`,
"gradient-secondary": `linear-gradient(90deg, hsl(271 91 65) 0%, hsl(221 83 53) 100%)`,
"gradient-radial-secondary ": `radial-gradient(hsl(271 91 65), hsl(221 83 53))`,
},
gridTemplateColumns: {
carousel: "repeat(6, 200px)",
},
screens: {
"lg-height": { raw: "(max-height: 750px)" },
"md-height": { raw: "(max-height: 600px)" },
},
width: {
0.75: "0.1875rem",
4.5: "1.125rem",
},
height: {
0.75: "0.1875rem",
4.5: "1.125rem",
},
size: {
4.5: "1.125rem",
},
},
},
plugins: [
require("@tailwindcss/container-queries"),
require("@tailwindcss/forms"),
require("@tailwindcss/typography"),
require("tailwindcss-animate"),
require("tailwind-scrollbar"),
require("tailwind-scrollbar-hide"),
require("tailwindcss-textshadow"),
function ({ addUtilities, theme }) {
const focusStyles = theme("focusStyles", {});
addUtilities({
".focus-custom": {
"&:focus-visible": focusStyles,
},
});
},
],
};