{"version":3,"file":"Modal-CCBxxNAM.js","sources":["../../../app/javascript/components/shared/Modal.vue"],"sourcesContent":["<template>\n  <fade-transition>\n    <div\n      v-if=\"open\"\n      class=\"modal flex fixed pin items-center\"\n      :class=\"modalContainerClasses\"\n      @click.self=\"closeModal\">\n      <div\n        :class=\"[\n          modalSizeClass,\n          { 'anchor-to-top': anchorToTop, 'edge-to-edge': edgeToEdge }\n        ]\"\n        class=\"modal-dialog\">\n        <div\n          :class=\"[\n            { 'flex flex-col': size === 'fullscreen' },\n            modalContentClasses\n          ]\"\n          class=\"modal-content\">\n          <overlay\n            v-if=\"loading\"\n            absolutely-positioned />\n          <div\n            v-if=\"$slots.header\"\n            :class=\"headerClass\"\n            data-cy=\"modal-heading\">\n            <slot name=\"header\"></slot>\n            <div\n              v-if=\"!requiresInteraction\"\n              class=\"cursor-pointer\"\n              data-cy=\"close-the-modal\"\n              @click=\"$emit('closed')\">\n              <slot name=\"close-icon\">\n                <svg-icon\n                  name=\"close-display\"\n                  width=\"24px\"\n                  height=\"24px\" />\n              </slot>\n            </div>\n          </div>\n          <div\n            v-else-if=\"!requiresInteraction\"\n            class=\"modal-close pb-4 flex justify-end cursor-pointer\"\n            data-cy=\"close-the-modal\"\n            @click=\"$emit('closed')\">\n            <slot name=\"close-icon\">\n              <svg-icon\n                name=\"close-display\"\n                width=\"24px\"\n                height=\"24px\" />\n            </slot>\n          </div>\n\n          <div\n            :class=\"modalBodyClasses\"\n            class=\"modal-body\">\n            <slot name=\"body\"></slot>\n          </div>\n\n          <div\n            v-if=\"$slots.footer\"\n            :class=\"[modalFooterClasses, footerClass]\">\n            <slot name=\"footer\"></slot>\n          </div>\n        </div>\n      </div>\n    </div>\n  </fade-transition>\n</template>\n\n<script>\nimport FadeTransition from \"../transitions/FadeTransition.vue\";\nimport Overlay from \"./Overlay.vue\";\nimport SvgIcon from \"./SvgIcon.vue\";\n\nexport default {\n  name: \"Modal\",\n  components: {\n    FadeTransition,\n    Overlay,\n    SvgIcon\n  },\n  props: {\n    size: {\n      type: String,\n      default: \"\"\n    },\n    open: {\n      type: Boolean,\n      default: false\n    },\n    requiresInteraction: {\n      type: Boolean,\n      default: false\n    },\n    preventBackgroundClose: {\n      type: Boolean,\n      default: false\n    },\n    headerClass: {\n      type: String,\n      default: \"modal-header\"\n    },\n    footerClass: {\n      type: String,\n      default: \"modal-footer\"\n    },\n    anchorToTop: {\n      type: Boolean,\n      default: false\n    },\n    heightConstraint: {\n      type: String,\n      default: \"normal\"\n    },\n    modalContentClasses: {\n      type: String,\n      default: \"p-4\"\n    },\n    modalBodyClasses: {\n      type: String,\n      default: null\n    },\n    loading: {\n      type: Boolean,\n      default: false\n    },\n    edgeToEdge: {\n      type: Boolean,\n      default: false\n    },\n    fullScreen: {\n      type: Boolean,\n      default: false\n    },\n    preventBackgroundScroll: {\n      type: Boolean,\n      default: false\n    }\n  },\n  emits: [\"closed\"],\n  computed: {\n    constrainHeight() {\n      return this.heightConstraint !== \"normal\";\n    },\n    modalContainerClasses() {\n      return {\n        \"constrain-height\": this.heightConstraint === \"full-constraint\",\n        \"constrain-height-max-only\": this.heightConstraint === \"max-constraint\",\n        \"full-screen\": this.fullScreen\n      };\n    },\n    modalSizeClass() {\n      return {\n        \"modal-sm\": this.size === \"small\",\n        \"modal-lg\": this.size === \"large\",\n        \"modal-xl\": this.size === \"xlarge\",\n        \"modal-full\": this.size === \"fullscreen\"\n      };\n    },\n    modalFooterClasses() {\n      return this.constrainHeight\n        ? \"absolute right-0 bottom-0 left-0 border-t border-ink-1 bg-paper-2 z-2\"\n        : null;\n    }\n  },\n  watch: {\n    open(value) {\n      if (value && this.preventBackgroundScroll) {\n        this.preventScrolling();\n      } else {\n        this.allowScrolling();\n      }\n    }\n  },\n  methods: {\n    closeModal() {\n      if (!this.requiresInteraction && !this.preventBackgroundClose) {\n        this.$emit(\"closed\");\n      }\n    },\n    preventScrolling() {\n      document.documentElement.classList.add(\"no-scroll\");\n      document.body.classList.add(\"no-scroll\");\n    },\n    allowScrolling() {\n      document.documentElement.classList.remove(\"no-scroll\");\n      document.body.classList.remove(\"no-scroll\");\n    }\n  }\n};\n</script>\n\n<style scoped>\n.anchor-to-top {\n  margin-top: 0;\n}\n</style>\n"],"names":["_sfc_main","FadeTransition","Overlay","SvgIcon","value","_createBlock","_component_fade_transition","_withCtx","$props","_createElementBlock","_normalizeClass","$options","_cache","_withModifiers","args","_createElementVNode","_component_overlay","_createCommentVNode","_ctx","_renderSlot","_createVNode","_component_svg_icon"],"mappings":"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"}