{"version":3,"file":"PhotoScaleControls-dvHYdXLS.js","sources":["../../../node_modules/lodash-es/startCase.js","../../../app/javascript/components/editor/inputs/BaseInput.vue","../../../app/javascript/components/shared/ImageEditingControl.vue","../../../app/javascript/components/shared/PhotoRotationControls.vue","../../../app/javascript/components/shared/PhotoScaleControls.vue"],"sourcesContent":["import createCompounder from './_createCompounder.js';\nimport upperFirst from './upperFirst.js';\n\n/**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\nvar startCase = createCompounder(function(result, word, index) {\n  return result + (index ? ' ' : '') + upperFirst(word);\n});\n\nexport default startCase;\n","<template>\n  <div></div>\n</template>\n\n<script>\nimport { vOnClickOutside } from \"@vueuse/components\";\n\nexport default {\n  name: \"BaseInput\",\n  directives: {\n    onClickOutside: vOnClickOutside\n  },\n  props: {\n    name: {\n      type: String,\n      default: \"\"\n    },\n    value: {\n      type: null,\n      required: true\n    },\n    disabled: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data() {\n    return {\n      optionsShowing: false\n    };\n  },\n  methods: {\n    toggleOptions() {\n      if (this.disabled) return;\n\n      this.optionsShowing = !this.optionsShowing;\n    },\n    hideOptions() {\n      this.optionsShowing = false;\n    }\n  }\n};\n</script>\n","<template>\n  <div class=\"flex items-center\">\n    <span class=\"label typeset-9\">{{ label }}</span>\n    <div class=\"controls flex-1\">\n      <slot></slot>\n    </div>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: \"ImageEditingControl\",\n  props: {\n    label: {\n      type: String,\n      required: true\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.label {\n  min-width: 80px;\n}\n</style>\n","<template>\n  <image-editing-control :label=\"label || t('editor.photo.rotate')\">\n    <a\n      href=\"#\"\n      class=\"inline-flex bg-transparent hover:bg-paper-1 h-6 w-6 items-center justify-center mr-2\"\n      @click.prevent=\"rotateLeft\">\n      <svg-icon\n        name=\"rotate-cc\"\n        width=\"14\"\n        height=\"12\" />\n    </a>\n    <a\n      href=\"#\"\n      class=\"inline-flex bg-transparent hover:bg-paper-1 h-6 w-6 items-center justify-center\"\n      @click.prevent=\"rotateRight\">\n      <svg-icon\n        name=\"rotate-c\"\n        width=\"14\"\n        height=\"12\" />\n    </a>\n  </image-editing-control>\n</template>\n\n<script>\nimport ImageEditingControl from \"./ImageEditingControl.vue\";\nimport SvgIcon from \"./SvgIcon.vue\";\n\nexport default {\n  name: \"PhotoRotationControls\",\n  components: {\n    ImageEditingControl,\n    SvgIcon\n  },\n  props: {\n    label: {\n      type: String,\n      required: false\n    },\n    canvas: {\n      type: Object,\n      default: null\n    }\n  },\n  methods: {\n    rotateLeft() {\n      this.canvas.rotateImageFrameLeft();\n      this.triggerAnalyticsEvent(\"Left\");\n    },\n    rotateRight() {\n      this.canvas.rotateImageFrameRight();\n      this.triggerAnalyticsEvent(\"Right\");\n    },\n    triggerAnalyticsEvent(type) {\n      analytics.track(\"Rotate Photo\", {\n        type\n      });\n    }\n  }\n};\n</script>\n","<template>\n  <image-editing-control :label=\"label || t('editor.photo.scale')\">\n    <div class=\"flex items-center\">\n      <input\n        class=\"number-input form-control ml-3 inline-flex bordered\"\n        :value=\"formattedValue\"\n        :step=\"step\"\n        @keydown.up.exact.prevent\n        @keydown.down.exact.prevent\n        @keydown.shift.up.exact.prevent\n        @keydown.shift.down.exact.prevent\n        @keyup.enter=\"enter\"\n        @keyup.up.exact=\"increment(0.1)\"\n        @keyup.down.exact=\"decrement(0.1)\"\n        @keyup.shift.up.exact=\"increment(1)\"\n        @keyup.shift.down.exact=\"decrement(1)\" />\n      <button\n        class=\"hover:bg-paper-1 bg-transparent h-6 w-6 flex items-center justify-center ml-2\"\n        @click=\"decrement(1)\">\n        <svg-icon\n          name=\"minus\"\n          height=\"1px\"\n          width=\"9px\" />\n      </button>\n      <button\n        class=\"hover:bg-paper-1 bg-transparent h-6 w-6 flex items-center justify-center ml-2\"\n        @click=\"increment(1)\">\n        <svg-icon\n          name=\"plus\"\n          height=\"9px\"\n          width=\"9px\" />\n      </button>\n    </div>\n  </image-editing-control>\n</template>\n\n<script>\nimport SvgIcon from \"@/app/javascript/components/shared/SvgIcon.vue\";\nimport ImageEditingControl from \"./ImageEditingControl.vue\";\n\nexport default {\n  name: \"PhotoScaleControls\",\n  components: {\n    ImageEditingControl,\n    SvgIcon\n  },\n  props: {\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    modelValue: {\n      type: null,\n      required: true\n    },\n    label: {\n      type: String,\n      default: null\n    }\n  },\n  emits: [\"update:modelValue\"],\n  computed: {\n    formattedValue() {\n      if (!this.modelValue) {\n        return \"\";\n      }\n\n      return `${Math.round(this.modelValue * 10)}%`;\n    }\n  },\n  methods: {\n    increment(amount) {\n      this.$emit(\n        \"update:modelValue\",\n        Math.min(this.modelValue + amount, this.max)\n      );\n      analytics.track(\"Scale Photo\");\n    },\n    decrement(amount) {\n      this.$emit(\n        \"update:modelValue\",\n        Math.max(this.modelValue - amount, this.min)\n      );\n      analytics.track(\"Scale Photo\");\n    },\n    enter($event) {\n      let val = parseFloat($event.target.value) / 10 || this.min;\n      if (val < this.min) {\n        val = this.min;\n      }\n      if (val > this.max) {\n        val = this.max;\n      }\n      this.$emit(\"update:modelValue\", val);\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.number-input {\n  width: 60px;\n  height: 32px;\n  outline: none;\n}\n</style>\n"],"names":["startCase","createCompounder","result","word","index","upperFirst","_sfc_main","vOnClickOutside","_createElementBlock","_hoisted_1","_hoisted_2","_hoisted_3","_openBlock","_createElementVNode","_toDisplayString","$props","_renderSlot","_ctx","ImageEditingControl","SvgIcon","type","_createBlock","_component_image_editing_control","_withCtx","_cache","_withModifiers","$options","args","_createVNode","_component_svg_icon","amount","$event","val","_withKeys"],"mappings":"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","x_google_ignoreList":[0]}