From 5c878876d3bdd2c7cd094871fa0644f3310bcec8 Mon Sep 17 00:00:00 2001 From: Volpeon Date: Wed, 23 Jul 2025 08:34:23 +0200 Subject: Commit merge of button and badge into action-button (and rename it to button) --- src/objects/_action-button.scss | 256 ------------------------- src/objects/_action-button.vars.scss | 359 ----------------------------------- src/objects/_badge.scss | 144 -------------- src/objects/_badge.vars.scss | 161 ---------------- src/objects/_button.scss | 226 +++++++++++++++------- src/objects/_button.vars.scss | 353 ++++++++++++++++++++++++++-------- 6 files changed, 434 insertions(+), 1065 deletions(-) delete mode 100644 src/objects/_action-button.scss delete mode 100644 src/objects/_action-button.vars.scss delete mode 100644 src/objects/_badge.scss delete mode 100644 src/objects/_badge.vars.scss (limited to 'src/objects') diff --git a/src/objects/_action-button.scss b/src/objects/_action-button.scss deleted file mode 100644 index c997679..0000000 --- a/src/objects/_action-button.scss +++ /dev/null @@ -1,256 +0,0 @@ -@use 'sass:list'; -@use 'sass:map'; -@use 'sass:meta'; -@use 'sass:string'; -@use 'iro-sass/src/bem'; -@use 'iro-sass/src/props'; -@use '../props' as *; - -@forward 'action-button.vars'; -@use 'action-button.vars' as vars; - -@mixin -apply-theme($theme, $key: ()) { - color: props.get($theme, list.join($key, --disabled --label-color)...); - background-color: props.get($theme, list.join($key, --disabled --bg-color)...); - border-color: props.get($theme, list.join($key, --disabled --border-color)...); - - &::after { - outline-color: props.get($theme, list.join($key, --key-focus --border-color)...); - box-shadow: - 0 - 0 - 0 - calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) - props.get($theme, list.join($key, --key-focus --outline-color)...); - } - - &:link, - &:visited, - &:enabled { - color: props.get($theme, list.join($key, --label-color)...); - background-color: props.get($theme, list.join($key, --bg-color)...); - border-color: props.get($theme, list.join($key, --border-color)...); - 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)...); - - &:hover, - &:focus-visible { - color: props.get($theme, list.join($key, --hover --label-color)...); - background-color: props.get($theme, list.join($key, --hover --bg-color)...); - border-color: props.get($theme, list.join($key, --hover --border-color)...); - } - - &:active { - color: props.get($theme, list.join($key, --active --label-color)...); - background-color: props.get($theme, list.join($key, --active --bg-color)...); - border-color: props.get($theme, list.join($key, --active --border-color)...); - box-shadow: none; - } - } - - @include bem.modifier('static') { - color: props.get($theme, list.join($key, --static --label-color)...); - background-color: props.get($theme, list.join($key, --static --bg-color)...); - border-color: props.get($theme, list.join($key, --static --border-color)...); - box-shadow: none; - - &:link, - &:visited, - &:enabled { - color: props.get($theme, list.join($key, --static --label-color)...); - background-color: props.get($theme, list.join($key, --static --bg-color)...); - border-color: props.get($theme, list.join($key, --static --border-color)...); - box-shadow: none; - - &:hover, - &:focus-visible { - color: props.get($theme, list.join($key, --static --hover --label-color)...); - background-color: props.get($theme, list.join($key, --static --hover --bg-color)...); - border-color: props.get($theme, list.join($key, --static --hover --border-color)...); - } - - &:active { - color: props.get($theme, list.join($key, --static --active --label-color)...); - background-color: props.get($theme, list.join($key, --static --active --bg-color)...); - border-color: props.get($theme, list.join($key, --static --active --border-color)...); - } - } - } - - @include bem.modifier('quiet') { - color: props.get($theme, list.join($key, --quiet --disabled --label-color)...); - background-color: transparent; - border-color: transparent; - - &:link, - &:visited, - &:enabled { - color: props.get($theme, list.join($key, --quiet --label-color)...); - background-color: transparent; - border-color: transparent; - box-shadow: none; - - &:hover, - &:focus-visible { - color: props.get($theme, list.join($key, --quiet --hover --label-color)...); - background-color: props.get($theme, list.join($key, --quiet --hover --bg-color)...); - border-color: transparent; - } - - &:active { - color: props.get($theme, list.join($key, --quiet --active --label-color)...); - background-color: props.get($theme, list.join($key, --quiet --active --bg-color)...); - border-color: transparent; - } - } - } - - @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)...); - border-color: props.get($theme, list.join($key, --selected --disabled --border-color)...); - - @include bem.modifier('static') { - color: props.get($theme, list.join($key, --selected --label-color)...); - background-color: props.get($theme, list.join($key, --selected --bg-color)...); - border-color: props.get($theme, list.join($key, --selected --border-color)...); - } - - &:link, - &:visited, - &:enabled { - color: props.get($theme, list.join($key, --selected --label-color)...); - background-color: props.get($theme, list.join($key, --selected --bg-color)...); - border-color: props.get($theme, list.join($key, --selected --border-color)...); - - &:hover, - &:focus-visible { - color: props.get($theme, list.join($key, --selected --hover --label-color)...); - background-color: props.get($theme, list.join($key, --selected --hover --bg-color)...); - border-color: props.get($theme, list.join($key, --selected --hover --border-color)...); - } - - &:active { - color: props.get($theme, list.join($key, --selected --active --label-color)...); - background-color: props.get($theme, list.join($key, --selected --active --bg-color)...); - border-color: props.get($theme, list.join($key, --selected --active --border-color)...); - } - } - } -} - -@mixin styles { - @include materialize-at-root(meta.module-variables('vars')); - - @include bem.object('action-button') { - position: relative; - display: inline-block; - padding-block: props.get(vars.$pad-b); - padding-inline: props.get(vars.$pad-i); - line-height: props.get(vars.$line-height); - text-align: center; - text-decoration: none; - text-overflow: ellipsis; - white-space: nowrap; - border: props.get(vars.$border-width) solid transparent; - border-radius: props.get(vars.$rounding); - - &::after { - position: absolute; - inset: calc(-1 * props.get(vars.$border-width) - props.get(vars.$key-focus--border-offset)); - z-index: 1; - display: none; - pointer-events: none; - content: ''; - border-radius: calc(props.get(vars.$rounding) + props.get(vars.$key-focus--border-offset)); - outline: transparent solid props.get(vars.$key-focus--border-width); - } - - &:link, - &:visited, - &:enabled { - &:focus-visible { - &::after { - display: block; - } - } - } - - @include bem.elem('label') { - margin-inline: props.get(vars.$pad-i-label); - } - - @include -apply-theme(vars.$default-theme); - - @each $theme in map.keys(props.get(vars.$themes)) { - @include bem.modifier(string.slice($theme, 3)) { - @include -apply-theme(vars.$themes, $theme); - } - } - - @include bem.modifier('pill') { - padding-inline: props.get(vars.$pad-i-pill); - border-radius: 100em; - - &::after { - border-radius: 100em; - } - } - - @include bem.modifier('icon') { - inline-size: calc(1em * props.get(vars.$line-height) + 2 * props.get(vars.$pad-b)); - padding-inline: 0; - } - - @each $mod, $pad-i, $pad-i-label, $pad-i-pill, $pad-b, $font-size in vars.$fixed-sizes { - @include bem.modifier($mod) { - padding-block: props.get($pad-b); - padding-inline: props.get($pad-i); - font-size: props.get($font-size); - - @include bem.elem('label') { - margin-inline: props.get($pad-i-label); - } - - @include bem.modifier('pill') { - padding-inline: props.get($pad-i-pill); - } - - @include bem.modifier('icon') { - inline-size: calc(1em * props.get(vars.$line-height) + 2 * props.get($pad-b)); - padding-inline: 0; - } - } - } - - @include bem.modifier('align-block') { - margin-inline: calc(-1 * props.get(vars.$pad-i) - props.get(vars.$border-width)); - - @include bem.modifier('pill') { - margin-inline: calc(-1 * props.get(vars.$pad-i-pill) - props.get(vars.$border-width)); - } - - @include bem.modifier('icon') { - margin-inline: calc(-1 * props.get(vars.$pad-b) - props.get(vars.$border-width) - .5em * (props.get(vars.$line-height) - 1)); - } - - @each $mod, $pad-i, $pad-i-label, $pad-i-pill, $pad-b, $font-size in vars.$fixed-sizes { - @include bem.modifier($mod) { - margin-inline: calc(-1 * props.get($pad-i) - props.get(vars.$border-width)); - - @include bem.modifier('pill') { - margin-inline: calc(-1 * props.get($pad-i-pill) - props.get(vars.$border-width)); - } - - @include bem.modifier('icon') { - margin-inline: calc(-1 * props.get($pad-b) - props.get(vars.$border-width) - .5em * (props.get(vars.$line-height) - 1)); - } - } - } - } - } -} diff --git a/src/objects/_action-button.vars.scss b/src/objects/_action-button.vars.scss deleted file mode 100644 index 6693b61..0000000 --- a/src/objects/_action-button.vars.scss +++ /dev/null @@ -1,359 +0,0 @@ -@use 'sass:map'; -@use 'sass:string'; -@use 'iro-sass/src/props'; -@use '../core.vars' as core; - -$line-height: props.def(--o-action-button--line-height, 1.4) !default; -$border-width: props.def(--o-action-button--border-width, props.get(core.$border-width--thin)) !default; -$rounding: props.def(--o-action-button--rounding, props.get(core.$rounding--sm)) !default; - -$pad-i--sm: props.def(--o-action-button--sm--pad-i, props.get(core.$size--75)) !default; -$pad-i-label--sm: props.def(--o-action-button--sm--pad-i-label, props.get(core.$size--25)) !default; -$pad-i-pill--sm: props.def(--o-action-button--sm--pad-i-pill, props.get(core.$size--115)) !default; -$pad-b--sm: props.def(--o-action-button--sm--pad-b, props.get(core.$size--40)) !default; -$font-size--sm: props.def(--o-action-button--sm--font-size, props.get(core.$font-size--75)) !default; - -$pad-i: props.def(--o-action-button--pad-i, props.get(core.$size--115)) !default; -$pad-i-label: props.def(--o-action-button--pad-i-label, props.get(core.$size--40)) !default; -$pad-i-pill: props.def(--o-action-button--pad-i-pill, props.get(core.$size--150)) !default; -$pad-b: props.def(--o-action-button--pad-b, props.get(core.$size--85)) !default; -$font-size: props.def(--o-action-button--font-size, props.get(core.$font-size--100)) !default; - -$pad-i--lg: props.def(--o-action-button--lg--pad-i, props.get(core.$size--160)) !default; -$pad-i-label--lg: props.def(--o-action-button--lg--pad-i-label, props.get(core.$size--65)) !default; -$pad-i-pill--lg: props.def(--o-action-button--lg--pad-i-pill, props.get(core.$size--175)) !default; -$pad-b--lg: props.def(--o-action-button--lg--pad-b, props.get(core.$size--115)) !default; -$font-size--lg: props.def(--o-action-button--lg--font-size, props.get(core.$font-size--150)) !default; - -$pad-i--xl: props.def(--o-action-button--xl--pad-i, props.get(core.$size--200)) !default; -$pad-i-label--xl: props.def(--o-action-button--xl--pad-i-label, props.get(core.$size--85)) !default; -$pad-i-pill--xl: props.def(--o-action-button--xl--pad-i-pill, props.get(core.$size--225)) !default; -$pad-b--xl: props.def(--o-action-button--xl--pad-b, props.get(core.$size--150)) !default; -$font-size--xl: props.def(--o-action-button--xl--font-size, props.get(core.$font-size--200)) !default; - -$shadow-x: props.def(--o-action-button--shadow-x, props.get(core.$shadow--l1--x)) !default; -$shadow-y: props.def(--o-action-button--shadow-y, props.get(core.$shadow--l1--y)) !default; -$shadow-blur: props.def(--o-action-button--shadow-blur, props.get(core.$shadow--l1--blur)) !default; -$shadow-grow: props.def(--o-action-button--shadow-grow, props.get(core.$shadow--l1--grow)) !default; - -$key-focus--border-width: props.def(--o-action-button--key-focus--border-width, props.get(core.$key-focus--border-width)) !default; -$key-focus--border-offset: props.def(--o-action-button--key-focus--border-offset, props.get(core.$key-focus--border-offset)) !default; -$key-focus--outline-width: props.def(--o-action-button--key-focus--outline-width, props.get(core.$key-focus--outline-width)) !default; - -$fixed-sizes: ( - 'sm' $pad-i--sm $pad-i-label--sm $pad-i-pill--sm $pad-b--sm $font-size--sm, - 'lg' $pad-i--lg $pad-i-label--lg $pad-i-pill--lg $pad-b--lg $font-size--lg, - 'xl' $pad-i--xl $pad-i-label--xl $pad-i-pill--xl $pad-b--xl $font-size--xl, -) !default; - -$themes: props.def(--o-action-button, (), 'color'); - -$default-theme-override: () !default; -$default-theme: map.deep-merge(( - --bg-color: props.get(core.$theme, --bg-l2), - --label-color: props.get(core.$theme, --text), - --border-color: props.get(core.$theme, --box, --border) props.get(core.$theme, --box, --border) props.get(core.$theme, --box, --border-strong), - --shadow-color: props.get(core.$theme, --shadow), - - --hover: ( - --bg-color: props.get(core.$theme, --border-mute), - --label-color: props.get(core.$theme, --heading), - --border-color: props.get(core.$theme, --border-strong), - ), - - --active: ( - --bg-color: props.get(core.$theme, --border), - --label-color: props.get(core.$theme, --heading), - --border-color: props.get(core.$theme, --text-mute-more), - ), - - --disabled: ( - --bg-color: transparent, - --label-color: props.get(core.$theme, --border-strong), - --border-color: props.get(core.$theme, --border), - ), - - --key-focus: ( - --border-color: props.get(core.$theme, --focus, --border), - --outline-color: props.get(core.$theme, --focus, --outline), - ), - - --selected: ( - --bg-color: props.get(core.$theme, --text), - --label-color: props.get(core.$theme, --base, --50), - --border-color: props.get(core.$theme, --text) props.get(core.$theme, --text) props.get(core.$theme, --heading), - - --hover: ( - --bg-color: props.get(core.$theme, --heading), - --label-color: props.get(core.$theme, --base, --50), - --border-color: props.get(core.$theme, --heading), - ), - - --active: ( - --bg-color: props.get(core.$theme, --heading), - --label-color: props.get(core.$theme, --base, --50), - --border-color: props.get(core.$theme, --heading), - ), - - --disabled: ( - --bg-color: props.get(core.$theme, --border-mute), - --label-color: props.get(core.$theme, --border-strong), - --border-color: props.get(core.$theme, --border-mute), - ), - ), - - --static: ( - --bg-color: props.get(core.$theme, --border-mute), - --label-color: props.get(core.$theme, --heading), - --border-color: props.get(core.$theme, --border-mute), - - --hover: ( - --bg-color: props.get(core.$theme, --border), - --label-color: props.get(core.$theme, --heading), - --border-color: props.get(core.$theme, --border), - ), - - --active: ( - --bg-color: props.get(core.$theme, --border-strong), - --label-color: props.get(core.$theme, --heading), - --border-color: props.get(core.$theme, --border-strong), - ), - ), - - --quiet: ( - --label-color: props.get(core.$theme, --text), - - --hover: ( - --bg-color: props.get(core.$theme, --border-mute), - --label-color: props.get(core.$theme, --heading), - ), - - --active: ( - --bg-color: props.get(core.$theme, --border), - --label-color: props.get(core.$theme, --heading), - ), - - --disabled: ( - --label-color: props.get(core.$theme, --border-strong), - ), - ), -), $default-theme-override) !default; -$default-theme: props.def(--o-action-button, $default-theme, 'color'); - -$default-theme-dark-override: () !default; -$default-theme-dark: map.deep-merge(( - --bg-color: props.get(core.$theme, --border-mute), - --border-color: props.get(core.$theme, --border-mute), - - --hover: ( - --bg-color: props.get(core.$theme, --border), - --border-color: props.get(core.$theme, --border), - ), - - --active: ( - --bg-color: props.get(core.$theme, --border-strong), - --border-color: props.get(core.$theme, --border-strong), - ), - - --selected: ( - --border-color: props.get(core.$theme, --text), - ), -), $default-theme-override) !default; -$default-theme-dark: props.def(--o-action-button, $default-theme-dark, 'dark'); - -@each $theme in map.keys(props.get(core.$transparent-colors)) { - $button-theme: --static-#{string.slice($theme, 3)}; - - $themes: props.merge($themes, ( - $button-theme: ( - --bg-color: props.get(core.$transparent-colors, $theme, --200), - --label-color: props.get(core.$transparent-colors, $theme, --900), - --border-color: props.get(core.$transparent-colors, $theme, --300) props.get(core.$transparent-colors, $theme, --300) props.get(core.$transparent-colors, $theme, --400), - --shadow-color: props.get(core.$transparent-colors, --black, --200), - - --hover: ( - --bg-color: props.get(core.$transparent-colors, $theme, --300), - --label-color: props.get(core.$transparent-colors, $theme, --900), - --border-color: props.get(core.$transparent-colors, $theme, --400), - ), - - --active: ( - --bg-color: props.get(core.$transparent-colors, $theme, --400), - --label-color: props.get(core.$transparent-colors, $theme, --900), - --border-color: props.get(core.$transparent-colors, $theme, --500), - ), - - --disabled: ( - --bg-color: props.get(core.$transparent-colors, $theme, --100), - --label-color: props.get(core.$transparent-colors, $theme, --500), - --border-color: props.get(core.$transparent-colors, $theme, --300), - ), - - --key-focus: ( - --border-color: props.get(core.$transparent-colors, $theme, --900), - --outline-color: props.get(core.$transparent-colors, $theme, --300), - ), - - --selected: ( - --bg-color: props.get(core.$transparent-colors, $theme, --800), - --label-color: props.get(core.$transparent-colors, $theme, --text), - --border-color: props.get(core.$transparent-colors, $theme, --100) props.get(core.$transparent-colors, $theme, --100) props.get(core.$transparent-colors, $theme, --200), - - --hover: ( - --bg-color: props.get(core.$transparent-colors, $theme, --900), - --label-color: props.get(core.$transparent-colors, $theme, --text), - --border-color: props.get(core.$transparent-colors, $theme, --100), - ), - - --active: ( - --bg-color: props.get(core.$transparent-colors, $theme, --900), - --label-color: props.get(core.$transparent-colors, $theme, --text), - --border-color: props.get(core.$transparent-colors, $theme, --100), - ), - - --disabled: ( - --bg-color: props.get(core.$transparent-colors, $theme, --200), - --label-color: props.get(core.$transparent-colors, $theme, --500), - --border-color: props.get(core.$transparent-colors, $theme, --100), - ), - ), - - --static: ( - --bg-color: props.get(core.$transparent-colors, $theme, --200), - --label-color: props.get(core.$transparent-colors, $theme, --900), - --border-color: transparent, - - --hover: ( - --bg-color: props.get(core.$transparent-colors, $theme, --300), - --label-color: props.get(core.$transparent-colors, $theme, --900), - --border-color: transparent, - ), - - --active: ( - --bg-color: props.get(core.$transparent-colors, $theme, --400), - --label-color: props.get(core.$transparent-colors, $theme, --900), - --border-color: transparent, - ), - ), - - --quiet: ( - --label-color: props.get(core.$transparent-colors, $theme, --900), - - --hover: ( - --bg-color: props.get(core.$transparent-colors, $theme, --200), - --label-color: props.get(core.$transparent-colors, $theme, --900), - ), - - --active: ( - --bg-color: props.get(core.$transparent-colors, $theme, --300), - --label-color: props.get(core.$transparent-colors, $theme, --900), - ), - - --disabled: ( - --label-color: props.get(core.$transparent-colors, $theme, --500), - ), - ), - ) - )); -} - -$themes-config: ( - accent: --accent, - positive: --positive, - negative: --negative, - warning: --warning, -) !default; - -@each $theme, $key in $themes-config { - $themes: props.merge($themes, ( - --#{$theme}: ( - --bg-color: props.get(core.$theme, $key, --200), - --label-color: props.get(core.$theme, $key, --1100), - --border-color: props.get(core.$theme, $key, --500) props.get(core.$theme, $key, --500) props.get(core.$theme, $key, --600), - --shadow-color: props.get(core.$theme, $key, --200), - - --hover: ( - --bg-color: props.get(core.$theme, $key, --300), - --label-color: props.get(core.$theme, $key, --1200), - --border-color: props.get(core.$theme, $key, --600), - ), - - --active: ( - --bg-color: props.get(core.$theme, $key, --400), - --label-color: props.get(core.$theme, $key, --1300), - --border-color: props.get(core.$theme, $key, --800), - ), - - --disabled: ( - --bg-color: props.get(core.$theme, --bg-l1), - --label-color: props.get(core.$theme, --border-strong), - --border-color: props.get(core.$theme, --border), - ), - - --key-focus: ( - --border-color: props.get(core.$theme, --focus, --border), - --outline-color: props.get(core.$theme, --focus, --outline), - ), - - --selected: ( - --bg-color: props.get(core.$theme, #{$key}-static, --900), - --label-color: props.get(core.$theme, #{$key}-static, --900-text), - --border-color: props.get(core.$theme, #{$key}-static, --900) props.get(core.$theme, #{$key}-static, --900) props.get(core.$theme, #{$key}-static, --1000), - - --hover: ( - --bg-color: props.get(core.$theme, #{$key}-static, --1000), - --label-color: props.get(core.$theme, #{$key}-static, --1000-text), - --border-color: props.get(core.$theme, #{$key}-static, --1000), - ), - - --active: ( - --bg-color: props.get(core.$theme, #{$key}-static, --1100), - --label-color: props.get(core.$theme, #{$key}-static, --1100-text), - --border-color: props.get(core.$theme, #{$key}-static, --1100), - ), - - --disabled: ( - --bg-color: props.get(core.$theme, --border-mute), - --label-color: props.get(core.$theme, --border-strong), - --border-color: props.get(core.$theme, --border-mute), - ), - ), - - --static: ( - --bg-color: props.get(core.$theme, $key, --100), - --label-color: props.get(core.$theme, $key, --1100), - --border-color: props.get(core.$theme, $key, --300), - - --hover: ( - --bg-color: props.get(core.$theme, $key, --200), - --label-color: props.get(core.$theme, $key, --1200), - --border-color: props.get(core.$theme, $key, --400), - ), - - --active: ( - --bg-color: props.get(core.$theme, $key, --300), - --label-color: props.get(core.$theme, $key, --1300), - --border-color: props.get(core.$theme, $key, --500), - ), - ), - - --quiet: ( - --label-color: props.get(core.$theme, $key, --1100), - - --hover: ( - --bg-color: props.get(core.$theme, $key, --200), - --label-color: props.get(core.$theme, $key, --1200), - ), - - --active: ( - --bg-color: props.get(core.$theme, $key, --300), - --label-color: props.get(core.$theme, $key, --1300), - ), - - --disabled: ( - --label-color: props.get(core.$theme, --border-strong), - ), - ), - ) - )); -} diff --git a/src/objects/_badge.scss b/src/objects/_badge.scss deleted file mode 100644 index 9f3e307..0000000 --- a/src/objects/_badge.scss +++ /dev/null @@ -1,144 +0,0 @@ -@use 'sass:list'; -@use 'sass:map'; -@use 'sass:meta'; -@use 'sass:string'; -@use 'iro-sass/src/bem'; -@use 'iro-sass/src/props'; -@use '../props' as *; -@use '../core.vars' as core; - -@forward 'badge.vars'; -@use 'badge.vars' as vars; - -@mixin -apply-theme($theme, $key: (), $static: false) { - color: props.get($theme, list.join($key, --label)...); - background-color: props.get($theme, list.join($key, --bg)...); - - &:link, - &:visited, - &:enabled { - &:hover, - &:focus-visible { - color: props.get($theme, list.join($key, --hover --label)...); - background-color: props.get($theme, list.join($key, --hover --bg)...); - } - - &:active { - color: props.get($theme, list.join($key, --active --label)...); - background-color: props.get($theme, list.join($key, --active --bg)...); - } - } - - @include bem.modifier('quiet') { - color: props.get($theme, list.join($key, --quiet --label)...); - background-color: props.get($theme, list.join($key, --quiet --bg)...); - - &:link, - &:visited, - &:enabled { - &:hover, - &:focus-visible { - color: props.get($theme, list.join($key, --quiet --hover --label)...); - background-color: props.get($theme, list.join($key, --quiet --hover --bg)...); - } - - &:active { - color: props.get($theme, list.join($key, --quiet --active --label)...); - background-color: props.get($theme, list.join($key, --quiet --active --bg)...); - } - } - } - - @if $static { - &::after { - outline-color: props.get($theme, list.join($key, --key-focus --border)...); - box-shadow: - 0 - 0 - 0 - calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) - props.get($theme, list.join($key, --key-focus --outline)...); - } - } -} - -@mixin styles { - @include materialize-at-root(meta.module-variables('vars')); - - @include bem.object('badge') { - position: relative; - display: inline-block; - padding-block: props.get(vars.$pad-b); - padding-inline: props.get(vars.$pad-i); - font-size: props.get(vars.$font-size); - line-height: props.get(core.$font--standard--line-height); - text-align: center; - text-decoration: none; - background-clip: padding-box; - border-radius: props.get(vars.$rounding); - - &::after { - position: absolute; - inset: calc(-1 * props.get(vars.$key-focus--border-offset)); - z-index: 1; - display: none; - pointer-events: none; - content: ''; - border-radius: calc(props.get(vars.$rounding) + props.get(vars.$key-focus--border-offset)); - outline: transparent solid props.get(vars.$key-focus--border-width); - } - - &:link, - &:visited, - &:enabled { - &:focus-visible { - &::after { - display: block; - } - } - } - - @include bem.elem('label') { - margin-inline: props.get(vars.$pad-i-label); - } - - @include -apply-theme(vars.$default-theme, $static: true); - - @each $theme in map.keys(props.get(vars.$themes)) { - @include bem.modifier(string.slice($theme, 3)) { - @include -apply-theme(vars.$themes, $theme); - } - } - - @each $theme in map.keys(props.get(vars.$static-themes)) { - @include bem.modifier(string.slice($theme, 3)) { - @include -apply-theme(vars.$static-themes, $theme, true); - } - } - - @include bem.modifier('pill') { - padding-inline: props.get(vars.$pad-i-pill); - border-radius: 10em; - - &::after { - border-radius: 10em; - } - } - - @each $mod, $pad-b, $pad-i, $pad-i-pill, $pad-i-label, $font-size in vars.$sizes { - @include bem.modifier($mod) { - padding-block: props.get($pad-b); - padding-inline: props.get($pad-i); - font-size: props.get($font-size); - - @include bem.elem('label') { - margin-inline: props.get($pad-i-label); - } - - @include bem.modifier('pill') { - padding-inline: props.get($pad-i-pill); - } - } - } - } -} diff --git a/src/objects/_badge.vars.scss b/src/objects/_badge.vars.scss deleted file mode 100644 index ff07148..0000000 --- a/src/objects/_badge.vars.scss +++ /dev/null @@ -1,161 +0,0 @@ -@use 'sass:map'; -@use 'sass:string'; -@use 'iro-sass/src/props'; -@use '../core.vars' as core; - -$pad-b: props.def(--o-badge--pad-b, props.get(core.$size--50)) !default; -$pad-i: props.def(--o-badge--pad-i, props.get(core.$size--100)) !default; -$pad-i-pill: props.def(--o-badge--pad-i-pill, props.get(core.$size--150)) !default; -$pad-i-label: props.def(--o-badge--pad-i-label, props.get(core.$size--50)) !default; -$rounding: props.def(--o-badge--rounding, props.get(core.$rounding)) !default; -$font-size: props.def(--o-badge--font-size, props.get(core.$font-size--75)) !default; - -$pad-b--sm: props.def(--o-badge--sm--pad-b, props.get(core.$size--25)) !default; -$pad-i--sm: props.def(--o-badge--sm--pad-i, props.get(core.$size--75)) !default; -$pad-i-pill--sm: props.def(--o-badge--sm--pad-i-pill, props.get(core.$size--125)) !default; -$pad-i-label--sm: props.def(--o-badge--sm--pad-i-label, props.get(core.$size--25)) !default; -$font-size--sm: props.def(--o-badge--sm--font-size, props.get(core.$font-size--50)) !default; - -$pad-b--lg: props.def(--o-badge--lg--pad-b, props.get(core.$size--75)) !default; -$pad-i--lg: props.def(--o-badge--lg--pad-i, props.get(core.$size--125)) !default; -$pad-i-pill--lg: props.def(--o-badge--lg--pad-i-pill, props.get(core.$size--175)) !default; -$pad-i-label--lg: props.def(--o-badge--lg--pad-i-label, props.get(core.$size--50)) !default; -$font-size--lg: props.def(--o-badge--lg--font-size, props.get(core.$font-size--100)) !default; - -$pad-b--xl: props.def(--o-badge--xl--pad-b, props.get(core.$size--100)) !default; -$pad-i--xl: props.def(--o-badge--xl--pad-i, props.get(core.$size--150)) !default; -$pad-i-pill--xl: props.def(--o-badge--xl--pad-i-pill, props.get(core.$size--225)) !default; -$pad-i-label--xl: props.def(--o-badge--xl--pad-i-label, props.get(core.$size--75)) !default; -$font-size--xl: props.def(--o-badge--xl--font-size, props.get(core.$font-size--150)) !default; - -$key-focus--border-width: props.def(--o-badge--key-focus--border-width, props.get(core.$key-focus--border-width)) !default; -$key-focus--border-offset: props.def(--o-badge--key-focus--border-offset, props.get(core.$key-focus--border-offset)) !default; -$key-focus--outline-width: props.def(--o-badge--key-focus--outline-width, props.get(core.$key-focus--outline-width)) !default; - -$sizes: ( - 'sm' $pad-b--sm $pad-i--sm $pad-i-pill--sm $pad-i-label--sm $font-size--sm, - 'lg' $pad-b--lg $pad-i--lg $pad-i-pill--lg $pad-i-label--lg $font-size--lg, - 'xl' $pad-b--xl $pad-i--xl $pad-i-pill--xl $pad-i-label--xl $font-size--xl, -) !default; - -$default-theme-override: () !default; -$default-theme: props.def(--o-badge, ( - --bg: props.get(core.$theme, --heading), - --label: props.get(core.$theme, --bg-l2), - - --hover: ( - --bg: props.get(core.$theme, --text), - --label: props.get(core.$theme, --bg-l2), - ), - - --active: ( - --bg: props.get(core.$theme, --text-mute), - --label: props.get(core.$theme, --bg-l2), - ), - - --key-focus: ( - --label: props.get(core.$theme, --focus, --text), - --border: props.get(core.$theme, --focus, --border), - --outline: props.get(core.$theme, --focus, --outline), - ), - - --quiet: ( - --bg: props.get(core.$theme, --border-mute), - --label: props.get(core.$theme, --heading), - - --hover: ( - --bg: props.get(core.$theme, --border), - --label: props.get(core.$theme, --heading), - ), - - --active: ( - --bg: props.get(core.$theme, --border-strong), - --label: props.get(core.$theme, --heading), - ), - ) -), 'color') !default; -$default-theme: props.merge($default-theme, $default-theme-override); - -$static-themes: props.def(--o-badge, (), 'color'); - -@each $theme in map.keys(props.get(core.$transparent-colors)) { - $badge-theme: --static-#{string.slice($theme, 3)}; - - $static-themes: props.merge($static-themes, ( - $badge-theme: ( - --bg: props.get(core.$transparent-colors, $theme, --800), - --label: props.get(core.$transparent-colors, $theme, --text), - - --hover: ( - --bg: props.get(core.$transparent-colors, $theme, --900), - --label: props.get(core.$transparent-colors, $theme, --text), - ), - - --active: ( - --bg: props.get(core.$transparent-colors, $theme, --900), - --label: props.get(core.$transparent-colors, $theme, --text), - ), - - --key-focus: ( - --bg: props.get(core.$transparent-colors, $theme, --100), - --label: props.get(core.$transparent-colors, $theme, --900), - --border: props.get(core.$transparent-colors, $theme, --900), - --outline: props.get(core.$transparent-colors, $theme, --300), - ), - - --quiet: ( - --bg: props.get(core.$transparent-colors, $theme, --200), - --label: props.get(core.$transparent-colors, $theme, --900), - --hover: ( - --bg: props.get(core.$transparent-colors, $theme, --300), - --label: props.get(core.$transparent-colors, $theme, --900), - ), - --active: ( - --bg: props.get(core.$transparent-colors, $theme, --400), - --label: props.get(core.$transparent-colors, $theme, --900), - ), - ) - ) - )); -} - -$themes-config: ( - accent: --accent, - positive: --positive, - negative: --negative, - warning: --warning, -) !default; - -$themes: props.def(--o-badge, (), 'color'); - -@each $theme, $key in $themes-config { - $themes: props.merge($themes, ( - --#{$theme}: ( - --bg: props.get(core.$theme, #{$key}-static, --900), - --label: props.get(core.$theme, #{$key}-static, --900-text), - - --hover: ( - --bg: props.get(core.$theme, #{$key}-static, --1000), - --label: props.get(core.$theme, #{$key}-static, --1000-text), - ), - - --active: ( - --bg: props.get(core.$theme, #{$key}-static, --1100), - --label: props.get(core.$theme, #{$key}-static, --1000-text), - ), - - --quiet: ( - --bg: props.get(core.$theme, $key, --200), - --label: props.get(core.$theme, $key, --1100), - --hover: ( - --bg: props.get(core.$theme, $key, --300), - --label: props.get(core.$theme, $key, --1200), - ), - --active: ( - --bg: props.get(core.$theme, $key, --400), - --label: props.get(core.$theme, $key, --1300), - ), - ) - ) - )); -} diff --git a/src/objects/_button.scss b/src/objects/_button.scss index aaf55b5..0467f24 100644 --- a/src/objects/_button.scss +++ b/src/objects/_button.scss @@ -5,72 +5,141 @@ @use 'iro-sass/src/bem'; @use 'iro-sass/src/props'; @use '../props' as *; -@use '../core.vars' as core; @forward 'button.vars'; @use 'button.vars' as vars; @mixin -apply-theme($theme, $key: ()) { - &:link, - &:visited, - &:enabled { - color: props.get($theme, list.join($key, --label)...); - background-color: props.get($theme, list.join($key, --bg)...); - border-color: transparent; - } - - @include bem.modifier('outline') { - &:link, - &:visited, - &:enabled { - color: props.get($theme, list.join($key, --outline-label)...); - background-color: transparent; - border-color: props.get($theme, list.join($key, --outline-border)...); - } + color: props.get($theme, list.join($key, --disabled --label-color)...); + background-color: props.get($theme, list.join($key, --disabled --bg-color)...); + border-color: props.get($theme, list.join($key, --disabled --border-color)...); + + &::after { + outline-color: props.get($theme, list.join($key, --key-focus --border-color)...); + box-shadow: + 0 + 0 + 0 + calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) + props.get($theme, list.join($key, --key-focus --outline-color)...); } &:link, &:visited, &:enabled { + color: props.get($theme, list.join($key, --label-color)...); + background-color: props.get($theme, list.join($key, --bg-color)...); + border-color: props.get($theme, list.join($key, --border-color)...); + 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)...); + &:hover, &:focus-visible { - color: props.get($theme, list.join($key, --hover --label)...); - background-color: props.get($theme, list.join($key, --hover --bg)...); - border-color: transparent; + color: props.get($theme, list.join($key, --hover --label-color)...); + background-color: props.get($theme, list.join($key, --hover --bg-color)...); + border-color: props.get($theme, list.join($key, --hover --border-color)...); } &:active { - color: props.get($theme, list.join($key, --active --label)...); - background-color: props.get($theme, list.join($key, --active --bg)...); - border-color: transparent; + color: props.get($theme, list.join($key, --active --label-color)...); + background-color: props.get($theme, list.join($key, --active --bg-color)...); + border-color: props.get($theme, list.join($key, --active --border-color)...); + box-shadow: none; } } -} -@mixin -apply-static-theme($theme, $key: ()) { - color: props.get($theme, list.join($key, --disabled --label)...); - background-color: props.get($theme, list.join($key, --disabled --bg)...); - border-color: transparent; + @include bem.modifier('static') { + color: props.get($theme, list.join($key, --static --label-color)...); + background-color: props.get($theme, list.join($key, --static --bg-color)...); + border-color: props.get($theme, list.join($key, --static --border-color)...); + box-shadow: none; - &::after { - outline-color: props.get($theme, list.join($key, --key-focus --border)...); - box-shadow: - 0 - 0 - 0 - calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width)) - props.get($theme, list.join($key, --key-focus --outline)...); + &:link, + &:visited, + &:enabled { + color: props.get($theme, list.join($key, --static --label-color)...); + background-color: props.get($theme, list.join($key, --static --bg-color)...); + border-color: props.get($theme, list.join($key, --static --border-color)...); + box-shadow: none; + + &:hover, + &:focus-visible { + color: props.get($theme, list.join($key, --static --hover --label-color)...); + background-color: props.get($theme, list.join($key, --static --hover --bg-color)...); + border-color: props.get($theme, list.join($key, --static --hover --border-color)...); + } + + &:active { + color: props.get($theme, list.join($key, --static --active --label-color)...); + background-color: props.get($theme, list.join($key, --static --active --bg-color)...); + border-color: props.get($theme, list.join($key, --static --active --border-color)...); + } + } } - - @include bem.modifier('outline') { + + @include bem.modifier('quiet') { + color: props.get($theme, list.join($key, --quiet --disabled --label-color)...); background-color: transparent; - border-color: props.get($theme, list.join($key, --disabled --outline-border)...); + border-color: transparent; + + &:link, + &:visited, + &:enabled { + color: props.get($theme, list.join($key, --quiet --label-color)...); + background-color: transparent; + border-color: transparent; + box-shadow: none; + + &:hover, + &:focus-visible { + color: props.get($theme, list.join($key, --quiet --hover --label-color)...); + background-color: props.get($theme, list.join($key, --quiet --hover --bg-color)...); + border-color: transparent; + } + + &:active { + color: props.get($theme, list.join($key, --quiet --active --label-color)...); + background-color: props.get($theme, list.join($key, --quiet --active --bg-color)...); + border-color: transparent; + } + } } - @include -apply-theme($theme, $key); + @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)...); + border-color: props.get($theme, list.join($key, --selected --disabled --border-color)...); - @include bem.modifier('primary') { - @include -apply-theme($theme, list.join($key, --primary)); + @include bem.modifier('static') { + color: props.get($theme, list.join($key, --selected --label-color)...); + background-color: props.get($theme, list.join($key, --selected --bg-color)...); + border-color: props.get($theme, list.join($key, --selected --border-color)...); + } + + &:link, + &:visited, + &:enabled { + color: props.get($theme, list.join($key, --selected --label-color)...); + background-color: props.get($theme, list.join($key, --selected --bg-color)...); + border-color: props.get($theme, list.join($key, --selected --border-color)...); + + &:hover, + &:focus-visible { + color: props.get($theme, list.join($key, --selected --hover --label-color)...); + background-color: props.get($theme, list.join($key, --selected --hover --bg-color)...); + border-color: props.get($theme, list.join($key, --selected --hover --border-color)...); + } + + &:active { + color: props.get($theme, list.join($key, --selected --active --label-color)...); + background-color: props.get($theme, list.join($key, --selected --active --bg-color)...); + border-color: props.get($theme, list.join($key, --selected --active --border-color)...); + } + } } } @@ -82,11 +151,11 @@ display: inline-block; padding-block: props.get(vars.$pad-b); padding-inline: props.get(vars.$pad-i); - font-size: props.get(vars.$font-size); - font-weight: 500; line-height: props.get(vars.$line-height); text-align: center; text-decoration: none; + text-overflow: ellipsis; + white-space: nowrap; border: props.get(vars.$border-width) solid transparent; border-radius: props.get(vars.$rounding); @@ -114,16 +183,30 @@ @include bem.elem('label') { margin-inline: props.get(vars.$pad-i-label); } - - @include bem.modifier('block') { - display: block; + + @include -apply-theme(vars.$default-theme); + + @each $theme in map.keys(props.get(vars.$themes)) { + @include bem.modifier(string.slice($theme, 3)) { + @include -apply-theme(vars.$themes, $theme); + } } - - @include bem.modifier('outline') { - background-color: transparent; + + @include bem.modifier('pill') { + padding-inline: props.get(vars.$pad-i-pill); + border-radius: 100em; + + &::after { + border-radius: 100em; + } + } + + @include bem.modifier('icon') { + inline-size: calc(1em * props.get(vars.$line-height) + 2 * props.get(vars.$pad-b)); + padding-inline: 0; } - @each $mod, $pad-i, $pad-i-label, $pad-b, $font-size in vars.$sizes { + @each $mod, $pad-i, $pad-i-label, $pad-i-pill, $pad-b, $font-size in vars.$fixed-sizes { @include bem.modifier($mod) { padding-block: props.get($pad-b); padding-inline: props.get($pad-i); @@ -132,27 +215,42 @@ @include bem.elem('label') { margin-inline: props.get($pad-i-label); } + + @include bem.modifier('pill') { + padding-inline: props.get($pad-i-pill); + } + + @include bem.modifier('icon') { + inline-size: calc(1em * props.get(vars.$line-height) + 2 * props.get($pad-b)); + padding-inline: 0; + } } } - @include -apply-static-theme(vars.$default-theme); + @include bem.modifier('align-block') { + margin-inline: calc(-1 * props.get(vars.$pad-i) - props.get(vars.$border-width)); - @each $theme in map.keys(props.get(vars.$themes)) { - @include bem.modifier(string.slice($theme, 3)) { - @include -apply-theme(vars.$themes, $theme); + @include bem.modifier('pill') { + margin-inline: calc(-1 * props.get(vars.$pad-i-pill) - props.get(vars.$border-width)); } - } - @each $theme in map.keys(props.get(vars.$static-themes)) { - @include bem.modifier(string.slice($theme, 3)) { - @include -apply-static-theme(vars.$static-themes, $theme); + @include bem.modifier('icon') { + margin-inline: calc(-1 * props.get(vars.$pad-b) - props.get(vars.$border-width) - .5em * (props.get(vars.$line-height) - 1)); } - } + + @each $mod, $pad-i, $pad-i-label, $pad-i-pill, $pad-b, $font-size in vars.$fixed-sizes { + @include bem.modifier($mod) { + margin-inline: calc(-1 * props.get($pad-i) - props.get(vars.$border-width)); - @include bem.modifier('round') { - inline-size: calc(1em * props.get(vars.$line-height) + 2 * props.get(vars.$pad-b)); - padding-inline: 0; - border-radius: 100em; + @include bem.modifier('pill') { + margin-inline: calc(-1 * props.get($pad-i-pill) - props.get(vars.$border-width)); + } + + @include bem.modifier('icon') { + margin-inline: calc(-1 * props.get($pad-b) - props.get(vars.$border-width) - .5em * (props.get(vars.$line-height) - 1)); + } + } + } } } } diff --git a/src/objects/_button.vars.scss b/src/objects/_button.vars.scss index 4f7b552..1ab7e5a 100644 --- a/src/objects/_button.vars.scss +++ b/src/objects/_button.vars.scss @@ -4,164 +4,355 @@ @use '../core.vars' as core; $line-height: props.def(--o-button--line-height, 1.4) !default; -$pad-i: props.def(--o-button--pad-i, props.get(core.$size--200)) !default; -$pad-i-label: props.def(--o-button--pad-i-label, props.get(core.$size--50)) !default; -$pad-b: props.def(--o-button--pad-b, props.get(core.$size--65)) !default; -$border-width: props.def(--o-button--border-width, props.get(core.$border-width--medium)) !default; -$rounding: props.def(--o-button--rounding, 10em) !default; -$font-size: props.def(--o-button--font-size, props.get(core.$font-size--100)) !default; +$border-width: props.def(--o-button--border-width, props.get(core.$border-width--thin)) !default; +$rounding: props.def(--o-button--rounding, props.get(core.$rounding--sm)) !default; -$pad-i--sm: props.def(--o-button--sm--pad-i, props.get(core.$size--150)) !default; +$pad-i--sm: props.def(--o-button--sm--pad-i, props.get(core.$size--75)) !default; $pad-i-label--sm: props.def(--o-button--sm--pad-i-label, props.get(core.$size--25)) !default; -$pad-b--sm: props.def(--o-button--sm--pad-b, props.get(core.$size--25)) !default; +$pad-i-pill--sm: props.def(--o-button--sm--pad-i-pill, props.get(core.$size--115)) !default; +$pad-b--sm: props.def(--o-button--sm--pad-b, props.get(core.$size--40)) !default; $font-size--sm: props.def(--o-button--sm--font-size, props.get(core.$font-size--75)) !default; -$pad-i--lg: props.def(--o-button--lg--pad-i, props.get(core.$size--250)) !default; -$pad-i-label--lg: props.def(--o-button--lg--pad-i-label, props.get(core.$size--100)) !default; -$pad-b--lg: props.def(--o-button--lg--pad-b, props.get(core.$size--100)) !default; +$pad-i: props.def(--o-button--pad-i, props.get(core.$size--115)) !default; +$pad-i-label: props.def(--o-button--pad-i-label, props.get(core.$size--40)) !default; +$pad-i-pill: props.def(--o-button--pad-i-pill, props.get(core.$size--150)) !default; +$pad-b: props.def(--o-button--pad-b, props.get(core.$size--85)) !default; +$font-size: props.def(--o-button--font-size, props.get(core.$font-size--100)) !default; + +$pad-i--lg: props.def(--o-button--lg--pad-i, props.get(core.$size--160)) !default; +$pad-i-label--lg: props.def(--o-button--lg--pad-i-label, props.get(core.$size--65)) !default; +$pad-i-pill--lg: props.def(--o-button--lg--pad-i-pill, props.get(core.$size--175)) !default; +$pad-b--lg: props.def(--o-button--lg--pad-b, props.get(core.$size--115)) !default; $font-size--lg: props.def(--o-button--lg--font-size, props.get(core.$font-size--150)) !default; -$pad-i--xl: props.def(--o-button--xl--pad-i, props.get(core.$size--300)) !default; -$pad-i-label--xl: props.def(--o-button--xl--pad-i-label, props.get(core.$size--150)) !default; +$pad-i--xl: props.def(--o-button--xl--pad-i, props.get(core.$size--200)) !default; +$pad-i-label--xl: props.def(--o-button--xl--pad-i-label, props.get(core.$size--85)) !default; +$pad-i-pill--xl: props.def(--o-button--xl--pad-i-pill, props.get(core.$size--225)) !default; $pad-b--xl: props.def(--o-button--xl--pad-b, props.get(core.$size--150)) !default; $font-size--xl: props.def(--o-button--xl--font-size, props.get(core.$font-size--200)) !default; +$shadow-x: props.def(--o-button--shadow-x, props.get(core.$shadow--l1--x)) !default; +$shadow-y: props.def(--o-button--shadow-y, props.get(core.$shadow--l1--y)) !default; +$shadow-blur: props.def(--o-button--shadow-blur, props.get(core.$shadow--l1--blur)) !default; +$shadow-grow: props.def(--o-button--shadow-grow, props.get(core.$shadow--l1--grow)) !default; + $key-focus--border-width: props.def(--o-button--key-focus--border-width, props.get(core.$key-focus--border-width)) !default; $key-focus--border-offset: props.def(--o-button--key-focus--border-offset, props.get(core.$key-focus--border-offset)) !default; $key-focus--outline-width: props.def(--o-button--key-focus--outline-width, props.get(core.$key-focus--outline-width)) !default; -$sizes: ( - 'sm' $pad-i--sm $pad-i-label--sm $pad-b--sm $font-size--sm, - 'lg' $pad-i--lg $pad-i-label--lg $pad-b--lg $font-size--lg, - 'xl' $pad-i--xl $pad-i-label--xl $pad-b--xl $font-size--xl, +$fixed-sizes: ( + 'sm' $pad-i--sm $pad-i-label--sm $pad-i-pill--sm $pad-b--sm $font-size--sm, + 'lg' $pad-i--lg $pad-i-label--lg $pad-i-pill--lg $pad-b--lg $font-size--lg, + 'xl' $pad-i--xl $pad-i-label--xl $pad-i-pill--xl $pad-b--xl $font-size--xl, ) !default; +$themes: props.def(--o-button, (), 'color'); + $default-theme-override: () !default; -$default-theme: props.def(--o-button, ( - --bg: props.get(core.$theme, --border-mute), - --label: props.get(core.$theme, --text), - --outline-border: props.get(core.$theme, --border), - --outline-label: props.get(core.$theme, --text), +$default-theme: map.deep-merge(( + --bg-color: props.get(core.$theme, --bg-l2), + --label-color: props.get(core.$theme, --text), + --border-color: props.get(core.$theme, --box, --border) props.get(core.$theme, --box, --border) props.get(core.$theme, --box, --border-strong), + --shadow-color: props.get(core.$theme, --shadow), --hover: ( - --bg: props.get(core.$theme, --border), - --label: props.get(core.$theme, --heading), + --bg-color: props.get(core.$theme, --border-mute), + --label-color: props.get(core.$theme, --heading), + --border-color: props.get(core.$theme, --border-strong), ), --active: ( - --bg: props.get(core.$theme, --border-strong), - --label: props.get(core.$theme, --heading), + --bg-color: props.get(core.$theme, --border), + --label-color: props.get(core.$theme, --heading), + --border-color: props.get(core.$theme, --text-mute-more), ), --disabled: ( - --bg: props.get(core.$theme, --border-mute), - --outline-border: props.get(core.$theme, --border), - --label: props.get(core.$theme, --text-disabled), + --bg-color: transparent, + --label-color: props.get(core.$theme, --border-strong), + --border-color: props.get(core.$theme, --border), ), --key-focus: ( - --label: props.get(core.$theme, --focus, --text), - --border: props.get(core.$theme, --focus, --border), - --outline: props.get(core.$theme, --focus, --outline), + --border-color: props.get(core.$theme, --focus, --border), + --outline-color: props.get(core.$theme, --focus, --outline), + ), + + --selected: ( + --bg-color: props.get(core.$theme, --text), + --label-color: props.get(core.$theme, --base, --50), + --border-color: props.get(core.$theme, --text) props.get(core.$theme, --text) props.get(core.$theme, --heading), + + --hover: ( + --bg-color: props.get(core.$theme, --heading), + --label-color: props.get(core.$theme, --base, --50), + --border-color: props.get(core.$theme, --heading), + ), + + --active: ( + --bg-color: props.get(core.$theme, --heading), + --label-color: props.get(core.$theme, --base, --50), + --border-color: props.get(core.$theme, --heading), + ), + + --disabled: ( + --bg-color: props.get(core.$theme, --border-mute), + --label-color: props.get(core.$theme, --border-strong), + --border-color: props.get(core.$theme, --border-mute), + ), + ), + + --static: ( + --bg-color: props.get(core.$theme, --border-mute), + --label-color: props.get(core.$theme, --heading), + --border-color: props.get(core.$theme, --border-mute), + + --hover: ( + --bg-color: props.get(core.$theme, --border), + --label-color: props.get(core.$theme, --heading), + --border-color: props.get(core.$theme, --border), + ), + + --active: ( + --bg-color: props.get(core.$theme, --border-strong), + --label-color: props.get(core.$theme, --heading), + --border-color: props.get(core.$theme, --border-strong), + ), ), - --primary: ( - --bg: props.get(core.$theme, --base, --900), - --label: props.get(core.$theme, --base, --900-text), - --outline-border: props.get(core.$theme, --base, --900), - --outline-label: props.get(core.$theme, --text), + --quiet: ( + --label-color: props.get(core.$theme, --text), --hover: ( - --bg: props.get(core.$theme, --base, --800), - --label: props.get(core.$theme, --base, --800-text), + --bg-color: props.get(core.$theme, --border-mute), + --label-color: props.get(core.$theme, --heading), ), --active: ( - --bg: props.get(core.$theme, --base, --700), - --label: props.get(core.$theme, --base, --700-text), + --bg-color: props.get(core.$theme, --border), + --label-color: props.get(core.$theme, --heading), + ), + + --disabled: ( + --label-color: props.get(core.$theme, --border-strong), ), ), -), 'color') !default; -$default-theme: props.merge($default-theme, $default-theme-override); +), $default-theme-override) !default; +$default-theme: props.def(--o-button, $default-theme, 'color'); + +$default-theme-dark-override: () !default; +$default-theme-dark: map.deep-merge(( + --bg-color: props.get(core.$theme, --border-mute), + --border-color: props.get(core.$theme, --border-mute), -$static-themes: props.def(--o-button, (), 'color'); + --hover: ( + --bg-color: props.get(core.$theme, --border), + --border-color: props.get(core.$theme, --border), + ), + + --active: ( + --bg-color: props.get(core.$theme, --border-strong), + --border-color: props.get(core.$theme, --border-strong), + ), + + --selected: ( + --border-color: props.get(core.$theme, --text), + ), +), $default-theme-override) !default; +$default-theme-dark: props.def(--o-button, $default-theme-dark, 'dark'); @each $theme in map.keys(props.get(core.$transparent-colors)) { $button-theme: --static-#{string.slice($theme, 3)}; - $static-themes: props.merge($static-themes, ( + $themes: props.merge($themes, ( $button-theme: ( - --bg: props.get(core.$transparent-colors, $theme, --200), - --label: props.get(core.$transparent-colors, $theme, --900), - --outline-border: props.get(core.$transparent-colors, $theme, --300), - --outline-label: props.get(core.$transparent-colors, $theme, --900), + --bg-color: props.get(core.$transparent-colors, $theme, --200), + --label-color: props.get(core.$transparent-colors, $theme, --900), + --border-color: props.get(core.$transparent-colors, $theme, --300) props.get(core.$transparent-colors, $theme, --300) props.get(core.$transparent-colors, $theme, --400), + --shadow-color: props.get(core.$transparent-colors, --black, --200), --hover: ( - --bg: props.get(core.$transparent-colors, $theme, --300), - --label: props.get(core.$transparent-colors, $theme, --900), + --bg-color: props.get(core.$transparent-colors, $theme, --300), + --label-color: props.get(core.$transparent-colors, $theme, --900), + --border-color: props.get(core.$transparent-colors, $theme, --400), ), --active: ( - --bg: props.get(core.$transparent-colors, $theme, --400), - --label: props.get(core.$transparent-colors, $theme, --900), + --bg-color: props.get(core.$transparent-colors, $theme, --400), + --label-color: props.get(core.$transparent-colors, $theme, --900), + --border-color: props.get(core.$transparent-colors, $theme, --500), ), --disabled: ( - --bg: props.get(core.$transparent-colors, $theme, --200), - --outline-border: props.get(core.$transparent-colors, $theme, --300), - --label: props.get(core.$transparent-colors, $theme, --500), + --bg-color: props.get(core.$transparent-colors, $theme, --100), + --label-color: props.get(core.$transparent-colors, $theme, --500), + --border-color: props.get(core.$transparent-colors, $theme, --300), ), --key-focus: ( - --bg: props.get(core.$transparent-colors, $theme, --100), - --label: props.get(core.$transparent-colors, $theme, --900), - --border: props.get(core.$transparent-colors, $theme, --900), - --outline: props.get(core.$transparent-colors, $theme, --300), + --border-color: props.get(core.$transparent-colors, $theme, --900), + --outline-color: props.get(core.$transparent-colors, $theme, --300), ), - --primary: ( - --bg: props.get(core.$transparent-colors, $theme, --800), - --label: props.get(core.$transparent-colors, $theme, --text), - --outline-border: props.get(core.$transparent-colors, $theme, --800), - --outline-label: props.get(core.$transparent-colors, $theme, --900), - + --selected: ( + --bg-color: props.get(core.$transparent-colors, $theme, --800), + --label-color: props.get(core.$transparent-colors, $theme, --text), + --border-color: props.get(core.$transparent-colors, $theme, --100) props.get(core.$transparent-colors, $theme, --100) props.get(core.$transparent-colors, $theme, --200), + --hover: ( - --bg: props.get(core.$transparent-colors, $theme, --900), - --label: props.get(core.$transparent-colors, $theme, --text), + --bg-color: props.get(core.$transparent-colors, $theme, --900), + --label-color: props.get(core.$transparent-colors, $theme, --text), + --border-color: props.get(core.$transparent-colors, $theme, --100), ), --active: ( - --bg: props.get(core.$transparent-colors, $theme, --900), - --label: props.get(core.$transparent-colors, $theme, --text), + --bg-color: props.get(core.$transparent-colors, $theme, --900), + --label-color: props.get(core.$transparent-colors, $theme, --text), + --border-color: props.get(core.$transparent-colors, $theme, --100), + ), + + --disabled: ( + --bg-color: props.get(core.$transparent-colors, $theme, --200), + --label-color: props.get(core.$transparent-colors, $theme, --500), + --border-color: props.get(core.$transparent-colors, $theme, --100), + ), + ), + + --static: ( + --bg-color: props.get(core.$transparent-colors, $theme, --200), + --label-color: props.get(core.$transparent-colors, $theme, --900), + --border-color: transparent, + + --hover: ( + --bg-color: props.get(core.$transparent-colors, $theme, --300), + --label-color: props.get(core.$transparent-colors, $theme, --900), + --border-color: transparent, ), - ) + + --active: ( + --bg-color: props.get(core.$transparent-colors, $theme, --400), + --label-color: props.get(core.$transparent-colors, $theme, --900), + --border-color: transparent, + ), + ), + + --quiet: ( + --label-color: props.get(core.$transparent-colors, $theme, --900), + + --hover: ( + --bg-color: props.get(core.$transparent-colors, $theme, --200), + --label-color: props.get(core.$transparent-colors, $theme, --900), + ), + + --active: ( + --bg-color: props.get(core.$transparent-colors, $theme, --300), + --label-color: props.get(core.$transparent-colors, $theme, --900), + ), + + --disabled: ( + --label-color: props.get(core.$transparent-colors, $theme, --500), + ), + ), ) )); } $themes-config: ( accent: --accent, + positive: --positive, negative: --negative, + warning: --warning, ) !default; -$themes: props.def(--o-button, (), 'color'); - @each $theme, $key in $themes-config { $themes: props.merge($themes, ( --#{$theme}: ( - --bg: props.get(core.$theme, #{$key}-static, --900), - --label: props.get(core.$theme, #{$key}-static, --900-text), - --outline-border: props.get(core.$theme, $key, --900), - --outline-label: props.get(core.$theme, $key, --1000), + --bg-color: props.get(core.$theme, $key, --200), + --label-color: props.get(core.$theme, $key, --1100), + --border-color: props.get(core.$theme, $key, --500) props.get(core.$theme, $key, --500) props.get(core.$theme, $key, --600), + --shadow-color: props.get(core.$theme, $key, --200), --hover: ( - --bg: props.get(core.$theme, #{$key}-static, --1000), - --label: props.get(core.$theme, #{$key}-static, --1000-text), + --bg-color: props.get(core.$theme, $key, --300), + --label-color: props.get(core.$theme, $key, --1200), + --border-color: props.get(core.$theme, $key, --600), ), --active: ( - --bg: props.get(core.$theme, #{$key}-static, --1100), - --label: props.get(core.$theme, #{$key}-static, --1100-text), + --bg-color: props.get(core.$theme, $key, --400), + --label-color: props.get(core.$theme, $key, --1300), + --border-color: props.get(core.$theme, $key, --800), + ), + + --disabled: ( + --bg-color: props.get(core.$theme, --bg-l1), + --label-color: props.get(core.$theme, --border-strong), + --border-color: props.get(core.$theme, --border), + ), + + --key-focus: ( + --border-color: props.get(core.$theme, --focus, --border), + --outline-color: props.get(core.$theme, --focus, --outline), + ), + + --selected: ( + --bg-color: props.get(core.$theme, #{$key}-static, --900), + --label-color: props.get(core.$theme, #{$key}-static, --900-text), + --border-color: props.get(core.$theme, #{$key}-static, --900) props.get(core.$theme, #{$key}-static, --900) props.get(core.$theme, #{$key}-static, --1000), + + --hover: ( + --bg-color: props.get(core.$theme, #{$key}-static, --1000), + --label-color: props.get(core.$theme, #{$key}-static, --1000-text), + --border-color: props.get(core.$theme, #{$key}-static, --1000), + ), + + --active: ( + --bg-color: props.get(core.$theme, #{$key}-static, --1100), + --label-color: props.get(core.$theme, #{$key}-static, --1100-text), + --border-color: props.get(core.$theme, #{$key}-static, --1100), + ), + + --disabled: ( + --bg-color: props.get(core.$theme, --border-mute), + --label-color: props.get(core.$theme, --border-strong), + --border-color: props.get(core.$theme, --border-mute), + ), + ), + + --static: ( + --bg-color: props.get(core.$theme, $key, --100), + --label-color: props.get(core.$theme, $key, --1100), + --border-color: props.get(core.$theme, $key, --300), + + --hover: ( + --bg-color: props.get(core.$theme, $key, --200), + --label-color: props.get(core.$theme, $key, --1200), + --border-color: props.get(core.$theme, $key, --400), + ), + + --active: ( + --bg-color: props.get(core.$theme, $key, --300), + --label-color: props.get(core.$theme, $key, --1300), + --border-color: props.get(core.$theme, $key, --500), + ), + ), + + --quiet: ( + --label-color: props.get(core.$theme, $key, --1100), + + --hover: ( + --bg-color: props.get(core.$theme, $key, --200), + --label-color: props.get(core.$theme, $key, --1200), + ), + + --active: ( + --bg-color: props.get(core.$theme, $key, --300), + --label-color: props.get(core.$theme, $key, --1300), + ), + + --disabled: ( + --label-color: props.get(core.$theme, --border-strong), + ), ), ) )); -- cgit v1.2.3-70-g09d2