{"version":3,"file":"index-C0MQWFIz.js","sources":["../../../app/frontend/vue/src/components-tw/shared/s-modal/s-modal-container.vue","../../../app/frontend/vue/src/components-tw/shared/s-modal/s-modal-wrapper.vue","../../../app/frontend/vue/src/components-tw/shared/s-modal/s-modal-body.vue","../../../app/frontend/vue/src/components-tw/shared/s-modal/index.vue","../../../app/frontend/vue/src/components-tw/shared/s-modal/s-modal-footer.vue"],"sourcesContent":["<template>\n  <!-- Modal-container -->\n  <div\n    :class=\"[\n      footerSlotPresent? '_pb-0' : '_pb-4 md:_pb-5',\n      headerSlotPresent? '_pt-0' : '_pt-4 md:_pt-5',\n      containerClass\n    ]\"\n    body-scroll-lock-ignore\n    class=\"\n      _bg-white-100 _px-4 md:_px-6 _rounded-2xl _rounded-b-none md:_rounded-b-2xl _z-[1000]\n        md:_max-w-[600px] _w-full _relative _max-h-[calc(100vh_-_80px)] _overflow-y-auto\n      \"\n    style=\"box-shadow: 0px 16px 32px 4px rgba(26, 40, 51, 0.08);\"\n    role=\"dialog\"\n    aria-label=\"Модальное окно\"\n    tabindex=\"0\"\n  >\n    <slot />\n  </div>\n</template>\n\n<script>\nexport default {\n  props: {\n    footerSlotPresent: {\n      type: Boolean,\n      required: true,\n    },\n    headerSlotPresent: {\n      type: Boolean,\n      required: true,\n    },\n    containerClass: {\n      type: String,\n      default: '',\n    },\n  },\n};\n</script>\n","<template>\n  <Teleport to=\"body\">\n    <div\n      :class=\"{'_hidden': invisible}\"\n      style=\"font-size: initial\"\n    >\n      <div\n        :class=\"{'!_pointer-events-none': !isOpen}\"\n        class=\"\n          _fixed _left-0 _top-0 _flex md:_items-center _items-end\n          _w-screen _h-full _z-[9999] _justify-center\n        \"\n      >\n        <slot />\n        <!-- Modal-backdrop -->\n        <transition :name=\"backdropAnimation\">\n          <div\n            v-if=\"isOpen\"\n            class=\"_bg-black-900 _opacity-50 _fixed _left-0 _top-0 _w-full _h-full _z-[999]\"\n            tabindex=\"-1\"\n            @click=\"close\"\n          />\n        </transition>\n      </div>\n    </div>\n  </Teleport>\n</template>\n\n<script>\nimport { Teleport } from 'vue';\n\nexport default {\n  components: { Teleport },\n  props: {\n    isOpen: {\n      type: Boolean,\n      required: true,\n    },\n    invisible: {\n      type: Boolean,\n      default: false,\n    },\n    backdropAnimation: {\n      type: [String, Boolean],\n      default: 'backdrop',\n    },\n  },\n  emits: ['onModalCloseByBackdrop'],\n  methods: {\n    close() {\n      this.$emit('onModalCloseByBackdrop');\n    },\n  },\n};\n</script>\n\n<style scoped>\n  .backdrop-enter-active,\n  .backdrop-leave-active {\n    transition: opacity 0.5s ease;\n  }\n\n  .backdrop-enter-from,\n  .backdrop-leave-to {\n    opacity: 0;\n  }\n</style>\n","<template>\n  <div\n    class=\"_pb-2\"\n    role=\"region\"\n  >\n    <slot name=\"body\" />\n  </div>\n</template>\n\n<script></script>\n","<template>\n  <s-modal-wrapper\n    ref=\"modal\"\n    :is-open=\"isOpen\"\n    v-bind=\"$props\"\n    @on-modal-close-by-backdrop=\"close\"\n  >\n    <transition :name=\"modalAnimation\">\n      <s-modal-container\n        v-if=\"isOpen\"\n        :container-class=\"containerClass\"\n        :footer-slot-present=\"footerSlotPresent\"\n        :header-slot-present=\"headerSlotPresent\"\n      >\n        <s-modal-header\n          :header-class=\"headerClass\"\n          @on-close=\"closeViaButton\"\n        >\n          <template #header>\n            <slot name=\"header\" />\n          </template>\n        </s-modal-header>\n\n        <s-modal-body :class=\"bodyClass\">\n          <template #body>\n            <slot name=\"body\" />\n          </template>\n        </s-modal-body>\n\n        <!--s-modal-footer-->\n        <s-modal-footer\n          v-if=\"footerSlotPresent\"\n          :footer-class=\"footerClass\"\n        >\n          <template #footer>\n            <slot name=\"footer\" />\n          </template>\n        </s-modal-footer>\n      </s-modal-container>\n    </transition>\n  </s-modal-wrapper>\n</template>\n\n<script>\nimport { nextTick } from 'vue';\n// import { toggleBodyScroll } from \"@front/utils/fns\"\nimport { mapState, mapActions } from 'vuex';\n\nimport SModalContainer from './s-modal-container';\nimport SModalWrapper from './s-modal-wrapper';\nimport SModalHeader from './s-modal-header';\nimport SModalBody from './s-modal-body';\nimport SModalFooter from './s-modal-footer';\n\nexport default {\n  name: 'STwModal',\n  components: {\n    SModalWrapper,\n    SModalHeader,\n    SModalBody,\n    SModalFooter,\n    SModalContainer,\n  },\n  props: {\n    minHeight: {\n      type: String,\n      default: '',\n    },\n    titleLeft: {\n      type: Boolean,\n      default: false,\n    },\n    containerClass: {\n      type: String,\n      default: '',\n    },\n    footerClass: {\n      type: String,\n      default: '',\n    },\n    headerClass: {\n      type: String,\n      default: '',\n    },\n    bodyClass: {\n      type: String,\n      default: '',\n    },\n    showedViaProp: {\n      type: Boolean,\n      default: false,\n    },\n    modalName: {\n      type: String,\n      default: 'anonym-modal',\n    },\n    backdropAnimation: {\n      type: [String, Boolean],\n      default: 'backdropAnimation',\n    },\n    modalAnimation: {\n      type: [String, Boolean],\n      default: 'fade',\n    },\n  },\n  emits: ['onModalCloseButton', 'update:showedViaProp', 'onShow', 'onClose'],\n  data() {\n    return {\n      isOpen: false,\n    };\n  },\n  computed: {\n    ...mapState('modals', [\n      'modalsShowed',\n    ]),\n    footerSlotPresent() {\n      return !!this.$slots.footer;\n    },\n    headerSlotPresent() {\n      return !!this.$slots.header;\n    },\n  },\n  watch: {\n    showedViaProp(v) {\n      if (v) {\n        this.show();\n      } else {\n        this.close();\n      }\n\n      this.$emit('update:showedViaProp', v);\n    },\n  },\n  created() {\n    const onEscape = (e) => {\n      if (this.isOpen && e.keyCode === 27) {\n        this.close();\n      }\n    };\n\n    document.addEventListener('keydown', onEscape);\n  },\n\n  mounted() {\n    if (this.showedViaProp) this.show();\n  },\n\n  // unmounted() {\n  //   toggleBodyScroll(this.$refs.modal, false)\n  // },\n\n  methods: {\n    ...mapActions('modals', [\n      'A_ON_MODAL_SHOWED',\n      'A_ON_MODAL_CLOSE',\n    ]),\n    show() {\n      this.A_ON_MODAL_SHOWED(this.modalName);\n\n      this.isOpen = true;\n      nextTick(() => {\n        document.body.style.overflow = 'hidden';\n        this.$emit('onShow');\n      });\n    },\n\n    close() {\n      this.A_ON_MODAL_CLOSE(this);\n      nextTick(() => {\n        document.body.style.overflow = '';\n        this.$emit('onClose');\n      });\n\n      setTimeout(() => {\n        this.isOpen = false;\n      }, 0);\n    },\n\n    closeViaButton() {\n      this.$emit('onModalCloseButton');\n      this.close();\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n\n  .fade-enter-active,\n  .fade-leave-active {\n    transition: opacity 0.2s ease;\n  }\n\n  .fade-enter-from,\n  .fade-leave-to {\n    opacity: 0;\n  }\n\n  .bottom-slide-enter-active,\n  .bottom-slide-leave-active {\n    transition: transform 0.3s ease;\n  }\n\n  .bottom-slide-enter-from,\n  .bottom-slide-leave-to {\n    transform: translateY(100%);\n  }\n</style>\n","<template>\n  <div\n    :class=\"footerClass\"\n    class=\"_sticky _bottom-0 _pb-6 _pt-4 md:_pt-5 md:_pb-5 _bg-white-100 _m-0\"\n    tabindex=\"-1\"\n  >\n    <slot name=\"footer\" />\n  </div>\n</template>\n\n<script>\nexport default {\n  name: 'SModalFooter',\n  props: {\n    footerClass: {\n      type: String,\n      default: '',\n    },\n  },\n};\n</script>\n"],"names":["props","footerSlotPresent","type","Boolean","required","headerSlotPresent","containerClass","String","default","_createElementBlock","class","_normalizeClass","$props","style","role","tabindex","_renderSlot","_ctx","$slots","_sfc_main","components","Teleport","isOpen","invisible","backdropAnimation","emits","methods","close","this","$emit","_hoisted_1","name","SModalWrapper","_createBlock","_Teleport","to","_createElementVNode","_createVNode","_Transition","_withCtx","key","onClick","$options","args","_createCommentVNode","_","SModalBody","_cache","_openBlock","SModalFooter","footerClass","SModalContainer","minHeight","titleLeft","headerClass","bodyClass","showedViaProp","modalName","modalAnimation","data","computed","mapState","footer","header","watch","v","show","created","document","addEventListener","e","keyCode","mounted","mapActions","A_ON_MODAL_SHOWED","nextTick","body","overflow","A_ON_MODAL_CLOSE","setTimeout","closeViaButton","_component_s_modal_wrapper","_mergeProps","ref","$data","onOnModalCloseByBackdrop","_component_s_modal_container","_component_s_modal_header","onOnClose","_component_s_modal_body","_component_s_modal_footer"],"mappings":"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"}