{"version":3,"file":"MobileCaptionEditingOverlay-Bx_vh57H.js","sources":["../../../app/javascript/components/editor/inputs/ColourInput.vue","../../../app/javascript/components/shared/SvgFont.vue","../../../app/javascript/components/editor/inputs/FontFamilyInput.vue","../../../app/javascript/components/editor/inputs/BoldItalicInput.vue","../../../app/javascript/components/shared/CaptionsList.vue","../../../app/javascript/components/shared/CaptionControls.vue","../../../app/javascript/components/shared/PhotoFilteringControls.vue","../../../app/javascript/components/shared/desktop/ImageEditingControls.vue","../../../app/javascript/components/editor/inputs/NumberInput.vue","../../../app/javascript/components/editor/inputs/TextAlignInput.vue","../../../app/javascript/components/editor/desktop/TextControls.vue","../../../app/javascript/components/transitions/FlashTransition.vue","../../../app/javascript/components/shared/FlashingHint.vue","../../../app/javascript/utils/fileDropper.js","../../../app/javascript/components/shared/ImageDropPane.vue","../../../app/javascript/components/shared/mobile/ImageFrameTippyContent.vue","../../../app/javascript/components/shared/mobile/ImageFrameTippySection.vue","../../../app/javascript/components/shared/mobile/ImageframeTippyOverlay.vue","../../../app/javascript/components/shared/mobile/MobileTooltipTextColor.vue","../../../app/javascript/components/shared/mobile/MobileTooltipTextAlignment.vue","../../../app/javascript/components/shared/mobile/MobileTooltipFontFamily.vue","../../../app/javascript/components/shared/mobile/TooltipStepperInput.vue","../../../app/javascript/components/shared/mobile/MobileTooltipFontSize.vue","../../../app/javascript/components/shared/mobile/TextSelectionTooltip.vue","../../../app/javascript/components/shared/mobile/TextSelectionTooltipOverlay.vue","../../../app/javascript/components/editor/mobile/MobileUnprintableCharacterWarning.vue","../../../app/javascript/components/editor/mobile/MobileTextEditingOverlay.vue","../../../app/javascript/components/shared/mobile/MobileOversetTextWarning.vue","../../../app/javascript/components/shared/mobile/MobileCaptionEditingOverlay.vue"],"sourcesContent":["<template>\n  <div>\n    <label\n      v-if=\"label.length\"\n      :class=\"[labelClass, { 'opacity-50': disabled }]\"\n      class=\"control-label flex items-baseline\">\n      <span v-html=\"label\"></span>\n      <span\n        v-if=\"required\"\n        class=\"text-red\">\n        *\n      </span>\n    </label>\n    <div\n      class=\"relative flex items-center\"\n      :class=\"{ 'opacity-50': disabled }\">\n      <div\n        v-if=\"name\"\n        class=\"flex-1\">\n        {{ name }}\n      </div>\n      <div\n        class=\"inline-flex items-center cursor-pointer bg-paper-3 colour-input-wrapper\"\n        :class=\"disabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n        @click.stop=\"toggleOptions\">\n        <div\n          :style=\"{ backgroundColor: value }\"\n          :class=\"{ 'is-transparent': isTransparent(value) }\"\n          class=\"editor-colour-swatch h-6 w-6\"></div>\n        <div class=\"editor-colour-dropdown h-6 w-6 flex\">\n          <svg-icon\n            class=\"m-auto\"\n            width=\"10px\"\n            height=\"6px\"\n            name=\"downarrow-small-thin\" />\n        </div>\n      </div>\n      <div\n        v-if=\"optionsShowing\"\n        v-on-click-outside.bubble=\"hideOptions\"\n        class=\"picker-options absolute right-0 mt-3 bg-white border border-paper grid grid-cols-5 gap-2 p-4 shadow-1 mb-9\">\n        <div\n          v-for=\"colour in colours\"\n          :key=\"colour\"\n          :style=\"{ backgroundColor: colour }\"\n          :class=\"[\n            { selected: colour == value },\n            { 'is-transparent': isTransparent(colour) }\n          ]\"\n          class=\"editor-colour-swatch cursor-pointer aspect-ratio-1x1\"\n          @click=\"$emit('input', colour)\"></div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\n\nimport BaseInput from \"./BaseInput.vue\";\nimport SvgIcon from \"../../shared/SvgIcon.vue\";\n\nexport default {\n  name: \"ColourInput\",\n  components: {\n    SvgIcon\n  },\n  extends: BaseInput,\n  props: {\n    additionalColours: {\n      type: Array,\n      default: () => []\n    },\n    label: {\n      type: String,\n      default: \"\"\n    },\n    labelClass: {\n      type: String,\n      required: false,\n      default: \"typeset-6\"\n    },\n    required: {\n      type: Boolean,\n      default: false\n    }\n  },\n  emits: [\"input\"],\n  data() {\n    return {\n      colours: []\n    };\n  },\n  computed: {\n    ...mapState({\n      stateColours: state => state.options.colours,\n      selection: state => state.design.canvas?.selection\n    }),\n    isTransparent() {\n      return colour => {\n        return [\"transparent\", \"rgba(0, 0, 0, 0)\", \"#00000000\"].includes(\n          colour\n        );\n      };\n    }\n  },\n  watch: {\n    value(newColour) {\n      this.handleExistingColour(newColour);\n    }\n  },\n  created() {\n    this.colours = [...this.additionalColours, ...this.stateColours];\n    this.handleExistingColour(this.value);\n  },\n  methods: {\n    handleExistingColour(colour) {\n      if (colour && !this.colours.includes(colour)) {\n        this.colours.push(colour);\n      }\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.is-transparent {\n  background-color: white !important;\n\n  &:after {\n    content: \"\";\n    background: #f00;\n    position: absolute;\n    height: 1px;\n    top: 14px;\n    width: 30px;\n    transform: rotate(-45deg);\n  }\n}\n\n.colour-input-wrapper {\n  &:hover,\n  &:active {\n    .editor-colour-dropdown {\n      background: var(--paper-4);\n    }\n  }\n}\n</style>\n","<template>\n  <svg\n    :class=\"`papier-font inline-flex font-${name}`\"\n    :style=\"{ height }\">\n    <use :xlink:href=\"`#fonts-${name}`\" />\n  </svg>\n</template>\n\n<script>\nexport default {\n  name: \"SvgFont\",\n  props: {\n    name: {\n      type: String,\n      default: \"\"\n    },\n    height: {\n      type: String,\n      default: \"\"\n    }\n  }\n};\n</script>\n","<template>\n  <div\n    v-if=\"fontFamily\"\n    class=\"relative flex items-center\">\n    <div class=\"picker-title flex-1\">{{ name }}</div>\n    <div\n      class=\"imitation-select inline-flex items-center cursor-pointer bg-white border border-paper h-6 px-3\"\n      data-cy=\"font-dropdown\"\n      @click.stop=\"toggleOptions\">\n      {{ fontFamily.name }}\n    </div>\n    <div\n      v-if=\"optionsShowing\"\n      v-on-click-outside.bubble=\"hideOptions\"\n      class=\"picker-options absolute right-0 mt-3 bg-white border border-paper shadow-1\">\n      <div\n        v-for=\"font in filteredFonts\"\n        :key=\"font.name\"\n        class=\"cursor-pointer hover:bg-paper-2 p-3\"\n        @click=\"selectFont(font)\">\n        <svg-font\n          :name=\"font.icon_class\"\n          height=\"14\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\n\nimport BaseInput from \"./BaseInput.vue\";\nimport SvgFont from \"../../shared/SvgFont.vue\";\n\nexport default {\n  name: \"FontFamilyInput\",\n  components: {\n    SvgFont\n  },\n  extends: BaseInput,\n  props: {\n    fontFamily: {\n      type: null,\n      required: true\n    }\n  },\n  emits: [\"input\"],\n  computed: {\n    ...mapState({\n      fonts: state => state.options.fonts\n    }),\n    filteredFonts() {\n      return this.fonts.filter(font => font.hidden_in_editor !== true);\n    }\n  },\n  methods: {\n    selectFont(font) {\n      this.hideOptions();\n      this.$emit(\"input\", font.weights.normal.name);\n    }\n  }\n};\n</script>\n\n<style scoped>\n.imitation-select {\n  background-image: url(\"@assets/images/svg/downarrow-small-thin.svg\"),\n    url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mN88/D4fwAI6gOVBrTAnwAAAABJRU5ErkJggg==);\n  background-repeat: no-repeat;\n  background-size:\n    10px 6px,\n    32px;\n  background-position:\n    right 11px center,\n    right;\n  padding-right: 40px;\n  border: 1px solid #ece1c7;\n}\n</style>\n","<template>\n  <div\n    v-if=\"fontFamily\"\n    class=\"flex gap-px items-center\">\n    <div class=\"flex-1\">{{ name }}</div>\n    <button\n      v-if=\"boldEnabled\"\n      :class=\"\n        bold\n          ? 'bg-paper-4'\n          : 'bg-transparent hover:bg-paper-3 active:bg-paper-2'\n      \"\n      class=\"h-6 w-6 inline-flex items-center justify-center text-ink\"\n      @click.prevent=\"toggleBold\">\n      <svg-icon\n        name=\"bold\"\n        height=\"7px\"\n        width=\"5px\" />\n    </button>\n    <button\n      v-else\n      v-tippy=\"tippyOptions\"\n      class=\"h-6 w-6 bg-paper-4 inline-flex items-center justify-center opacity-25 text-ink\">\n      <svg-icon\n        name=\"bold\"\n        height=\"7px\"\n        width=\"5px\" />\n    </button>\n    <button\n      v-if=\"italicEnabled\"\n      :class=\"\n        italic\n          ? 'bg-paper-4'\n          : 'bg-transparent hover:bg-paper-3 active:bg-paper-2'\n      \"\n      class=\"h-6 w-6 inline-flex items-center justify-center text-ink\"\n      @click.prevent=\"toggleItalic\">\n      <svg-icon\n        name=\"italic\"\n        height=\"7px\"\n        width=\"4px\" />\n    </button>\n    <button\n      v-else\n      v-tippy=\"tippyOptions\"\n      class=\"h-6 w-6 bg-paper-4 inline-flex items-center justify-center opacity-25 text-ink\">\n      <svg-icon\n        name=\"italic\"\n        height=\"7px\"\n        width=\"4px\" />\n    </button>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\n\nimport BaseInput from \"./BaseInput.vue\";\nimport SvgIcon from \"../../shared/SvgIcon.vue\";\n\nexport default {\n  name: \"BoldItalicInput\",\n  components: {\n    SvgIcon\n  },\n  extends: BaseInput,\n  props: {\n    fontFamily: {\n      type: null,\n      required: true\n    }\n  },\n  emits: [\"input\"],\n  data() {\n    return {\n      bold: false,\n      italic: false\n    };\n  },\n  computed: {\n    ...mapState({\n      fonts: state => state.options.fonts\n    }),\n    boldEnabled() {\n      if (this.italic) {\n        return this.canBeBoldAndItalic;\n      }\n      return this.canBeBold;\n    },\n    italicEnabled() {\n      if (this.bold) {\n        return this.canBeBoldAndItalic;\n      }\n      return this.canBeItalic;\n    },\n    tippyOptions() {\n      return {\n        theme: \"dark\",\n        content: this.t(`editor.tooltips.${this.boldItalicDisabledMessage}`),\n        placement: \"top\",\n        arrow: true,\n        animation: \"shift-away\"\n      };\n    },\n    boldItalicDisabledMessage() {\n      if (!this.boldEnabled && !this.italicEnabled) {\n        return \"bold-italic-neither\";\n      }\n      if (!this.boldEnabled) {\n        return this.canBeBold ? \"bold-italic-not-both\" : \"not-bold\";\n      }\n      return this.canBeItalic ? \"bold-italic-not-both\" : \"not-italic\";\n    },\n    canBeBold() {\n      return \"bold\" in this.fontFamily.weights;\n    },\n    canBeItalic() {\n      return \"italic\" in this.fontFamily.weights;\n    },\n    canBeBoldAndItalic() {\n      return \"bolditalic\" in this.fontFamily.weights;\n    }\n  },\n  watch: {\n    value(newValue) {\n      if (!this.fontFamily) return;\n\n      if (\n        this.fontFamily.weights.bolditalic &&\n        newValue === this.fontFamily.weights.bolditalic.name\n      ) {\n        this.bold = true;\n        this.italic = true;\n      } else if (\n        this.fontFamily.weights.bold &&\n        newValue === this.fontFamily.weights.bold.name\n      ) {\n        this.bold = true;\n        this.italic = false;\n      } else if (\n        this.fontFamily.weights.italic &&\n        newValue === this.fontFamily.weights.italic.name\n      ) {\n        this.bold = false;\n        this.italic = true;\n      } else {\n        this.bold = false;\n        this.italic = false;\n      }\n    }\n  },\n  methods: {\n    toggleBold() {\n      if (this.bold && this.italic) {\n        this.$emit(\"input\", this.fontFamily.weights.italic.name);\n      } else if (this.bold) {\n        this.$emit(\"input\", this.fontFamily.weights.normal.name);\n      } else if (this.italic) {\n        this.$emit(\"input\", this.fontFamily.weights.bolditalic.name);\n      } else {\n        this.$emit(\"input\", this.fontFamily.weights.bold.name);\n      }\n    },\n    toggleItalic() {\n      if (this.bold && this.italic) {\n        this.$emit(\"input\", this.fontFamily.weights.bold.name);\n      } else if (this.italic) {\n        this.$emit(\"input\", this.fontFamily.weights.normal.name);\n      } else if (this.bold) {\n        this.$emit(\"input\", this.fontFamily.weights.bolditalic.name);\n      } else {\n        this.$emit(\"input\", this.fontFamily.weights.italic.name);\n      }\n    }\n  }\n};\n</script>\n","<template>\n  <div\n    v-if=\"canvas?.editingText\"\n    class=\"flex flex-col gap-4\">\n    <div\n      v-for=\"string in predefinedStrings\"\n      :key=\"translationForKey(string.key)\"\n      :class=\"{ 'px-4': responsiveMode }\">\n      <label\n        :for=\"translationForKey(string.key)\"\n        class=\"typeset-9 mb-1 pointer-events-none flex\">\n        <p class=\"typeset-9\">{{ translationForKey(string.key) }}</p>\n        <p\n          v-if=\"hasMaxLength(string)\"\n          class=\"ml-auto typeset-8\">\n          {{ t(\"editor.merge.max-characters\", { count: string.maxLength }) }}\n        </p>\n      </label>\n      <textarea-input\n        v-if=\"string.allowMultiLine\"\n        :model-value=\"string.text\"\n        :input-id=\"translationForKey(string.key)\"\n        :prevent-paste=\"stringsUsingRegex\"\n        :pattern=\"pattern(string)\"\n        :max-length=\"maxLength(string)\"\n        rows=\"4\"\n        @errored-pattern=\"flashRedErrorMessage\"\n        @update:model-value=\"updatePredefinedString(string, $event)\" />\n      <text-input\n        v-else\n        :model-value=\"string.text\"\n        bordered\n        :input-id=\"translationForKey(string.key)\"\n        :max-length=\"maxLength(string)\"\n        :pattern=\"pattern(string)\"\n        :prevent-paste=\"stringsUsingRegex\"\n        @errored-pattern=\"flashRedErrorMessage\"\n        @update:model-value=\"updatePredefinedString(string, $event)\" />\n      <div\n        v-if=\"anyEnabledStyles\"\n        class=\"border border-paper-3 bg-paper-2 border-t-0\">\n        <div class=\"p-4 flex flex-col gap-4\">\n          <font-family-input\n            v-if=\"!enabledStyles || enabledStyles.fontFamily\"\n            :font-family=\"currentFontFamily(string)\"\n            :name=\"t('editor.input-labels.font')\"\n            data-cy=\"merge-controls-font-family\"\n            @input=\"setFontFamily(string, $event)\" />\n          <bold-italic-input\n            v-if=\"!enabledStyles || enabledStyles.fontStyle\"\n            :value=\"string.style.fontFamily\"\n            :font-family=\"currentFontFamily(string)\"\n            :name=\"t('editor.input-labels.style')\"\n            data-cy=\"merge-control-font-style\"\n            @input=\"setFontFamily(string, $event)\" />\n          <colour-input\n            v-if=\"!enabledStyles || enabledStyles.textColour\"\n            :value=\"string.style.fill\"\n            :name=\"t('editor.input-labels.colour')\"\n            data-cy=\"merge-controls-colour\"\n            @input=\"setColour(string, $event)\" />\n        </div>\n      </div>\n    </div>\n    <p\n      v-if=\"stringsUsingRegex\"\n      class=\"-mt-3 mb-4 pt-2 typeset-9 transition-colour text-ink-4\"\n      :class=\"regexLabelClass\">\n      {{ regexWarningText }}\n    </p>\n  </div>\n</template>\n\n<script>\nimport { clone } from \"lodash-es\";\nimport { mapState } from \"vuex\";\nimport ColourInput from \"@/app/javascript/components/editor/inputs/ColourInput.vue\";\nimport FontFamilyInput from \"@/app/javascript/components/editor/inputs/FontFamilyInput.vue\";\nimport BoldItalicInput from \"@/app/javascript/components/editor/inputs/BoldItalicInput.vue\";\nimport TextareaInput from \"./TextareaInput.vue\";\nimport TextInput from \"./TextInput.vue\";\n\nexport default {\n  name: \"CaptionsList\",\n  components: {\n    BoldItalicInput,\n    FontFamilyInput,\n    ColourInput,\n    TextInput,\n    TextareaInput\n  },\n  data() {\n    return {\n      regexErrors: []\n    };\n  },\n  computed: {\n    ...mapState({\n      canvas: state => state.design.canvas,\n      responsiveMode: state => state.responsiveMode,\n      enabledStyles: state => state.design.canvas?.enabledStyles,\n      fonts: state => state.options.fonts\n    }),\n    anyEnabledStyles() {\n      return (\n        this.enabledStyles && Object.values(this.enabledStyles).some(Boolean)\n      );\n    },\n    predefinedStrings() {\n      if (!this.canvas?.selectedTextbox) return [];\n\n      const strings = clone(this.canvas?.selectedTextbox?.predefinedStrings);\n      return strings.sort((a, b) => a.start > b.start);\n    },\n    translationForKey() {\n      return key => {\n        const translationKey = key.replace(\" \", \"_\").toLowerCase();\n        return this.t(`predefined_strings.labels.${translationKey}`);\n      };\n    },\n    maxLength() {\n      return string => {\n        if (string.forElephantPrinter) return null;\n\n        if (string.maxLength && parseInt(string.maxLength, 10) > 0) {\n          return parseInt(string.maxLength, 10);\n        }\n        return null;\n      };\n    },\n    pattern() {\n      return string => {\n        if (string.useRegexAZ) {\n          return /^[A-Z&\\-,'.]+$/;\n        }\n\n        if (string.forElephantPrinter) {\n          return /^[a-zA-Z0-9\\s&,.!'*+?-]+$/;\n        }\n\n        return null;\n      };\n    },\n    regexLabelClass() {\n      return {\n        \"text-red\": this.regexErrors.length > 0,\n        \"text-ink-3\": this.regexErrors.length === 0,\n        \"px-4\": this.responsiveMode\n      };\n    },\n    stringsUsingRegex() {\n      return (\n        this.predefinedStrings.filter(\n          string => string.useRegexAZ || string.forElephantPrinter\n        ).length > 0\n      );\n    },\n    hasMaxLength() {\n      return string =>\n        !string.forElephantPrinter &&\n        string.maxLength &&\n        parseInt(string.maxLength, 10) > 0;\n    },\n    regexWarningText() {\n      if (this.predefinedStrings.some(string => string.forElephantPrinter)) {\n        return this.t(\"editor.captions.elephant-warning\");\n      }\n\n      return this.t(\"editor.merge.regex-warning\");\n    },\n    currentFontFamily() {\n      return string => {\n        return this.fonts.find(\n          font =>\n            Object.keys(font.weights).filter(\n              weight => font.weights[weight].name === string.style.fontFamily\n            ).length > 0\n        );\n      };\n    }\n  },\n  methods: {\n    updatePredefinedString(string, $event) {\n      if (string.forElephantPrinter) {\n        this.updateElephantString(string, $event);\n        return;\n      }\n\n      string.text = $event;\n      this.canvas.updatePredefinedString(string);\n    },\n    async updateElephantString(string, text) {\n      const newText = await this.canvas.updateElephantString(string, text);\n      string.text = newText;\n    },\n    flashRedErrorMessage() {\n      this.regexErrors.push(null);\n      setTimeout(() => {\n        this.regexErrors.pop();\n      }, 500);\n    },\n    checkPreventPaste(e) {\n      if (this.preventPaste) {\n        e.preventDefault();\n      }\n    },\n    setFontFamily(string, fontFamily) {\n      const style = { fontFamily };\n      this.canvas.updatePredefinedString(string, style);\n    },\n    setColour(string, colour) {\n      const style = { fill: colour };\n      this.canvas.updatePredefinedString(string, style);\n    }\n  }\n};\n</script>\n","<template>\n  <div\n    v-if=\"open\"\n    class=\"bg-paper-1 shadow-1\"\n    data-cy=\"caption-controls\">\n    <div class=\"p-4\">\n      <div class=\"typeset-4 mb-4\">{{ t(\"editor.captions.edit\") }}</div>\n      <captions-list class=\"pb-75\" />\n      <div\n        v-if=\"warnUnprintableCharacters && canvas?.unprintableCharacters\"\n        class=\"text-red-3\">\n        {{\n          t(\"photobooks.editor.captions.unprintable-character\", {\n            character: canvas?.unprintableCharacters\n          })\n        }}\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport CaptionsList from \"./CaptionsList.vue\";\n\nexport default {\n  name: \"CaptionControls\",\n  components: {\n    CaptionsList\n  },\n  props: {\n    warnUnprintableCharacters: {\n      type: Boolean,\n      defaults: false\n    }\n  },\n  computed: {\n    ...mapState({\n      canvas: state => state.design.canvas\n    }),\n    open() {\n      return (\n        this.canvas?.editingText &&\n        this.canvas?.selectedTextbox?.predefinedStrings.length\n      );\n    }\n  }\n};\n</script>\n","<template>\n  <image-editing-control :label=\"t('editor.photo.filters')\">\n    <select\n      v-model=\"activeFilter\"\n      class=\"form-control\">\n      <option :value=\"undefined\">{{ t(\"editor.photo.no-filter\") }}</option>\n      <option\n        v-for=\"filter in filters\"\n        :key=\"filter.name\"\n        :value=\"filter\">\n        {{ t(`editor.photo.${filter.name}`) }}\n      </option>\n    </select>\n  </image-editing-control>\n</template>\n\n<script>\nimport ImageEditingControl from \"./ImageEditingControl.vue\";\n\nexport default {\n  name: \"PhotoFilteringControls\",\n  components: {\n    ImageEditingControl\n  },\n  props: {\n    canvas: {\n      type: Object,\n      default: null\n    },\n    filters: {\n      type: Array,\n      default: () => []\n    }\n  },\n  computed: {\n    tippyOptions() {\n      return key => ({\n        theme: \"dark\",\n        content: this.t(`editor.photo.${key}`),\n        placement: \"top\",\n        arrow: true,\n        animation: \"shift-away\",\n        size: \"small\"\n      });\n    },\n    image() {\n      return this.canvas?.selectedImage;\n    },\n    activeFilter: {\n      get() {\n        return this.filters.find(\n          f =>\n            Object.keys(f.options)[0] ===\n            this.image?.filestackImage?.activeFilter\n        );\n      },\n      set(filter) {\n        const type = this.filterType(filter ? filter.name : \"No Filter\");\n\n        if (!filter) {\n          this.setImageUrlWithoutRecenter(\n            this.image.filestackImage.transform({})\n          );\n        } else {\n          this.setImageUrlWithoutRecenter(\n            this.image.filestackImage.transform(filter.options)\n          );\n        }\n        this.triggerAnalyticsEvent(type);\n      }\n    }\n  },\n  methods: {\n    setImageUrlWithoutRecenter(url) {\n      this.canvas.setImageUrl({\n        url,\n        filestackImage: null,\n        shouldRecenter: false,\n        preserveRotation: true\n      });\n      this.$forceUpdate();\n    },\n    filterType(name) {\n      if (name === \"filter-bw\") return \"Black & White\";\n      if (name === \"filter-sepia\") return \"Sepia\";\n      return \"No Filter\";\n    },\n    triggerAnalyticsEvent(type) {\n      analytics.track(\"Apply Photo Filter\", {\n        type\n      });\n    }\n  }\n};\n</script>\n","<template>\n  <div\n    :inert=\"disabled\"\n    class=\"transition-opacity bg-paper-1\"\n    :class=\"[{ 'opacity-50': disabled }]\">\n    <div class=\"relative mb-5\">\n      <span\n        data-cy=\"edit-selected-photo-panel\"\n        class=\"typeset-4\">\n        Edit selected photo\n      </span>\n      <button\n        class=\"absolute top-0 right-0 btn btn-small btn-delete\"\n        @click=\"clearImage\">\n        Remove\n      </button>\n    </div>\n    <div class=\"image-editing-controls\">\n      <photo-rotation-controls\n        :canvas=\"canvas\"\n        class=\"mb-4\" />\n      <photo-scale-controls\n        v-model=\"scale\"\n        :show-plus-minus=\"true\"\n        :min=\"options.imageOptions.scale.min\"\n        :max=\"options.imageOptions.scale.max\"\n        :step=\"options.imageOptions.scale.step\"\n        image-scaling\n        class=\"mb-4\" />\n      <photo-filtering-controls\n        ref=\"PhotoFilteringControls\"\n        :canvas=\"canvas\"\n        :filters=\"options.imageOptions.filters\" />\n    </div>\n    <a\n      v-if=\"shouldShowDownloadButton\"\n      :href=\"canvas?.selectedImage?.imageUrl\"\n      target=\"_blank\"\n      download\n      class=\"btn btn-tertiary block mt-4\">\n      Download image\n    </a>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\n\nimport PhotoFilteringControls from \"../PhotoFilteringControls.vue\";\nimport PhotoRotationControls from \"../PhotoRotationControls.vue\";\nimport PhotoScaleControls from \"../PhotoScaleControls.vue\";\n\nexport default {\n  name: \"ImageEditingControls\",\n  components: {\n    PhotoFilteringControls,\n    PhotoRotationControls,\n    PhotoScaleControls\n  },\n  props: {\n    disabled: {\n      type: Boolean,\n      default: false\n    },\n    photobook: {\n      type: Boolean,\n      default: false\n    }\n  },\n  computed: {\n    ...mapState({\n      canvas: state => state.design?.canvas,\n      options: state => state.options,\n      isAdmin: state => state.isAdmin\n    }),\n    scale: {\n      get() {\n        if (!this.canvas?.selectedImage) return 0;\n\n        return (\n          // Accounts for this.imageOptions.scale = scale * 0.1; in fabric.js\n          this.$store.state.design.canvas.selectedImage.imageOptions.scale * 10\n        );\n      },\n      set(scale) {\n        this.setImageScale(scale);\n      }\n    },\n    shouldShowDownloadButton() {\n      return (\n        this.isAdmin &&\n        this.canvas?.selectedImage?.imageUrl &&\n        !this.canvas?.selectedImage?.stockImage\n      );\n    }\n  },\n  methods: {\n    setImageScale(scale) {\n      this.$store.state.design.canvas.selectedImage.setScale(scale);\n    },\n    clearImage() {\n      this.canvas.selectedImage.clearImage();\n      this.$store.commit(\"design/saveActiveSheet\");\n    }\n  }\n};\n</script>\n","<template>\n  <div class=\"flex items-center\">\n    <div class=\"flex-1\">{{ name }}</div>\n\n    <button\n      class=\"h-6 w-6 flex items-center justify-center bg-paper-3 hover:bg-paper-4\"\n      @click=\"decrement(scale)\">\n      <svg-icon\n        name=\"minus\"\n        height=\"1px\"\n        width=\"9px\" />\n    </button>\n    <input\n      :value=\"value\"\n      :disabled=\"disabled ? 'disabled' : null\"\n      class=\"form-control w-8 h-6 bordered\"\n      data-cy=\"text-size\"\n      type=\"number\"\n      :step=\"scale\"\n      :min=\"min\"\n      :max=\"max\"\n      @input=\"input\"\n      @click=\"$event.target.select()\"\n      @keydown.stop.exact\n      @keydown.up.exact.prevent.stop=\"increment(scale)\"\n      @keydown.down.exact.prevent.stop=\"decrement(scale)\"\n      @keydown.shift.up.exact.prevent.stop=\"increment(scale * 10)\"\n      @keydown.shift.down.exact.prevent.stop=\"decrement(scale * 10)\" />\n    <button\n      class=\"h-6 w-6 flex items-center justify-center bg-paper-3 hover:bg-paper-4\"\n      @click=\"increment(scale)\">\n      <svg-icon\n        name=\"plus\"\n        height=\"9px\"\n        width=\"9px\" />\n    </button>\n  </div>\n</template>\n\n<script>\nimport SvgIcon from \"@/app/javascript/components/shared/SvgIcon.vue\";\n\nexport default {\n  name: \"NumberInput\",\n  components: {\n    SvgIcon\n  },\n  props: {\n    value: {\n      validator: prop => typeof prop === \"number\" || prop === null,\n      required: true\n    },\n    icon: {\n      type: String,\n      default: null\n    },\n    name: {\n      type: String,\n      required: true\n    },\n    disabled: {\n      type: Boolean,\n      default: null\n    },\n    scale: {\n      type: Number,\n      default: 1\n    },\n    min: {\n      type: Number,\n      default: null\n    },\n    max: {\n      type: Number,\n      default: null\n    }\n  },\n  emits: [\"input\"],\n  methods: {\n    increment(amount) {\n      const newValue = this.value + amount;\n      if (this.max !== null && newValue > this.max) {\n        this.$emit(\"input\", this.max);\n      } else {\n        this.$emit(\"input\", Math.round(newValue * 10) / 10);\n      }\n    },\n    decrement(amount) {\n      const newValue = this.value - amount;\n      if (this.min !== null && newValue < this.min) {\n        this.$emit(\"input\", this.min);\n      } else {\n        this.$emit(\"input\", Math.round(newValue * 10) / 10);\n      }\n    },\n    input($event) {\n      if ($event.target.value === \"\") {\n        this.$emit(\"input\", 0);\n      } else {\n        this.$emit(\"input\", parseFloat($event.target.value));\n      }\n    }\n  }\n};\n</script>\n\n<style scoped>\ninput[type=\"number\"] {\n  -moz-appearance: textfield;\n}\n\ninput[type=\"number\"]::-webkit-outer-spin-button,\ninput[type=\"number\"]::-webkit-inner-spin-button {\n  -webkit-appearance: none;\n  margin: 0;\n}\n</style>\n","<template>\n  <div class=\"flex gap-px items-center\">\n    <div class=\"flex-1\">{{ name }}</div>\n    <button\n      v-for=\"(option, key, index) in textAlignOptions\"\n      :key=\"Object.keys(textAlignOptions)[index]\"\n      class=\"h-6 w-6\"\n      :class=\"\n        value === Object.keys(textAlignOptions)[index]\n          ? 'bg-paper-3'\n          : 'bg-transparent hover:bg-paper-3 active:bg-paper-4'\n      \"\n      @click=\"$emit('input', Object.keys(textAlignOptions)[index])\">\n      <svg-icon\n        height=\"7px\"\n        width=\"10px\"\n        :name=\"option.icon\" />\n    </button>\n  </div>\n</template>\n\n<script>\nimport BaseInput from \"./BaseInput.vue\";\nimport SvgIcon from \"../../shared/SvgIcon.vue\";\n\nexport default {\n  name: \"TextAlignInput\",\n  components: {\n    SvgIcon\n  },\n  extends: BaseInput,\n  emits: [\"input\"],\n  data() {\n    return {\n      textAlignOptions: {\n        left: {\n          name: \"Left\",\n          icon: \"align-left\"\n        },\n        center: {\n          name: \"Centre\",\n          icon: \"align-center\"\n        },\n        right: {\n          name: \"Right\",\n          icon: \"align-right\"\n        }\n      }\n    };\n  }\n};\n</script>\n","<template>\n  <div\n    v-if=\"selection\"\n    ref=\"textControls\"\n    class=\"flex flex-col gap-y-5\">\n    <span class=\"typeset-4\">Edit selected text</span>\n    <button\n      class=\"appearance-none w-6 h-6 cursor-pointer absolute top-3 right-3 flex bg-transparent transition-background hover:bg-paper-2\"\n      @click=\"closeControls\">\n      <svg-icon\n        height=\"10px\"\n        width=\"10px\"\n        name=\"cross\"\n        class=\"m-auto\" />\n    </button>\n    <font-family-input\n      v-if=\"!enabledStyles || enabledStyles.fontFamily\"\n      :value=\"selection.fontFamily\"\n      :font-family=\"currentFontFamily\"\n      :name=\"t('editor.input-labels.font')\"\n      @input=\"setFontFamily\" />\n    <number-input\n      v-if=\"!enabledStyles || enabledStyles.fontSize\"\n      :value=\"selection.fontSize\"\n      :min=\"options.fontSize.min\"\n      :max=\"options.fontSize.max\"\n      :scale=\"options.fontSize.step\"\n      :name=\"t('editor.input-labels.font-size')\"\n      @input=\"setFontSize\" />\n    <colour-input\n      v-if=\"!enabledStyles || enabledStyles.textColour\"\n      :value=\"selection.fill\"\n      :name=\"t('editor.input-labels.colour')\"\n      @input=\"setColour\" />\n    <text-align-input\n      v-if=\"!enabledStyles || enabledStyles.textAlignment\"\n      :value=\"selection.textAlign\"\n      :name=\"t('editor.input-labels.alignment')\"\n      @input=\"setTextAlign\" />\n    <bold-italic-input\n      v-if=\"!enabledStyles || enabledStyles.fontStyle\"\n      :value=\"selection.fontFamily\"\n      :font-family=\"currentFontFamily\"\n      :name=\"t('editor.input-labels.style')\"\n      @input=\"setFontFamily\" />\n    <number-input\n      v-if=\"!enabledStyles || enabledStyles.letterSpacing\"\n      :value=\"selection.letterSpacing\"\n      :min=\"options.letterSpacing.min\"\n      :max=\"options.letterSpacing.max\"\n      :scale=\"options.letterSpacing.step\"\n      :name=\"t('editor.input-labels.letter-spacing')\"\n      @input=\"setLetterSpacing\" />\n    <number-input\n      v-if=\"!enabledStyles || enabledStyles.lineHeight\"\n      :value=\"selection.lineHeight\"\n      :min=\"options.lineHeight.min\"\n      :max=\"options.lineHeight.max\"\n      :scale=\"options.lineHeight.step\"\n      :name=\"t('editor.input-labels.line-height')\"\n      @input=\"setLineHeight\" />\n  </div>\n</template>\n\n<script>\nimport { mapState, mapGetters } from \"vuex\";\nimport SvgIcon from \"@/app/javascript/components/shared/SvgIcon.vue\";\nimport BoldItalicInput from \"../inputs/BoldItalicInput.vue\";\nimport ColourInput from \"../inputs/ColourInput.vue\";\nimport FontFamilyInput from \"../inputs/FontFamilyInput.vue\";\nimport NumberInput from \"../inputs/NumberInput.vue\";\nimport TextAlignInput from \"../inputs/TextAlignInput.vue\";\n\nexport default {\n  name: \"TextControls\",\n  components: {\n    BoldItalicInput,\n    ColourInput,\n    FontFamilyInput,\n    NumberInput,\n    TextAlignInput,\n    SvgIcon\n  },\n  computed: {\n    ...mapState({\n      enabledStyles: state => state.design.canvas?.enabledStyles,\n      selection: state => state.design.canvas?.selection,\n      canvas: state => state.design.canvas,\n      options: state => state.options,\n      allowPapierAi: state => state.allowPapierAi\n    }),\n    ...mapGetters({\n      productId: \"design/productId\"\n    }),\n    currentFontFamily() {\n      return this.options.fonts.filter(\n        font =>\n          Object.keys(font.weights).filter(\n            weight => font.weights[weight].name === this.selection.fontFamily\n          ).length > 0\n      )[0];\n    },\n    formattedAnalyticsId() {\n      if (typeof this.productId === \"string\") {\n        return this.productId;\n      }\n      return `PRODUCT-${this.productId}`;\n    }\n  },\n  methods: {\n    closeControls() {\n      this.canvas.deactivateAllWithDispatch();\n    },\n    setFontFamily(fontFamily) {\n      const selection = { fontFamily };\n      this.commitSelection(selection);\n      if (fontFamily.includes(\"Bold\") || fontFamily.includes(\"Italic\")) {\n        this.handleAnalyticsEvents(\"Style\");\n      } else {\n        this.handleAnalyticsEvents(\"Font\");\n      }\n    },\n    setFontSize(fontSize) {\n      const selection = { fontSize };\n      this.commitSelection(selection, false);\n      this.handleAnalyticsEvents(\"Font Size\");\n    },\n    setColour(colour) {\n      const selection = { fill: colour };\n      this.commitSelection(selection);\n      this.handleAnalyticsEvents(\"Colour\");\n    },\n    setTextAlign(align) {\n      const selection = { textAlign: align };\n      this.commitSelection(selection);\n      this.handleAnalyticsEvents(\"Alignment\");\n    },\n    setLetterSpacing(spacing) {\n      const selection = { letterSpacing: spacing };\n      this.commitSelection(selection, false);\n      this.handleAnalyticsEvents(\"Letter Spacing\");\n    },\n    setLineHeight(lineHeight) {\n      const selection = { lineHeight };\n      this.commitSelection(selection, false);\n      this.handleAnalyticsEvents(\"Line Height\");\n    },\n    commitSelection(selection, keepFocus) {\n      this.$store.state.design.canvas.setSelection(selection, keepFocus);\n    },\n    startAiFlow() {\n      window.dispatchEvent(new CustomEvent(\"openDrawers\"));\n    },\n    handleAnalyticsEvents(type) {\n      analytics.track(\"Edited Text\", {\n        product_id: this.formattedAnalyticsId,\n        type\n      });\n    }\n  }\n};\n</script>\n","<template>\n  <transition\n    type=\"animation\"\n    v-bind=\"$attrs\"\n    name=\"flash\"\n    @after-enter=\"$emit('after-enter')\">\n    <slot></slot>\n  </transition>\n</template>\n\n<script>\nexport default {\n  name: \"FlashTransition\",\n  emits: [\"after-enter\"]\n};\n</script>\n\n<style>\n.flash-enter-active {\n  animation-delay: 0.5s;\n  animation-name: flash-in;\n  animation-duration: 1s;\n}\n\n.flash-enter-active,\n.flash-enter-from,\n.flash-leave-active,\n.flash-leave-from {\n  opacity: 0;\n}\n\n@keyframes flash-in {\n  0% {\n    opacity: 0;\n  }\n\n  25% {\n    opacity: 1;\n  }\n\n  50% {\n    opacity: 0;\n  }\n\n  75% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n</style>\n","<template>\n  <div\n    ref=\"el\"\n    v-tippy=\"tippyOptions\"\n    :style=\"style\"\n    :class=\"[bgClass, borderClass]\"\n    class=\"object-hint br-1 absolute transition-background border pointer-events-none\">\n    <fade-transition>\n      <p\n        v-if=\"overflowing\"\n        class=\"hint-badge whitespace-no-wrap absolute bg-red text-white br-1 typeset-8 px-2\">\n        Text cut off\n      </p>\n    </fade-transition>\n    <div\n      v-if=\"object.canScale() && object.selected\"\n      class=\"resize-handles\">\n      <div\n        v-for=\"(handle, index) in handles\"\n        :key=\"handle\"\n        :class=\"[\n          handle,\n          index + 1 === selectedHandleCorner ? 'border-ink' : 'border-orange'\n        ]\"\n        class=\"resize-handle absolute br-1 border-2 bg-white\"></div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport FadeTransition from \"../transitions/FadeTransition.vue\";\n\nexport default {\n  name: \"FlashingHint\",\n  components: {\n    FadeTransition\n  },\n  props: {\n    object: {\n      type: Object,\n      required: true\n    },\n    ratio: {\n      type: Number,\n      default: 1\n    },\n    horizontalAdjustment: {\n      type: Number,\n      default: 0\n    },\n    verticalAdjustment: {\n      type: Number,\n      default: 0\n    },\n    flashing: {\n      type: Boolean,\n      default: false\n    },\n    overflowing: {\n      type: Boolean,\n      default: false\n    },\n    selectedHandleCorner: {\n      type: Number,\n      default: null\n    },\n    isMergeFlow: {\n      type: Boolean,\n      default: false\n    },\n    responsiveMode: {\n      type: Boolean,\n      default: false\n    },\n    isTopMostEditableObject: {\n      type: Boolean,\n      default: false\n    },\n    isActiveSheet: {\n      type: Boolean,\n      default: false\n    }\n  },\n  emits: [\"click\"],\n  data() {\n    return {\n      handles: [\"tl\", \"tr\", \"bl\", \"br\"]\n    };\n  },\n  computed: {\n    ...mapState({\n      itemsPanelVisibility: state => state.design.itemsPanelVisibility,\n      longPressModeActivated: state =>\n        state.design.canvas?.longPressModeActivated || false\n    }),\n    style() {\n      return {\n        top: `${\n          this.adjustedDimension(this.object.top) + this.verticalAdjustment - 2\n        }px`,\n        left: `${\n          this.adjustedDimension(this.object.left) +\n          this.horizontalAdjustment -\n          2\n        }px`,\n        width: `${this.adjustedDimension(this.object.width) + 2}px`,\n        height: `${this.adjustedDimension(this.object.height) + 2}px`,\n        transform: `rotate(${this.object.angle}deg)`,\n        transformOrigin: \"0 0\"\n      };\n    },\n    bgClass() {\n      if (!this.flashing) return null;\n      if (this.isVariableMergeFlowTextbox) return \"bg-neon-blue\";\n\n      return \"bg-orange\";\n    },\n    borderClass() {\n      if (this.longPressModeActivated) return \"border-transparent\";\n      if (this.overflowing) return \"border-red\";\n      if (this.isVariableMergeFlowTextbox) return \"border-neon-blue\";\n      if (this.object.selected) return \"border-orange\";\n      if (this.object.hovered) return \"border-orange\";\n      if (this.responsiveMode) return \"border-orange\";\n\n      return \"border-transparent\";\n    },\n    isMergeFlowTextbox() {\n      return this.isMergeFlow && this.object.type === \"papierbox\";\n    },\n    isVariableMergeFlowTextbox() {\n      return this.isMergeFlowTextbox && !this.isMasterText;\n    },\n    isMasterText() {\n      return !this.object.lockedMode;\n    },\n    canShowTooltip() {\n      return (\n        !this.flashing &&\n        this.responsiveMode &&\n        this.isActiveSheet &&\n        this.isTopMostEditableObject &&\n        !this.itemsPanelVisibility\n      );\n    },\n    tippyOptions() {\n      if (!this.canShowTooltip) {\n        return null;\n      }\n\n      return {\n        theme: \"dark\",\n        content: this.t(\"editor.mobile-tooltip.tap-to-edit\"),\n        placement: \"top\",\n        arrow: true,\n        animation: \"shift-away\",\n        trigger: \"manual\"\n      };\n    }\n  },\n  watch: {\n    itemsPanelVisibility(val) {\n      if (!val) {\n        this.showTooltip();\n      }\n    }\n  },\n  mounted() {\n    if (this.canShowTooltip) {\n      this.showTooltip();\n    }\n  },\n  methods: {\n    adjustedDimension(measurement) {\n      return measurement * this.ratio + 1;\n    },\n    showTooltip() {\n      if (this.canShowTooltip) {\n        // eslint-disable-next-line no-underscore-dangle\n        this.$refs.el._tippy.show();\n      }\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.hint-badge {\n  pointer-events: none;\n  z-index: 1;\n  left: -1px;\n  bottom: calc(100% + 2px);\n}\n\n.resize-handle {\n  --size: 14px;\n\n  height: var(--size);\n  width: var(--size);\n\n  &.tl {\n    top: calc(-1 * var(--size) / 2);\n    left: calc(-1 * var(--size) / 2);\n    cursor: nwse-resize;\n  }\n\n  &.tr {\n    top: calc(-1 * var(--size) / 2);\n    right: calc(-1 * var(--size) / 2);\n    cursor: nesw-resize;\n  }\n\n  &.br {\n    bottom: calc(-1 * var(--size) / 2);\n    right: calc(-1 * var(--size) / 2);\n    cursor: nwse-resize;\n  }\n\n  &.bl {\n    bottom: calc(-1 * var(--size) / 2);\n    left: calc(-1 * var(--size) / 2);\n    cursor: nesw-resize;\n  }\n}\n</style>\n","import * as filestack from \"filestack-js/build/browser/filestack.esm\";\n\nclass FileDropper {\n  constructor(element) {\n    this.element = element;\n    this.client = filestack.init(\"AuX8hFmn2R3akeCHzdLXwz\");\n  }\n\n  call(options) {\n    this.client\n      .picker({\n        accept: [\"image/png\", \"image/jpg\", \"image/jpeg\", \"image/heic\"],\n        container: this.element,\n        displayMode: \"dropPane\",\n        dropPane: {\n          overlay: false,\n          onDrop: options.onDrop,\n          onDragEnter: options.onDragEnter,\n          onDragLeave: options.onDragLeave\n        },\n        maxFiles: 400,\n        maxSize: 20 * 1024 * 1024,\n        onFileUploadFinished: options.onFileUploadFinished,\n        onUploadStarted: options.onUploadStarted,\n        onUploadDone: options.onUploadDone\n      })\n      .open();\n  }\n}\n\nexport default FileDropper;\n","<template>\n  <div :class=\"{ global }\">\n    <div\n      ref=\"dropPane\"\n      :class=\"{ over: draggingOver }\"\n      :style=\"style\"\n      class=\"drop-pane\"\n      @mouseup=\"mouseUp\"\n      @mouseover=\"mouseOver\"\n      @mouseout=\"mouseOut\"\n      @dragenter=\"dragEnter\"\n      @dragleave=\"dragLeave\"\n      @drop.prevent=\"dropPhoto\"></div>\n    <div\n      class=\"drop-pane-border\"\n      :class=\"{ over: draggingOver }\"\n      :style=\"style\"></div>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport FileDropper from \"../../utils/fileDropper\";\nimport Photo from \"../../utils/photo\";\n\nexport default {\n  name: \"ImageDropPane\",\n  props: {\n    object: {\n      type: Object,\n      default: () => {}\n    },\n    ratio: {\n      type: Number,\n      default: 1\n    },\n    global: {\n      type: Boolean,\n      default: false\n    },\n    photobook: {\n      type: Boolean,\n      default: false\n    },\n    horizontalAdjustment: {\n      type: Number,\n      default: 0\n    },\n    verticalAdjustment: {\n      type: Number,\n      default: 0\n    }\n  },\n  data() {\n    return {\n      draggingOver: false,\n      insertNewPhoto: false\n    };\n  },\n  computed: {\n    ...mapState({\n      canvas: state => state.design.canvas,\n      photoBeingDragged: state => state.dragDrop.photoBeingDragged,\n      hoveringIndividualDropPane: state =>\n        state.dragDrop.hoveringIndividualDropPane\n    }),\n    style() {\n      if (this.global) {\n        return null;\n      }\n      return {\n        top: `${this.adjustedDimension(this.object.top) + this.verticalAdjustment}px`,\n        left: `${this.adjustedDimension(this.object.left) + this.horizontalAdjustment}px`,\n        width: `${this.adjustedDimension(this.object.width)}px`,\n        height: `${this.adjustedDimension(this.object.height)}px`,\n        transform: `rotate(${this.object.angle}deg)`,\n        transformOrigin: \"0 0\",\n        opacity:\n          this.hoveringIndividualDropPane || this.photoBeingDragged ? 1 : 0\n      };\n    }\n  },\n  mounted() {\n    const vm = this;\n    if (vm.photoBeingDragged) return;\n\n    new FileDropper(vm.$refs.dropPane).call({\n      onDragEnter() {\n        vm.draggingOver = true;\n\n        if (!vm.global) {\n          vm.$store.commit(\"dragDrop/setHoveringIndividualDropPane\", true);\n        }\n      },\n      onDragLeave() {\n        vm.draggingOver = false;\n\n        if (!vm.global) {\n          vm.$store.commit(\"dragDrop/setHoveringIndividualDropPane\", false);\n        }\n      },\n      onDrop() {\n        vm.draggingOver = false;\n        vm.insertNewPhoto = !vm.global;\n      },\n      async onFileUploadFinished(file) {\n        const newPhoto = new Photo(file, 0, {});\n        await newPhoto.load();\n        vm.$store.commit(\"photoLibrary/addPhoto\", newPhoto);\n\n        if (vm.insertNewPhoto) {\n          vm.insertNewPhoto = false;\n          vm.updateFrameImage(newPhoto);\n        }\n\n        if (vm.photobook) {\n          vm.$store.dispatch(\"progressBar/incrementFileUploadCount\");\n        }\n      },\n      // eslint-disable-next-line no-unused-vars\n      onUploadStarted(files) {\n        vm.$store.commit(\"dragDrop/setCurrentlyDraggingFiles\", false);\n        if (!vm.global) {\n          vm.canvas.fireEvent(\"loading\");\n        }\n\n        if (vm.photobook) {\n          vm.$store.commit(\n            \"progressBar/setFilesToBeUploadedCount\",\n            files.length\n          );\n          vm.$store.commit(\"progressBar/setProgressBarShowing\", true);\n        }\n      },\n      async onUploadDone(files) {\n        if (vm.photobook) {\n          setTimeout(() => {\n            vm.$store.dispatch(\"progressBar/resetProgressBar\");\n          }, 3000);\n        } else {\n          const { filesUploaded } = files;\n\n          const photoPromises = filesUploaded.map(async file => {\n            const newPhoto = new Photo(file, 0, {});\n            await newPhoto.load();\n            return newPhoto;\n          });\n\n          const photos = await Promise.all(photoPromises);\n\n          vm.$store.dispatch(\"photoLibrary/addPhotos\", photos);\n        }\n      }\n    });\n  },\n  methods: {\n    adjustedDimension(measurement) {\n      return measurement * this.ratio + 1;\n    },\n    dragEnter() {\n      if (this.photoBeingDragged) {\n        this.draggingOver = true;\n      }\n    },\n    dragLeave() {\n      if (this.photoBeingDragged) {\n        this.draggingOver = false;\n      }\n    },\n    dropPhoto() {\n      if (this.photoBeingDragged) {\n        this.draggingOver = false;\n        this.updateFrameImage(this.photoBeingDragged);\n      }\n    },\n    updateFrameImage(photo) {\n      this.canvas.setImageframeImage(this.object, photo.url, photo, {\n        shouldRecenter: true,\n        selectImage: true,\n        imageOptions: null\n      });\n\n      if (this.photobook) {\n        this.$store.dispatch(\n          \"design/updateSheetFromCanvas\",\n          parseInt(this.$route.params.index, 10)\n        );\n      } else {\n        this.$store.commit(\"design/saveActiveSheet\");\n      }\n    },\n    mouseUp() {\n      if (this.photoBeingDragged) {\n        this.draggingOver = false;\n        this.updateFrameImage(this.photoBeingDragged);\n      }\n    },\n    mouseOver() {\n      if (this.photoBeingDragged) {\n        this.draggingOver = true;\n      }\n    },\n    mouseOut() {\n      if (this.photoBeingDragged) {\n        this.draggingOver = false;\n      }\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.drop-pane {\n  position: absolute;\n  background-color: oklch(0.8 0.2 69.34 / 0.2);\n  border-radius: 7px;\n  z-index: 101;\n}\n\n.drop-pane-border {\n  position: absolute;\n  pointer-events: none;\n  z-index: 101;\n\n  &:after {\n    content: \"\";\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    border: 2px dashed var(--orange);\n    opacity: 0;\n    border-radius: 3px;\n    transition: opacity 0.2s ease-out;\n  }\n\n  &.over {\n    background-color: oklch(0.8 0.2 69.34 / 0.2);\n\n    &:after {\n      opacity: 1;\n    }\n  }\n}\n\n.global {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 100;\n\n  .drop-pane {\n    position: absolute;\n    top: 24px;\n    right: 32px;\n    bottom: 24px;\n    left: 32px;\n    background-color: rgba(#e2d2ac, 0.4);\n  }\n\n  .drop-pane-border {\n    position: absolute;\n    top: 24px;\n    right: 32px;\n    bottom: 24px;\n    left: 32px;\n    z-index: 100;\n\n    &.over {\n      background: transparent;\n    }\n  }\n}\n</style>\n\n<style>\n.fsp-drop-pane__container {\n  opacity: 0;\n  width: 100%;\n  height: 100%;\n}\n</style>\n","<template>\n  <div class=\"flex justify-around tippy-popup-content\">\n    <a\n      id=\"rotate-left\"\n      href=\"#\"\n      class=\"flex items-center justify-center pl-4 tooltip-rotate\"\n      @click.prevent.stop=\"rotateLeft\">\n      <div class=\"flex items-center border-r border-ink-2 pr-4 border-helper\">\n        <svg-icon\n          name=\"rotate-cc\"\n          width=\"16px\"\n          height=\"18px\" />\n      </div>\n    </a>\n    <a\n      id=\"rotate-right\"\n      href=\"#\"\n      class=\"flex items-center justify-center tooltip-rotate\"\n      @click.prevent.stop=\"rotateRight\">\n      <div class=\"flex items-center border-r border-ink-2 px-4 border-helper\">\n        <svg-icon\n          name=\"rotate-c\"\n          width=\"16px\"\n          height=\"18px\" />\n      </div>\n    </a>\n    <a\n      id=\"replace\"\n      href=\"#\"\n      class=\"px-3 py-4\"\n      @click.prevent.stop=\"editImage\">\n      Replace\n    </a>\n    <a\n      id=\"clear\"\n      href=\"#\"\n      class=\"py-4 text-red\"\n      @click.prevent.stop=\"clearImage\">\n      <div class=\"border-l border-ink-2 px-3\">Remove</div>\n    </a>\n  </div>\n</template>\n\n<script>\nimport SvgIcon from \"@/app/javascript/components/shared/SvgIcon.vue\";\n\nexport default {\n  name: \"ImageFrameTippyContent\",\n  components: {\n    SvgIcon\n  },\n  emits: [\"clearImage\", \"rotateLeft\", \"rotateRight\", \"editImage\"],\n  methods: {\n    disableRotateButtons() {\n      this.rotateButtons().forEach(button => {\n        button.classList.add(\"disabled\");\n      });\n    },\n    enableRotateButtons() {\n      this.rotateButtons().forEach(button => {\n        button.classList.remove(\"disabled\");\n      });\n    },\n    rotateLeft() {\n      this.$emit(\"rotateLeft\");\n    },\n    rotateRight() {\n      this.$emit(\"rotateRight\");\n    },\n    editImage() {\n      this.$emit(\"editImage\");\n    },\n    clearImage() {\n      this.$emit(\"clearImage\");\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.tippy-popup-content {\n  pointer-events: all;\n\n  svg {\n    pointer-events: none;\n  }\n}\n\n.border-helper {\n  pointer-events: none;\n}\n</style>\n","<template>\n  <div\n    class=\"absolute\"\n    style=\"width: 100%; height: 100%\">\n    <div\n      ref=\"tipHolder\"\n      v-tippy=\"tippy\"\n      :style=\"getStyleForObjectArea\"\n      class=\"imageframe-tippy-section\"></div>\n  </div>\n</template>\n\n<script>\nimport { h } from \"vue\";\nimport { mapState } from \"vuex\";\nimport { sticky } from \"tippy.js\";\n\nimport ImageFrameTippyContent from \"./ImageFrameTippyContent.vue\";\n\nexport default {\n  name: \"ImageFrameTippySection\",\n  props: {\n    object: {\n      type: Object,\n      required: true\n    },\n    ratio: {\n      type: Number,\n      default: 1\n    },\n    horizontalAdjustment: {\n      type: Number,\n      default: 0\n    },\n    verticalAdjustment: {\n      type: Number,\n      default: 0\n    }\n  },\n  computed: {\n    ...mapState({\n      canvas: state => state.design.canvas\n    }),\n    tippy() {\n      return {\n        theme: \"papier-white no-padding\",\n        content: h(ImageFrameTippyContent, {\n          onClearImage: () => {\n            this.clearImage();\n          },\n          onRotateLeft: () => {\n            this.rotateLeft();\n          },\n          onRotateRight: () => {\n            this.rotateRight();\n          },\n          onEditImage: () => {\n            this.editImage();\n          }\n        }),\n        allowHTML: true,\n        placement: \"top\",\n        arrow: true,\n        animation: false,\n        trigger: \"manual\",\n        sticky: true,\n        plugins: [sticky],\n        hideOnClick: false,\n        interactive: true\n      };\n    },\n    getStyleForObjectArea() {\n      return {\n        top: `${\n          this.adjustedDimension(this.object.top) + this.verticalAdjustment\n        }px`,\n        left: `${\n          this.adjustedDimension(this.object.left) + this.horizontalAdjustment\n        }px`,\n        width: `${this.adjustedDimension(this.object.width)}px`,\n        height: `${this.adjustedDimension(this.object.height)}px`,\n        transform: `rotate(${this.object.angle}deg)`,\n        transformOrigin: \"0 0\"\n      };\n    },\n    adjustedDimension() {\n      return measurement => parseInt(measurement * this.ratio, 10) + 1;\n    },\n    tippyInstance() {\n      /* eslint-disable-next-line no-underscore-dangle */\n      return this.$refs.tipHolder._tippy;\n    }\n  },\n  mounted() {\n    this.showTippy();\n  },\n  methods: {\n    disableRotateButtons() {\n      this.rotateButtons().forEach(button => {\n        button.classList.add(\"disabled\");\n      });\n    },\n    enableRotateButtons() {\n      this.rotateButtons().forEach(button => {\n        button.classList.remove(\"disabled\");\n      });\n    },\n    rotateButtons() {\n      return document.getElementsByClassName(\"tooltip-rotate\");\n    },\n    showTippy() {\n      this.tippyInstance.show();\n    },\n    hideTippy() {\n      this.tippyInstance.hide();\n    },\n    rotateLeft() {\n      this.canvas.rotateImageFrameLeft();\n    },\n    rotateRight() {\n      this.canvas.rotateImageFrameRight();\n    },\n    editImage() {\n      this.$store.commit(\"design/images/setImageUploadModalOpen\", true);\n    },\n    clearImage() {\n      this.canvas.selectedImage.clearImage();\n      this.hideTippy();\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.tippy-popup-content {\n  pointer-events: all;\n\n  svg {\n    pointer-events: none;\n  }\n}\n\n.border-helper {\n  pointer-events: none;\n}\n</style>\n","<template>\n  <div class=\"imageframe-tippy-overlay-container\">\n    <div class=\"imageframe-tippy-overlay\">\n      <image-frame-tippy-section\n        v-if=\"showSection\"\n        :object=\"object\"\n        :sheet-id=\"sheetId\"\n        :ratio=\"ratio\"\n        :horizontal-adjustment=\"horizontalAdjustment\"\n        :vertical-adjustment=\"verticalAdjustment\" />\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\n\nimport ImageFrameTippySection from \"./ImageFrameTippySection.vue\";\n\nexport default {\n  name: \"ImageframeTippyOverlay\",\n  components: {\n    ImageFrameTippySection\n  },\n  props: {\n    activeSheet: {\n      type: Object,\n      default: () => {}\n    },\n    ratio: {\n      type: Number,\n      default: 1\n    },\n    sheetId: {\n      type: Number,\n      required: true\n    },\n    horizontalAdjustment: {\n      type: Number,\n      default: 0\n    },\n    verticalAdjustment: {\n      type: Number,\n      default: 0\n    }\n  },\n  computed: {\n    ...mapState({\n      object: state =>\n        state.design.canvas && state.design.canvas?.selectedImage,\n      editingImage: state => state.design.canvas?.editingImage\n    }),\n    isActiveSheet() {\n      return this.activeSheet && this.sheetId === this.activeSheet.id;\n    },\n    showSection() {\n      return this.isActiveSheet && this.object && this.editingImage;\n    }\n  }\n};\n</script>\n","<template>\n  <div\n    ref=\"container\"\n    class=\"h-scroll h-full flex\">\n    <div class=\"inline-flex items-center cursor-pointer px-4\">\n      <div\n        v-for=\"(colour, index) in colours\"\n        :key=\"colour\"\n        :style=\"{ backgroundColor: colour }\"\n        :class=\"[\n          { 'border border-ink-2': colour == '#ffffff' },\n          { 'ml-3': index != 0 },\n          { 'selected js-selected-colour': colour == value }\n        ]\"\n        class=\"mobile-colour-swatch h-6 w-6 br-circle relative\"\n        @click=\"$emit('input', colour)\"></div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport { gsap } from \"gsap\";\nimport ScrollToPlugin from \"gsap/ScrollToPlugin\";\n\ngsap.registerPlugin(ScrollToPlugin);\n\nexport default {\n  name: \"MobileTooltipTextColor\",\n  props: {\n    value: {\n      type: null,\n      required: true\n    }\n  },\n  emits: [\"input\"],\n  computed: mapState({\n    colours: state => state.options.colours\n  }),\n  mounted() {\n    gsap.to(this.$refs.container, 0, {\n      scrollTo: { x: \".js-selected-colour\", offsetX: 16, autoKill: false }\n    });\n  }\n};\n</script>\n","<template>\n  <div class=\"h-full\">\n    <div class=\"h-scroll h-full flex p-3\">\n      <div\n        v-for=\"option in alignmentOptions\"\n        :key=\"option\"\n        class=\"flex-1 flex items-center justify-center w-7\"\n        :class=\"{ 'bg-paper': value.textAlign === option }\"\n        @click=\"setTextAlign(option)\">\n        <svg-icon\n          :name=\"`align-${option}`\"\n          width=\"12\"\n          height=\"9\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapGetters } from \"vuex\";\n\nimport SvgIcon from \"@/app/javascript/components/shared/SvgIcon.vue\";\n\nexport default {\n  name: \"MobileTooltipTextAlignment\",\n  components: {\n    SvgIcon\n  },\n  props: {\n    value: {\n      type: null,\n      required: true\n    }\n  },\n  data() {\n    return {\n      alignmentOptions: [\"left\", \"center\", \"right\"]\n    };\n  },\n  computed: {\n    ...mapGetters({\n      productId: \"design/productId\"\n    }),\n    formattedAnalyticsId() {\n      if (typeof this.productId === \"string\") {\n        return this.productId;\n      }\n      return `PRODUCT-${this.productId}`;\n    }\n  },\n  methods: {\n    setTextAlign(align) {\n      const selection = { textAlign: align };\n      this.commitSelection(selection);\n      analytics.track(\"Edited Text\", {\n        product_id: this.formattedAnalyticsId,\n        type: \"Alignment\"\n      });\n    },\n    commitSelection(selection) {\n      this.$store.state.design.canvas.setSelection(selection);\n    }\n  }\n};\n</script>\n","<template>\n  <div\n    ref=\"container\"\n    class=\"h-scroll h-full flex\">\n    <div class=\"inline-flex items-center cursor-pointer px-3\">\n      <div\n        v-for=\"(font, index) in filteredFonts\"\n        :key=\"font.name\"\n        :class=\"[\n          { 'ml-3': index != 0 },\n          font.name == fontFamily.name\n            ? 'bg-ink text-white js-selected-font'\n            : 'bg-paper'\n        ]\"\n        class=\"inline-flex p-3 br-1\"\n        @click=\"selectFont(font)\">\n        <svg-font\n          :name=\"font.icon_class\"\n          height=\"32\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport { gsap } from \"gsap\";\nimport ScrollToPlugin from \"gsap/ScrollToPlugin\";\nimport SvgFont from \"../SvgFont.vue\";\n\ngsap.registerPlugin(ScrollToPlugin);\n\nexport default {\n  name: \"MobileTooltipFontFamily\",\n  components: {\n    SvgFont\n  },\n  props: {\n    value: {\n      type: null,\n      required: true\n    },\n    fontFamily: {\n      type: null,\n      required: true\n    }\n  },\n  emits: [\"input\"],\n  computed: {\n    ...mapState({\n      fonts: state => state.options.fonts\n    }),\n    filteredFonts() {\n      return Array.from(\n        new Set([\n          this.fontFamily,\n          ...this.fonts.filter(font => font.hidden_in_editor !== true)\n        ])\n      ).sort((a, b) => {\n        if (a.name < b.name) return -1;\n        return 1;\n      });\n    }\n  },\n  mounted() {\n    gsap.to(this.$refs.container, 0, {\n      scrollTo: { x: \".js-selected-font\", offsetX: 16, autoKill: false }\n    });\n  },\n  methods: {\n    selectFont(font) {\n      this.$emit(\"input\", font.weights.normal.name);\n    }\n  }\n};\n</script>\n","<template>\n  <div class=\"flex items-center\">\n    <div\n      class=\"typeset-4 text-light-ink-2 whitespace-no-wrap\"\n      @click.prevent>\n      {{ label }}\n    </div>\n    <div class=\"flex h-full items-center bg-paper ml-3\">\n      <div\n        class=\"self-stretch flex items-center justify-center px-5\"\n        @click=\"stepDown\">\n        <svg-icon\n          name=\"minus\"\n          width=\"9\"\n          height=\"1\" />\n      </div>\n\n      <span class=\"typeset-7 formatted-value\">{{ formattedValue }}</span>\n\n      <div\n        class=\"self-stretch flex items-center justify-center px-5\"\n        @click=\"stepUp\">\n        <svg-icon\n          name=\"plus\"\n          width=\"9\"\n          height=\"9\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport SvgIcon from \"../SvgIcon.vue\";\n\nexport default {\n  name: \"TooltipStepperInput\",\n  components: {\n    SvgIcon\n  },\n  props: {\n    label: {\n      type: String,\n      required: true\n    },\n    value: {\n      type: null,\n      required: true\n    },\n    min: {\n      type: Number,\n      required: true\n    },\n    max: {\n      type: Number,\n      required: true\n    },\n    step: {\n      type: Number,\n      required: true\n    }\n  },\n  emits: [\"input\"],\n  computed: {\n    formattedValue() {\n      return parseFloat(\n        this.step === 1 ? Math.round(this.value) : this.value.toFixed(1),\n        10\n      );\n    }\n  },\n  methods: {\n    stepDown() {\n      if (this.formattedValue !== this.min) {\n        const newSize = this.value - this.step;\n        this.$emit(\"input\", newSize);\n      }\n    },\n    stepUp() {\n      if (this.formattedValue !== this.max) {\n        const newSize = this.value + this.step;\n        this.$emit(\"input\", newSize);\n      }\n    }\n  }\n};\n</script>\n\n<style scoped>\n.formatted-value {\n  min-width: 32px;\n  text-align: center;\n}\n</style>\n","<template>\n  <div class=\"h-scroll h-full flex p-3\">\n    <div\n      v-if=\"!enabledStyles || enabledStyles.fontStyle\"\n      :class=\"{ 'bg-paper': bold, 'text-ink-2': !boldEnabled }\"\n      class=\"w-7 relative flex-no-shrink flex items-center justify-center mr-3\"\n      @click=\"toggleBold\">\n      <svg-icon\n        name=\"bold-2\"\n        width=\"8\"\n        height=\"10\" />\n      <transition name=\"strikethrough\">\n        <div\n          v-if=\"!boldEnabled\"\n          key=\"bold-strikethrough\"\n          class=\"strikethrough-line\"></div>\n      </transition>\n    </div>\n    <div\n      v-if=\"!enabledStyles || enabledStyles.fontStyle\"\n      :class=\"{ 'bg-paper': italic, 'text-ink-2': !italicEnabled }\"\n      class=\"w-7 relative flex-no-shrink flex items-center justify-center mr-3\"\n      @click=\"toggleItalic\">\n      <svg-icon\n        name=\"italic-2\"\n        width=\"8\"\n        height=\"10\" />\n      <transition name=\"strikethrough\">\n        <div\n          v-if=\"!italicEnabled\"\n          key=\"italic-strikethrough\"\n          class=\"strikethrough-line bg-red\"></div>\n      </transition>\n    </div>\n    <tooltip-stepper-input\n      v-for=\"(property, index) in propertiesToShow\"\n      :key=\"property\"\n      :value=\"selection[property]\"\n      :min=\"options[property].min\"\n      :max=\"options[property].max\"\n      :step=\"options[property].step\"\n      :label=\"stepperLabel(property)\"\n      class=\"mr-5\"\n      :class=\"index === sizeProperties.length - 1 ? 'pr-3' : 'mr-5'\"\n      @input=\"setProperty(property, $event)\" />\n  </div>\n</template>\n\n<script>\nimport { mapState, mapGetters } from \"vuex\";\nimport { startCase } from \"lodash-es\";\n\nimport SvgIcon from \"@/app/javascript/components/shared/SvgIcon.vue\";\nimport TooltipStepperInput from \"./TooltipStepperInput.vue\";\n\nexport default {\n  name: \"MobileTooltipFontSize\",\n  components: {\n    SvgIcon,\n    TooltipStepperInput\n  },\n  props: {\n    fontFamily: {\n      type: null,\n      required: true\n    },\n    value: {\n      type: Object,\n      required: true\n    }\n  },\n  emits: [\"set-warning\"],\n  data() {\n    return {\n      sizeProperties: [\"fontSize\", \"lineHeight\", \"letterSpacing\"],\n      bold: false,\n      italic: false\n    };\n  },\n  computed: {\n    ...mapState({\n      colours: state => state.options.colours,\n      enabledStyles: state => state.design.canvas?.enabledStyles,\n      fonts: state => state.options.fonts,\n      options: state => state.options,\n      selection: state => state.design.canvas?.selection,\n      selectedTextbox: state => state.design.canvas?.selectedTextbox,\n      flow: state => state.design.flow,\n      editingText: state => state.design.canvas?.editingText\n    }),\n    ...mapGetters({\n      productId: \"design/productId\"\n    }),\n    boldEnabled() {\n      if (this.italic) {\n        return this.canBeBoldAndItalic;\n      }\n      return this.canBeBold;\n    },\n    italicEnabled() {\n      if (this.bold) {\n        return this.canBeBoldAndItalic;\n      }\n      return this.canBeItalic;\n    },\n    canBeBold() {\n      return \"bold\" in this.fontFamily.weights;\n    },\n    canBeItalic() {\n      return \"italic\" in this.fontFamily.weights;\n    },\n    canBeBoldAndItalic() {\n      return \"bolditalic\" in this.fontFamily.weights;\n    },\n    boldItalicDisabledMessage() {\n      if (!this.boldEnabled && !this.italicEnabled) {\n        return \"bold-italic-neither\";\n      }\n      if (!this.boldEnabled) {\n        return this.canBeBold ? \"bold-italic-not-both\" : \"not-bold\";\n      }\n      if (!this.italicEnabled) {\n        return this.canBeItalic ? \"bold-italic-not-both\" : \"not-italic\";\n      }\n      return null;\n    },\n    lockedModeTextBoxSelected() {\n      return this.selectedTextbox?.lockedMode;\n    },\n    propertiesToShow() {\n      if (this.lockedModeTextBoxSelected) {\n        return null;\n      }\n      return this.sizeProperties.filter(prop => {\n        return (\n          (!this.enabledStyles || this.enabledStyles[prop]) &&\n          Object.prototype.hasOwnProperty.call(this.selection, prop)\n        );\n      });\n    },\n    stepperLabel() {\n      return property => {\n        switch (property) {\n          case \"fontSize\":\n            return this.t(\"editor.input-labels.font-size\");\n          case \"lineHeight\":\n            return this.t(\"editor.input-labels.line-height\");\n          case \"letterSpacing\":\n            return this.t(\"editor.input-labels.letter-spacing\");\n          default:\n            return null;\n        }\n      };\n    },\n    isMergeFlow() {\n      return this.flow === \"merge_flow\";\n    },\n    textIsMergeField() {\n      return (\n        this.editingText && this.isMergeFlow && this.selectedTextbox?.lockedMode\n      );\n    },\n    formattedAnalyticsId() {\n      if (typeof this.productId === \"string\") {\n        return this.productId;\n      }\n      return `PRODUCT-${this.productId}`;\n    }\n  },\n  mounted() {\n    if (\n      this.canBeBold &&\n      this.value.fontFamily === this.fontFamily.weights.bold.name\n    ) {\n      this.bold = true;\n    }\n    if (\n      this.canBeItalic &&\n      this.value.fontFamily === this.fontFamily.weights.italic.name\n    ) {\n      this.italic = true;\n    }\n    if (\n      this.canBeBoldAndItalic &&\n      this.value.fontFamily === this.fontFamily.weights.bolditalic.name\n    ) {\n      this.bold = true;\n      this.italic = true;\n    }\n    this.$emit(\n      \"set-warning\",\n      this.t(`editor.tooltips.${this.boldItalicDisabledMessage}`)\n    );\n  },\n  beforeUnmount() {\n    this.$emit(\"set-warning\", null);\n  },\n  methods: {\n    toggleBold() {\n      if (this.boldEnabled) {\n        if (this.bold && this.italic) {\n          this.bold = false;\n          this.setFontFamily(this.fontFamily.weights.italic.name);\n        } else if (this.bold) {\n          this.bold = false;\n          this.setFontFamily(this.fontFamily.weights.normal.name);\n        } else if (this.italic) {\n          this.bold = true;\n          this.setFontFamily(this.fontFamily.weights.bolditalic.name);\n        } else {\n          this.bold = true;\n          this.setFontFamily(this.fontFamily.weights.bold.name);\n        }\n      }\n      this.$emit(\n        \"set-warning\",\n        this.t(`editor.tooltips.${this.boldItalicDisabledMessage}`)\n      );\n    },\n    toggleItalic() {\n      if (this.italicEnabled) {\n        if (this.bold && this.italic) {\n          this.italic = false;\n          this.setFontFamily(this.fontFamily.weights.bold.name);\n        } else if (this.italic) {\n          this.italic = false;\n          this.setFontFamily(this.fontFamily.weights.normal.name);\n        } else if (this.bold) {\n          this.italic = true;\n          this.setFontFamily(this.fontFamily.weights.bolditalic.name);\n        } else {\n          this.italic = true;\n          this.setFontFamily(this.fontFamily.weights.italic.name);\n        }\n      }\n      this.$emit(\n        \"set-warning\",\n        this.t(`editor.tooltips.${this.boldItalicDisabledMessage}`)\n      );\n    },\n    setFontFamily(fontFamily) {\n      const selection = { fontFamily };\n      this.commitSelection(selection);\n      if (fontFamily.includes(\"Bold\") || fontFamily.includes(\"Italic\")) {\n        this.handleAnalyticsEvents(\"Style\");\n      } else {\n        this.handleAnalyticsEvents(\"Font\");\n      }\n    },\n    setProperty(property, value) {\n      const selection = { [property]: value };\n      this.commitSelection(selection);\n      this.handleAnalyticsEvents(this.analyticsProperty(property));\n    },\n    commitSelection(selection) {\n      if (this.textIsMergeField) {\n        this.$store.dispatch(\"design/merge/setMergeStyle\", selection);\n      } else {\n        this.$store.state.design.canvas.setSelection(selection);\n      }\n    },\n    handleAnalyticsEvents(type) {\n      analytics.track(\"Edited Text\", {\n        product_id: this.formattedAnalyticsId,\n        type\n      });\n    },\n    analyticsProperty(text) {\n      return startCase(text);\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.strikethrough-enter-from,\n.strikethrough-leave-to {\n  transform: rotate(-45deg) scaleX(0) !important;\n}\n\n.strikethrough-enter-to,\n.strikethrough-leave {\n  transform: rotate(-45deg) scaleX(1);\n}\n\n.strikethrough-enter-active,\n.strikethrough-leave-active {\n  transition: transform 0.2s ease-in-out;\n}\n\n.strikethrough-line {\n  position: absolute;\n  height: 1px;\n  width: 32px;\n  transform: rotate(-45deg) scaleX(1);\n}\n</style>\n","<template>\n  <div>\n    <div\n      class=\"pointer absolute bg-paper-2 w-4 h-4 shadow-2 showing\"\n      :style=\"getStyleForPointer\"></div>\n    <div\n      class=\"absolute\"\n      :style=\"getStyleForObjectArea\">\n      <popover\n        always-show\n        min-width=\"0\"\n        menu-bg-class=\"bg-paper-2 shadow-2\"\n        class=\"h-full\"\n        :origin=\"origin\">\n        <template #body>\n          <div\n            id=\"text-editing-controls\"\n            ref=\"mobileTooltip\"\n            class=\"text-editing-controls pointer-events-all\"\n            data-cy=\"mobile-text-controls\"\n            :class=\"{ 'text-is-caption': !shouldShowStylingTools }\">\n            <fade-transition\n              mode=\"out-in\"\n              :duration=\"fadeDuration\">\n              <div\n                v-if=\"!valueBeingEdited\"\n                :key=\"`${sheetId}-initial`\"\n                class=\"py-3 h-full flex\">\n                <div\n                  class=\"flex items-center px-4 whitespace-no-wrap\"\n                  :class=\"{ 'border-r border-ink-2': shouldShowStylingTools }\"\n                  data-cy=\"mobile-text-controls-edit-button\"\n                  @click=\"editText\">\n                  {{ t(\"editor.mobile-tooltip.edit-text\") }}\n                </div>\n                <div\n                  v-if=\"shouldShowStylingTools\"\n                  class=\"flex-1 flex justify-between px-3\">\n                  <div\n                    v-if=\"!enabledStyles || enabledStyles.textColour\"\n                    class=\"flex items-center justify-center w-7\"\n                    data-cy=\"mobile-text-controls-colour\"\n                    @click=\"$store.commit('setValueBeingEdited', 'color')\">\n                    <div\n                      class=\"color border border-ink-2 br-circle\"\n                      :style=\"{ backgroundColor: selection.fill }\"></div>\n                  </div>\n                  <div\n                    v-if=\"shouldShowTextAlignment\"\n                    class=\"flex items-center justify-center w-7\"\n                    data-cy=\"mobile-text-controls-alignment\"\n                    @click=\"$store.commit('setValueBeingEdited', 'alignment')\">\n                    <svg-icon\n                      name=\"align-center\"\n                      width=\"12\"\n                      height=\"9\" />\n                  </div>\n                  <div\n                    v-if=\"!enabledStyles || enabledStyles.fontFamily\"\n                    class=\"flex items-center justify-center w-7\"\n                    data-cy=\"mobile-text-controls-font-family\"\n                    @click=\"$store.commit('setValueBeingEdited', 'fontFamily')\">\n                    {{ t(\"editor.mobile-tooltip.font\") }}\n                  </div>\n                  <div\n                    v-if=\"shouldShowFontSize\"\n                    class=\"flex items-center justify-center w-7\"\n                    data-cy=\"mobile-text-controls-font-size\"\n                    @click=\"$store.commit('setValueBeingEdited', 'fontSize')\">\n                    <svg-icon\n                      name=\"font-size\"\n                      width=\"23\"\n                      height=\"13\" />\n                  </div>\n                </div>\n              </div>\n              <div\n                v-else-if=\"valueBeingEdited !== 'text'\"\n                :key=\"`${sheetId}-editingValue`\"\n                class=\"py-3 h-full flex\">\n                <div\n                  class=\"flex items-center justify-center w-7 border-r border-ink-2\"\n                  @click=\"$store.commit('setValueBeingEdited', null)\">\n                  <svg-icon name=\"leftarrow\" />\n                </div>\n                <div class=\"-my-3 flex-1 overflow-hidden\">\n                  <component\n                    :is=\"textTooltipComponent\"\n                    v-bind=\"textTooltipComponentProps\"\n                    @input=\"textTooltipComponentEvents($event)\"\n                    @set-warning=\"styleWarning = $event\" />\n                </div>\n              </div>\n            </fade-transition>\n          </div>\n        </template>\n        <template\n          v-if=\"valueBeingEdited === 'fontSize' && styleWarning\"\n          #secondary>\n          <div class=\"px-3 py-2 text-center typeset-9\">{{ styleWarning }}</div>\n        </template>\n      </popover>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\n\nimport FadeTransition from \"@/app/javascript/components/transitions/FadeTransition.vue\";\nimport Popover from \"@/app/javascript/components/shared/Popover.vue\";\nimport SvgIcon from \"@/app/javascript/components/shared/SvgIcon.vue\";\nimport MobileTooltipTextColor from \"./MobileTooltipTextColor.vue\";\nimport MobileTooltipTextAlignment from \"./MobileTooltipTextAlignment.vue\";\nimport MobileTooltipFontFamily from \"./MobileTooltipFontFamily.vue\";\nimport MobileTooltipFontSize from \"./MobileTooltipFontSize.vue\";\n\nexport default {\n  name: \"TextSelectionTooltip\",\n  components: {\n    FadeTransition,\n    MobileTooltipTextColor,\n    MobileTooltipTextAlignment,\n    MobileTooltipFontFamily,\n    MobileTooltipFontSize,\n    Popover,\n    SvgIcon\n  },\n  props: {\n    ratio: {\n      type: Number,\n      default: 1\n    },\n    sheetId: {\n      type: Number,\n      required: true\n    },\n    horizontalAdjustment: {\n      type: Number,\n      default: 0\n    },\n    verticalAdjustment: {\n      type: Number,\n      default: 0\n    },\n    activeSheet: {\n      type: Object,\n      default: () => {}\n    }\n  },\n  data() {\n    return {\n      styleWarning: null,\n      fadeDuration: 200\n    };\n  },\n  computed: {\n    ...mapGetters({\n      availableKeys: \"design/merge/availableKeys\",\n      currentMergeStyle: \"design/merge/currentStyle\",\n      currentMergeFontFamily: \"design/merge/currentFontFamily\",\n      showsStyle: \"design/merge/showsStyle\",\n      productId: \"design/productId\"\n    }),\n    ...mapState({\n      canvas: state => state.design.canvas,\n      flow: state => state.design.flow,\n      editingText: state => state.design.canvas?.editingText,\n      editingFoiledText: state => state.design.canvas?.editingFoiledText,\n      selection: state => state.design.canvas?.selection,\n      selectedObject: state => state.design.canvas?.selectedObject,\n      textBoxSelectionCoordinates: state =>\n        state.design.canvas?.textBoxSelectionCoordinates,\n      colours: state => state.options.colours,\n      fonts: state => state.options.fonts,\n      showTextEditingOverlay: state => state.showTextEditingOverlay,\n      showCaptionEditingOverlay: state => state.showCaptionEditingOverlay,\n      valueBeingEdited: state => state.valueBeingEdited,\n      enabledStyles: state => state.design.canvas?.enabledStyles\n    }),\n    isActiveSheet() {\n      return this.sheetId === this.activeSheet.id;\n    },\n    yOrigin() {\n      return this.textBoxSelectionCoordinates &&\n        this.textBoxSelectionCoordinates.top / this.activeSheet.height < 0.5\n        ? \"top\"\n        : \"bottom\";\n    },\n    xOrigin() {\n      if (!this.textBoxSelectionCoordinates) {\n        return \"center\";\n      }\n      const center =\n        this.textBoxSelectionCoordinates.textBoxLeft +\n        this.textBoxSelectionCoordinates.textBoxWidth / 2;\n\n      const ratio = center / this.activeSheet.width;\n      if (ratio < 0.33) {\n        return \"left\";\n      }\n      if (ratio < 0.66) {\n        return \"center\";\n      }\n      return \"right\";\n    },\n    origin() {\n      return `${this.yOrigin} ${this.xOrigin}`;\n    },\n    getStyleForObjectArea() {\n      return {\n        top: `${\n          this.adjustedDimension(this.textBoxSelectionCoordinates.top) +\n          this.verticalAdjustment +\n          this.topAdjustment\n        }px`,\n        left: `${\n          this.adjustedDimension(this.textBoxSelectionCoordinates.textBoxLeft) +\n          this.horizontalAdjustment\n        }px`,\n        width: `${this.adjustedDimension(this.widthCorrectedForRotation)}px`,\n        height: `${this.adjustedDimension(this.heightCorrectedForRotation)}px`\n      };\n    },\n    isRotated() {\n      return [-90, 90].includes(this.textBoxSelectionCoordinates.angle);\n    },\n    heightCorrectedForRotation() {\n      return this.isRotated\n        ? this.textBoxSelectionCoordinates.textBoxWidth\n        : this.textBoxSelectionCoordinates.height;\n    },\n    widthCorrectedForRotation() {\n      return this.isRotated\n        ? this.textBoxSelectionCoordinates.height\n        : this.textBoxSelectionCoordinates.textBoxWidth;\n    },\n    topAdjustment() {\n      return this.yOrigin === \"bottom\" ? -5 : 5;\n    },\n    pointerHeightOffestAdjustment() {\n      return this.yOrigin === \"bottom\"\n        ? 0\n        : this.textBoxSelectionCoordinates.height;\n    },\n    pointerTopOffestAdjustment() {\n      return this.yOrigin === \"bottom\" ? -18 : 4;\n    },\n    pointerTop() {\n      return (\n        this.adjustedDimension(\n          this.textBoxSelectionCoordinates.top +\n            this.pointerHeightOffestAdjustment\n        ) +\n        this.pointerTopOffestAdjustment +\n        this.verticalAdjustment\n      );\n    },\n    pointerLeft() {\n      return (\n        this.adjustedDimension(\n          this.textBoxSelectionCoordinates.selectionLeft +\n            this.textBoxSelectionCoordinates.selectionWidth / 2\n        ) +\n        this.horizontalAdjustment -\n        8\n      );\n    },\n    getStyleForPointer() {\n      return {\n        top: `${this.pointerTop}px`,\n        left: `${this.pointerLeft}px`\n      };\n    },\n    adjustedDimension() {\n      return measurement => parseInt(measurement * this.ratio, 10) + 1;\n    },\n    textTooltipComponent() {\n      switch (this.valueBeingEdited) {\n        case \"color\":\n          return \"mobile-tooltip-text-color\";\n        case \"alignment\":\n          return \"mobile-tooltip-text-alignment\";\n        case \"fontFamily\":\n          return \"mobile-tooltip-font-family\";\n        case \"fontSize\":\n          return \"mobile-tooltip-font-size\";\n        default:\n          return null;\n      }\n    },\n    textTooltipComponentProps() {\n      switch (this.valueBeingEdited) {\n        case \"color\":\n          if (this.textIsMergeField) {\n            return { value: this.currentMergeStyle.fill };\n          }\n          return { value: this.selection.fill };\n        case \"alignment\":\n          return {\n            value: this.selection\n          };\n        case \"fontFamily\":\n          if (this.textIsMergeField) {\n            return {\n              value: this.currentMergeStyle.fontFamily,\n              fontFamily: this.currentMergeFontFamily\n            };\n          }\n          return {\n            value: this.selection.fontFamily,\n            fontFamily: this.currentFontFamily\n          };\n        case \"fontSize\":\n          if (this.textIsMergeField) {\n            return {\n              value: this.currentMergeStyle,\n              fontFamily: this.currentMergeFontFamily\n            };\n          }\n          return {\n            value: this.selection,\n            fontFamily: this.currentFontFamily\n          };\n        default:\n          return null;\n      }\n    },\n    currentFontFamily() {\n      return this.fonts.filter(\n        font =>\n          Object.keys(font.weights).filter(\n            weight => font.weights[weight].name === this.selection.fontFamily\n          ).length > 0\n      )[0];\n    },\n    isMergeFlow() {\n      return this.flow === \"merge_flow\";\n    },\n    textIsCaption() {\n      return (\n        this.canvas &&\n        !this.isMergeFlow &&\n        this.canvas?.selectedTextbox?.lockedMode\n      );\n    },\n    textIsMergeField() {\n      return (\n        this.canvas &&\n        this.editingText &&\n        this.isMergeFlow &&\n        this.canvas?.selectedTextbox?.lockedMode\n      );\n    },\n    shouldShowStylingTools() {\n      if (!this.stylesAvailable) return false;\n\n      return (\n        (!this.textIsCaption && !this.textIsMergeField) ||\n        (this.textIsMergeField && this.showsStyle)\n      );\n    },\n    stylesAvailable() {\n      if (this.editingFoiledText) {\n        return false;\n      }\n\n      if (this.enabledStyles) {\n        return Object.values(this.enabledStyles).some(Boolean);\n      }\n      return true;\n    },\n    shouldShowFontSize() {\n      return (\n        !this.enabledStyles ||\n        this.enabledStyles.letterSpacing ||\n        this.enabledStyles.lineHeight ||\n        this.enabledStyles.fontStyle\n      );\n    },\n    shouldShowTextAlignment() {\n      return (\n        (!this.enabledStyles || this.enabledStyles.textAlignment) &&\n        !this.textIsMergeField\n      );\n    },\n    formattedAnalyticsId() {\n      if (typeof this.productId === \"string\") {\n        return this.productId;\n      }\n      return `PRODUCT-${this.productId}`;\n    }\n  },\n  watch: {\n    selectedObject(object) {\n      if (object) {\n        this.fadeDuration = 0;\n        this.$store.commit(\"setValueBeingEdited\", null);\n        this.fadeDuration = 0;\n      }\n    }\n  },\n  created() {\n    if (this.textIsMergeField) {\n      const [key] = this.availableKeys;\n      this.$store.commit(\"design/merge/setCurrentMergeKey\", key);\n      this.$store.dispatch(\"design/merge/setUpFirstMergeInput\");\n    }\n  },\n  beforeMount() {\n    this.$store.commit(\"setValueBeingEdited\", null);\n  },\n  methods: {\n    textTooltipComponentEvents(value) {\n      switch (this.valueBeingEdited) {\n        case \"color\":\n          return this.setColour(value);\n        case \"alignment\":\n          return {};\n        case \"fontFamily\":\n          return {\n            value: this.setFontFamily(value)\n          };\n        case \"fontSize\":\n          return {};\n        default:\n          return null;\n      }\n    },\n    setColour(colour) {\n      const selection = { fill: colour };\n      this.commitSelection(selection);\n      this.handleAnalyticsEvents(\"Colour\");\n    },\n    setFontFamily(fontFamily) {\n      const selection = { fontFamily };\n      this.commitSelection(selection);\n      this.handleAnalyticsEvents(\"Font\");\n    },\n    commitSelection(selection) {\n      if (this.textIsMergeField) {\n        this.$store.dispatch(\"design/merge/setMergeStyle\", selection);\n      } else {\n        this.$store.state.design.canvas.setSelection(selection);\n      }\n    },\n    editText() {\n      this.$store.commit(\"setValueBeingEdited\", \"text\");\n      if (this.textIsCaption) {\n        this.$store.commit(\"setShowCaptionEditingOverlay\", true);\n      } else if (this.textIsMergeField) {\n        this.$store.commit(\"setShowMergeEditingOverlay\", true);\n      } else {\n        this.$store.commit(\"setShowTextEditingOverlay\", true);\n      }\n    },\n    handleAnalyticsEvents(type) {\n      analytics.track(\"Edited Text\", {\n        product_id: this.formattedAnalyticsId,\n        type\n      });\n    }\n  }\n};\n</script>\n\n<style scoped lang=\"scss\">\n.text-editing-controls {\n  max-width: 294px;\n  height: 64px;\n  touch-action: manipulation;\n\n  &.text-is-caption {\n    width: auto;\n  }\n}\n\n/*! purgecss start ignore */\n:deep(:not(textarea)) {\n  user-select: none;\n  -webkit-touch-callout: none;\n}\n/*! purgecss end ignore */\n\n.color {\n  width: 34px;\n  height: 34px;\n}\n\n.pointer-events-all {\n  pointer-events: all !important;\n}\n\n.pointer {\n  pointer-events: none;\n  transform: rotate(45deg) scale(0.6);\n  opacity: 0;\n  transition: all 0.2s ease-out;\n  transition-property: transform, opacity;\n\n  &.showing {\n    opacity: 1;\n    transform: rotate(45deg) scale(1);\n  }\n}\n</style>\n","<template>\n  <div class=\"text-selection-tooltip-overlay-container\">\n    <div class=\"text-selection-tooltip-overlay\">\n      <text-selection-tooltip\n        v-if=\"textBoxSelectionCoordinates\"\n        :ratio=\"ratio\"\n        :active-sheet=\"activeSheet\"\n        :sheet-id=\"sheetId\"\n        :horizontal-adjustment=\"horizontalAdjustment\"\n        :vertical-adjustment=\"verticalAdjustment\" />\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport TextSelectionTooltip from \"./TextSelectionTooltip.vue\";\n\nexport default {\n  name: \"TextSelectionTooltipOverlay\",\n  components: {\n    TextSelectionTooltip\n  },\n  props: {\n    ratio: {\n      type: Number,\n      default: 1\n    },\n    sheetId: {\n      type: Number,\n      required: true\n    },\n    horizontalAdjustment: {\n      type: Number,\n      default: 0\n    },\n    verticalAdjustment: {\n      type: Number,\n      default: 0\n    },\n    activeSheet: {\n      type: Object,\n      default: () => {}\n    }\n  },\n  computed: {\n    ...mapState({\n      textBoxSelectionCoordinates: state =>\n        state.design.canvas?.textBoxSelectionCoordinates\n    })\n  }\n};\n</script>\n","<template>\n  <div\n    class=\"mobile-unprintable-character-warning fixed top-4 right-3 left-3 bg-red items-center justify-between p-3 typeset-7 min-h-7 text-white\">\n    <p class=\"text-white\">\n      {{\n        t(\"editor.mobile-tooltip.text-overlay.unprintable-character-warning\")\n      }}\n      {{ unprintableCharacters.join(\", \") }}\n    </p>\n  </div>\n</template>\n<script>\nexport default {\n  name: \"MobileUnprintableCharacterWarning\",\n  props: {\n    unprintableCharacters: {\n      type: Array,\n      required: true\n    }\n  }\n};\n</script>\n\n<style scoped>\n.mobile-unprintable-character-warning {\n  z-index: 102;\n  max-height: 100px;\n  overflow-y: auto;\n}\n</style>\n","<template>\n  <div\n    id=\"mobile-text-editing-overlay\"\n    class=\"mobile-overlay mobile-text-editing-overlay bg-paper-1\">\n    <div class=\"done-btn-wrapper\">\n      <div class=\"done-btn-panel\">\n        <div\n          class=\"done-btn btn btn-primary\"\n          @click=\"done\">\n          {{ t(\"editor.mobile-tooltip.text-overlay.update-text\") }}\n        </div>\n        <hr class=\"absolute sm:hidden m-0\" />\n      </div>\n    </div>\n    <div\n      v-if=\"allowPapierAi\"\n      class=\"bg-lavender p-3 mb-4 mx-3 sm:mx-0 mt-4 flex\">\n      <div\n        v-if=\"papierAiFlow\"\n        class=\"flex\">\n        <svg-icon\n          name=\"tick-circle-outline\"\n          class=\"mr-3\" />\n        <p>\n          {{\n            t(\"editor.mobile-editor.papier-ai.banner-cta-regenerate-confirm\")\n          }}\n          <a\n            class=\"underline cursor-pointer ml-2 text-center\"\n            @click=\"restartAiFlow\">\n            {{\n              t(\"editor.mobile-editor.papier-ai.banner-cta-regenerate-prompt\")\n            }}\n          </a>\n        </p>\n      </div>\n      <div\n        v-else\n        class=\"flex justify-center\">\n        <svg-icon\n          name=\"sparkle-ink\"\n          class=\"mr-3\" />\n        <p>\n          {{ t(\"editor.mobile-editor.papier-ai.banner-cta-confirm\") }}\n          <a\n            class=\"underline cursor-pointer ml-2\"\n            @click=\"startAiFlow\">\n            {{ t(\"editor.mobile-editor.papier-ai.banner-cta-prompt\") }}\n          </a>\n        </p>\n      </div>\n    </div>\n    <textarea\n      ref=\"textarea\"\n      :value=\"textToEdit\"\n      :style=\"textAreaStyle\"\n      class=\"mobile-textarea\"\n      @input=\"textInput\"></textarea>\n    <teleport to=\"#end-of-body\">\n      <fade-transition>\n        <mobile-unprintable-character-warning\n          v-if=\"showWarning\"\n          :unprintable-characters=\"uniqueUnprintableCharacters\" />\n      </fade-transition>\n    </teleport>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport SvgIcon from \"@/app/javascript/components/shared/SvgIcon.vue\";\nimport FadeTransition from \"../../transitions/FadeTransition.vue\";\nimport MobileUnprintableCharacterWarning from \"./MobileUnprintableCharacterWarning.vue\";\n\nexport default {\n  name: \"MobileTextEditingOverlay\",\n  components: {\n    FadeTransition,\n    MobileUnprintableCharacterWarning,\n    SvgIcon\n  },\n  props: {\n    updateOnDone: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data() {\n    return {\n      height: \"auto\",\n      textToEdit: null,\n      showWarning: false,\n      papierAiFlow: false\n    };\n  },\n  computed: {\n    ...mapState({\n      canvas: state => state.design.canvas,\n      currentText: state => state.design.canvas?.currentText,\n      newText: state => state.design.newText,\n      allowPapierAi: state => state.allowPapierAi\n    }),\n    textAreaStyle() {\n      return {\n        height: this.height\n      };\n    },\n    selectionRange() {\n      return this.currentText ? this.currentText.length : 0;\n    },\n    newTextSplitIntoSegments() {\n      return [...new Intl.Segmenter().segment(this.newText)].map(\n        ({ segment }) => segment\n      );\n    },\n    unprintableCharactersArray() {\n      return this.newTextSplitIntoSegments\n        .map(char => {\n          return this.canvas.unprintableRegex.exec(char);\n        })\n        .filter(Boolean)\n        .map(char => char.input);\n    },\n    uniqueUnprintableCharacters() {\n      return [...new Set(this.unprintableCharactersArray)];\n    }\n  },\n  watch: {\n    newText(val) {\n      this.textToEdit = val;\n    }\n  },\n  created() {\n    this.textToEdit = this.currentText;\n  },\n  mounted() {\n    document.documentElement.classList.add(\"overflow-hidden\", \"fixed\");\n    document.body.classList.add(\"overflow-hidden\", \"fixed\");\n    this.resize();\n    this.$refs.textarea.focus();\n    this.$refs.textarea.setSelectionRange(\n      this.selectionRange,\n      this.selectionRange\n    );\n    window.addEventListener(\n      \"emitGeneratedResponse\",\n      this.insertGeneratedMessage\n    );\n  },\n  beforeUnmount() {\n    document.documentElement.classList.remove(\"overflow-hidden\", \"fixed\");\n    document.body.classList.remove(\"overflow-hidden\", \"fixed\");\n    this.canvas.replaceText(\n      this.$refs.textarea.value,\n      this.canvas.currentObject\n    );\n    if (!this.newText) {\n      this.canvas.clearSelection();\n    }\n    this.$store.commit(\"design/setNewText\", \"\");\n  },\n  methods: {\n    done() {\n      this.$store.commit(\"setValueBeingEdited\", null);\n      this.$store.commit(\"setShowTextEditingOverlay\", false);\n\n      if (this.updateOnDone) {\n        this.canvas.replaceText(\n          this.$refs.textarea.value,\n          this.canvas.textObjects()[0]\n        );\n        this.canvas.clearSelection();\n      }\n    },\n    insertGeneratedMessage(e) {\n      this.papierAiFlow = true;\n      this.textToEdit = e.detail;\n      this.resize();\n    },\n    startAiFlow() {\n      window.dispatchEvent(new CustomEvent(\"openDrawers\"));\n      analytics.track(\"Greeting Card AI - Give It A Try\");\n    },\n    restartAiFlow() {\n      window.dispatchEvent(new CustomEvent(\"openSecondaryDrawer\"));\n    },\n    textInput(event) {\n      this.$store.commit(\"design/setNewText\", event.target.value);\n      this.resize();\n      const result = this.canvas.unprintableRegex.exec(event.target.value);\n      if (result) {\n        this.showWarning = true;\n      } else {\n        this.showWarning = false;\n      }\n    },\n    resize() {\n      this.height = \"auto\";\n      this.$nextTick(() => {\n        const contentHeight = this.$refs.textarea.scrollHeight + 1;\n        const heightVal = `${contentHeight}px`;\n        this.height = heightVal;\n      });\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.mobile-text-editing-overlay {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 100;\n  height: 100%;\n  overflow: auto;\n}\n\n.done-btn-wrapper {\n  height: 80px;\n}\n.done-btn-panel {\n  height: 78px;\n  width: 100vw;\n  position: fixed; /* Fix position */\n  top: 0; /* Position it at the top */\n  right: 0; /* Position it at the right */\n  z-index: 101;\n  background-color: var(--paper-1);\n\n  hr {\n    top: 77px;\n    right: 10px;\n    bottom: 0;\n    left: 10px;\n  }\n}\n\n.done-btn {\n  height: 48px;\n  position: fixed;\n  top: 16px;\n  right: 8px;\n  z-index: 101;\n}\n.mobile-textarea {\n  width: 100%;\n  padding: 8px;\n  border: none;\n  background: transparent;\n  outline: none;\n  text-align: left;\n  resize: none;\n}\n</style>\n","<template>\n  <div\n    class=\"overset-text-warning bg-paper-4 flex items-center z-2 p-3 border-l-2 border-red\">\n    <svg-icon\n      name=\"warning\"\n      class=\"text-red mr-3\" />\n    <p class=\"text-red\">{{ t(\"editor.hints.new.mobile-overflowing\") }}</p>\n    <btn\n      v-if=\"!hideButton\"\n      type=\"primary\"\n      class=\"btn-sm ml-auto\"\n      @click=\"resizeToFit\">\n      {{ t(\"editor.hints.new.overflowing-button\") }}\n    </btn>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\n\nimport Btn from \"../Btn.vue\";\nimport SvgIcon from \"../SvgIcon.vue\";\n\nexport default {\n  name: \"MobileOversetTextWarning\",\n  components: {\n    Btn,\n    SvgIcon\n  },\n  props: {\n    hideButton: {\n      type: Boolean,\n      default: false\n    }\n  },\n  computed: {\n    ...mapState({\n      canvas: state => state.design.canvas\n    })\n  },\n  methods: {\n    resizeToFit() {\n      this.canvas.resizeTextToFit();\n    }\n  }\n};\n</script>\n<style lang=\"scss\" scoped>\n.overset-text-warning {\n  position: fixed;\n  top: 80px;\n  right: 24px;\n  left: 24px;\n}\n</style>\n","<template>\n  <div\n    id=\"mobile-caption-editing-overlay\"\n    class=\"mobile-overlay mobile-caption-editing-overlay bg-paper-2\">\n    <div class=\"flex items-center justify-between p-4\">\n      <div class=\"typeset-6\">\n        {{ t(\"editor.mobile-tooltip.caption-overlay.title\") }}\n      </div>\n      <div\n        class=\"done-btn btn btn-primary\"\n        @click=\"done\">\n        {{ t(\"editor.mobile-tooltip.caption-overlay.done\") }}\n      </div>\n    </div>\n    <captions-list />\n    <fade-transition>\n      <mobile-unprintable-character-warning\n        v-if=\"canvas?.unprintableCharacters\" />\n    </fade-transition>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\n\nimport FadeTransition from \"@/app/javascript/components/transitions/FadeTransition.vue\";\nimport MobileUnprintableCharacterWarning from \"@/app/javascript/components/editor/mobile/MobileUnprintableCharacterWarning.vue\";\n\nimport CaptionsList from \"../CaptionsList.vue\";\n\nexport default {\n  name: \"MobileCaptionEditingOverlay\",\n  components: {\n    CaptionsList,\n    FadeTransition,\n    MobileUnprintableCharacterWarning\n  },\n  computed: {\n    ...mapState({\n      canvas: state => state.design.canvas\n    })\n  },\n  mounted() {\n    document.documentElement.classList.add(\"overflow-hidden\", \"fixed\");\n    document.body.classList.add(\"overflow-hidden\", \"fixed\");\n  },\n  beforeUnmount() {\n    document.documentElement.classList.remove(\"overflow-hidden\", \"fixed\");\n    document.body.classList.remove(\"overflow-hidden\", \"fixed\");\n\n    this.canvas.clearSelection();\n  },\n  methods: {\n    done() {\n      this.$store.commit(\"setValueBeingEdited\", null);\n      this.$store.commit(\"setShowCaptionEditingOverlay\", false);\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.mobile-caption-editing-overlay {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1100001;\n  height: 100%;\n  overflow: auto;\n}\n\n.done-btn {\n  height: 48px;\n}\n</style>\n"],"names":["_sfc_main","SvgIcon","BaseInput","mapState","state","_a","colour","newColour","_hoisted_1","_hoisted_4","_hoisted_6","_createElementBlock","$props","_normalizeClass","_ctx","_createElementVNode","_hoisted_2","_createCommentVNode","_hoisted_3","_toDisplayString","_cache","_withModifiers","args","_normalizeStyle","$options","_createVNode","_component_svg_icon","_withDirectives","_openBlock","_hoisted_5","_Fragment","_renderList","$data","$event","SvgFont","font","_component_svg_font","newValue","BoldItalicInput","FontFamilyInput","ColourInput","TextInput","TextareaInput","clone","_c","_b","a","b","key","translationKey","string","weight","text","newText","fontFamily","style","_createBlock","_component_textarea_input","_component_text_input","_component_font_family_input","_component_bold_italic_input","_component_colour_input","CaptionsList","_component_captions_list","ImageEditingControl","f","filter","type","url","name","_component_image_editing_control","_withCtx","PhotoFilteringControls","PhotoRotationControls","PhotoScaleControls","scale","_d","_component_photo_rotation_controls","_component_photo_scale_controls","_component_photo_filtering_controls","prop","amount","_withKeys","option","index","NumberInput","TextAlignInput","mapGetters","selection","fontSize","align","spacing","lineHeight","keepFocus","_component_number_input","_component_text_align_input","_Transition","_mergeProps","_renderSlot","FadeTransition","val","measurement","_component_fade_transition","handle","FileDropper","element","filestack.init","options","vm","file","newPhoto","Photo","files","filesUploaded","photoPromises","photos","photo","button","h","ImageFrameTippyContent","sticky","ImageFrameTippySection","_component_image_frame_tippy_section","gsap","ScrollToPlugin","newSize","TooltipStepperInput","property","value","startCase","_component_tooltip_stepper_input","MobileTooltipTextColor","MobileTooltipTextAlignment","MobileTooltipFontFamily","MobileTooltipFontSize","Popover","ratio","object","_component_popover","_createSlots","_resolveDynamicComponent","TextSelectionTooltip","_component_text_selection_tooltip","MobileUnprintableCharacterWarning","segment","char","event","heightVal","_hoisted_7","_createTextVNode","_Teleport","_component_mobile_unprintable_character_warning","Btn","_component_btn"],"mappings":"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"}