mirror of
https://github.com/wagtail/wagtail.git
synced 2024-12-01 11:41:20 +01:00
88fad9a071
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.
356 lines
7.9 KiB
SCSS
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');
|
|
}
|
|
}
|
|
}
|