@use 'iro-sass/src/index' as iro; @use '../functions' as fn; $sizes: 'sm' 'lg' 'xl' !default; @include iro.props-namespace('action-button') { @include iro.props-store(( --dims: ( --line-height: 1.4, --pad-i: fn.global-dim(--size --150), --pad-i-pill: fn.global-dim(--size --200), --pad-b: fn.global-dim(--size --85), --border: fn.global-dim(--border --thin), --rounding: fn.global-dim(--rounding), --font-size: fn.global-dim(--font-size --100), --sm: ( --pad-i: fn.global-dim(--size --100), --pad-i-pill: fn.global-dim(--size --150), --pad-b: fn.global-dim(--size --40), --font-size: fn.global-dim(--font-size --75), ), --lg: ( --pad-i: fn.global-dim(--size --175), --pad-i-pill: fn.global-dim(--size --225), --pad-b: fn.global-dim(--size --115), --font-size: fn.global-dim(--font-size --150), ), --xl: ( --pad-i: fn.global-dim(--size --225), --pad-i-pill: fn.global-dim(--size --300), --pad-b: fn.global-dim(--size --150), --font-size: fn.global-dim(--font-size --200), ), --key-focus: ( --border: fn.global-dim(--key-focus --border), --border-offset: fn.global-dim(--key-focus --border-offset), --outline: fn.global-dim(--key-focus --outline), ), ), --colors: ( --bg: fn.global-color(--base --75), --label: fn.global-color(--text), --border: fn.global-color(--border-strong), --hover: ( --bg: fn.global-color(--border-mute), --label: fn.global-color(--heading), --border: fn.global-color(--text-mute-more), ), --active: ( --bg: fn.global-color(--border), --label: fn.global-color(--heading), --border: fn.global-color(--text-mute), ), --disabled: ( --bg: fn.global-color(--bg-l1), --label: fn.global-color(--border-strong), --border: fn.global-color(--border), ), --selected: ( --bg: fn.global-color(--text-mute), --label: fn.global-color(--base --50), --border: fn.global-color(--text-mute), --hover: ( --bg: fn.global-color(--text), --label: fn.global-color(--base --50), --border: fn.global-color(--text), ), --active: ( --bg: fn.global-color(--heading), --label: fn.global-color(--base --50), --border: fn.global-color(--heading), ), --disabled: ( --bg: fn.global-color(--border-mute), --label: fn.global-color(--border-strong), --border: fn.global-color(--border-mute), ), ), --key-focus: ( --border: fn.global-color(--focus --border), --outline: fn.global-color(--focus --outline), ), --quiet: ( --label: fn.global-color(--text), --hover: ( --bg: fn.global-color(--border-mute), --label: fn.global-color(--heading), ), --active: ( --bg: fn.global-color(--border), --label: fn.global-color(--heading), ), --disabled: ( --label: fn.global-color(--border-strong), ), ), ), )); @include iro.bem-object(iro.props-namespace()) { display: inline-block; position: relative; padding-block: fn.dim(--pad-b); padding-inline: fn.dim(--pad-i); border: fn.dim(--border) solid fn.color(--disabled --border); border-radius: fn.dim(--rounding); background-color: fn.color(--disabled --bg); color: fn.color(--disabled --label); line-height: fn.dim(--line-height); text-align: center; text-decoration: none; text-overflow: ellipsis; white-space: nowrap; &::after { content: ''; display: none; position: absolute; z-index: 1; inset: calc(-1 * fn.dim(--border) - fn.dim(--key-focus --border-offset)); border-radius: calc(fn.dim(--rounding) + fn.dim(--key-focus --border-offset)); outline: fn.color(--key-focus --border) solid fn.dim(--key-focus --border); box-shadow: 0 0 0 calc(fn.dim(--key-focus --border) + fn.dim(--key-focus --outline)) fn.color(--key-focus --outline); pointer-events: none; } &:link, &:visited, &:enabled { border-color: fn.color(--border); background-color: fn.color(--bg); color: fn.color(--label); &:hover, &:focus-visible { border-color: fn.color(--hover --border); background-color: fn.color(--hover --bg); color: fn.color(--hover --label); } &:active { border-color: fn.color(--active --border); background-color: fn.color(--active --bg); color: fn.color(--active --label); } &:focus-visible { &::after { display: block; } } } @include iro.bem-modifier('quiet') { border-color: transparent; background-color: transparent; color: fn.color(--quiet --disabled --label); &:link, &:visited, &:enabled { border-color: transparent; background-color: transparent; color: fn.color(--quiet --label); &:hover, &:focus-visible { border-color: transparent; background-color: fn.color(--quiet --hover --bg); color: fn.color(--quiet --hover --label); } &:active { border-color: transparent; background-color: fn.color(--quiet --active --bg); color: fn.color(--quiet --active --label); } } } @include iro.bem-is('selected') { border-color: fn.color(--selected --disabled --border); background-color: fn.color(--selected --disabled --bg); color: fn.color(--selected --disabled --label); &:link, &:visited, &:enabled { border-color: fn.color(--selected --border); background-color: fn.color(--selected --bg); color: fn.color(--selected --label); &:hover, &:focus-visible { border-color: fn.color(--selected --hover --border); background-color: fn.color(--selected --hover --bg); color: fn.color(--selected --hover --label); } &:active { border-color: fn.color(--selected --active --border); background-color: fn.color(--selected --active --bg); color: fn.color(--selected --active --label); } } } @include iro.bem-modifier('pill') { padding-inline: fn.dim(--pad-i-pill); border-radius: 100em; &::after { border-radius: 100em; } } @each $size in $sizes { @include iro.bem-modifier($size) { padding-block: fn.dim(--#{$size} --pad-b); padding-inline: fn.dim(--#{$size} --pad-i); font-size: fn.dim(--#{$size} --font-size); @include iro.bem-modifier('pill') { padding-inline: fn.dim(--#{$size} --pad-i-pill); } } } @include iro.bem-modifier('icon') { inline-size: calc(1em * fn.dim(--line-height) + 2 * fn.dim(--pad-b)); padding-inline: 0; @each $size in $sizes { @include iro.bem-modifier($size) { inline-size: calc(1em * fn.dim(--line-height) + 2 * fn.dim(--#{$size} --pad-b)); padding-inline: 0; } } } } }