From 687b96cf12941c7ef1708ea6951036a090a23626 Mon Sep 17 00:00:00 2001 From: Alexis <35.alexis.pele@gmail.com> Date: Wed, 16 Apr 2025 19:52:19 +0200 Subject: [PATCH] Moved event and colored element logic to css variables --- assets/_events.css | 280 ++++++++++++++++++ assets/main.css | 96 +----- assets/theme.css | 108 +++++++ components/calendar/event/Details.vue | 7 +- components/calendar/event/Event.vue | 4 +- .../calendar/search/lists/EventCallout.vue | 4 +- components/ui/button/Button.vue | 2 +- tailwind.config.js | 24 +- 8 files changed, 408 insertions(+), 117 deletions(-) create mode 100644 assets/_events.css create mode 100644 assets/theme.css diff --git a/assets/_events.css b/assets/_events.css new file mode 100644 index 0000000..627b6ae --- /dev/null +++ b/assets/_events.css @@ -0,0 +1,280 @@ +:root { + --event-red-foreground: var(--color-slate-900); + --event-red-background: var(--color-red-500); + + --event-orange-foreground: var(--color-slate-900); + --event-orange-background: var(--color-orange-500); + + --event-amber-foreground: var(--color-slate-900); + --event-amber-background: var(--color-amber-500); + + --event-yellow-foreground: var(--color-slate-900); + --event-yellow-background: var(--color-yellow-600); + + --event-lime-foreground: var(--color-slate-900); + --event-lime-background: var(--color-lime-500); + + --event-green-foreground: var(--color-white); + --event-green-background: var(--color-green-600); + + --event-emerald-foreground: var(--color-white); + --event-emerald-background: var(--color-emerald-600); + + --event-teal-foreground: var(--color-white); + --event-teal-background: var(--color-teal-600); + + --event-cyan-foreground: var(--color-white); + --event-cyan-background: var(--color-cyan-600); + + --event-sky-foreground: var(--color-white); + --event-sky-background: var(--color-sky-600); + + --event-blue-foreground: var(--color-white); + --event-blue-background: var(--color-blue-600); + + --event-indigo-foreground: var(--color-white); + --event-indigo-background: var(--color-indigo-600); + + --event-violet-foreground: var(--color-white); + --event-violet-background: var(--color-violet-600); + + --event-purple-foreground: var(--color-white); + --event-purple-background: var(--color-purple-600); + + --event-fuchsia-foreground: var(--color-white); + --event-fuchsia-background: var(--color-fuchsia-700); + + --event-pink-foreground: var(--color-white); + --event-pink-background: var(--color-pink-700); + + --event-rose-foreground: var(--color-white); + --event-rose-background: var(--color-pink-700); + + --event-black-foreground: var(--color-white); + --event-black-background: var(--color-stone-500); + + --event-white-foreground: var(--color-slate-900); + --event-white-background: var(--color-yellow-200); +} + +@theme inline { + --color-event-red-foreground: var(--event-red-foreground); + --color-event-red-background: var(--event-red-background); + + --color-event-orange-foreground: var(--event-orange-foreground); + --color-event-orange-background: var(--event-orange-background); + + --color-event-amber-foreground: var(--event-amber-foreground); + --color-event-amber-background: var(--event-amber-background); + + --color-event-yellow-foreground: var(--event-yellow-foreground); + --color-event-yellow-background: var(--event-yellow-background); + + --color-event-lime-foreground: var(--event-lime-foreground); + --color-event-lime-background: var(--event-lime-background); + + --color-event-green-foreground: var(--event-green-foreground); + --color-event-green-background: var(--event-green-background); + + --color-event-emerald-foreground: var(--event-emerald-foreground); + --color-event-emerald-background: var(--event-emerald-background); + + --color-event-teal-foreground: var(--event-teal-foreground); + --color-event-teal-background: var(--event-teal-background); + + --color-event-cyan-foreground: var(--event-cyan-foreground); + --color-event-cyan-background: var(--event-cyan-background); + + --color-event-sky-foreground: var(--event-sky-foreground); + --color-event-sky-background: var(--event-sky-background); + + --color-event-blue-foreground: var(--event-blue-foreground); + --color-event-blue-background: var(--event-blue-background); + + --color-event-indigo-foreground: var(--event-indigo-foreground); + --color-event-indigo-background: var(--event-indigo-background); + + --color-event-violet-foreground: var(--event-violet-foreground); + --color-event-violet-background: var(--event-violet-background); + + --color-event-purple-foreground: var(--event-purple-foreground); + --color-event-purple-background: var(--event-purple-background); + + --color-event-fuchsia-foreground: var(--event-fuchsia-foreground); + --color-event-fuchsia-background: var(--event-fuchsia-background); + + --color-event-pink-foreground: var(--event-pink-foreground); + --color-event-pink-background: var(--event-pink-background); + + --color-event-rose-foreground: var(--event-rose-foreground); + --color-event-rose-background: var(--event-rose-background); + + --color-event-black-foreground: var(--event-black-foreground); + --color-event-black-background: var(--event-black-background); + + --color-event-white-foreground: var(--event-white-foreground); + --color-event-white-background: var(--event-white-background); +} + +.event-button, +.event-popover, +.event-callout { + --fg-color: var(--color-foreground); + --bg-color: var(--color-background); + + transition-duration: var(--default-transition-duration); + transition-timing-function: var(--default-transition-timing-function); +} + +.event-button { + color: var(--fg-color); + background-color: var(--bg-color); + text-underline-offset: .15rem; + transition-property: background-color, color; +} +.event-button:hover { + text-decoration: underline; + background-color: color-mix(in srgb, var(--bg-color) 70%, var(--color-background)); +} +.event-button.is-hidden { + background-color: transparent; + color: var(--bg-color); + border: 1px dashed var(--bg-color); + transition-property: background-color, color, border-color; +} +.event-button.is-hidden:is(:hover, :focus-visible) { + background-color: color-mix(in srgb, var(--bg-color) 70%, var(--color-background)); + color: var(--fg-color); +} + +.event-popover { + background-color: color-mix(in srgb, var(--bg-color) 10%, var(--color-background)); + border-color: color-mix(in srgb, var(--bg-color) 50%, var(--color-background)); + transition-property: background-color, color; + + hr { + border-color: var(--bg-color); + } +} + +.event-callout { + position: relative; + background-color: color-mix(in srgb, var(--bg-color) 20%, var(--color-background)); + border-top-right-radius: .2rem; + border-bottom-right-radius: .2rem; + transition-property: background-color, color; + + hr { + border-color: var(--bg-color); + } +} +.event-callout::before { + display: block; + content: ''; + position: absolute; + height: 100%; + inset-block: 0; + left: -0.5rem; + width: .5rem; + background-color: color-mix(in srgb, var(--bg-color) 70%, var(--color-background)); + border-top-left-radius: .2rem; + border-bottom-left-radius: .2rem; + transition-property: background-color; + transition-duration: var(--default-transition-duration); + transition-timing-function: var(--default-transition-timing-function); +} +.event-callout:is(:hover, :focus-visible) { + background-color: color-mix(in srgb, var(--bg-color) 30%, var(--color-background)); +} +.event-callout:is(:hover, :focus-visible)::before { + background-color: color-mix(in srgb, var(--bg-color) 80%, var(--color-background)); +} + +.event-callout.is-hidden { + border: 1px dashed var(--bg-color); + background-color: transparent; +} +.event-callout.is-hidden::before { + inset-block: -2px; + height: calc(100% + 3px); +} +.event-callout.is-hidden:is(:hover, :focus-visible) { + background-color: color-mix(in srgb, var(--bg-color) 10%, var(--color-background)); +} + +.element-red { + --fg-color: var(--color-event-red-foreground); + --bg-color: var(--color-event-red-background); +} +.element-orange { + --fg-color: var(--color-event-orange-foreground); + --bg-color: var(--color-event-orange-background); +} +.element-amber { + --fg-color: var(--color-event-amber-foreground); + --bg-color: var(--color-event-amber-background); +} +.element-yellow { + --fg-color: var(--color-event-yellow-foreground); + --bg-color: var(--color-event-yellow-background); +} +.element-lime { + --fg-color: var(--color-event-lime-foreground); + --bg-color: var(--color-event-lime-background); +} +.element-green { + --fg-color: var(--color-event-green-foreground); + --bg-color: var(--color-event-green-background); +} +.element-emerald { + --fg-color: var(--color-event-emerald-foreground); + --bg-color: var(--color-event-emerald-background); +} +.element-teal { + --fg-color: var(--color-event-teal-foreground); + --bg-color: var(--color-event-teal-background); +} +.element-cyan { + --fg-color: var(--color-event-cyan-foreground); + --bg-color: var(--color-event-cyan-background); +} +.element-sky { + --fg-color: var(--color-event-sky-foreground); + --bg-color: var(--color-event-sky-background); +} +.element-blue { + --fg-color: var(--color-event-blue-foreground); + --bg-color: var(--color-event-blue-background); +} +.element-indigo { + --fg-color: var(--color-event-indigo-foreground); + --bg-color: var(--color-event-indigo-background); +} +.element-violet { + --fg-color: var(--color-event-violet-foreground); + --bg-color: var(--color-event-violet-background); +} +.element-purple { + --fg-color: var(--color-event-purple-foreground); + --bg-color: var(--color-event-purple-background); +} +.element-fuchsia { + --fg-color: var(--color-event-fuchsia-foreground); + --bg-color: var(--color-event-fuchsia-background); +} +.element-pink { + --fg-color: var(--color-event-pink-foreground); + --bg-color: var(--color-event-pink-background); +} +.element-rose { + --fg-color: var(--color-event-rose-foreground); + --bg-color: var(--color-event-rose-background); +} +.element-black { + --fg-color: var(--color-event-black-foreground); + --bg-color: var(--color-event-black-background); +} +.element-white { + --fg-color: var(--color-event-white-foreground); + --bg-color: var(--color-event-white-background); +} diff --git a/assets/main.css b/assets/main.css index 05d7f2f..57241fd 100644 --- a/assets/main.css +++ b/assets/main.css @@ -2,6 +2,10 @@ @config '../tailwind.config.js'; +@import "./theme.css" layer(theme); +@import "./_events.css" layer(theme); +@import "./_events.css" layer(utilities); + /* The default border color has changed to `currentcolor` in Tailwind CSS v4, so we've added these compatibility styles to make sure everything still @@ -20,91 +24,13 @@ } } -@layer base { - :root { - --background: 0 0% 100%; - --foreground: 222.2 84% 4.9%; - - --muted: 210 40% 96.1%; - --muted-foreground: 215.4 16.3% 46.9%; - - --popover: 0 0% 100%; - --popover-foreground: 222.2 84% 4.9%; - - --card: 0 0% 100%; - --card-foreground: 222.2 84% 4.9%; - - --border: 214.3 31.8% 91.4%; - --input: 214.3 31.8% 91.4%; - - --primary: 245 58% 51%; - --primary-foreground: 0 0% 100%; - - --secondary: 210 50% 95%; - --secondary-foreground: 222.2 47.4% 11.2%; - - --accent: 210 40% 96.1%; - --accent-foreground: 222.2 47.4% 11.2%; - - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 210 40% 98%; - - --success: 156 72% 67%; - --success-muted: 156 72% 90%; - --success-foreground: 222.2 84% 4.9%; - - --ring: 222.2 84% 4.9%; - - --radius: 0.5rem; - } - - .dark { - --background: 180 0 4.9%; - --foreground: 210 40% 98%; - - --muted: 244 47% 20%; - --muted-foreground: 215 20.2% 65.1%; - - --popover: 180 0 4.9%; - --popover-foreground: 210 40% 98%; - - --card: 180 0 4.9%; - --card-foreground: 210 40% 98%; - - --border: 217 0 10%; - --input: 244 47% 20%; - - --primary: 245 58% 51%; - --primary-foreground: 0 0% 100%; - - --secondary: 244 47% 20%; - --secondary-foreground: 210 40% 98%; - - --accent: 244 47% 20%; - --accent-foreground: 210 40% 98%; - - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 210 40% 98%; - - --success: 142 72% 29%; - --success-muted: 142 72% 10%; - --success-foreground: 210 40% 98%; - - --ring: 212.7 26.8% 83.9%; - } -} - -@layer base { - * { - @apply border-border; - } - body { - @apply bg-background text-foreground; - } +body { + color: var(--color-foreground); + background-color: var(--color-background); } /* Colors */ -.event-red:not(.is-hidden) { +/* .event-red:not(.is-hidden) { @apply text-slate-900 bg-red-500 hover:bg-red-600 focus-visible:bg-red-600 } .event-orange:not(.is-hidden) { @@ -338,9 +264,9 @@ } .event-details-white { --base-color: var(--color-white); -} +} */ -.event-details { +/* .event-details { --bg-color: color-mix(in srgb, var(--base-color), var(--color-white) 80%); --border-color: color-mix(in srgb, var(--base-color), var(--color-white) 50%); background-color: var(--bg-color); @@ -354,7 +280,7 @@ .dark .event-details { --bg-color: color-mix(in srgb, var(--base-color), var(--color-slate-950) 80%); --border-color: color-mix(in srgb, var(--base-color), var(--color-slate-800) 50%); -} +} */ .bgc { display: flex; diff --git a/assets/theme.css b/assets/theme.css new file mode 100644 index 0000000..a96438e --- /dev/null +++ b/assets/theme.css @@ -0,0 +1,108 @@ +:root { + --background: hsl(0 0% 100%); + --foreground: hsl(222.2 84% 4.9%); + + --muted: hsl(210 40% 96.1%); + --muted-foreground: hsl(215.4 16.3% 46.9%); + + --popover: hsl(0 0% 100%); + --popover-foreground: hsl(222.2 84% 4.9%); + + --card: hsl(0 0% 100%); + --card-foreground: hsl(222.2 84% 4.9%); + + --border: hsl(214.3 31.8% 91.4%); + --input: hsl(214.3 31.8% 91.4%); + + --primary: hsl(245 58% 51%); + --primary-foreground: hsl(0 0% 100%); + + --secondary: hsl(210 50% 95%); + --secondary-foreground: hsl(222.2 47.4% 11.2%); + + --accent: hsl(210 40% 96.1%); + --accent-foreground: hsl(222.2 47.4% 11.2%); + + --destructive: hsl(0 84.2% 60.2%); + --destructive-foreground: hsl(210 40% 98%); + + --success: hsl(156 72% 67%); + --success-muted: hsl(156 72% 90%); + --success-foreground: hsl(222.2 84% 4.9%); + + --ring: hsl(222.2 84% 4.9%); + + --radius: 0.5rem; +} + +.dark { + --background: hsl(180 0 4.9%); + --foreground: hsl(210 40% 98%); + + --muted: hsl(244 47% 20%); + --muted-foreground: hsl(215 20.2% 65.1%); + + --popover: hsl(180 0 4.9%); + --popover-foreground: hsl(210 40% 98%); + + --card: hsl(180 0 4.9%); + --card-foreground: hsl(210 40% 98%); + + --border: hsl(217 0 10%); + --input: hsl(244 47% 20%); + + --primary: hsl(245 58% 51%); + --primary-foreground: hsl(0 0% 100%); + + --secondary: hsl(244 47% 20%); + --secondary-foreground: hsl(210 40% 98%); + + --accent: hsl(244 47% 20%); + --accent-foreground: hsl(210 40% 98%); + + --destructive: hsl(0 62.8% 30.6%); + --destructive-foreground: hsl(210 40% 98%); + + --success: hsl(142 72% 29%); + --success-muted: hsl(142 72% 10%); + --success-foreground: hsl(210 40% 98%); + + --ring: hsl(212.7 26.8% 83.9%); + + --radius: 0.5rem; +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + + --color-border: var(--border); + --color-input: var(--input); + + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + + --color-success: var(--success); + --color-success-muted: var(--success-muted); + --color-success-foreground: var(--success-foreground); + + --color-ring: var(--ring); +} diff --git a/components/calendar/event/Details.vue b/components/calendar/event/Details.vue index b0c1b7a..d44207c 100644 --- a/components/calendar/event/Details.vue +++ b/components/calendar/event/Details.vue @@ -62,17 +62,14 @@ function deployDeleteModal() {