0
0
mirror of https://github.com/wagtail/wagtail.git synced 2024-12-01 11:41:20 +01:00
wagtail/client/scss/components/_button.scss
Sage Abdullah 88fad9a071
Show full label for non-page listings HeaderButton
In the new designs, listings other than the page listings should show
the complete label for the main header button.

The page listing only shows the icon because much of the space is taken
by the side panel toggles.

The page listing's header button hasn't been refactored to use the
HeaderButton class, hence there is no changes to the page listings code
in this commit.
2024-03-11 09:55:41 +00:00

356 lines
7.9 KiB
SCSS

// stylelint-disable max-nesting-depth
// Core button styles
@use 'sass:color';
.button {
border-radius: theme('borderRadius.sm');
width: auto;
height: 2.25em;
padding: 0 1em;
font-size: theme('fontSize.14');
font-weight: theme('fontWeight.normal');
line-height: calc(2.25em - 2px); // account for border
vertical-align: middle;
display: inline-block;
background-color: theme('colors.surface-button-default');
border: 1px solid theme('colors.surface-button-default');
outline-offset: $focus-outline-width;
color: theme('colors.text-button');
text-decoration: none;
white-space: nowrap;
position: relative;
overflow: hidden;
transition: background-color 0.1s ease;
// stylelint-disable-next-line property-no-vendor-prefix
-moz-appearance: none;
-webkit-font-smoothing: auto;
+ .button {
// ensure buttons can sit next to each other with a nice margin
margin-inline-start: theme('spacing.4');
}
&.button-small {
padding: 0 theme('spacing.3');
height: 2em;
font-size: calc(theme('fontSize.14') * 0.87);
line-height: calc(2em - 2px); // account for border
}
&.button--icon {
.icon {
@include svg-icon();
}
}
&.button-secondary {
color: theme('colors.text-button-outline-default');
background-color: transparent;
&:hover {
background-color: theme('colors.surface-button-outline-hover');
border-color: theme('colors.border-button-outline-hover');
color: theme('colors.text-button-outline-hover');
}
}
&.warning {
background-color: theme('colors.warning.100');
border-color: theme('colors.warning.100');
&.button-secondary {
border-color: theme('colors.warning.100');
color: theme('colors.warning.100');
background-color: transparent;
}
&:hover {
color: theme('colors.text-button');
border-color: transparent;
background-color: theme('colors.warning.100');
}
}
// no/serious is not compatible with the button-secondary class
&.no,
&.serious {
background-color: theme('colors.surface-page');
border: 1px solid theme('colors.text-error');
color: theme('colors.text-error');
&:hover {
color: theme('colors.text-button-critical-outline-hover');
border-color: theme('colors.text-button-critical-outline-hover');
background-color: theme('colors.surface-button-critical-hover');
}
}
&.bicolor {
padding-inline-start: 3.5em;
.icon-wrapper {
background-color: theme('colors.black-20');
display: flex;
align-items: center;
justify-content: center;
position: absolute;
inset-inline-start: 0;
top: 0;
width: 3em;
height: 100%;
box-sizing: content-box;
text-align: center;
border-start-start-radius: inherit;
border-end-start-radius: inherit;
}
&.button--icon {
.icon {
@include svg-icon();
}
}
&.button--icon-flipped {
.icon {
transform: scaleX(-1);
}
}
&.button-secondary {
.icon-wrapper {
border-inline-end: 1px solid theme('colors.surface-button-default');
background-color: transparent;
}
&:hover {
background-color: theme('colors.text-button');
}
&:disabled,
&[disabled],
&.disabled {
.icon-wrapper {
border-color: theme('colors.surface-button-inactive');
}
}
}
&.button-small {
padding-inline-start: 3.5em;
.icon-wrapper {
width: theme('spacing.8');
}
&.button--icon .icon {
@include svg-icon(0.9rem);
padding: 0.25em;
}
&.button-secondary {
border: 0;
padding-inline-start: 2.2em;
.icon-wrapper {
border: 1px solid theme('colors.surface-button-default');
border-radius: 50%;
height: fit-content;
width: fit-content;
}
&:hover {
background-color: transparent;
.icon-wrapper {
background-color: theme('colors.surface-button-default');
color: theme('colors.text-button');
}
}
&:disabled,
&[disabled],
&.disabled {
.icon-wrapper {
background-color: transparent;
}
}
}
}
}
&.button-longrunning {
em {
font-style: normal;
}
svg.icon-spinner {
@include transition(all 0.3s ease);
display: none;
}
}
&.button-longrunning-active {
display: inline-flex;
align-items: center;
svg.icon-spinner {
@include svg-icon();
display: inline-block;
opacity: 0.8;
padding: 0;
margin-inline-end: 0.5em;
}
.button-longrunning__icon {
display: none;
}
}
// Base hover state
&:hover {
background-color: theme('colors.surface-button-hover');
color: theme('colors.text-button');
border-color: transparent;
}
// Disabled state
&:disabled,
&[disabled],
&.disabled {
background-color: theme('colors.surface-button-inactive');
border-color: theme('colors.surface-button-inactive');
color: theme('colors.text-button');
cursor: default;
pointer-events: none;
&:hover {
background-color: theme('colors.surface-button-inactive');
border-color: theme('colors.surface-button-inactive');
color: theme('colors.text-button');
cursor: default;
}
@media (forced-colors: active) {
color: GrayText;
border-color: GrayText;
border-style: dashed;
}
}
&.button-secondary:disabled,
&.button-secondary[disabled],
&.button-secondary.disabled {
background-color: theme('colors.surface-page');
border-color: theme('colors.surface-button-inactive');
color: theme('colors.text-placeholder');
}
// Buttons which are only an icon
&.text-replace {
&.button--icon {
background-color: transparent;
color: theme('colors.icon-secondary');
border-color: transparent;
font-size: 0;
text-align: center;
height: inherit;
width: inherit;
&:hover {
color: theme('colors.icon-secondary-hover');
}
.icon {
@include svg-icon(1rem, middle);
font-size: initial;
padding: 0.5em;
box-sizing: content-box;
}
&.button-small {
line-height: 1.75em;
.icon {
padding: 0.25em;
}
}
}
@include media-breakpoint-up(sm) {
&.icon {
&.button-small {
width: 1.75em;
height: 1.75em;
}
}
}
}
// Larger viewport width adjustments
@include media-breakpoint-up(sm) {
font-size: theme('fontSize.14');
padding: 0 1.4em;
height: 3em;
line-height: calc(3em - 2px); // account for border
&.bicolor {
padding-inline-start: 3.5em;
&.button-small {
padding-inline-start: 3em;
}
}
}
// Ensure visual consistency between button and a elements in WHCM
@media (forced-colors: active) {
&:not(:disabled):not(.disabled):not([disabled]) {
color: ButtonText;
border-color: ButtonText;
&:hover {
border-color: Highlight;
}
}
}
}
.w-header-button {
// Temporarily copied from .c-sf-add-button
display: flex;
align-items: center;
justify-content: center;
gap: theme('spacing.1');
height: theme('spacing.slim-header');
appearance: none;
color: theme('colors.text-button-outline-default');
padding: 0;
cursor: pointer;
&--icon-only {
width: theme('spacing.7');
}
.icon {
width: theme('spacing.4');
height: theme('spacing.4');
padding: theme('spacing.[0.5]');
border: 1px solid theme('colors.text-button-outline-default');
border-radius: theme('borderRadius.full');
transition: transform 0.3s ease;
}
&:hover,
&:focus-visible {
.icon {
color: theme('colors.surface-page');
background-color: theme('colors.text-button-outline-hover');
}
}
}