@use "sass:map";
@use "../settings" as *;

@if map.get($modules, "components/nav") {
  /**
   * Nav
   */

  // Reboot based on :
  // - sanitize.css v13.0.0 | CC0 1.0 Universal | github.com/csstools/sanitize.css

  // Prevent VoiceOver from ignoring list semantics in Safari (opinionated)
  :where(nav li)::before {
    float: left;
    content: "\200B";
  }

  // Pico
  // ––––––––––––––––––––

  #{$parent-selector} nav,
  #{$parent-selector} nav ul {
    display: flex;
  }

  #{$parent-selector} nav {
    justify-content: space-between;
    overflow: visible;

    ol,
    ul {
      align-items: center;
      margin-bottom: 0;
      padding: 0;
      list-style: none;

      &:first-of-type {
        margin-left: calc(var(#{$css-var-prefix}nav-element-spacing-horizontal) * -1);
      }
      &:last-of-type {
        margin-right: calc(var(#{$css-var-prefix}nav-element-spacing-horizontal) * -1);
      }
    }

    li {
      display: inline-block;
      margin: 0;
      padding: var(#{$css-var-prefix}nav-element-spacing-vertical)
        var(#{$css-var-prefix}nav-element-spacing-horizontal);

      :where(a, [role="link"]) {
        display: inline-block;
        margin: calc(var(#{$css-var-prefix}nav-link-spacing-vertical) * -1)
          calc(var(#{$css-var-prefix}nav-link-spacing-horizontal) * -1);
        padding: var(#{$css-var-prefix}nav-link-spacing-vertical)
          var(#{$css-var-prefix}nav-link-spacing-horizontal);
        border-radius: var(#{$css-var-prefix}border-radius);

        &:not(:hover) {
          text-decoration: none;
        }
      }

      // Minimal support for buttons and forms elements
      button,
      [role="button"],
      [type="button"],
      input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"]),
      select {
        height: auto;
        margin-right: inherit;
        margin-bottom: 0;
        margin-left: inherit;
        padding: calc(
            var(#{$css-var-prefix}nav-link-spacing-vertical) -
              (var(#{$css-var-prefix}border-width) * 2)
          )
          var(#{$css-var-prefix}nav-link-spacing-horizontal);
      }
    }

    // Breadcrumb
    &[aria-label="breadcrumb"] {
      align-items: center;
      justify-content: start;

      & ul li {
        &:not(:first-child) {
          margin-inline-start: var(#{$css-var-prefix}nav-link-spacing-horizontal);
        }

        a {
          margin: calc(var(#{$css-var-prefix}nav-link-spacing-vertical) * -1) 0;
          margin-inline-start: calc(var(#{$css-var-prefix}nav-link-spacing-horizontal) * -1);
        }

        &:not(:last-child) {
          &::after {
            display: inline-block;
            position: absolute;
            width: calc(var(#{$css-var-prefix}nav-link-spacing-horizontal) * 4);
            margin: 0 calc(var(#{$css-var-prefix}nav-link-spacing-horizontal) * -1);
            content: var(#{$css-var-prefix}nav-breadcrumb-divider);
            color: var(#{$css-var-prefix}muted-color);
            text-align: center;
            text-decoration: none;
            white-space: nowrap;
          }
        }
      }

      // Minimal support for aria-current
      & a[aria-current]:not([aria-current="false"]) {
        background-color: transparent;
        color: inherit;
        text-decoration: none;
        pointer-events: none;
      }
    }
  }

  // Vertical Nav
  #{$parent-selector} aside {
    nav,
    ol,
    ul,
    li {
      display: block;
    }

    li {
      padding: calc(var(#{$css-var-prefix}nav-element-spacing-vertical) * 0.5)
        var(#{$css-var-prefix}nav-element-spacing-horizontal);

      a {
        display: block;
      }

      // Minimal support for links as buttons
      [role="button"] {
        margin: inherit;
      }
    }
  }

  // Breadcrumb RTL
  [dir="rtl"] {
    #{$parent-selector} nav {
      &[aria-label="breadcrumb"] {
        & ul li {
          &:not(:last-child) {
            ::after {
              content: "\\";
            }
          }
        }
      }
    }
  }
}
