JSFiddle - React, Tailwind, and code Playground

HTML

<div id="app">
  <button @click="showModal = true">Открыть склад</button>
  <store-modal-component
    :show-modal="showModal"
    @close="showModal = false"
  ></store-modal-component>
</div>

CSS

body {
  margin: 0;
}

.modal-enter-active,
.modal-leave-active {
  transition: all 0.5s;
}

.modal-enter,
.modal-leave-to {
  opacity: 0;
}

.modal {
  position: absolute;
  left: 0;
  top: 0;
}

.modal-mask {
  left: 0;
  top: 0;
  width: 100vw;
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  background: rgba(1, 1, 1, 0.5);
}

.modal-wrapper {
  background: white;
  padding: 10px;
}

JavaScript

Vue.component('store-modal-component', {
  template: `
<div class="modal">
  <transition name="modal">
    <div class="modal-mask" v-if="showModal" @click.self="$emit('close')">
      <div class="modal-wrapper">
        <div class="modal-container">
          <div class="modal-header">
            <slot name="header">
              Склад
              <button class="modal-default-button" @click="$emit('close')">
                &times;
              </button>
            </slot>
          </div>
          <div class="modal-body">
            <slot name="body"></slot>
          </div>
        </div>
      </div>
    </div>
  </transition>
</div>`,
  props: [ 'showModal' ]
});

new Vue({
  el: '#app',
  data: {
    showModal: false
  }
});