123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- @use 'sass:map';
- @use 'sass:math';
- @use 'sass:string';
- // =============================================================================
- // Variables
- // =============================================================================
- $size-home-button: 3.5em;
- $position: 2em;
- $box-shadow-props:
- 0 0 1px 0 rgba(107, 214, 230, 1),
- 0 1px 10px 0 rgba(107, 214, 230, 0.7);
- $max-items: 12;
- $userbar-radius: 6px;
- $userbar-z-index: 9999;
- // Possible positions for the userbar to exist in. These are set through the
- // {% wagtailuserbar 'bottom-left' %} template tag.
- $positions: (
- 'top-left': (
- 'vertical': 'top',
- 'horizontal': 'left',
- ),
- 'top-right': (
- 'vertical': 'top',
- 'horizontal': 'right',
- ),
- 'bottom-left': (
- 'vertical': 'bottom',
- 'horizontal': 'left',
- ),
- 'bottom-right': (
- 'vertical': 'bottom',
- 'horizontal': 'right',
- ),
- );
- // =============================================================================
- // Wagtail userbar proper
- // =============================================================================
- .w-userbar {
- position: fixed;
- z-index: $userbar-z-index;
- font-size: initial;
- line-height: initial;
- margin: 0;
- padding: 0;
- // Stop hiding the userbar once stylesheets are loaded.
- // stylelint-disable-next-line declaration-no-important
- display: block !important;
- border: 0;
- width: auto;
- height: auto;
- &-icon {
- @include svg-icon(2em);
- }
- }
- @media print {
- .w-userbar {
- display: none;
- }
- }
- .w-userbar-trigger {
- display: flex;
- align-items: center;
- justify-content: center;
- width: $size-home-button;
- height: $size-home-button;
- margin: 0;
- background-color: theme('colors.white.DEFAULT');
- border: 2px solid transparent;
- border-radius: 50%;
- padding: 0;
- cursor: pointer;
- box-shadow: $box-shadow-props;
- transition: all 0.2s ease-in-out;
- font-size: 1rem;
- text-decoration: none;
- position: relative;
- .w-userbar-axe-count {
- display: flex;
- justify-content: center;
- align-items: center;
- background-color: theme('colors.critical.200');
- border-radius: theme('borderRadius.full');
- color: theme('colors.text-button');
- font-size: theme('fontSize.14');
- line-height: theme('lineHeight.none');
- height: theme('spacing.5');
- width: theme('spacing.5');
- position: absolute;
- inset-inline-end: -5px;
- top: -5px;
- @media (forced-colors: active) {
- border: theme('spacing.px') solid ButtonText;
- }
- }
- &:focus {
- outline: theme('colors.focus') solid 3px;
- }
- }
- .w-userbar-items {
- display: block;
- list-style: none;
- position: absolute;
- margin: 0;
- min-width: 210px;
- visibility: hidden;
- font-family: theme('fontFamily.sans');
- font-size: 0.875rem;
- padding-inline-start: 0;
- text-decoration: none;
- .w-userbar--active & {
- visibility: visible;
- }
- }
- .w-userbar-nav {
- background: transparent;
- padding: 0;
- margin: 0;
- display: block;
- .w-action {
- background: transparent;
- }
- }
- .w-userbar__item {
- margin: 0;
- background-color: theme('colors.surface-menus');
- opacity: 0;
- overflow: hidden;
- transition-duration: 0.125s;
- transition-timing-function: cubic-bezier(0.55, 0, 0.1, 1);
- font-family: theme('fontFamily.sans');
- font-size: 1rem;
- text-decoration: none;
- @media (prefers-reduced-motion: reduce) {
- transition: none;
- // Force disable transitions for all items
- transition-delay: 0s;
- }
- &:first-child {
- border-start-start-radius: $userbar-radius;
- border-start-end-radius: $userbar-radius;
- }
- &:last-child {
- border-end-end-radius: $userbar-radius;
- border-end-start-radius: $userbar-radius;
- }
- a,
- .w-action,
- button {
- color: theme('colors.text-label-menus-default');
- display: block;
- text-decoration: none;
- transform: none;
- transition: none;
- margin: 0;
- font-size: 0.875rem;
- &:hover,
- &:focus {
- color: theme('colors.text-label-menus-default');
- background-color: theme('colors.surface-menu-item-active');
- }
- &:focus {
- outline: theme('colors.focus') solid 3px;
- }
- &-icon {
- @include svg-icon(1em, middle);
- margin-inline-end: 0.5em;
- fill: currentColor;
- opacity: 0.4;
- }
- .w-a11y-result__count {
- margin-inline-end: theme('spacing.2');
- }
- }
- a,
- button {
- font-size: 0.875rem;
- text-align: start;
- padding: theme('spacing.[3.5]');
- }
- button {
- border: 0;
- width: 100%;
- background-color: transparent;
- outline: none;
- display: flex;
- align-items: center;
- }
- }
- .w-dialog--userbar {
- // Display off to the side of the page rather than in the middle.
- inset-inline-start: auto;
- font-family: theme('fontFamily.sans');
- padding-inline-end: 2rem;
- z-index: $userbar-z-index;
- .w-dialog__close-button {
- $size: theme('spacing.6');
- width: $size;
- height: $size;
- top: calc(-1 * $size / 2);
- inset-inline-end: calc(-1 * $size / 2);
- border-radius: theme('borderRadius.full');
- border: 2px solid theme('colors.icon-primary');
- background: theme('colors.surface-page');
- }
- .w-dialog__close-icon {
- color: theme('colors.text-context');
- }
- .w-dialog__content {
- padding: 0;
- min-height: unset;
- max-height: 60vh;
- font-size: theme('fontSize.14');
- }
- .w-dialog__header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- }
- .w-dialog__body {
- padding: 0 theme('spacing.[7.5]') theme('spacing.[7.5]');
- display: flex;
- flex-direction: column;
- gap: theme('spacing.[2.5]');
- }
- .w-dialog__title {
- @apply w-h3;
- color: theme('colors.text-context');
- padding: theme('spacing.[7.5]');
- margin-bottom: 0;
- }
- .w-dialog__subtitle {
- @apply w-body-text;
- padding-inline-end: theme('spacing.[7.5]');
- display: flex;
- align-items: center;
- gap: theme('spacing.2');
- margin-bottom: 0;
- }
- }
- //Media for Windows High Contrast
- @media (forced-colors: active) {
- .w-userbar-icon {
- fill: LinkText;
- }
- .w-userbar__item {
- border: 1px solid ButtonText;
- }
- }
- // =============================================================================
- // Userbar positional classes (tl, tr, bl, br)
- // =============================================================================
- @each $pos, $attrs in $positions {
- $vertical: map.get($attrs, vertical);
- $horizontal: map.get($attrs, horizontal);
- .w-userbar--#{$pos} {
- #{$vertical}: $position;
- #{$horizontal}: $position;
- .w-userbar-items {
- #{$vertical}: 100%;
- #{$horizontal}: 0;
- padding-#{$vertical}: theme('spacing.2');
- }
- .w-userbar__item {
- @if $vertical == 'bottom' {
- transform: translateY(1em);
- } @else {
- transform: translateY(-1em);
- }
- }
- &.w-userbar--active .w-userbar__item {
- @for $i from 1 through $max-items {
- @if $vertical == 'bottom' {
- &:nth-last-child(#{$i}) {
- transition-delay: 0.05s * $i;
- }
- }
- @if $vertical == 'top' {
- &:nth-child(#{$i}) {
- transition-delay: 0.05s * $i;
- }
- }
- }
- }
- }
- }
- // =============================================================================
- // States
- // =============================================================================
- // Active state for the list items comes last.
- .w-userbar--active .w-userbar__item {
- transform: translateY(0);
- opacity: 1;
- }
|