Are we Design Tokens yet?

browser/components/sidebar/sidebar-main.css

Propagation: 50%

Back to Home
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */

@media -moz-pref("sidebar.verticalTabs") {
  :host {
    --button-size-icon: var(--tab-min-height);
    --button-min-height: var(--button-size-icon);
  }
}

[hidden] {
  display: none !important;
}

:host {
  width: 100%;
  /* moz-button paints its focus indicator outside the button's border box, so
   * containers that clip labels have to extend their clip rect by the same
   * amount, or they slice the indicator. Resolves to 0 where the indicator is
   * inset (negative offset), which needs no extra room. */
  --focus-ring-clip-margin: max(0px, calc(var(--focus-outline-offset) + var(--focus-outline-width)));
}

.wrapper {
  display: grid;
  grid-template-rows: auto min-content min-content;
  box-sizing: border-box;
  height: 100%;
  max-width: 100%;
  padding-inline: 0;

  @media -moz-pref("sidebar.verticalTabs") {
    display: flex;
    flex-direction: column;

    :host([expanded]) & {
      /* TODO: Should this be some other pixel value between 5/6? Need to be careful of Linux where font size is larger */
      --tab-pinned-horizontal-count: 5;
      /* TODO: These --space-* tokens should use semantic names shared with tabs.css */
      width: var(
        --sidebar-expanded-launcher-width,
        calc(var(--tab-pinned-horizontal-count) * var(--tab-pinned-min-width-expanded) + 2 * var(--tab-container-margin-inline-pinned-expanded) + 1px)
      );
    }

    :host([customWidth]) & {
      width: 100%;
    }
  }
}

#sidebar-tools-and-extensions-splitter {
  display: block;
  border: none;
  /* Overrides the default background-color for Win/Linux in splitter.css */
  background-color: transparent;
  background-image: var(--sidebar-divider-image);
  background-size: var(--sidebar-divider-size);
  background-position: var(--sidebar-divider-position);
  background-repeat: no-repeat;
  margin-inline: var(--tab-margin-inline-inner);
  margin-block-end: var(--space-small);
  min-height: 2px;
  @media -moz-pref("browser.nova.enabled") {
    min-height: 4px;
  }

  &:hover {
    background-color: var(--focus-outline-color);
    background-image: none;
    border-radius: var(--border-radius-medium);
  }

  @media not -moz-pref("sidebar.visibility", "expand-on-hover") {
    /* We need these rules to apply at all times when the sidebar.visibility
    pref is not set to "expand-on-hover" as opposed to when the "sidebar-expand-on-hover" attribute
    has not been added to root. There are certain scenarios when that attribute is temporarily
    removed from root such as when toggling the sidebar to expand with the toolbar button. */
    :host([expanded]) & {
      background-image: none;
    }
  }

  /* Collapsing holds the launcher at its expanded width so that clip-path has
  something to clip, so the divider would otherwise be drawn around the width
  it is animating away from. Wait for the real width to be restored. */
  :host([sidebar-ongoing-animations]:not([expanded])) & {
    background-image: none;
  }
}

.actions-list {
  display: flex;
  flex-direction: column;
  align-items: start;
  max-width: 100%;
  overflow: clip;
  overflow-clip-margin: var(--focus-ring-clip-margin);
  /* Unlike overflow: hidden, clip doesn't make this a scroll container, so the
   * automatic minimum size no longer collapses to zero. Restore it explicitly:
   * collapsed expand-on-hover relies on this list shrinking away so that only
   * the overflow chevron remains visible. */
  min-height: 0;
  min-width: 0;

  > moz-button {
    --button-icon-fill: var(--toolbarbutton-icon-fill);
    --button-attention-dot-color: light-dark(#53b93a, #73d25d);
  }

  > moz-button:not(.tools-overflow) {
    /* --sidebar-launcher-button-padding-inline is set in the parent doc
     * (browser/themes/shared/sidebar.css) so it can react to the document's
     * uidensity attribute; falls back to --space-medium for any context
     * that doesn't set it. The auto-compact width check uses a fixed
     * reference width matching the non-compact value, so the launcher must
     * visibly shrink in compact mode to keep the trigger stable. */
    --button-outer-padding-inline: var(--sidebar-launcher-button-padding-inline, var(--space-medium));
    --button-outer-padding-block: var(--space-xxsmall);

    &:first-of-type {
      --button-outer-padding-block-start: var(--space-small);

      @media -moz-pref("browser.nova.enabled") and (not -moz-pref("sidebar.verticalTabs")) {
        --button-outer-padding-block-start: 4px;
      }
    }

    &:last-of-type {
      --button-outer-padding-block-end: var(--space-small);

      @media -moz-pref("browser.nova.enabled") and (not -moz-pref("sidebar.verticalTabs")) {
        --button-outer-padding-block-end: 4px;
      }
    }
  }

  &.overflow-button {
    flex-shrink: 0;
  }
}

:host([sidebar-positionend]) .more-tools-button::part(button) {
  transform: scaleX(-1);
}

.tools-and-extensions[orientation="horizontal"] {
  :host([expanded]) & {
    display: flex;
    flex-wrap: wrap-reverse;
    flex-direction: row;
    justify-content: flex-start;
    align-content: flex-start;
    gap: var(--space-xxsmall);
    padding-inline: var(--space-medium);
    padding-block-end: var(--space-small);

    @media -moz-pref("browser.nova.enabled") {
      gap: 12.5px;
    }

    @media -moz-pref("sidebar.visibility", "expand-on-hover") {
      /* We need these rules to apply at all times when the sidebar.visibility
      pref is set to "expand-on-hover" as opposed to when the "sidebar-expand-on-hover" attribute
      has not been added to root. There are certain scenarios when that attribute is temporarily
      removed from root such as when toggling the sidebar to expand with the toolbar button. */
      margin-block-start: var(--space-small);
    }

    .tools-overflow {
      width: unset;
    }

    &[overflowing="true"] {
      padding-inline-end: 0;
      flex-wrap: nowrap;
    }
  }
}

.buttons-wrapper {
  display: flex;
  flex-direction: column;
  flex-shrink: 0;
  justify-content: space-between;
  min-height: calc(var(--button-min-height) + (var(--space-small) * 2));
  overflow: clip;
  overflow-clip-margin: var(--focus-ring-clip-margin);

  :host([expanded]) & {
    flex-direction: row;
    align-items: flex-end;
  }

  @media -moz-pref("sidebar.visibility", "expand-on-hover") {
    /* We need these rules to apply at all times when the sidebar.visibility
    pref is set to "expand-on-hover" as opposed to when the "sidebar-expand-on-hover" attribute
    has not been added to root. There are certain scenarios when that attribute is temporarily
    removed from root such as when toggling the sidebar to expand with the toolbar button. */
    :host(:not([expanded])) & {
      grid-template-rows: 1fr;
      padding-block-end: var(--space-small);
    }
  }
}

.bottom-actions > moz-button:last-of-type {
  --button-outer-padding-block-end: var(--space-medium);
}

@media (prefers-reduced-motion: no-preference) {
  moz-button::part(moz-button-label) {
    opacity: 0;
    transition: opacity 300ms ease-in-out;
  }
}

.bottom-actions {
  align-self: end;
}
Back to Home