| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- // Buttons
- // *******************************************************************************
-
- .btn {
- --#{$prefix}btn-box-shadow-rgb: transparent;
- --#{$prefix}btn-focus-shadow-rgb: transparent;
- --#{$prefix}btn-active-shadow-rgb: transparent;
- --#{$prefix}btn-box-shadow: 0 .125rem .25rem 0 rgba(var(--#{$prefix}btn-box-shadow-rgb), .4);
- --#{$prefix}btn-focus-box-shadow: none;
- --#{$prefix}btn-active-border-color: transparent;
- --#{$prefix}btn-active-shadow: none;
- display: inline-flex;
- align-items: center;
- justify-content: center;
- &:not(:focus, :active) {
- box-shadow: var(--#{$prefix}btn-box-shadow);
- }
-
- .btn-group &,
- .input-group & {
- border-inline-end: $input-btn-border-width solid var(--#{$prefix}btn-group-border-color);
- border-inline-start: $input-btn-border-width solid var(--#{$prefix}btn-group-border-color);
- }
- .btn-group-vertical & {
- border-block-end: $input-btn-border-width solid var(--#{$prefix}btn-group-border-color);
- border-block-start: $input-btn-border-width solid var(--#{$prefix}btn-group-border-color);
- }
-
- .btn-check:checked + &,
- :not(.btn-check) + &:active,
- &:first-child:active,
- &.active,
- &.show {
- box-shadow: var(--#{$prefix}btn-active-shadow);
- }
-
- &:disabled,
- &.disabled,
- fieldset:disabled & {
- box-shadow: none;
- }
-
- &:focus {
- transform: $btn-focus-transform;
- --#{$prefix}btn-color: var(--#{$prefix}btn-active-color);
- --#{$prefix}btn-bg: var(--#{$prefix}btn-active-bg);
- }
-
- /* Table Action Dropdown fix */
- &:not([class*="btn-"]):active,
- &:not([class*="btn-"]).active,
- &:not([class*="btn-"]).show,
- &:not([class*="btn-"]) {
- --#{$prefix}btn-border-width: 0;
- }
-
- /* override bootstrap styles of the checkbox/radio buttons */
- .btn-check + &:hover {
- border-color: var(--#{$prefix}btn-hover-border-color);
- background-color: var(--#{$prefix}btn-hover-bg);
- color: var(--#{$prefix}btn-hover-color);
- }
-
- /* Buttons Variant */
-
- /* Label */
- &[class*="btn-label-"] {
- &:not(:hover),
- &:focus,
- &:active {
- --#{$prefix}btn-box-shadow: none;
- }
- &:hover {
- box-shadow: var(--#{$prefix}btn-box-shadow);
- }
- }
-
- /* Outline */
- &[class*="btn-outline-"] {
- &:not(:focus) {
- --#{$prefix}btn-bg: transparent;
- }
- --#{$prefix}btn-focus-box-shadow: none;
- --#{$prefix}btn-active-shadow: none;
- --#{$prefix}btn-disabled-bg: transparent;
-
- .badge {
- --#{$prefix}badge-bg-color: var(--#{$prefix}btn-color);
- --#{$prefix}badge-color: var(--#{$prefix}btn-hover-color);
- }
-
- &:not(:hover) {
- --#{$prefix}btn-box-shadow: none;
- }
-
- &:hover .badge,
- &:focus:hover .badge,
- &:focus:not(:hover) .badge,
- &:active .badge,
- &.active .badge,
- .show > &.dropdown-toggle .badge {
- &:not([class*="badge-outline"]) {
- --#{$prefix}badge-bg-color: var(--#{$prefix}btn-hover-color);
- --#{$prefix}badge-color: var(--#{$prefix}btn-hover-bg);
- }
- }
- }
-
- &.btn-white {
- --#{$prefix}btn-bg: var(--#{$prefix}white);
- --#{$prefix}btn-color: var(--#{$prefix}body-color);
- --#{$prefix}btn-border-color: var(--#{$prefix}white);
- --#{$prefix}btn-hover-color: var(--#{$prefix}black);
- --#{$prefix}btn-hover-bg: var(--#{$prefix}btn-bg);
- --#{$prefix}btn-hover-border-color: var(--#{$prefix}btn-border-color);
- --#{$prefix}btn-active-color: var(--#{$prefix}btn-hover-color);
- --#{$prefix}btn-active-bg: var(--#{$prefix}btn-hover-bg);
- --#{$prefix}btn-active-border-color: var(--#{$prefix}btn-hover-border-color);
- --#{$prefix}btn-box-shadow-rgb: var(--#{$prefix}white-rgb);
- --#{$prefix}btn-active-shadow-rgb: var(--#{$prefix}btn-box-shadow-rgb);
- }
-
- /* Text */
- &[class*="btn-text-"] {
- --#{$prefix}btn-bg: transparent;
- --#{$prefix}btn-border-color: transparent;
- --#{$prefix}btn-box-shadow: none;
- --#{$prefix}btn-focus-box-shadow: none;
- --#{$prefix}btn-active-shadow: none;
- --#{$prefix}btn-disabled-bg: transparent;
- --#{$prefix}btn-disabled-border-color: transparent;
- &:not(.btn-icon) {
- padding-inline: .75rem;
- &[class*="btn-sm"] {
- padding-inline: .5rem;
- }
- &[class*="btn-lg"] {
- padding-inline: 1rem;
- }
- }
- }
- &:hover {
- transform: $btn-hover-transform;
- }
- }
-
- /* Badge within button */
- .btn .badge {
- @include transition($btn-transition);
- inset-block-start: 0;
- }
-
- label.btn {
- margin-block-end: 0;
- }
-
- /* Button Sizes */
-
- .btn-xl {
- @include button-size($btn-padding-y-xl, $btn-padding-x-xl, $btn-font-size-xl, $btn-border-radius-xl);
- }
-
- .btn-xs {
- @include button-size($btn-padding-y-xs, $btn-padding-x-xs, $btn-font-size-xs, $btn-border-radius-xs);
- }
-
- /* Icon button */
-
- .btn-icon {
- $btn-icon-size-xl: ($btn-font-size-xl * $btn-line-height-xl) + ($btn-padding-y-xl * 2);
- $btn-icon-font-size-xl: $btn-font-size-xl * $btn-line-height-xl;
- $btn-icon-size-lg: ($btn-font-size-lg * $btn-line-height-lg) + ($btn-padding-y-lg * 2);
- $btn-icon-font-size-lg: $btn-font-size-lg * $btn-line-height-lg;
- $btn-icon-size: ($btn-font-size * $btn-line-height) + ($btn-padding-y * 1.998);
- $btn-icon-font-size: $btn-font-size * $btn-line-height;
- $btn-icon-size-sm: ($btn-font-size-sm * $btn-line-height-sm) + ($btn-padding-y-sm * 1.998);
- $btn-icon-font-size-sm: $btn-font-size-sm;
- $btn-icon-size-xs: ($btn-font-size-xs * $btn-line-height-xs) + ($btn-padding-y-xs * 1.998);
- $btn-icon-font-size-xs: $btn-font-size-xs;
- $borders-width: calc(#{$btn-border-width} * 2);
-
- display: inline-flex;
- flex-shrink: 0;
- align-items: center;
- justify-content: center;
- padding: 0;
- block-size: calc(#{$btn-icon-size} + #{$borders-width});
- font-size: $btn-icon-font-size;
- inline-size: calc(#{$btn-icon-size} + #{$borders-width});
-
- .icon-base{
- @include icon-base($btn-icon-font-size);
- }
-
- &.btn-xl {
- block-size: calc(#{$btn-icon-size-xl} + #{$borders-width});
- inline-size: calc(#{$btn-icon-size-xl} + #{$borders-width});
- .icon-base {
- @include icon-base($btn-icon-font-size-xl);
- }
- }
-
- &.btn-lg {
- block-size: calc(#{$btn-icon-size-lg} + #{$borders-width});
- font-size: $btn-icon-font-size-lg;
- inline-size: calc(#{$btn-icon-size-lg} + #{$borders-width});
- .icon-base {
- @include icon-base($btn-icon-font-size-lg);
- }
- }
-
- &.btn-sm {
- block-size: calc(#{$btn-icon-size-sm} + #{$borders-width});
- font-size: $btn-icon-font-size-sm;
- inline-size: calc(#{$btn-icon-size-sm} + #{$borders-width});
- .icon-base {
- @include icon-base($btn-font-size-sm);
- }
- }
-
- &.btn-xs {
- block-size: calc(#{$btn-icon-size-xs} + #{$borders-width});
- font-size: $btn-icon-font-size-xs;
- inline-size: calc(#{$btn-icon-size-xs} + #{$borders-width});
- .icon-base {
- @include icon-base($btn-font-size-xs);
- }
- }
- }
-
- /* Link buttons */
- .btn.btn-link {
- font-size: inherit;
- }
-
- .btn-pinned {
- position: absolute;
- inset-block-start: .75rem;
- inset-inline-end: .75rem;
- }
-
- /* Button focus */
- button:focus,
- button:focus-visible {
- outline: 0;
- }
-
- /* Generate contextual modifier classes for colorizing the button */
-
- /* The $custom-theme-colors variable is used to ensure that the colors for the social buttons
- come from a separate array. To achieve this, both the $custom-colors and $theme-colors
- arrays are merged in the _color.scss file. */
- @each $state in map-keys($custom-theme-colors) {
- /* Default */
- .btn-#{$state} {
- --#{$prefix}btn-bg: var(--#{$prefix}#{$state});
- --#{$prefix}btn-color: var(--#{$prefix}#{$state}-contrast);
- --#{$prefix}btn-border-color: var(--#{$prefix}#{$state});
- --#{$prefix}btn-hover-color: var(--#{$prefix}#{$state}-contrast);
- --#{$prefix}btn-hover-bg: color-mix(in sRGB, #{$color-contrast-dark} #{$btn-hover-bg-shade-amount}, var(--#{$prefix}#{$state}));
- --#{$prefix}btn-hover-border-color: var(--#{$prefix}btn-hover-bg);
- --#{$prefix}btn-active-color: var(--#{$prefix}#{$state}-contrast);
- --#{$prefix}btn-active-bg: color-mix(in sRGB, #{$color-contrast-dark} #{$btn-active-bg-shade-amount}, var(--#{$prefix}#{$state}));
- --#{$prefix}btn-active-border-color: var(--#{$prefix}btn-active-bg);
- --#{$prefix}btn-box-shadow-rgb: var(--#{$prefix}#{$state}-rgb);
- --#{$prefix}btn-disabled-color: var(--#{$prefix}#{$state}-contrast);
- --#{$prefix}btn-disabled-bg: var(--#{$prefix}#{$state});
- --#{$prefix}btn-disabled-border-color: var(--#{$prefix}#{$state});
- --#{$prefix}btn-group-border-color: color-mix(in sRGB, #{$color-contrast-dark} #{$btn-active-bg-shade-amount}, var(--#{$prefix}#{$state}));
- }
-
- /* Label */
- .btn-label-#{$state}{
- @if $state == "light" {
- --#{$prefix}btn-color: var(--#{$prefix}#{$state}-contrast);
- } @else {
- --#{$prefix}btn-color: var(--#{$prefix}#{$state});
- }
- --#{$prefix}btn-bg: color-mix(in sRGB, var(--#{$prefix}paper-bg) #{$btn-label-tint-amount}, var(--#{$prefix}#{$state}));
- --#{$prefix}btn-border-color: var(--#{$prefix}btn-bg);
- --#{$prefix}btn-hover-color: var(--#{$prefix}#{$state}-contrast);
- --#{$prefix}btn-hover-bg: color-mix(in sRGB, #{$color-contrast-dark} #{$btn-label-active-shade-amount}, var(--#{$prefix}#{$state}));
- --#{$prefix}btn-box-shadow-rgb: var(--#{$prefix}#{$state}-rgb);
- --#{$prefix}btn-hover-border-color: var(--#{$prefix}btn-hover-bg);
- --#{$prefix}btn-active-color: var(--#{$prefix}#{$state}-contrast);
- --#{$prefix}btn-active-bg: color-mix(in sRGB, #{$color-contrast-dark} #{$btn-label-active-shade-amount}, var(--#{$prefix}#{$state}));
- --#{$prefix}btn-active-border-color: var(--#{$prefix}btn-active-bg);
- --#{$prefix}btn-disabled-color: var(--#{$prefix}btn-color);
- --#{$prefix}btn-disabled-bg: var(--#{$prefix}btn-bg);
- --#{$prefix}btn-disabled-border-color: var(--#{$prefix}btn-border-color);
- --#{$prefix}btn-group-border-color: var(--#{$prefix}#{$state});
- --#{$prefix}btn-group-border-color: color-mix(in sRGB, var(--#{$prefix}paper-bg) #{$btn-label-group-border-shade-amount}, var(--#{$prefix}#{$state}));
- }
-
- /* Outline */
- .btn-outline-#{$state}{
- --#{$prefix}btn-color: var(--#{$prefix}#{$state});
- --#{$prefix}btn-border-color: var(--#{$prefix}#{$state});
- --#{$prefix}btn-hover-color: var(--#{$prefix}#{$state}-contrast);
- --#{$prefix}btn-hover-bg: color-mix(in sRGB, #{$color-contrast-dark} #{$btn-outline-active-bg-shade-amount}, var(--#{$prefix}#{$state}));
- --#{$prefix}btn-hover-border-color: var(--#{$prefix}btn-hover-bg);
- --#{$prefix}btn-box-shadow-rgb: var(--#{$prefix}#{$state}-rgb);
- --#{$prefix}btn-active-color: var(--#{$prefix}#{$state}-contrast);
- --#{$prefix}btn-active-bg: color-mix(in sRGB, #{$color-contrast-dark} #{$btn-outline-active-bg-shade-amount}, var(--#{$prefix}#{$state}));
- --#{$prefix}btn-active-border-color: var(--#{$prefix}btn-active-bg);
- --#{$prefix}btn-disabled-color: var(--#{$prefix}#{$state});
- --#{$prefix}btn-disabled-border-color: var(--#{$prefix}#{$state});
- --#{$prefix}btn-group-border-color: var(--#{$prefix}#{$state});
- }
-
- /* Text */
- .btn-text-#{$state} {
- @if #{$state} == "secondary" {
- --#{$prefix}btn-color: var(--#{$prefix}body-color);
- --#{$prefix}btn-hover-color: var(--#{$prefix}body-color);
- --#{$prefix}btn-active-color: var(--#{$prefix}body-color);
- } @else {
- --#{$prefix}btn-color: var(--#{$prefix}#{$state});
- --#{$prefix}btn-hover-color: var(--#{$prefix}#{$state});
- --#{$prefix}btn-active-color: var(--#{$prefix}#{$state});
- --#{$prefix}btn-group-border-color: var(--#{$prefix}#{$state});
- }
- --#{$prefix}btn-hover-color: var(--#{$prefix}#{$state});
- --#{$prefix}btn-active-color: var(--#{$prefix}#{$state});
- --#{$prefix}btn-group-border-color: var(--#{$prefix}#{$state});
- --#{$prefix}btn-hover-bg: color-mix(in sRGB, var(--#{$prefix}paper-bg) #{$btn-text-hover-tint-amount}, var(--#{$prefix}#{$state}));
- --#{$prefix}btn-hover-border-color: var(--#{$prefix}btn-hover-bg);
- --#{$prefix}btn-active-bg: color-mix(in sRGB, var(--#{$prefix}paper-bg) #{$btn-text-active-tint-amount}, var(--#{$prefix}#{$state}));
- --#{$prefix}btn-active-border-color: var(--#{$prefix}btn-active-bg);
- --#{$prefix}btn-disabled-color: var(--#{$prefix}#{$state});
- }
- }
-
- /* Dark Theme */
-
- @if $enable-dark-mode {
- @include color-mode(dark) {
- @each $state in map-keys($custom-theme-colors) {
- .btn-label-#{$state} {
- @if $state == "dark" or $state == "github" or $state == "slack" {
- --#{$prefix}btn-color: var(--#{$prefix}#{$state}-contrast);
- --#{$prefix}btn-bg: color-mix(in sRGB, #{$color-contrast-dark} 50%, var(--#{$prefix}#{$state}));
- }
- }
- .btn-outline-#{$state} {
- @if $state == "dark" {
- --#{$prefix}btn-color: var(--#{$prefix}#{$state}-contrast);
- }
- }
- .btn-text-#{$state} {
- --#{$prefix}btn-hover-bg: color-mix(in sRGB, var(--#{$prefix}#{$state}) #{$btn-text-hover-shade-amount}, var(--#{$prefix}paper-bg));
- --#{$prefix}btn-active-bg: color-mix(in sRGB, var(--#{$prefix}#{$state}) #{$btn-text-active-shade-amount}, var(--#{$prefix}paper-bg));
- @if $state == "github" or $state == "slack" {
- --#{$prefix}btn-color: var(--#{$prefix}#{$state}-contrast);
- --#{$prefix}btn-hover-color: var(--#{$prefix}#{$state}-contrast);
- --#{$prefix}btn-bg: color-mix(in sRGB, var(--#{$prefix}#{$state}) 25%, var(--#{$prefix}paper-bg));
- --#{$prefix}btn-hover-bg: color-mix(in sRGB, var(--#{$prefix}#{$state}) 50%, var(--#{$prefix}paper-bg));
- --#{$prefix}btn-active-bg: color-mix(in sRGB, var(--#{$prefix}#{$state}) 50%, var(--#{$prefix}paper-bg));
- --#{$prefix}btn-active-color: var(--#{$prefix}#{$state}-contrast);
- --#{$prefix}btn-group-border-color: var(--#{$prefix}#{$state}-contrast);
- }
- }
- }
- }
- }
|