{"version":3,"file":"full-screen-spinner-base-0fd4a107.js","sources":["../../../client/src/javascripts/customer_pages/_utils/image-editor.jsx","../../../client/src/javascripts/customer_pages/_utils/tools/slider-control-conversions.js","../../../client/src/javascripts/customer_pages/_utils/string-parameterize.js","../../../client/src/javascripts/customer_pages/_utils/manana-slider.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/common/notices/full-screen-spinner-base.jsx"],"sourcesContent":["import createReactClass from 'create-react-class';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport fetchImage from './fetch-image';\nimport Rectangle from './img/geometry';\nimport {\n getDefaultCrop,\n getDefaultCropRatio,\n getFixedCrop,\n scaleRectAroundOrigin,\n} from './img/canvas';\nimport IU from './img/img-utils';\nimport CropCords from './img/thumbnail-crop-coords';\n\nconst imageProcessors = (function() {\n /** ************************************************************************************* */\n /* Constants */\n const { X, Y, WIDTH, HEIGHT, RIGHT_ANGLE, imgHelpers } = IU;\n\n /** ************************************************************************************* */\n /* Private Functions */\n\n const LocalThumbCache = {\n getThumb(url) {\n if (this.thumbs[url]) {\n return this.thumbs[url];\n }\n\n const img = fetchImage(url, 'anonymous');\n this.thumbs[url] = img;\n return img;\n },\n thumbs: {},\n };\n\n const PanHandle = new Image();\n PanHandle.src = '/wm/images/move-photo.png';\n const canvasId = 'pandaview-canvas';\n\n\n // -----------------------------------------------------------\n // PandaView\n // -----------------------------------------------------------\n\n const PandaView = createReactClass({\n getInitialState() {\n return {\n forceCrop: false,\n drag: false,\n dragX: 0,\n dragY: 0,\n lastCrop: false,\n editMode: 'drag'\n };\n },\n componentDidMount() {\n this.checkImage();\n this.draw();\n },\n componentDidUpdate() {\n this.checkImage();\n if (this.simple_update) {\n this.draw();\n } else {\n this.queue_draw();\n }\n },\n UNSAFE_componentWillReceiveProps(nextProps) {\n const url_prop = 'large_url';\n\n if (this.props.editMode != nextProps.editMode) {\n this.setState({ editMode: nextProps.editMode });\n }\n\n this.pImg = null;\n\n if (\n nextProps.crop != this.props.crop ||\n nextProps.size_key != this.props.size_key ||\n nextProps.angle != this.props.angle ||\n nextProps[url_prop] != this.props[url_prop]\n ) {\n this.img_width = null;\n this.img_height = null;\n this.cacheKey = null;\n this.setState({ forceCrop: null });\n }\n\n this.simple_update =\n nextProps.crop != this.props.crop &&\n nextProps.angle == this.props.angle &&\n nextProps[url_prop] == this.props[url_prop];\n\n this.checkImage();\n },\n fullResoluton() {\n return this.prints_EL2() || this.printEditPreview();\n },\n prints_EL2() {\n return this.props.resolution === 'full';\n },\n printEditPreview() {\n return this.props.resolution === 'full-edit-preview';\n },\n ratio() {\n const {\n constraints: { ratio, prism },\n large_dimensions\n } = this.props;\n\n if (prism) {\n return ratio;\n }\n\n // if portrait or square image, then invert the ratio, as for those we apply the size ratio as portrait\n if (large_dimensions && large_dimensions.w <= large_dimensions.h) {\n return 1 / ratio;\n }\n\n return ratio;\n },\n render_EL2() {\n const maxWidth = IU.EL2_WIDTH;\n const maxHeight = IU.EL2_HEIGHT;\n const ratio = this.ratio();\n\n this.rect = Rectangle.fitLargestRectangle(ratio, maxWidth, maxHeight);\n\n this.rect[WIDTH] = Math.round(this.rect[WIDTH]);\n this.rect[HEIGHT] = Math.round(this.rect[HEIGHT]);\n\n // noinspection CheckTagEmptyBody\n return (\n \n );\n },\n renderPrintEditPreview() {\n const { cropEdges, filename, style } = this.props;\n let width = IU.EL2_WIDTH;\n let height = IU.EL2_HEIGHT;\n\n if (cropEdges) {\n const img = this.getImage();\n\n if (img) {\n const cropCords = new CropCords(\n img.crop,\n IU.imgHelpers.getPhotoAspectRatio(this.props)\n );\n width = cropCords.canvasWidth;\n height = cropCords.canvasHeight;\n }\n }\n\n return (\n \n );\n },\n render() {\n if (this.prints_EL2()) {\n return this.render_EL2();\n }\n\n if (this.printEditPreview()) {\n return this.renderPrintEditPreview();\n }\n\n let width = IU.CANVAS_W;\n let height = IU.CANVAS_H;\n let classname = '';\n\n if (this.props.cropEdges) {\n const img = this.getImage();\n\n if (img) {\n const cropCords = new CropCords(\n img.crop,\n IU.imgHelpers.getPhotoAspectRatio(this.props)\n );\n width = cropCords.canvasWidth;\n height = cropCords.canvasHeight;\n\n classname = ' sized';\n }\n }\n\n // noinspection CheckTagEmptyBody\n return (\n \n );\n },\n fixTouchEvent(e) {\n const [touch] = e.touches;\n\n if (touch) {\n return {\n ...e,\n pageX: touch.pageX,\n pageY: touch.pageY,\n };\n }\n },\n handleMouseDown(e) {\n // Only if we have a handler\n let viewScale;\n const zoom = this.getZoom();\n const {\n onClose,\n mode,\n editMode,\n raw_dimensions,\n large_dimensions,\n angle,\n } = this.props;\n const offset = $(this.refs.canvas).offset();\n let x = e.pageX - offset.left;\n let y = e.pageY - offset.top;\n\n if (this.activeArea) {\n if (x < this.activeArea[X]) {\n if (onClose) onClose();\n return;\n }\n if (x > this.activeArea[X] + this.activeArea[WIDTH]) {\n if (onClose) onClose();\n return;\n }\n if (y > this.activeArea[Y] + this.activeArea[HEIGHT]) {\n if (onClose) onClose();\n return;\n }\n }\n\n //* **************************************************************\n // Editing Mode\n if (mode === 'editing') {\n this.setState({\n forceCrop: this.getCrop(),\n lastCrop: this.getCrop(),\n drag: true,\n dragX: e.pageX,\n dragY: e.pageY,\n });\n }\n },\n handleTouchStart(e) {\n this.handleMouseDown(this.fixTouchEvent(e));\n },\n shouldHandleMove() {\n return this.props.mode == 'editing' && this.state.drag;\n },\n handleMouseMove(e) {\n if (this.shouldHandleMove()) {\n e.preventDefault();\n const dX = e.pageX - this.state.dragX;\n const dY = e.pageY - this.state.dragY;\n const scale = this.viewScale();\n\n this.handlePan(-1 * dX * scale, -1 * dY * scale);\n this.setState({\n dragX: e.pageX,\n dragY: e.pageY,\n });\n }\n },\n handleTouchMove(e) {\n if (this.shouldHandleMove()) {\n this.handleMouseMove(this.fixTouchEvent(e));\n }\n },\n handleMouseGone(e) {\n this.setState({ drag: false });\n if (this.overlay) {\n this.overlay.off();\n this.overlay.remove();\n jQuery(document.body).css('user-select', '');\n this.overlay = null;\n }\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n\n if (this.state.lastCrop) {\n this.props.onCropChanged &&\n this.props.onCropChanged(this.state.lastCrop);\n this.setState({ lastCrop: false });\n }\n },\n handleTouchEnd(e) {\n this.handleMouseGone(this.fixTouchEvent(e));\n },\n checkImage() {\n let url;\n let cache = false;\n const url_prop = 'large_url';\n\n if (this.fullResoluton()) {\n if (!this.props[url_prop]) {\n return;\n }\n url = this.props[url_prop].replace(/^https?:/, '');\n } else if (this.props.thumb_url) {\n url = this.props.thumb_url.replace(/^https?:/, '');\n cache = true;\n }\n\n if (this.img && this.url == url) {\n } else {\n this.url = url;\n if (cache) {\n this.img = LocalThumbCache.getThumb(url);\n } else if (window.RawCache) {\n this.img = RawCache.get(url);\n } else {\n this.img = fetchImage(url, 'anonymous');\n }\n\n const self = this;\n const queue_draw = function() {\n // Needs to re-render the component after the image have been succesfully loaded in order for the canvas to\n // be resized correctly.\n self.forceUpdate(function() {\n self.queue_draw();\n\n if (self.props.onImageLoaded) {\n self.props.onImageLoaded();\n }\n });\n };\n if (this.img.complete) {\n window.requestAnimationFrame(queue_draw);\n }\n this.img.addEventListener('load', queue_draw);\n }\n },\n viewScale() {\n const canvas = this.refs.canvas;\n if (canvas) {\n return canvas.width / canvas.clientWidth;\n }\n return 1;\n },\n queue_draw() {\n if (!this.tID) {\n this.bound_draw = this.bound_draw || this.draw;\n this.tID = setTimeout(this.bound_draw, 150);\n }\n },\n getCacheKey() {\n let cacheKey = `-img-${[\n this.img.src,\n this.props.size_key,\n this.props.angle,\n this.props.straighten,\n this.props.gamma,\n this.props.fx,\n ].join('-')}`;\n\n return cacheKey;\n },\n getProcessedImage() {\n let img = this.img;\n\n if (img && img.complete) {\n const cacheKey = this.getCacheKey();\n\n if (this.cachedImage && this.cacheKey == cacheKey) {\n return this.cachedImage;\n }\n\n const crop = this.getCrop();\n const ratio = crop[WIDTH] / crop[HEIGHT];\n const scale = 1;\n\n const props = {\n angle: this.props.angle,\n straighten: this.props.straighten,\n gamma: this.props.gamma,\n fx: this.props.fx,\n };\n\n if (this.props.constraints && this.props.constraints.prism) {\n props.angle = RIGHT_ANGLE * 4 - props.angle;\n }\n\n props.eye_scale = this.getScale();\n img = imgHelpers.doProcessPhoto(img, props, ratio, scale);\n\n this.cachedImage = img;\n this.cacheKey = cacheKey;\n\n return img;\n }\n },\n getImage() {\n if (this.img && this.img.src && this.img.complete) {\n this.pImg = this.pImg || this.getProcessedImage();\n\n const scale = (() => {\n const scale = this.getScale();\n\n return value => {\n value = parseInt(value, 10) * scale;\n\n return isNaN(value) ? 1 : value;\n };\n })();\n\n const img = this.pImg;\n\n img.crop = features?.disableAutoPrintCropping && !this.props.crop\n ? [0, 0, img.width, img.height]\n : this.getCrop().map(scale);\n\n img.cropped = false;\n\n return img;\n }\n\n this.pImg = null;\n },\n draw() {\n const canvas = this.refs.canvas;\n if (!canvas) {\n return;\n }\n\n const img = this.getImage();\n this.tID = null;\n\n if (!this.img || !this.img.complete || !img) {\n const ctx = canvas.getContext('2d');\n ctx.save();\n ctx.rect(\n canvas.width / 4,\n canvas.height / 4,\n canvas.width / 2,\n canvas.height / 2\n );\n ctx.fillStyle = 'transparent';\n ctx.fill();\n\n ctx.restore();\n return;\n }\n\n if (this.prints_EL2()) {\n return this.draw_EL2(canvas, img);\n }\n\n try {\n this.props.mode === 'editing'\n ? this.draw_editable()\n : this.draw_preview();\n } catch (e) {\n console.error(e);\n }\n },\n get_CropRatio() {},\n draw_EL2(canvas, img) {\n if (!canvas) return;\n if (!img) return;\n\n const dx = 1;\n const dy = 1;\n const dw = this.rect[WIDTH];\n const dh = this.rect[HEIGHT];\n\n const crop =\n img.crop ||\n getDefaultCrop(\n this.props.size_area[X] / this.props.size_area[Y],\n img.width,\n img.height\n );\n\n const ctx = canvas.getContext('2d');\n\n this.last_draw = {\n x: dx,\n y: dy,\n crop,\n };\n\n ctx.drawImage(\n img,\n Math.floor(crop[X]),\n Math.floor(crop[Y]),\n Math.floor(crop[WIDTH]),\n Math.floor(crop[HEIGHT]),\n dx,\n dy,\n dw,\n dh\n );\n\n ctx.beginPath();\n ctx.rect(dx, dy, dw, dh);\n ctx.strokeStyle = '#ffc120';\n ctx.lineWidth = 3;\n ctx.stroke();\n this.draw_handle({ ctx, canvas, x: dx, y: dy, cropFrame: this.rect });\n },\n draw_outline(ctx, rectangle, dimensions) {},\n draw_preview() {\n const canvas = ReactDOM.findDOMNode(this.refs.canvas);\n if (!canvas) return;\n\n let img = this.getImage();\n if (!img) return;\n\n const crop =\n img.crop ||\n getDefaultCrop(\n this.props.size_area[X] / this.props.size_area[Y],\n img.width,\n img.height\n );\n img = img.cloneRectangle(\n crop,\n IU.imgHelpers.getPhotoAspectRatio(this.props)\n );\n\n const ctx = canvas.getContext('2d');\n ctx.beginPath();\n ctx.save();\n\n let x = 0;\n const y = 0;\n\n const scale =\n img.height / img.width < canvas.height / canvas.width\n ? canvas.width / img.width\n : canvas.height / img.height;\n if (scale * img.width < canvas.width) {\n x = (canvas.width - scale * img.width) / 2;\n ctx.translate(x, 0);\n }\n ctx.scale(scale, scale);\n\n ctx.drawImage(img, 0, 0);\n ctx.restore();\n\n const viewScale = canvas.clientWidth / canvas.width;\n const outline = [x, y, scale * img.width, scale * img.height];\n this.reportSize(\n viewScale * x,\n viewScale * y,\n viewScale * (x + outline[WIDTH]),\n viewScale * (y + outline[HEIGHT])\n );\n },\n reportSize(x1, y1, x2, y2) {\n if (\n this.last_size &&\n this.last_size[X] === x2 &&\n this.last_size[Y] === y2\n ) {\n return;\n }\n\n this.widgetSize = [x1, y1, x2, y2];\n if (this.props.onSize) {\n const self = this;\n this.last_size = [x2, y2];\n setTimeout(function() {\n self.props.onSize(x2, y2, x1, y1);\n self.forceUpdate();\n }, 5);\n }\n },\n draw_editable() {\n const canvas = ReactDOM.findDOMNode(this.refs.canvas);\n if (!canvas) return;\n\n let img = this.getImage();\n if (!img) return;\n\n const crop =\n img.crop ||\n getDefaultCrop(\n this.props.size_area[X] / this.props.size_area[Y],\n img.width,\n img.height\n );\n img = img.cloneRectangle(\n crop,\n IU.imgHelpers.getPhotoAspectRatio(this.props)\n );\n\n const ctx = canvas.getContext('2d');\n ctx.beginPath();\n ctx.save();\n\n let x = 0;\n const y = 0;\n\n const scale =\n img.height / img.width < canvas.height / canvas.width\n ? canvas.width / img.width\n : canvas.height / img.height;\n if (scale * img.width < canvas.width) {\n x = (canvas.width - scale * img.width) / 2;\n ctx.translate(x, 0);\n }\n ctx.scale(scale, scale);\n\n ctx.drawImage(img, 0, 0);\n ctx.restore();\n\n const viewScale = canvas.clientWidth / canvas.width;\n const outline = [x, y, scale * img.width, scale * img.height];\n this.reportSize(\n viewScale * x,\n viewScale * y,\n viewScale * (x + outline[WIDTH]),\n viewScale * (y + outline[HEIGHT])\n );\n\n ctx.rect(outline[X], outline[Y], outline[WIDTH], outline[HEIGHT]);\n ctx.strokeStyle = '#ffc120';\n ctx.lineWidth = 3 / viewScale;\n ctx.stroke();\n\n const draw = {\n canvas,\n img,\n outline,\n scale,\n cropFrame: outline,\n ctx,\n };\n this.draw_handle(draw);\n\n this.last_draw = draw;\n },\n draw_handle(draw) {\n if (\n this.props.mode == 'editing' &&\n this.canPan() &&\n PanHandle.complete &&\n !PanHandle.error &&\n !this.state.drag\n ) {\n if (!this.panHandleSince) {\n this.panHandleSince = new Date().getTime();\n }\n let phw = draw.canvas.width;\n if (draw.x) {\n phw -= draw.x * 2;\n }\n const phh = draw.cropFrame[HEIGHT] + 2 * draw.cropFrame[Y];\n let handle_scale = 1.0;\n if (this.fullResoluton()) {\n handle_scale = draw.canvas.width / ( draw.canvas.clientWidth * 2 );\n }\n const now = new Date().getTime();\n\n const fade = 5;\n const alpha = fade - ( now - this.panHandleSince ) / 1000;\n if (alpha < 0) {\n return;\n }\n draw.ctx.save();\n draw.ctx.globalAlpha = alpha;\n draw.ctx.translate(phw / 2, phh / 2, 'pwh,pwh - draw_handle');\n draw.ctx.scale(handle_scale, handle_scale);\n\n draw.ctx.drawImage(\n PanHandle,\n (0 - PanHandle.width) / 2,\n (0 - PanHandle.height) / 2\n );\n draw.ctx.restore();\n const self = this;\n setTimeout(function() {\n self.draw();\n }, 50);\n } else if (this.canPan() === false) {\n // reset pan status\n this.panHandleSince = null;\n }\n },\n defaultCrop() {\n return this.defaultCropForAngle(this.props.angle);\n },\n defaultCropForAngle(angle) {\n const { raw_dimensions: rawDimensions } = this.props;\n\n if (!rawDimensions) {\n return [0, 0, 1, 1];\n }\n\n const { size_area, size, constraints = {} } = this.props;\n const area = ( size_area || size.area );\n let { w, h } = rawDimensions;\n\n const ratio = constraints.prism\n ? constraints.ratio // already rotated\n : getDefaultCropRatio(area[X] / area[Y], w, h);\n\n if (angle % ( 2 * RIGHT_ANGLE ) === RIGHT_ANGLE) {\n [h, w] = [rawDimensions.w, rawDimensions.h];\n }\n\n return getFixedCrop(ratio, w, h);\n },\n getCrop() {\n if (this.state.forceCrop) {\n return this.state.forceCrop;\n }\n\n if (typeof this.props.crop === 'string') {\n return this.props.crop.split(/,/).map(parseInt);\n }\n\n if (Array.isArray(this.props.crop) && this.props.crop.length == 4) {\n return this.props.crop;\n }\n\n return this.defaultCrop();\n },\n getZoom() {\n const defaultCrop = this.defaultCrop();\n const crop = this.getCrop();\n const zoom = defaultCrop[WIDTH] / crop[WIDTH]; // TODO - is this broken ??\n\n if (isNaN(zoom)) return IU.DEF_ZOOM;\n if (zoom > IU.MAX_ZOOM) return IU.MAX_ZOOM;\n if (zoom < IU.MIN_ZOOM) return IU.MIN_ZOOM;\n\n return zoom;\n },\n getScale() {\n if (this.img && this.img.complete && this.img.width) {\n return this.img.width / this.props.raw_dimensions.w;\n }\n\n return this.fullResoluton()\n ? this.props.large_dimensions.w / this.props.raw_dimensions.w\n : this.props.thumb_dimensions.w / this.props.raw_dimensions.w;\n },\n canPan() {\n if (!this.img) return null;\n const crop = this.getCrop();\n const area = this.props.raw_dimensions.w * this.props.raw_dimensions.h;\n const crop_area = crop[WIDTH] * crop[HEIGHT];\n const percentage = (crop_area / area) * 100;\n return percentage < 98 || percentage > 102;\n },\n\n handlePan(dx, dy) {\n const crop = this.getCrop();\n const scale = this.getScale();\n const { raw_dimensions, angle } = this.props;\n let w;\n let h;\n\n w = raw_dimensions.w;\n h = raw_dimensions.h;\n\n if (angle % (2 * RIGHT_ANGLE) === RIGHT_ANGLE) {\n h = raw_dimensions.w;\n w = raw_dimensions.h;\n }\n\n const crop2 = [\n crop[X] + dx / scale,\n crop[Y] + dy / scale,\n crop[WIDTH],\n crop[HEIGHT],\n ];\n if (crop2[X] + crop2[WIDTH] > w) {\n crop2[X] = w - crop2[WIDTH];\n }\n if (crop2[Y] + crop[HEIGHT] > h) {\n crop2[Y] = h - crop2[HEIGHT];\n }\n if (crop2[X] < 0) {\n crop2[X] = 0;\n }\n if (crop2[Y] < 0) {\n crop2[Y] = 0;\n }\n\n this.setState({ forceCrop: crop2, lastCrop: crop2 });\n },\n componentWillUnmount() {\n clearTimeout(this.tID);\n },\n });\n\n // -----------------------------------------------------------\n // PandaTweaker\n // -----------------------------------------------------------\n\n const PandaTweaker = createReactClass({\n getInitialState() {\n return {};\n },\n init() {\n // no-op\n },\n render() {\n const props = {};\n for (const k in this.state) props[k] = this.state[k];\n props.cropRatio = this.props.constraints.crop_ratio;\n const styles = {\n width: 'auto',\n maxHeight: this.props.height,\n };\n\n return (\n
\n \n
\n );\n },\n onCropChanged(settings) {\n this.mutate({ crop: this.refs.printview.getCrop() });\n },\n cropCentre() {\n const crop = this.state.crop || this.refs.printview.defaultCrop();\n\n const x = crop[X];\n const y = crop[Y];\n const w = crop[WIDTH];\n const h = crop[HEIGHT];\n\n return { y: h / 2 + y, x: w / 2 + x };\n },\n doZoom(zoomLevel, callback) {\n if (!this.state.raw_dimensions) return; // Sometimes spuriously triggered !\n\n let w = this.state.raw_dimensions.w;\n let h = this.state.raw_dimensions.h;\n\n if (this.state.angle % (2 * RIGHT_ANGLE) === RIGHT_ANGLE) {\n h = this.state.raw_dimensions.w;\n w = this.state.raw_dimensions.h;\n }\n\n const r = this.refs.printview.defaultCrop();\n\n const centre = this.cropCentre();\n\n const newCrop = scaleRectAroundOrigin(\n { x: w / 2, y: h / 2 },\n r,\n 1 / zoomLevel\n );\n let newX = centre.x - newCrop[WIDTH] / 2;\n let newY = centre.y - newCrop[HEIGHT] / 2;\n\n if (newX < 0) {\n newX = 0;\n }\n if (newY < 0) {\n newY = 0;\n }\n\n if (newX + newCrop[WIDTH] > w) {\n newX -= newX + newCrop[WIDTH] - w;\n }\n if (newY + newCrop[HEIGHT] > h) {\n newY -= newY + newCrop[HEIGHT] - h;\n }\n\n if (newX + newCrop[WIDTH] > w) {\n newX = w - newCrop[WIDTH];\n }\n if (newY + newCrop[HEIGHT] > h) {\n newY = h - newCrop[HEIGHT];\n }\n\n newCrop[X] = newX;\n newCrop[Y] = newY;\n\n this.mutate({ crop: newCrop }, callback);\n },\n mutate(value, callback) {\n const after = function() {\n if (callback) callback(value);\n if (this.props.onChange) {\n this.props.onChange();\n }\n }.bind(this);\n // Always save crop\n value.crop = value.crop || this.refs.printview.getCrop();\n this.setState(value, after);\n },\n getZoom() {\n return this.refs.printview.getZoom();\n },\n setStraighten(value) {\n this.mutate({ straighten: value });\n },\n setGamma(value) {\n this.mutate({ gamma: value });\n },\n rotateImage(value) {\n let angle = 0;\n if (this.state.angle) angle = this.state.angle;\n const zoom = this.getZoom();\n let newAngle = (angle - value) % 360;\n while (newAngle < 0) {\n newAngle += 360;\n }\n this.mutate(\n { angle: newAngle },\n function() {\n this.doZoom(zoom);\n }.bind(this)\n );\n },\n setFX(value) {\n this.mutate({ fx: value });\n },\n getPrintsSettings() {\n return this.state;\n },\n setPrintsSettings(settings, callback) {\n this.setState(settings, function() {\n callback && callback();\n });\n this.refs.printview.panHandleSince = new Date().getTime();\n },\n });\n\n return {\n PanHandle,\n PandaView,\n PandaTweaker,\n };\n})();\n\nexport const PanHandle = imageProcessors.PanHandle;\n\nexport const PandaView = imageProcessors.PandaView;\n\nexport const PandaTweaker = imageProcessors.PandaTweaker;\n","const valueAsPercentage = ({ value, min, max }) =>\n ((Number(value) - Number(min)) * 100) / (Number(max) - Number(min));\n\nconst percentageAsValue = ({ percentage, min, max }) =>\n (Number(percentage) * (Number(max) - Number(min))) / 100 + Number(min);\n\nexport { valueAsPercentage, percentageAsValue };\n","const stringParameterize = (string, separator = '-') => {\n return string\n .replace(/[^a-z0-9\\-_]+/gi, separator)\n .replace(new RegExp(`${separator}{2,}`, 'g'), separator)\n .replace(new RegExp(`^${separator}|${separator}$`, 'g'), '')\n .toLowerCase();\n};\n\nexport default stringParameterize;\n","import React from 'react';\nimport debounce from 'lodash/debounce';\nimport { percentageAsValue } from './tools/slider-control-conversions';\nimport sendToGoogleAnalytics from '../_prism-builder/desktop/slot-tools/send-to-google-analytics';\nimport stringParameterize from './string-parameterize';\n\n// -----------------------------------------------------------\n// MananaSlider\n// -----------------------------------------------------------\n\nclass MananaSlider extends React.Component {\n state = {\n previousValue: null,\n currentValue: this.props.value,\n };\n\n debouncedHandleChange = debounce(() => {\n const { previousValue, currentValue } = this.state;\n const { handleChange } = this.props;\n const diff = currentValue - previousValue;\n\n handleChange(currentValue, diff);\n }, this.threshold);\n\n shouldComponentUpdate(nextProps, nextState) {\n const { disabled } = this.props;\n const { currentValue } = this.state;\n\n return (\n currentValue !== nextState.currentValue || disabled !== nextProps.disabled\n );\n }\n\n get threshold() {\n const { threshold } = this.props;\n return parseInt(threshold, 10) || 20;\n }\n\n handleChange = event => {\n const newValue = event.target ? event.target.value : event;\n\n this.setState(\n {\n currentValue: Number(newValue),\n },\n this.debouncedHandleChange\n );\n };\n\n handleClick = () => {\n const { label } = this.props;\n\n sendToGoogleAnalytics('el2',`${stringParameterize(label)}`);\n };\n\n handleTouchMove = event => {\n const { min, max } = this.props;\n\n const { left, width, right } = event.target.getBoundingClientRect();\n const touchOffset = event.touches[0].clientX;\n const touchLeftPos = touchOffset - left;\n const touchRightPos = right - touchOffset;\n\n if (touchLeftPos >= 0 && touchRightPos >= 0) {\n const percentage = Math.round((touchLeftPos / width) * 100);\n this.handleChange(percentageAsValue({ percentage, min, max }));\n }\n };\n\n set = val => {\n let newValue = val;\n const { value } = this.props;\n\n if (newValue === null || newValue === undefined) {\n newValue = Number(value);\n }\n\n this.setState(prevState => ({\n previousValue: prevState.currentValue,\n currentValue: newValue,\n }));\n };\n\n reset = () => this.set(null);\n\n render() {\n const { id, className, min, max, step, disabled, label } = this.props;\n const { currentValue } = this.state;\n const propagatingProps = { id, className, min, max, step, disabled };\n\n return (\n \n );\n }\n}\n\nexport default MananaSlider;\n","'use strict';\n\n// Import Libraries\nimport React from 'react';\n// Import JS Modules\nimport { builderDispatch, PrismUI } from '../../../_utils/ui';\n// Import JSX Modules\n\n// -----------------------------------------------------------\n\nclass FullScreenSpinnerBase extends React.PureComponent {\n constructor(props = {}) {\n super(props);\n\n this.state = {\n visible: !!props.show\n };\n }\n\n componentDidMount() {\n this.dispatchToken = builderDispatch.register(payload => {\n switch (payload.type) {\n case PrismUI.MODAL_MESSAGE:\n this.handleMessage(payload);\n break;\n }\n });\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.hasOwnProperty('show')) {\n this.setState(() => ({\n visible: !!nextProps.show\n }));\n }\n }\n\n componentWillUnmount() {\n builderDispatch.unregister(this.dispatchToken);\n }\n\n handleMessage({action='show'}) {\n this.setState(() => ({\n visible: action === 'show'\n }));\n }\n}\n\n// -----------------------------------------------------------\n\nexport default FullScreenSpinnerBase;\n"],"names":["imageProcessors","X","Y","WIDTH","HEIGHT","RIGHT_ANGLE","imgHelpers","IU","LocalThumbCache","url","img","fetchImage","PanHandle","PandaView","createReactClass","nextProps","url_prop","ratio","prism","large_dimensions","maxWidth","maxHeight","Rectangle","React","cropEdges","filename","style","width","height","cropCords","CropCords","classname","e","touch","onClose","mode","editMode","raw_dimensions","angle","offset","x","y","dX","dY","scale","cache","self","queue_draw","canvas","cacheKey","crop","props","value","ctx","dx","dy","dw","dh","getDefaultCrop","rectangle","dimensions","ReactDOM","viewScale","outline","x1","y1","x2","y2","draw","phw","phh","handle_scale","alpha","rawDimensions","size_area","size","constraints","area","w","getDefaultCropRatio","getFixedCrop","defaultCrop","zoom","percentage","crop2","PandaTweaker","k","styles","settings","zoomLevel","callback","h","r","centre","newCrop","scaleRectAroundOrigin","newX","newY","after","newAngle","valueAsPercentage","min","max","percentageAsValue","stringParameterize","string","separator","MananaSlider","__publicField","debounce","previousValue","currentValue","handleChange","diff","event","newValue","label","sendToGoogleAnalytics","left","right","touchOffset","touchLeftPos","touchRightPos","val","prevState","nextState","disabled","threshold","id","className","step","propagatingProps","FullScreenSpinnerBase","builderDispatch","payload","PrismUI","action"],"mappings":"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"}