{"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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"}