/** @type {import('tailwindcss').Config} */ import tailwindcssForms from "@tailwindcss/forms"; import tailwindcssTypography from "@tailwindcss/typography"; import tailwindcssAnimate from "tailwindcss-animate"; import tailwindcssDottedBackground from "tailwindcss-dotted-background"; import { fontFamily } from "tailwindcss/defaultTheme"; import plugin from "tailwindcss/plugin"; const config = { variants: { extend: { display: ["group-hover"], textColor: ["group-increment-hover", "group-decrement-hover"], }, }, darkMode: ["class"], content: [ "app/**/*.{ts,tsx}", "components/**/*.{ts,tsx}", "./index.html", "./src/**/*.{js,ts,tsx,jsx}", ], safelist: [ "bg-status-blue", "bg-status-green", "bg-status-red", "bg-status-yellow", ], important: false, theme: { container: { center: true, screens: { "2xl": "1400px", }, }, extend: { screens: { xl: "1200px", "2xl": "1400px", }, keyframes: { wiggle: { "0%, 100%": { transform: "scale(100%)" }, "50%": { transform: "scale(120%)" }, }, "border-beam": { "100%": { "offset-distance": "100%", }, }, }, animation: { wiggle: "wiggle 150ms ease-in-out 1", "slow-wiggle": "wiggle 500ms ease-in-out 1", "border-beam": "border-beam calc(var(--duration)*1s) infinite linear", }, colors: { "frozen-blue": "rgba(128, 190, 219, 0.86)", // Custom blue color for the frozen effect "frosted-glass": "rgba(255, 255, 255, 0.8)", // Custom frosted glass effect "component-icon": "var(--component-icon)", "flow-icon": "var(--flow-icon)", "low-indigo": "var(--low-indigo)", "chat-send": "var(--chat-send)", connection: "var(--connection)", "almost-dark-gray": "var(--almost-dark-gray)", "almost-light-blue": "var(--almost-light-blue)", "almost-medium-gray": "var(--almost-medium-gray)", "almost-medium-green": "var(--almost-medium-green)", "almost-medium-red": "var(--almost-medium-red)", "btn-shadow": "var(--round-btn-shadow)", "build-trigger": "var(--build-trigger)", "chat-trigger": "var(--chat-trigger)", "chat-trigger-disabled": "var(--chat-trigger-disabled)", "dark-blue": "var(--dark-blue)", "dark-gray": "var(--dark-gray)", "dark-red": "var(--dark-red)", error: { DEFAULT: "var(--error)", background: "var(--error-background)", foreground: "var(--error-foreground)", }, "high-dark-gray": "var(--high-dark-gray)", "high-indigo": "var(--high-indigo)", "high-light-gray": "var(--high-light-gray)", "info-background": "var(--info-background)", "info-foreground": "var(--info-foreground)", "light-blue": "var(--light-blue)", "light-gray": "var(--light-gray)", "light-slate": "var(--light-slate)", "medium-blue": "var(--medium-blue)", "status-blue": "var(--status-blue)", "medium-dark-gray": "var(--medium-dark-gray)", "medium-dark-green": "var(--medium-dark-green)", "medium-dark-red": "var(--medium-dark-red)", "medium-emerald": "var(--medium-emerald)", "medium-gray": "var(--medium-gray)", "medium-high-indigo": "var(--medium-high-indigo)", "medium-indigo": "var(--medium-indigo)", "medium-low-gray": "var(--medium-low-gray)", "note-amber": "hsl(var(--note-amber))", "note-neutral": "hsl(var(--note-neutral))", "note-rose": "hsl(var(--note-rose))", "note-blue": "hsl(var(--note-blue))", "note-lime": "hsl(var(--note-lime))", "status-green": "var(--status-green)", "status-red": "var(--status-red)", "status-yellow": "var(--status-yellow)", "status-gray": "var(--status-gray)", warning: { DEFAULT: "hsl(var(--warning))", foreground: "hsl(var(--warning-foreground))", text: "hsl(var(--warning-text))", }, "success-background": "var(--success-background)", "success-foreground": "var(--success-foreground)", "accent-pink": "hsl(var(--accent-pink))", "accent-pink-foreground": "hsl(var(--accent-pink-foreground))", filter: { foreground: "var(--filter-foreground)", background: "var(--filter-background)", }, beta: { background: "var(--beta-background)", foreground: "var(--beta-foreground)", "foreground-soft": "var(--beta-foreground-soft)", }, "chat-bot-icon": "var(--chat-bot-icon)", "chat-user-icon": "var(--chat-user-icon)", "code-background": "hsl(var(--code-background))", "code-description-background": "hsl(var(--code-description-background))", "code-foreground": "hsl(var(--code-foreground))", canvas: { DEFAULT: "hsl(var(--canvas))", dot: "hsl(var(--canvas-dot))", }, ice: "var(--ice)", selected: "var(--selected)", hover: "var(--hover)", border: "hsl(var(--border))", input: "hsl(var(--input))", ring: "hsl(var(--ring))", "error-red": "hsl(var(--error-red))", "error-red-border": "hsl(var(--error-red-border))", "node-selected": "hsl(var(--node-selected))", background: "hsl(var(--background))", foreground: "hsl(var(--foreground))", "emerald-smooth": "hsl(var(--emaral-smooth))", "emerald-hard": "hsl(var(--emeral-hard))", placeholder: "hsl(var(--placeholder))", "hard-zinc": "hsl(var(--hard-zinc))", "smooth-red": "hsl(var(--smooth-red))", "placeholder-foreground": "hsl(var(--placeholder-foreground))", primary: { DEFAULT: "hsl(var(--primary))", foreground: "hsl(var(--primary-foreground))", hover: "hsl(var(--primary-hover))", }, secondary: { DEFAULT: "hsl(var(--secondary))", foreground: "hsl(var(--secondary-foreground))", hover: "hsl(var(--secondary-hover))", }, destructive: { DEFAULT: "hsl(var(--destructive))", foreground: "hsl(var(--destructive-foreground))", }, muted: { DEFAULT: "hsl(var(--muted))", foreground: "hsl(var(--muted-foreground))", }, accent: { DEFAULT: "hsl(var(--accent))", foreground: "hsl(var(--accent-foreground))", }, "accent-emerald": { DEFAULT: "hsl(var(--accent-emerald))", foreground: "hsl(var(--accent-emerald-foreground))", hover: "hsl(var(--accent-emerald-hover))", }, "accent-indigo": { DEFAULT: "hsl(var(--accent-indigo))", foreground: "hsl(var(--accent-indigo-foreground))", }, "accent-pink": { DEFAULT: "hsl(var(--accent-pink))", foreground: "hsl(var(--accent-pink-foreground))", }, popover: { DEFAULT: "hsl(var(--popover))", foreground: "hsl(var(--popover-foreground))", }, card: { DEFAULT: "hsl(var(--card))", foreground: "hsl(var(--card-foreground))", }, tooltip: { DEFAULT: "hsl(var(--tooltip))", foreground: "hsl(var(--tooltip-foreground))", }, "code-block": { DEFAULT: "#18181B", muted: "#27272A", }, "datatype-yellow": { DEFAULT: "hsl(var(--datatype-yellow))", foreground: "hsl(var(--datatype-yellow-foreground))", }, "datatype-blue": { DEFAULT: "hsl(var(--datatype-blue))", foreground: "hsl(var(--datatype-blue-foreground))", }, "datatype-gray": { DEFAULT: "hsl(var(--datatype-gray))", foreground: "hsl(var(--datatype-gray-foreground))", }, "datatype-lime": { DEFAULT: "hsl(var(--datatype-lime))", foreground: "hsl(var(--datatype-lime-foreground))", }, "datatype-red": { DEFAULT: "hsl(var(--datatype-red))", foreground: "hsl(var(--datatype-red-foreground))", }, "datatype-violet": { DEFAULT: "hsl(var(--datatype-violet))", foreground: "hsl(var(--datatype-violet-foreground))", }, "datatype-emerald": { DEFAULT: "hsl(var(--datatype-emerald))", foreground: "hsl(var(--datatype-emerald-foreground))", }, "datatype-fuchsia": { DEFAULT: "hsl(var(--datatype-fuchsia))", foreground: "hsl(var(--datatype-fuchsia-foreground))", }, "datatype-purple": { DEFAULT: "hsl(var(--datatype-purple))", foreground: "hsl(var(--datatype-purple-foreground))", }, "datatype-cyan": { DEFAULT: "hsl(var(--datatype-cyan))", foreground: "hsl(var(--datatype-cyan-foreground))", }, "datatype-indigo": { DEFAULT: "hsl(var(--datatype-indigo))", foreground: "hsl(var(--datatype-indigo-foreground))", }, "node-ring": "hsl(var(--node-ring))", "neon-fuschia": "hsl(var(--neon-fuschia))", "digital-orchid": "hsl(var(--digital-orchid))", "plasma-purple": "hsl(var(--plasma-purple))", "electric-blue": "hsl(var(--electric-blue))", "holo-frost": "hsl(var(--holo-frost))", "terminal-green": "hsl(var(--terminal-green))", "cosmic-void": "hsl(var(--cosmic-void))", "slider-input-border": "var(--slider-input-border)", }, borderRadius: { lg: `var(--radius)`, md: `calc(var(--radius) - 2px)`, sm: "calc(var(--radius) - 4px)", }, borderWidth: { 1.75: "1.75px", 1.5: "1.5px", }, fontFamily: { sans: ["var(--font-sans)", ...fontFamily.sans], mono: ["var(--font-mono)", ...fontFamily.mono], chivo: ["var(--font-chivo)", ...fontFamily.sans], }, boxShadow: { "frozen-ring": "0 0 10px 2px rgba(128, 190, 230, 0.5)", node: "0 0px 15px -3px rgb(0 0 0 / 0.1), 0 0px 6px -4px rgb(0 0 0 / 0.1);", "frosted-ring": "0 0 10px 2px rgba(128, 190, 230, 0.7)", }, backdropBlur: { xs: "2px", }, zIndex: { 60: "60", 70: "70", 80: "80", 90: "90", 100: "100", 999: "999", }, }, }, plugins: [ tailwindcssAnimate, tailwindcssForms({ strategy: "class", // only generate classes }), plugin(function ({ addUtilities }) { addUtilities({ ".scrollbar-hide": { /* IE and Edge */ "-ms-overflow-style": "none", /* Firefox */ "scrollbar-width": "none", /* Safari and Chrome */ "&::-webkit-scrollbar": { display: "none", }, }, ".truncate-multiline": { display: "-webkit-box", "-webkit-line-clamp": "3" /* Change this number to the number of lines you want to show */, "-webkit-box-orient": "vertical", overflow: "hidden", "text-overflow": "ellipsis", }, ".truncate-doubleline": { display: "-webkit-box", "-webkit-line-clamp": "2" /* Change this number to the number of lines you want to show */, "-webkit-box-orient": "vertical", overflow: "hidden", "text-overflow": "ellipsis", }, ".word-break-break-word": { wordBreak: "break-word", }, ".arrow-hide": { "&::-webkit-datatype-spin-button": { "-webkit-appearance": "none", margin: 0, }, "&::-webkit-outer-spin-button": { "-webkit-appearance": "none", margin: 0, }, }, ".password": { "-webkit-text-security": "disc", "font-family": "text-security-disc", }, ".stop": { "-webkit-animation-play-state": "paused", "-moz-animation-play-state": "paused", "animation-play-state": "paused", }, ".custom-scroll": { "&::-webkit-scrollbar": { width: "8px", height: "8px", }, "&::-webkit-scrollbar-track": { backgroundColor: "hsl(var(--muted))", }, "&::-webkit-scrollbar-thumb": { backgroundColor: "hsl(var(--border))", borderRadius: "999px", }, "&::-webkit-scrollbar-thumb:hover": { backgroundColor: "hsl(var(--placeholder-foreground))", }, cursor: "auto", }, ".dark .theme-attribution .react-flow__attribution": { backgroundColor: "rgba(255, 255, 255, 0.2)", padding: "0px 5px", }, ".dark .theme-attribution .react-flow__attribution a": { color: "black", }, ".text-align-last-left": { "text-align-last": "left", }, ".text-align-last-right": { "text-align-last": "right", }, ":focus-visible": { outline: "none !important", outlineOffset: "0px !important", }, ".note-node-markdown": { lineHeight: "1", "& ul li::marker": { color: "black", }, "& ol li::marker": { color: "black", }, "& h1, & h2, & h3, & h4, & h5, & h6, & p, & ul, & ol": { marginBottom: "0.25rem", }, }, }); }), tailwindcssTypography, tailwindcssDottedBackground, plugin(function ({ addUtilities, theme, e }) { const colors = theme("colors"); const generateUtilities = (colors, prefix = "") => { return Object.keys(colors).reduce((acc, colorName) => { const colorValue = colors[colorName]; const className = prefix ? `${prefix}-${e(colorName)}` : e(colorName); if (typeof colorValue === "string") { acc[`.truncate-${className}`] = { position: "relative", overflow: "hidden", "&::after": { content: '""', position: "absolute", inset: "0 0 0 0", background: `linear-gradient(to right, transparent, 75%, ${colorValue})`, }, }; } else if (typeof colorValue === "object") { // Use the DEFAULT value for the base class if it exists if (colorValue.DEFAULT) { acc[`.truncate-${className}`] = { position: "relative", overflow: "hidden", "&::after": { content: '""', position: "absolute", inset: "0 0 0 0", background: `linear-gradient(to right, transparent, ${colorValue.DEFAULT})`, }, }; } // Recursively generate utilities for nested color objects Object.assign(acc, generateUtilities(colorValue, className)); } return acc; }, {}); }; const newUtilities = generateUtilities(colors); addUtilities(newUtilities, ["responsive", "hover"]); }), plugin(({ addVariant }) => { addVariant("group-increment-hover", ":merge(.group-increment):hover &"); addVariant("group-decrement-hover", ":merge(.group-decrement):hover &"); }), ], }; export default config;