@use "sass:map";

/*
---
name: drawer()
category:
  - core/abstract
---
Abstract drawer component

### scss
```scss
//
// @param  hash  $params
//   width      length
//   max-width  length
//

@use "node_modules/sass-basis/src/css/core";

.c-drawer {
  @include core.drawer();

  &__focus-point {
    height: 0px !important;
    width: 0px !important;
    opacity: 0 !important;
  }

  &__menu,
  &__submenu {
    @include core.list-unstyled();

    > *:not(:first-child) {
      margin-top: var(--_margin-1);
    }
  }

  &__item,
  &__subitem {
    position: relative;
    overflow: hidden;

    &--has-submenu {
      display: flex;
      flex-wrap: wrap;
      justify-content: space-between;

      > * {
        flex: 1 1 auto;
      }

      > a {
        padding-right: var(--_padding-1);
        max-width: calc(100% - 42px);
      }

      > .c-drawer__toggle {
        flex: 0 0 auto;
        width: 42px;
        overflow: hidden;
      }

      > .c-drawer__submenu {
        flex: 1 1 100%;
      }
    }
  }

  &__submenu {
    margin-top: var(--_margin-1);
    margin-left: var(--_margin-1);

    &[aria-hidden="true"] {
      display: none;
      visibility: hidden;
    }
  }

  &__toggle {
    display: flex;
    align-items: center;
    justify-content: center;
  }
}
```

### js
```js
import BasisDrawer from 'node_modules/sass-basis/src/js/_drawer.js';
new BasisDrawer({
  drawer : '.c-drawer',
});
```

### html
```ejs
<div style="min-height: 200px; overflow: hidden">
  <nav id="drawer" class="c-drawer" role="navigation" aria-hidden="true" aria-labelledby="my-drawer-btn">
    <div class="c-drawer__inner">
      <ul class="c-drawer__menu">
        <li class="c-drawer__item"><a href="#">menu</a></li>
        <li class="c-drawer__item"><a href="#">menu</a></li>
        <li class="c-drawer__item">
          <a href="#">menu</a>
          <button class="c-drawer__toggle" aria-expanded="false">
            <span class="c-ic-angle-right" aria-hidden="true"></span>
          </button>
          <ul class="c-drawer__submenu" aria-hidden="true">
            <li class="c-drawer__subitem"><a href="#">submenu</a></li>
            <li class="c-drawer__subitem">
              <a href="#">submenu</a>
              <button class="c-drawer__toggle" aria-expanded="false">
                <span class="c-ic-angle-right" aria-hidden="true"></span>
              </button>
              <ul class="c-drawer__submenu" aria-hidden="true">
                <li class="c-drawer__subitem"><a href="#">submenu</a></li>
              </ul>
            </li>
          </ul>
        </li>
        <li class="c-drawer__item">
          <a href="#">menu</a>
          <button class="c-drawer__toggle" aria-expanded="false">
            <span class="c-ic-angle-right" aria-hidden="true"></span>
          </button>
          <ul class="c-drawer__submenu" aria-hidden="true">
            <li class="c-drawer__subitem"><a href="#">submenu</a></li>
            <li class="c-drawer__subitem"><a href="#">submenu</a></li>
          </ul>
        </li>
      </ul>
    </div>
  </nav>
  <div class="c-drawer-close-zone" aria-controls="drawer" aria-hidden="true"></div>

  <nav id="drawer-inverse" class="c-drawer c-drawer--inverse" role="navigation" aria-hidden="true" aria-labelledby="my-drawer-btn-inverse">
    <div class="c-drawer__inner">
      <ul class="c-drawer__menu">
        <li class="c-drawer__item"><a href="#">menu</a></li>
        <li class="c-drawer__item"><a href="#">menu</a></li>
        <li class="c-drawer__item">
          <a href="#">menu</a>
          <button class="c-drawer__toggle" aria-expanded="false">
            <span class="c-ic-angle-right" aria-hidden="true"></span>
          </button>
          <ul class="c-drawer__submenu" aria-hidden="true">
            <li class="c-drawer__subitem"><a href="#">submenu</a></li>
            <li class="c-drawer__subitem">
              <a href="#">submenu</a>
              <button class="c-drawer__toggle" aria-expanded="false">
                <span class="c-ic-angle-right" aria-hidden="true"></span>
              </button>
              <ul class="c-drawer__submenu" aria-hidden="true">
                <li class="c-drawer__subitem"><a href="#">submenu</a></li>
              </ul>
            </li>
          </ul>
        </li>
        <li class="c-drawer__item">
          <a href="#">menu</a>
          <button class="c-drawer__toggle" aria-expanded="false">
            <span class="c-ic-angle-right" aria-hidden="true"></span>
          </button>
          <ul class="c-drawer__submenu" aria-hidden="true">
            <li class="c-drawer__subitem"><a href="#">submenu</a></li>
            <li class="c-drawer__subitem"><a href="#">submenu</a></li>
          </ul>
        </li>
      </ul>
    </div>
  </nav>
  <div class="c-drawer-close-zone" aria-controls="drawer-inverse" aria-hidden="true"></div>
</div>

<button id="my-drawer-btn" class="c-hamburger-btn" aria-expanded="false" aria-controls="drawer">
  <span class="c-hamburger-btn__bars">
    <span class="c-hamburger-btn__bar"></span>
    <span class="c-hamburger-btn__bar"></span>
    <span class="c-hamburger-btn__bar"></span>
  </span>
  <span class="c-hamburger-btn__label">MENU</span>
</button>

<button id="my-drawer-btn-inverse" class="c-hamburger-btn" aria-expanded="false" aria-controls="drawer-inverse">
  <span class="c-hamburger-btn__bars">
    <span class="c-hamburger-btn__bar"></span>
    <span class="c-hamburger-btn__bar"></span>
    <span class="c-hamburger-btn__bar"></span>
  </span>
  <span class="c-hamburger-btn__label">MENU (Inverse)</span>
</dibuttonv>
```
*/

@mixin drawer($params: ()) {
  $params: map.merge(
    (
      width: 20rem,
      max-width: 80%,
    ),
    $params
  );

  $width: map.get($params, 'width');
  $max-width: map.get($params, 'max-width');

  position: absolute;
  top: 0;
  bottom: 0;
  left: -100%;
  z-index: 10;
  width: min(#{ $width }, #{ $max-width });
  visibility: hidden;

  &[aria-hidden="false"] {
    visibility: visible;
    left: 0;
  }

  &--inverse {
    left: auto;
    right: -100%;

    &[aria-hidden="false"] {
      left: auto;
      right: 0;
    }
  }

  &__inner {
    height: 100%;
    overflow-y: auto;
  }

  &__submenu {
    height: 0;
    overflow: hidden;
    visibility: hidden;

    &[aria-hidden="false"] {
      height: auto;
      overflow: visible;
      visibility: visible;
    }
  }

  &__item,
  &__subitem {
    > a {
      display: block;
      text-decoration: none;
    }
  }

  &__toggle {
    cursor: pointer;
    appearance: none;
    background: transparent;
    border: none;
    color: inherit;
    padding: 0;
    vertical-align: middle;
  }
}
