Spaces:
Running
on
T4
Running
on
T4
| function filterDefault(values) { | |
| return Object.fromEntries( | |
| Object.entries(values).filter(([key]) => key !== "DEFAULT"), | |
| ); | |
| } | |
| /** @type {import('tailwindcss').Config} */ | |
| export default { | |
| darkMode: ["selector"], | |
| content: [ | |
| "./**/*.py", | |
| "./.venv/lib/python3.12/site-packages/shad4fast/**/*.{py,js}", | |
| ], | |
| theme: { | |
| container: { | |
| center: true, | |
| padding: "2rem", | |
| screens: { | |
| "2xl": "1400px", | |
| }, | |
| }, | |
| extend: { | |
| animation: { | |
| "accordion-down": "accordion-down 0.2s ease-out", | |
| "accordion-up": "accordion-up 0.2s ease-out", | |
| }, | |
| animationDelay: ({theme}) => ({ | |
| ...theme("transitionDelay"), | |
| }), | |
| animationDuration: ({theme}) => ({ | |
| 0: "0ms", | |
| ...theme("transitionDuration"), | |
| }), | |
| animationTimingFunction: ({theme}) => ({ | |
| ...theme("transitionTimingFunction"), | |
| }), | |
| animationFillMode: { | |
| none: "none", | |
| forwards: "forwards", | |
| backwards: "backwards", | |
| both: "both", | |
| }, | |
| animationDirection: { | |
| normal: "normal", | |
| reverse: "reverse", | |
| alternate: "alternate", | |
| "alternate-reverse": "alternate-reverse", | |
| }, | |
| animationOpacity: ({theme}) => ({ | |
| DEFAULT: 0, | |
| ...theme("opacity"), | |
| }), | |
| animationTranslate: ({theme}) => ({ | |
| DEFAULT: "100%", | |
| ...theme("translate"), | |
| }), | |
| animationScale: ({theme}) => ({ | |
| DEFAULT: 0, | |
| ...theme("scale"), | |
| }), | |
| animationRotate: ({theme}) => ({ | |
| DEFAULT: "30deg", | |
| ...theme("rotate"), | |
| }), | |
| animationRepeat: { | |
| 0: "0", | |
| 1: "1", | |
| infinite: "infinite", | |
| }, | |
| keyframes: { | |
| enter: { | |
| from: { | |
| opacity: "var(--tw-enter-opacity, 1)", | |
| transform: | |
| "translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))", | |
| }, | |
| }, | |
| exit: { | |
| to: { | |
| opacity: "var(--tw-exit-opacity, 1)", | |
| transform: | |
| "translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))", | |
| }, | |
| }, | |
| }, | |
| colors: { | |
| border: "hsl(var(--border))", | |
| input: "hsl(var(--input))", | |
| ring: "hsl(var(--ring))", | |
| background: "hsl(var(--background))", | |
| foreground: "hsl(var(--foreground))", | |
| primary: { | |
| DEFAULT: "hsl(var(--primary))", | |
| foreground: "hsl(var(--primary-foreground))", | |
| }, | |
| secondary: { | |
| DEFAULT: "hsl(var(--secondary))", | |
| foreground: "hsl(var(--secondary-foreground))", | |
| }, | |
| 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))", | |
| }, | |
| popover: { | |
| DEFAULT: "hsl(var(--popover))", | |
| foreground: "hsl(var(--popover-foreground))", | |
| }, | |
| card: { | |
| DEFAULT: "hsl(var(--card))", | |
| foreground: "hsl(var(--card-foreground))", | |
| }, | |
| }, | |
| borderRadius: { | |
| lg: `var(--radius)`, | |
| md: `calc(var(--radius) - 2px)`, | |
| sm: "calc(var(--radius) - 4px)", | |
| }, | |
| }, | |
| }, | |
| plugins: [ | |
| function ({addUtilities, matchUtilities, theme}) { | |
| addUtilities({ | |
| "@keyframes enter": theme("keyframes.enter"), | |
| "@keyframes exit": theme("keyframes.exit"), | |
| ".animate-in": { | |
| animationName: "enter", | |
| animationDuration: theme("animationDuration.DEFAULT"), | |
| "--tw-enter-opacity": "initial", | |
| "--tw-enter-scale": "initial", | |
| "--tw-enter-rotate": "initial", | |
| "--tw-enter-translate-x": "initial", | |
| "--tw-enter-translate-y": "initial", | |
| }, | |
| ".animate-out": { | |
| animationName: "exit", | |
| animationDuration: theme("animationDuration.DEFAULT"), | |
| "--tw-exit-opacity": "initial", | |
| "--tw-exit-scale": "initial", | |
| "--tw-exit-rotate": "initial", | |
| "--tw-exit-translate-x": "initial", | |
| "--tw-exit-translate-y": "initial", | |
| }, | |
| }); | |
| matchUtilities( | |
| { | |
| "fade-in": (value) => ({"--tw-enter-opacity": value}), | |
| "fade-out": (value) => ({"--tw-exit-opacity": value}), | |
| }, | |
| {values: theme("animationOpacity")}, | |
| ); | |
| matchUtilities( | |
| { | |
| "zoom-in": (value) => ({"--tw-enter-scale": value}), | |
| "zoom-out": (value) => ({"--tw-exit-scale": value}), | |
| }, | |
| {values: theme("animationScale")}, | |
| ); | |
| matchUtilities( | |
| { | |
| "spin-in": (value) => ({"--tw-enter-rotate": value}), | |
| "spin-out": (value) => ({"--tw-exit-rotate": value}), | |
| }, | |
| {values: theme("animationRotate")}, | |
| ); | |
| matchUtilities( | |
| { | |
| "slide-in-from-top": (value) => ({ | |
| "--tw-enter-translate-y": `-${value}`, | |
| }), | |
| "slide-in-from-bottom": (value) => ({ | |
| "--tw-enter-translate-y": value, | |
| }), | |
| "slide-in-from-left": (value) => ({ | |
| "--tw-enter-translate-x": `-${value}`, | |
| }), | |
| "slide-in-from-right": (value) => ({ | |
| "--tw-enter-translate-x": value, | |
| }), | |
| "slide-out-to-top": (value) => ({ | |
| "--tw-exit-translate-y": `-${value}`, | |
| }), | |
| "slide-out-to-bottom": (value) => ({ | |
| "--tw-exit-translate-y": value, | |
| }), | |
| "slide-out-to-left": (value) => ({ | |
| "--tw-exit-translate-x": `-${value}`, | |
| }), | |
| "slide-out-to-right": (value) => ({ | |
| "--tw-exit-translate-x": value, | |
| }), | |
| }, | |
| {values: theme("animationTranslate")}, | |
| ); | |
| matchUtilities( | |
| {duration: (value) => ({animationDuration: value})}, | |
| {values: filterDefault(theme("animationDuration"))}, | |
| ); | |
| matchUtilities( | |
| {delay: (value) => ({animationDelay: value})}, | |
| {values: theme("animationDelay")}, | |
| ); | |
| matchUtilities( | |
| {ease: (value) => ({animationTimingFunction: value})}, | |
| {values: filterDefault(theme("animationTimingFunction"))}, | |
| ); | |
| addUtilities({ | |
| ".running": {animationPlayState: "running"}, | |
| ".paused": {animationPlayState: "paused"}, | |
| }); | |
| matchUtilities( | |
| {"fill-mode": (value) => ({animationFillMode: value})}, | |
| {values: theme("animationFillMode")}, | |
| ); | |
| matchUtilities( | |
| {direction: (value) => ({animationDirection: value})}, | |
| {values: theme("animationDirection")}, | |
| ); | |
| matchUtilities( | |
| {repeat: (value) => ({animationIterationCount: value})}, | |
| {values: theme("animationRepeat")}, | |
| ); | |
| }, | |
| ], | |
| }; | |