From 3c59a39f5b6eb15b368bea1ad74e3222858c35ef Mon Sep 17 00:00:00 2001 From: Volpeon Date: Sun, 27 Jul 2025 13:21:57 +0200 Subject: Add highlighted state to button --- src/objects/_button.scss | 29 +++++++++++++++++++++++++++++ src/objects/_button.vars.scss | 15 +++++++++++++++ tpl/objects/button.pug | 1 + tpl/views/button.pug | 24 ++++++++++++++++++++++++ 4 files changed, 69 insertions(+) diff --git a/src/objects/_button.scss b/src/objects/_button.scss index 8fbec78..c4ecd87 100644 --- a/src/objects/_button.scss +++ b/src/objects/_button.scss @@ -109,6 +109,35 @@ } } + @include bem.is('highlighted') { + &:link, + &:visited, + &:enabled { + &, + &:hover, + &:focus-visible { + border-color: props.get($theme, list.join($key, --highlighted --border-color)...); + } + + box-shadow: + 0 0 0 1px props.get($theme, list.join($key, --highlighted --border-color)...), + props.get(vars.$shadow-x) + props.get(vars.$shadow-y) + props.get(vars.$shadow-blur) + props.get(vars.$shadow-grow) + props.get($theme, list.join($key, --highlighted --shadow-color)...); + + &:focus-visible { + box-shadow: + props.get(vars.$shadow-x) + props.get(vars.$shadow-y) + props.get(vars.$shadow-blur) + props.get(vars.$shadow-grow) + props.get($theme, list.join($key, --shadow-color)...); + } + } + } + @include bem.is('selected') { color: props.get($theme, list.join($key, --selected --disabled --label-color)...); background-color: props.get($theme, list.join($key, --selected --disabled --bg-color)...); diff --git a/src/objects/_button.vars.scss b/src/objects/_button.vars.scss index 7b4670f..cc7b7d5 100644 --- a/src/objects/_button.vars.scss +++ b/src/objects/_button.vars.scss @@ -78,6 +78,11 @@ $default-theme: map.deep-merge(( --outline-color: props.get(core.$theme, --focus, --outline), ), + --highlighted: ( + --border-color: props.get(core.$theme, --focus, --border), + --shadow-color: props.get(core.$theme, --focus, --outline), + ), + --selected: ( --bg-color: props.get(core.$theme, --text), --label-color: props.get(core.$theme, --base, --50), @@ -194,6 +199,11 @@ $default-theme-dark: props.def(--o-button, $default-theme-dark, 'dark'); --outline-color: props.get(core.$transparent-colors, $theme, --300), ), + --highlighted: ( + --border-color: props.get(core.$transparent-colors, $theme, --900), + --shadow-color: props.get(core.$transparent-colors, --black, --200), + ), + --selected: ( --bg-color: props.get(core.$transparent-colors, $theme, --800), --label-color: props.get(core.$transparent-colors, $theme, --text), @@ -295,6 +305,11 @@ $themes-config: ( --outline-color: props.get(core.$theme, --focus, --outline), ), + --highlighted: ( + --border-color: props.get(core.$theme, $key, --900), + --shadow-color: props.get(core.$theme, $key, --200), + ), + --selected: ( --bg-color: props.get(core.$theme, #{$key}-static, --900), --label-color: props.get(core.$theme, #{$key}-static, --900-text), diff --git a/tpl/objects/button.pug b/tpl/objects/button.pug index c356bfe..3b5de2b 100644 --- a/tpl/objects/button.pug +++ b/tpl/objects/button.pug @@ -11,6 +11,7 @@ mixin button 'o-button--badge': attributes.badge, 'o-button--icon': !!attributes.icon && !block, 'is-selected': attributes.selected, + 'is-highlighted': attributes.highlighted, } if (attributes.theme) { classes['o-button--' + attributes.theme] = true diff --git a/tpl/views/button.pug b/tpl/views/button.pug index 2e54458..4b8c59f 100644 --- a/tpl/views/button.pug +++ b/tpl/views/button.pug @@ -71,6 +71,8 @@ mixin view-button .c-box +button= 'Idle' = ' ' + +button(highlighted=true)= 'Highlighted' + = ' ' +button(selected=true)= 'Selected' = ' ' +button(disabled=true)= 'Disabled' @@ -80,6 +82,8 @@ mixin view-button br +button(badge=true)= 'Idle' = ' ' + +button(badge=true highlighted=true)= 'Highlighted' + = ' ' +button(badge=true selected=true)= 'Selected' = ' ' +button(badge=true disabled=true)= 'Disabled' @@ -89,6 +93,8 @@ mixin view-button br +button(quiet=true)= 'Idle' = ' ' + +button(quiet=true highlighted=true)= 'Highlighted' + = ' ' +button(quiet=true selected=true)= 'Selected' = ' ' +button(quiet=true disabled=true)= 'Disabled' @@ -98,6 +104,8 @@ mixin view-button .c-box +button(pill=true)= 'Idle' = ' ' + +button(pill=true highlighted=true)= 'Highlighted' + = ' ' +button(pill=true selected=true)= 'Selected' = ' ' +button(pill=true disabled=true)= 'Disabled' @@ -107,6 +115,8 @@ mixin view-button br +button(pill=true badge=true)= 'Idle' = ' ' + +button(pill=true badge=true highlighted=true)= 'Highlighted' + = ' ' +button(pill=true badge=true selected=true)= 'Selected' = ' ' +button(pill=true badge=true disabled=true)= 'Disabled' @@ -116,6 +126,8 @@ mixin view-button br +button(pill=true quiet=true)= 'Idle' = ' ' + +button(pill=true quiet=true highlighted=true)= 'Highlighted' + = ' ' +button(pill=true quiet=true selected=true)= 'Selected' = ' ' +button(pill=true quiet=true disabled=true)= 'Disabled' @@ -126,6 +138,8 @@ mixin view-button .c-box +button(theme=theme)= 'Idle' = ' ' + +button(theme=theme highlighted=true)= 'Highlighted' + = ' ' +button(theme=theme selected=true)= 'Selected' = ' ' +button(theme=theme disabled=true)= 'Disabled' @@ -135,6 +149,8 @@ mixin view-button br +button(theme=theme badge=true)= 'Idle' = ' ' + +button(theme=theme badge=true highlighted=true)= 'Highlighted' + = ' ' +button(theme=theme badge=true selected=true)= 'Selected' = ' ' +button(theme=theme badge=true disabled=true)= 'Disabled' @@ -144,6 +160,8 @@ mixin view-button br +button(theme=theme quiet=true)= 'Idle' = ' ' + +button(theme=theme quiet=true highlighted=true)= 'Highlighted' + = ' ' +button(theme=theme quiet=true selected=true)= 'Selected' = ' ' +button(theme=theme quiet=true disabled=true)= 'Disabled' @@ -157,6 +175,8 @@ mixin view-button .c-box(style=`background-color: var(--colors--blue-static--${bg});`) +button(theme=theme)= 'Idle' = ' ' + +button(theme=theme highlighted=true)= 'Highlighted' + = ' ' +button(theme=theme selected=true)= 'Selected' = ' ' +button(theme=theme disabled=true)= 'Disabled' @@ -166,6 +186,8 @@ mixin view-button br +button(theme=theme badge=true)= 'Idle' = ' ' + +button(theme=theme badge=true highlighted=true)= 'Highlighted' + = ' ' +button(theme=theme badge=true selected=true)= 'Selected' = ' ' +button(theme=theme badge=true disabled=true)= 'Disabled' @@ -175,6 +197,8 @@ mixin view-button br +button(theme=theme quiet=true)= 'Idle' = ' ' + +button(theme=theme quiet=true highlighted=true)= 'Highlighted' + = ' ' +button(theme=theme quiet=true selected=true)= 'Selected' = ' ' +button(theme=theme quiet=true disabled=true)= 'Disabled' -- cgit v1.2.3-70-g09d2