| function filterDefault(values) { |
| return Object.fromEntries( |
| Object.entries(values).filter(([key]) => key !== "DEFAULT"), |
| ); |
| } |
|
|
| |
| 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")}, |
| ); |
| }, |
| ], |
| }; |
|
|