{#if delegateKey}
  <button type="button"
          title={label}
          aria-label={label}
          aria-pressed={pressable ? !!pressed : void 0}
          aria-hidden={ariaHidden}
          class={computedClass}
          {disabled}
          delegate-key={delegateKey}
          focus-key={focusKey || ''} >
    <svg class="icon-button-svg {svgClassName || ''}" ref:svg>
      <use xlink:href={href} />
    </svg>
  </button>
{:else}
  <button type="button"
          title={label}
          aria-label={label}
          aria-pressed={pressable ? !!pressed : void 0}
          aria-hidden={ariaHidden}
          class={computedClass}
          focus-key={focusKey || ''}
          {disabled}
          on:click >
    <svg class="icon-button-svg {svgClassName || ''}" ref:svg>
      <use xlink:href={href} />
    </svg>
  </button>
{/if}
<style>
  .icon-button {
    padding: 6px 10px;
    background: none;
    border: none;
    display: flex;
    align-items: center;
    justify-content: center;
  }

  .icon-button-svg {
    width: 24px;
    height: 24px;
    fill: var(--action-button-fill-color);
    pointer-events: none; /* hack for Edge */
  }

  .icon-button.big-icon .icon-button-svg {
    width: 32px;
    height: 32px;
  }

  /*
   * regular styles
   */

  .icon-button:hover .icon-button-svg {
    fill: var(--action-button-fill-color-hover);
  }

  .icon-button.not-pressable:active .icon-button-svg,
  .icon-button.same-pressed:active .icon-button-svg {
    fill: var(--action-button-fill-color-active);
  }

  .icon-button.pressed.not-same-pressed .icon-button-svg {
    fill: var(--action-button-fill-color-pressed);
  }

  .icon-button.pressed.not-same-pressed:hover .icon-button-svg {
    fill: var(--action-button-fill-color-pressed-hover);
  }

  .icon-button.pressed.not-same-pressed:active .icon-button-svg {
    fill: var(--action-button-fill-color-pressed-active);
  }

  /*
   * muted
   */

  .icon-button.muted-style .icon-button-svg {
    fill: var(--action-button-deemphasized-fill-color);
  }

  .icon-button.muted-style:hover .icon-button-svg {
    fill: var(--action-button-deemphasized-fill-color-hover);
  }

  .icon-button.muted-style.not-pressable:active .icon-button-svg,
  .icon-button.muted-style.same-pressed:active .icon-button-svg {
    fill: var(--action-button-deemphasized-fill-color-active);
  }

  .icon-button.muted-style.pressed.not-same-pressed .icon-button-svg {
    fill: var(--action-button-deemphasized-fill-color-pressed);
  }

  .icon-button.muted-style.pressed.not-same-pressed:hover .icon-button-svg {
    fill: var(--action-button-deemphasized-fill-color-pressed-hover);
  }

  .icon-button.muted-style.pressed.not-same-pressed:active .icon-button-svg {
    fill: var(--action-button-deemphasized-fill-color-pressed-active);
  }

</style>
<script>
  import { classname } from '../_utils/classname'
  import { store } from '../_store/store'
  import { animate } from '../_utils/animate'

  export default {
    data: () => ({
      big: false,
      muted: false,
      disabled: false,
      svgClassName: void 0,
      focusKey: void 0,
      pressable: false,
      pressed: false,
      className: void 0,
      delegateKey: void 0,
      sameColorWhenPressed: false,
      ariaHidden: false
    }),
    store: () => store,
    computed: {
      computedClass: ({ pressable, pressed, big, muted, sameColorWhenPressed, className }) => {
        return classname(
          'icon-button',
          !pressable && 'not-pressable',
          pressed && 'pressed',
          big && 'big-icon',
          muted && 'muted-style',
          sameColorWhenPressed ? 'same-pressed' : 'not-same-pressed',
          className
        )
      }
    },
    methods: {
      animate (animation) {
        let { reduceMotion } = this.store.get()
        if (!animation || reduceMotion) {
          return
        }
        let svg = this.refs.svg
        animate(svg, animation)
      }
    }
  }
</script>