fix(style): implement all necessary central color definitions for the Sidebar links and buttons
This commit is contained in:
parent
17ff21ab4f
commit
a64bfa5f20
|
@ -90,7 +90,6 @@ const isUIv2 = useLocalStorage('ui-v2', true)
|
||||||
<style>
|
<style>
|
||||||
html, body {
|
html, body {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -21,16 +21,16 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&:not(.is-raw) {
|
// &:not(.is-raw) {
|
||||||
color: var(--link-color);
|
// color: var(--link-color);
|
||||||
cursor: pointer;
|
// cursor: pointer;
|
||||||
text-decoration: underline;
|
// text-decoration: underline;
|
||||||
|
|
||||||
&:hover,
|
// &:hover,
|
||||||
&.is-hovered {
|
// &.is-hovered {
|
||||||
color: var(--link-hover-color);
|
// color: var(--link-hover-color);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@if $docs {
|
@if $docs {
|
||||||
|
|
|
@ -101,7 +101,18 @@
|
||||||
|
|
||||||
:is(.VPDoc .vp-doc, .funkwhale){
|
:is(.VPDoc .vp-doc, .funkwhale){
|
||||||
|
|
||||||
:is(button, input):focus-visible {
|
// Fallback for Links without explicit color props
|
||||||
|
|
||||||
|
a {
|
||||||
|
color:var(--link-color);
|
||||||
|
&:hover {
|
||||||
|
color:var(--link-hover-color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback for focused elements without explicit focus-outline
|
||||||
|
|
||||||
|
:is(button, input, a):focus-visible {
|
||||||
outline: 3px solid var(--fw-secondary);
|
outline: 3px solid var(--fw-secondary);
|
||||||
outline-offset: 2px;
|
outline-offset: 2px;
|
||||||
}
|
}
|
||||||
|
@ -139,30 +150,49 @@
|
||||||
|
|
||||||
.ghost {
|
.ghost {
|
||||||
color: var(--color);
|
color: var(--color);
|
||||||
|
background-color: transparent;
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
|
|
||||||
&.interactive{
|
&.interactive{
|
||||||
|
&[aria-pressed=true] {
|
||||||
|
color: var(--pressed-color, var(--active-color));
|
||||||
|
background-color: var(--pressed-background-color, var(--active-background-color));
|
||||||
|
border-color: var(--pressed-background-color, var(--active-background-color));
|
||||||
|
}
|
||||||
&:hover {
|
&:hover {
|
||||||
|
background-color: var(--hover-background-color);
|
||||||
border-color: var(--hover-background-color);
|
border-color: var(--hover-background-color);
|
||||||
}
|
}
|
||||||
&:is(:active, .active) {
|
&:active {
|
||||||
border-color: var(--active-background-color);
|
background-color: var(--active-background-color);
|
||||||
&.router-link-exact-active {
|
|
||||||
border-color: var(--exact-active-background-color);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
&[disabled] {
|
&[disabled] {
|
||||||
opacity:.9;
|
color: var(--disabled-color);
|
||||||
|
border-color: var(--disabled-border-color);
|
||||||
|
background-color:var(--disabled-background-color);
|
||||||
|
}
|
||||||
|
// Link
|
||||||
|
&.active {
|
||||||
|
border-color: var(--link-active-border-color);
|
||||||
|
}
|
||||||
|
&.router-link-exact-active {
|
||||||
|
background-color: var(--link-exact-active-background-color, var(--active-background-color));
|
||||||
|
border-color: var(--link-exact-active-border-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.outline {
|
.outline {
|
||||||
color: var(--color);
|
color: var(--color);
|
||||||
|
background-color: transparent;
|
||||||
border: 1px solid var(--border-color);
|
border: 1px solid var(--border-color);
|
||||||
|
|
||||||
&.interactive{
|
&.interactive{
|
||||||
|
&[aria-pressed=true] {
|
||||||
|
color: var(--pressed-color, var(--active-color));
|
||||||
|
background-color: var(--pressed-background-color, var(--active-background-color));
|
||||||
|
border-color: var(--pressed-background-color, var(--active-background-color));
|
||||||
|
}
|
||||||
&:hover{
|
&:hover{
|
||||||
border-color: var(--hover-background-color);
|
border-color: var(--hover-background-color);
|
||||||
}
|
}
|
||||||
|
@ -172,12 +202,22 @@
|
||||||
background-color: var(--exact-active-background-color);
|
background-color: var(--exact-active-background-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
&[disabled] {
|
||||||
|
color: var(--disabled-color);
|
||||||
|
border-color: var(--disabled-border-color);
|
||||||
|
background-color:var(--disabled-background-color);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
:root{
|
:root{
|
||||||
@include light-theme {
|
@include light-theme {
|
||||||
.default, body {
|
--link-color:var(--fw-blue-400);
|
||||||
|
--link-hover-color:var(--fw-blue-500);
|
||||||
|
|
||||||
|
.default {
|
||||||
--color: var(--fw-gray-900);
|
--color: var(--fw-gray-900);
|
||||||
--background-color: var(--fw-beige-100);
|
--background-color: var(--fw-beige-100);
|
||||||
--border-color:var(--fw-gray-300);
|
--border-color:var(--fw-gray-300);
|
||||||
|
@ -202,11 +242,12 @@
|
||||||
--border-color:var(--fw-beige-400);
|
--border-color:var(--fw-beige-400);
|
||||||
}
|
}
|
||||||
|
|
||||||
--link-color:var(--fw-blue-400);
|
--link-active-border-color:var(--fw-beige-400);
|
||||||
--link-hover-color:var(--fw-blue-500);
|
--link-exact-active-background-color:var(--fw-beige-400);
|
||||||
|
--link-exact-active-border-color:transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.secondary, button {
|
.secondary {
|
||||||
--color: var(--fw-gray-700);
|
--color: var(--fw-gray-700);
|
||||||
--background-color: var(--fw-gray-200);
|
--background-color: var(--fw-gray-200);
|
||||||
--border-color:var(--fw-gray-700);
|
--border-color:var(--fw-gray-700);
|
||||||
|
@ -375,6 +416,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@include dark-theme {
|
@include dark-theme {
|
||||||
|
--link-color:var(--fw-gray-300);
|
||||||
|
--link-hover-color:var(--fw-gray-200);
|
||||||
.default, body {
|
.default, body {
|
||||||
--color: var(--fw-beige-100);
|
--color: var(--fw-beige-100);
|
||||||
--background-color: var(--fw-gray-970);
|
--background-color: var(--fw-gray-970);
|
||||||
|
@ -384,12 +427,12 @@
|
||||||
--hover-background-color:var(--fw-gray-950);
|
--hover-background-color:var(--fw-gray-950);
|
||||||
--hover-border-color:var(--fw-beige-400);
|
--hover-border-color:var(--fw-beige-400);
|
||||||
|
|
||||||
--active-color:var(--fw-gray-600);
|
--active-color:var(--fw-gray-200);
|
||||||
--active-background-color:var(--fw-beige-400);
|
--active-background-color:var(--fw-gray-700);
|
||||||
--active-border-color:var(--fw-gray-600);
|
--active-border-color:var(--fw-gray-700);
|
||||||
|
|
||||||
--pressed-color:var(--fw-red-010);
|
--pressed-color:var(--fw-red-010);
|
||||||
--pressed-background-color:var(--fw-gray-900);
|
--pressed-background-color:var(--fw-secondary);
|
||||||
|
|
||||||
--disabled-color:var(--fw-gray-500);
|
--disabled-color:var(--fw-gray-500);
|
||||||
--disabled-background-color:var(--fw-gray-950);
|
--disabled-background-color:var(--fw-gray-950);
|
||||||
|
@ -398,10 +441,13 @@
|
||||||
&.raised{
|
&.raised{
|
||||||
--background-color:var(--fw-gray-900);
|
--background-color:var(--fw-gray-900);
|
||||||
--border-color:var(--fw-gray-600);
|
--border-color:var(--fw-gray-600);
|
||||||
|
--link-color:var(--fw-gray-400);
|
||||||
|
--link-hover-color:var(--fw-gray-200);
|
||||||
}
|
}
|
||||||
|
|
||||||
--link-color:var(--fw-gray-300);
|
--link-active-border-color:var(--fw-gray-700);
|
||||||
--link-hover-color:var(--fw-gray-400)
|
--link-exact-active-background-color:var(--fw-secondary);
|
||||||
|
--link-exact-active-border-color:var(--fw-secondary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.secondary, button {
|
.secondary, button {
|
||||||
|
@ -435,7 +481,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
--link-color:var(--fw-gray-500);
|
--link-color:var(--fw-gray-500);
|
||||||
--link-hover-color:var(--fw-gray-600)
|
--link-hover-color:var(--fw-gray-600);
|
||||||
}
|
}
|
||||||
|
|
||||||
.primary {
|
.primary {
|
||||||
|
|
|
@ -163,7 +163,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.main.pusher,
|
|
||||||
.ui.vertical.segment {
|
.ui.vertical.segment {
|
||||||
color: var(--main-color);
|
color: var(--main-color);
|
||||||
background: var(--main-background);
|
background: var(--main-background);
|
||||||
|
|
|
@ -3,6 +3,7 @@ import { onMounted, nextTick, ref, defineAsyncComponent } from 'vue'
|
||||||
import onKeyboardShortcut from '~/composables/onKeyboardShortcut';
|
import onKeyboardShortcut from '~/composables/onKeyboardShortcut';
|
||||||
import Sidebar from '~/ui/components/Sidebar.vue'
|
import Sidebar from '~/ui/components/Sidebar.vue'
|
||||||
import ShortcutsModal from '~/components/ShortcutsModal.vue'
|
import ShortcutsModal from '~/components/ShortcutsModal.vue'
|
||||||
|
import { color } from '~/composables/colors.ts';
|
||||||
|
|
||||||
// Fake content
|
// Fake content
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
|
@ -17,7 +18,7 @@ onKeyboardShortcut('h', () => isShortcutsModalOpen.value = !isShortcutsModalOpen
|
||||||
<template>
|
<template>
|
||||||
<div class="funkwhale grid">
|
<div class="funkwhale grid">
|
||||||
<Sidebar :openShortcutsModal = "() => isShortcutsModalOpen=true" />
|
<Sidebar :openShortcutsModal = "() => isShortcutsModalOpen=true" />
|
||||||
<main>
|
<main v-bind="color('default solid')">
|
||||||
<RouterView />
|
<RouterView />
|
||||||
</main>
|
</main>
|
||||||
<ShortcutsModal v-model="isShortcutsModalOpen" />
|
<ShortcutsModal v-model="isShortcutsModalOpen" />
|
||||||
|
|
|
@ -111,7 +111,7 @@ Only use for at most one call-to-action on a screen
|
||||||
|
|
||||||
#### Secondary
|
#### Secondary
|
||||||
|
|
||||||
Use for interactive items and colatilv surfaces such as menus and modals
|
Use for interactive items and non-permanent surfaces such as menus and modals
|
||||||
|
|
||||||
<Layout flex>
|
<Layout flex>
|
||||||
<div class="force-dark-theme">
|
<div class="force-dark-theme">
|
||||||
|
@ -474,7 +474,7 @@ For each semantic color, we set a foreground and a background. In addition, we n
|
||||||
- solid (default for buttons)
|
- solid (default for buttons)
|
||||||
> affects text color, border color and background color
|
> affects text color, border color and background color
|
||||||
|
|
||||||
[-> Example](#variant)
|
[-> Example: #variant](#variant)
|
||||||
|
|
||||||
**Variants can optionally be made interactive and/or raised:**
|
**Variants can optionally be made interactive and/or raised:**
|
||||||
|
|
||||||
|
@ -496,7 +496,7 @@ For each semantic color, we set a foreground and a background. In addition, we n
|
||||||
- interactive-raised
|
- interactive-raised
|
||||||
> combine `raised` and `interactive`
|
> combine `raised` and `interactive`
|
||||||
|
|
||||||
[-> Example](#interactive-andor-raised)
|
[-> Example: #interactive-and-or-raised](#interactive-and-or-raised)
|
||||||
|
|
||||||
<style module>
|
<style module>
|
||||||
.swatch {
|
.swatch {
|
||||||
|
|
Loading…
Reference in New Issue