{"version":3,"file":"index.module.mjs","sources":["../src/helpers.ts","../src/Cropper.tsx"],"sourcesContent":["import { Area, MediaSize, Point, Size } from './types'\n\n/**\n * Compute the dimension of the crop area based on media size,\n * aspect ratio and optionally rotation\n */\nexport function getCropSize(\n  mediaWidth: number,\n  mediaHeight: number,\n  containerWidth: number,\n  containerHeight: number,\n  aspect: number,\n  rotation = 0\n): Size {\n  const { width, height } = rotateSize(mediaWidth, mediaHeight, rotation)\n  const fittingWidth = Math.min(width, containerWidth)\n  const fittingHeight = Math.min(height, containerHeight)\n\n  if (fittingWidth > fittingHeight * aspect) {\n    return {\n      width: fittingHeight * aspect,\n      height: fittingHeight,\n    }\n  }\n\n  return {\n    width: fittingWidth,\n    height: fittingWidth / aspect,\n  }\n}\n\n/**\n * Compute media zoom.\n * We fit the media into the container with \"max-width: 100%; max-height: 100%;\"\n */\nexport function getMediaZoom(mediaSize: MediaSize) {\n  // Take the axis with more pixels to improve accuracy\n  return mediaSize.width > mediaSize.height\n    ? mediaSize.width / mediaSize.naturalWidth\n    : mediaSize.height / mediaSize.naturalHeight\n}\n\n/**\n * Ensure a new media position stays in the crop area.\n */\nexport function restrictPosition(\n  position: Point,\n  mediaSize: Size,\n  cropSize: Size,\n  zoom: number,\n  rotation = 0\n): Point {\n  const { width, height } = rotateSize(mediaSize.width, mediaSize.height, rotation)\n\n  return {\n    x: restrictPositionCoord(position.x, width, cropSize.width, zoom),\n    y: restrictPositionCoord(position.y, height, cropSize.height, zoom),\n  }\n}\n\nfunction restrictPositionCoord(\n  position: number,\n  mediaSize: number,\n  cropSize: number,\n  zoom: number\n): number {\n  const maxPosition = Math.abs((mediaSize * zoom) / 2 - cropSize / 2)\n\n  return clamp(position, -maxPosition, maxPosition)\n}\n\nexport function getDistanceBetweenPoints(pointA: Point, pointB: Point) {\n  return Math.sqrt(Math.pow(pointA.y - pointB.y, 2) + Math.pow(pointA.x - pointB.x, 2))\n}\n\nexport function getRotationBetweenPoints(pointA: Point, pointB: Point) {\n  return (Math.atan2(pointB.y - pointA.y, pointB.x - pointA.x) * 180) / Math.PI\n}\n\n/**\n * Compute the output cropped area of the media in percentages and pixels.\n * x/y are the top-left coordinates on the src media\n */\nexport function computeCroppedArea(\n  crop: Point,\n  mediaSize: MediaSize,\n  cropSize: Size,\n  aspect: number,\n  zoom: number,\n  rotation = 0,\n  restrictPosition = true\n): { croppedAreaPercentages: Area; croppedAreaPixels: Area } {\n  // if the media is rotated by the user, we cannot limit the position anymore\n  // as it might need to be negative.\n  const limitAreaFn = restrictPosition ? limitArea : noOp\n\n  const mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation)\n  const mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation)\n\n  // calculate the crop area in percentages\n  // in the rotated space\n  const croppedAreaPercentages = {\n    x: limitAreaFn(\n      100,\n      (((mediaBBoxSize.width - cropSize.width / zoom) / 2 - crop.x / zoom) / mediaBBoxSize.width) *\n        100\n    ),\n    y: limitAreaFn(\n      100,\n      (((mediaBBoxSize.height - cropSize.height / zoom) / 2 - crop.y / zoom) /\n        mediaBBoxSize.height) *\n        100\n    ),\n    width: limitAreaFn(100, ((cropSize.width / mediaBBoxSize.width) * 100) / zoom),\n    height: limitAreaFn(100, ((cropSize.height / mediaBBoxSize.height) * 100) / zoom),\n  }\n\n  // we compute the pixels size naively\n  const widthInPixels = Math.round(\n    limitAreaFn(\n      mediaNaturalBBoxSize.width,\n      (croppedAreaPercentages.width * mediaNaturalBBoxSize.width) / 100\n    )\n  )\n  const heightInPixels = Math.round(\n    limitAreaFn(\n      mediaNaturalBBoxSize.height,\n      (croppedAreaPercentages.height * mediaNaturalBBoxSize.height) / 100\n    )\n  )\n  const isImgWiderThanHigh = mediaNaturalBBoxSize.width >= mediaNaturalBBoxSize.height * aspect\n\n  // then we ensure the width and height exactly match the aspect (to avoid rounding approximations)\n  // if the media is wider than high, when zoom is 0, the crop height will be equals to image height\n  // thus we want to compute the width from the height and aspect for accuracy.\n  // Otherwise, we compute the height from width and aspect.\n  const sizePixels = isImgWiderThanHigh\n    ? {\n        width: Math.round(heightInPixels * aspect),\n        height: heightInPixels,\n      }\n    : {\n        width: widthInPixels,\n        height: Math.round(widthInPixels / aspect),\n      }\n\n  const croppedAreaPixels = {\n    ...sizePixels,\n    x: Math.round(\n      limitAreaFn(\n        mediaNaturalBBoxSize.width - sizePixels.width,\n        (croppedAreaPercentages.x * mediaNaturalBBoxSize.width) / 100\n      )\n    ),\n    y: Math.round(\n      limitAreaFn(\n        mediaNaturalBBoxSize.height - sizePixels.height,\n        (croppedAreaPercentages.y * mediaNaturalBBoxSize.height) / 100\n      )\n    ),\n  }\n\n  return { croppedAreaPercentages, croppedAreaPixels }\n}\n\n/**\n * Ensure the returned value is between 0 and max\n */\nfunction limitArea(max: number, value: number): number {\n  return Math.min(max, Math.max(0, value))\n}\n\nfunction noOp(_max: number, value: number) {\n  return value\n}\n\n/**\n * Compute crop and zoom from the croppedAreaPercentages.\n */\nexport function getInitialCropFromCroppedAreaPercentages(\n  croppedAreaPercentages: Area,\n  mediaSize: MediaSize,\n  rotation: number,\n  cropSize: Size,\n  minZoom: number,\n  maxZoom: number\n) {\n  const mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation)\n\n  // This is the inverse process of computeCroppedArea\n  const zoom = clamp(\n    (cropSize.width / mediaBBoxSize.width) * (100 / croppedAreaPercentages.width),\n    minZoom,\n    maxZoom\n  )\n\n  const crop = {\n    x:\n      (zoom * mediaBBoxSize.width) / 2 -\n      cropSize.width / 2 -\n      mediaBBoxSize.width * zoom * (croppedAreaPercentages.x / 100),\n    y:\n      (zoom * mediaBBoxSize.height) / 2 -\n      cropSize.height / 2 -\n      mediaBBoxSize.height * zoom * (croppedAreaPercentages.y / 100),\n  }\n\n  return { crop, zoom }\n}\n\n/**\n * Compute zoom from the croppedAreaPixels\n */\nfunction getZoomFromCroppedAreaPixels(\n  croppedAreaPixels: Area,\n  mediaSize: MediaSize,\n  cropSize: Size\n): number {\n  const mediaZoom = getMediaZoom(mediaSize)\n\n  return cropSize.height > cropSize.width\n    ? cropSize.height / (croppedAreaPixels.height * mediaZoom)\n    : cropSize.width / (croppedAreaPixels.width * mediaZoom)\n}\n\n/**\n * Compute crop and zoom from the croppedAreaPixels\n */\nexport function getInitialCropFromCroppedAreaPixels(\n  croppedAreaPixels: Area,\n  mediaSize: MediaSize,\n  rotation = 0,\n  cropSize: Size,\n  minZoom: number,\n  maxZoom: number\n): { crop: Point; zoom: number } {\n  const mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation)\n\n  const zoom = clamp(\n    getZoomFromCroppedAreaPixels(croppedAreaPixels, mediaSize, cropSize),\n    minZoom,\n    maxZoom\n  )\n\n  const cropZoom =\n    cropSize.height > cropSize.width\n      ? cropSize.height / croppedAreaPixels.height\n      : cropSize.width / croppedAreaPixels.width\n\n  const crop = {\n    x:\n      ((mediaNaturalBBoxSize.width - croppedAreaPixels.width) / 2 - croppedAreaPixels.x) * cropZoom,\n    y:\n      ((mediaNaturalBBoxSize.height - croppedAreaPixels.height) / 2 - croppedAreaPixels.y) *\n      cropZoom,\n  }\n  return { crop, zoom }\n}\n\n/**\n * Return the point that is the center of point a and b\n */\nexport function getCenter(a: Point, b: Point): Point {\n  return {\n    x: (b.x + a.x) / 2,\n    y: (b.y + a.y) / 2,\n  }\n}\n\nexport function getRadianAngle(degreeValue: number) {\n  return (degreeValue * Math.PI) / 180\n}\n\n/**\n * Returns the new bounding area of a rotated rectangle.\n */\nexport function rotateSize(width: number, height: number, rotation: number): Size {\n  const rotRad = getRadianAngle(rotation)\n\n  return {\n    width: Math.abs(Math.cos(rotRad) * width) + Math.abs(Math.sin(rotRad) * height),\n    height: Math.abs(Math.sin(rotRad) * width) + Math.abs(Math.cos(rotRad) * height),\n  }\n}\n\n/**\n * Clamp value between min and max\n */\nexport function clamp(value: number, min: number, max: number) {\n  return Math.min(Math.max(value, min), max)\n}\n\n/**\n * Combine multiple class names into a single string.\n */\nexport function classNames(...args: (boolean | string | number | undefined | void | null)[]) {\n  return args\n    .filter((value) => {\n      if (typeof value === 'string' && value.length > 0) {\n        return true\n      }\n\n      return false\n    })\n    .join(' ')\n    .trim()\n}\n","import * as React from 'react'\nimport normalizeWheel from 'normalize-wheel'\nimport { Area, MediaSize, Point, Size, VideoSrc } from './types'\nimport {\n  getCropSize,\n  restrictPosition,\n  getDistanceBetweenPoints,\n  getRotationBetweenPoints,\n  computeCroppedArea,\n  getCenter,\n  getInitialCropFromCroppedAreaPixels,\n  getInitialCropFromCroppedAreaPercentages,\n  classNames,\n  clamp,\n} from './helpers'\nimport cssStyles from './styles.css'\n\nexport type CropperProps = {\n  image?: string\n  video?: string | VideoSrc[]\n  transform?: string\n  crop: Point\n  zoom: number\n  rotation: number\n  aspect: number\n  minZoom: number\n  maxZoom: number\n  cropShape: 'rect' | 'round'\n  cropSize?: Size\n  objectFit?: 'contain' | 'cover' | 'horizontal-cover' | 'vertical-cover'\n  showGrid?: boolean\n  zoomSpeed: number\n  zoomWithScroll?: boolean\n  roundCropAreaPixels?: boolean\n  onCropChange: (location: Point) => void\n  onZoomChange?: (zoom: number) => void\n  onRotationChange?: (rotation: number) => void\n  onCropComplete?: (croppedArea: Area, croppedAreaPixels: Area) => void\n  onCropAreaChange?: (croppedArea: Area, croppedAreaPixels: Area) => void\n  onCropSizeChange?: (cropSize: Size) => void\n  onInteractionStart?: () => void\n  onInteractionEnd?: () => void\n  onMediaLoaded?: (mediaSize: MediaSize) => void\n  style: {\n    containerStyle?: React.CSSProperties\n    mediaStyle?: React.CSSProperties\n    cropAreaStyle?: React.CSSProperties\n  }\n  classes: {\n    containerClassName?: string\n    mediaClassName?: string\n    cropAreaClassName?: string\n  }\n  restrictPosition: boolean\n  mediaProps: React.ImgHTMLAttributes<HTMLElement> | React.VideoHTMLAttributes<HTMLElement>\n  cropperProps: React.HTMLAttributes<HTMLDivElement>\n  disableAutomaticStylesInjection?: boolean\n  initialCroppedAreaPixels?: Area\n  initialCroppedAreaPercentages?: Area\n  onTouchRequest?: (e: React.TouchEvent<HTMLDivElement>) => boolean\n  onWheelRequest?: (e: WheelEvent) => boolean\n  setCropperRef?: (ref: React.RefObject<HTMLDivElement>) => void\n  setImageRef?: (ref: React.RefObject<HTMLImageElement>) => void\n  setVideoRef?: (ref: React.RefObject<HTMLVideoElement>) => void\n  setMediaSize?: (size: MediaSize) => void\n  setCropSize?: (size: Size) => void\n  nonce?: string\n  keyboardStep: number\n}\n\ntype State = {\n  cropSize: Size | null\n  hasWheelJustStarted: boolean\n  mediaObjectFit: String | undefined\n}\n\nconst MIN_ZOOM = 1\nconst MAX_ZOOM = 3\nconst KEYBOARD_STEP = 1\n\ntype GestureEvent = UIEvent & {\n  rotation: number\n  scale: number\n  clientX: number\n  clientY: number\n}\n\nclass Cropper extends React.Component<CropperProps, State> {\n  static defaultProps = {\n    zoom: 1,\n    rotation: 0,\n    aspect: 4 / 3,\n    maxZoom: MAX_ZOOM,\n    minZoom: MIN_ZOOM,\n    cropShape: 'rect' as const,\n    objectFit: 'contain' as const,\n    showGrid: true,\n    style: {},\n    classes: {},\n    mediaProps: {},\n    cropperProps: {},\n    zoomSpeed: 1,\n    restrictPosition: true,\n    zoomWithScroll: true,\n    keyboardStep: KEYBOARD_STEP,\n  }\n\n  cropperRef: React.RefObject<HTMLDivElement> = React.createRef()\n  imageRef: React.RefObject<HTMLImageElement> = React.createRef()\n  videoRef: React.RefObject<HTMLVideoElement> = React.createRef()\n  containerPosition: Point = { x: 0, y: 0 }\n  containerRef: HTMLDivElement | null = null\n  styleRef: HTMLStyleElement | null = null\n  containerRect: DOMRect | null = null\n  mediaSize: MediaSize = { width: 0, height: 0, naturalWidth: 0, naturalHeight: 0 }\n  dragStartPosition: Point = { x: 0, y: 0 }\n  dragStartCrop: Point = { x: 0, y: 0 }\n  gestureZoomStart = 0\n  gestureRotationStart = 0\n  isTouching = false\n  lastPinchDistance = 0\n  lastPinchRotation = 0\n  rafDragTimeout: number | null = null\n  rafPinchTimeout: number | null = null\n  wheelTimer: number | null = null\n  currentDoc: Document | null = typeof document !== 'undefined' ? document : null\n  currentWindow: Window | null = typeof window !== 'undefined' ? window : null\n  resizeObserver: ResizeObserver | null = null\n  previousCropSize: Size | null = null\n  isInitialized = false\n\n  state: State = {\n    cropSize: null,\n    hasWheelJustStarted: false,\n    mediaObjectFit: undefined,\n  }\n\n  componentDidMount() {\n    if (!this.currentDoc || !this.currentWindow) return\n    if (this.containerRef) {\n      if (this.containerRef.ownerDocument) {\n        this.currentDoc = this.containerRef.ownerDocument\n      }\n      if (this.currentDoc.defaultView) {\n        this.currentWindow = this.currentDoc.defaultView\n      }\n\n      this.initResizeObserver()\n      // only add window resize listener if ResizeObserver is not supported. Otherwise, it would be redundant\n      if (typeof window.ResizeObserver === 'undefined') {\n        this.currentWindow.addEventListener('resize', this.computeSizes)\n      }\n      this.props.zoomWithScroll &&\n        this.containerRef.addEventListener('wheel', this.onWheel, { passive: false })\n      this.containerRef.addEventListener('gesturestart', this.onGestureStart as EventListener)\n    }\n\n    this.currentDoc.addEventListener('scroll', this.onScroll)\n\n    if (!this.props.disableAutomaticStylesInjection) {\n      this.styleRef = this.currentDoc.createElement('style')\n      this.styleRef.setAttribute('type', 'text/css')\n      if (this.props.nonce) {\n        this.styleRef.setAttribute('nonce', this.props.nonce)\n      }\n      this.styleRef.innerHTML = cssStyles\n      this.currentDoc.head.appendChild(this.styleRef)\n    }\n\n    // when rendered via SSR, the image can already be loaded and its onLoad callback will never be called\n    if (this.imageRef.current && this.imageRef.current.complete) {\n      this.onMediaLoad()\n    }\n\n    // set image and video refs in the parent if the callbacks exist\n    if (this.props.setImageRef) {\n      this.props.setImageRef(this.imageRef)\n    }\n\n    if (this.props.setVideoRef) {\n      this.props.setVideoRef(this.videoRef)\n    }\n\n    if (this.props.setCropperRef) {\n      this.props.setCropperRef(this.cropperRef)\n    }\n  }\n\n  componentWillUnmount() {\n    if (!this.currentDoc || !this.currentWindow) return\n    if (typeof window.ResizeObserver === 'undefined') {\n      this.currentWindow.removeEventListener('resize', this.computeSizes)\n    }\n    this.resizeObserver?.disconnect()\n    if (this.containerRef) {\n      this.containerRef.removeEventListener('gesturestart', this.preventZoomSafari)\n    }\n\n    if (this.styleRef) {\n      this.styleRef.parentNode?.removeChild(this.styleRef)\n    }\n\n    this.cleanEvents()\n    this.props.zoomWithScroll && this.clearScrollEvent()\n  }\n\n  componentDidUpdate(prevProps: CropperProps) {\n    if (prevProps.rotation !== this.props.rotation) {\n      this.computeSizes()\n      this.recomputeCropPosition()\n    } else if (prevProps.aspect !== this.props.aspect) {\n      this.computeSizes()\n    } else if (prevProps.objectFit !== this.props.objectFit) {\n      this.computeSizes()\n    } else if (prevProps.zoom !== this.props.zoom) {\n      this.recomputeCropPosition()\n    } else if (\n      prevProps.cropSize?.height !== this.props.cropSize?.height ||\n      prevProps.cropSize?.width !== this.props.cropSize?.width\n    ) {\n      this.computeSizes()\n    } else if (\n      prevProps.crop?.x !== this.props.crop?.x ||\n      prevProps.crop?.y !== this.props.crop?.y\n    ) {\n      this.emitCropAreaChange()\n    }\n    if (prevProps.zoomWithScroll !== this.props.zoomWithScroll && this.containerRef) {\n      this.props.zoomWithScroll\n        ? this.containerRef.addEventListener('wheel', this.onWheel, { passive: false })\n        : this.clearScrollEvent()\n    }\n    if (prevProps.video !== this.props.video) {\n      this.videoRef.current?.load()\n    }\n\n    const objectFit = this.getObjectFit()\n    if (objectFit !== this.state.mediaObjectFit) {\n      this.setState({ mediaObjectFit: objectFit }, this.computeSizes)\n    }\n  }\n\n  initResizeObserver = () => {\n    if (typeof window.ResizeObserver === 'undefined' || !this.containerRef) {\n      return\n    }\n    let isFirstResize = true\n    this.resizeObserver = new window.ResizeObserver((entries) => {\n      if (isFirstResize) {\n        isFirstResize = false // observe() is called on mount, we don't want to trigger a recompute on mount\n        return\n      }\n      this.computeSizes()\n    })\n    this.resizeObserver.observe(this.containerRef)\n  }\n\n  // this is to prevent Safari on iOS >= 10 to zoom the page\n  preventZoomSafari = (e: Event) => e.preventDefault()\n\n  cleanEvents = () => {\n    if (!this.currentDoc) return\n    this.currentDoc.removeEventListener('mousemove', this.onMouseMove)\n    this.currentDoc.removeEventListener('mouseup', this.onDragStopped)\n    this.currentDoc.removeEventListener('touchmove', this.onTouchMove)\n    this.currentDoc.removeEventListener('touchend', this.onDragStopped)\n    this.currentDoc.removeEventListener('gesturechange', this.onGestureChange as EventListener)\n    this.currentDoc.removeEventListener('gestureend', this.onGestureEnd as EventListener)\n    this.currentDoc.removeEventListener('scroll', this.onScroll)\n  }\n\n  clearScrollEvent = () => {\n    if (this.containerRef) this.containerRef.removeEventListener('wheel', this.onWheel)\n    if (this.wheelTimer) {\n      clearTimeout(this.wheelTimer)\n    }\n  }\n\n  onMediaLoad = () => {\n    const cropSize = this.computeSizes()\n\n    if (cropSize) {\n      this.previousCropSize = cropSize\n      this.emitCropData()\n      this.setInitialCrop(cropSize)\n      this.isInitialized = true\n    }\n\n    if (this.props.onMediaLoaded) {\n      this.props.onMediaLoaded(this.mediaSize)\n    }\n  }\n\n  setInitialCrop = (cropSize: Size) => {\n    if (this.props.initialCroppedAreaPercentages) {\n      const { crop, zoom } = getInitialCropFromCroppedAreaPercentages(\n        this.props.initialCroppedAreaPercentages,\n        this.mediaSize,\n        this.props.rotation,\n        cropSize,\n        this.props.minZoom,\n        this.props.maxZoom\n      )\n\n      this.props.onCropChange(crop)\n      this.props.onZoomChange && this.props.onZoomChange(zoom)\n    } else if (this.props.initialCroppedAreaPixels) {\n      const { crop, zoom } = getInitialCropFromCroppedAreaPixels(\n        this.props.initialCroppedAreaPixels,\n        this.mediaSize,\n        this.props.rotation,\n        cropSize,\n        this.props.minZoom,\n        this.props.maxZoom\n      )\n\n      this.props.onCropChange(crop)\n      this.props.onZoomChange && this.props.onZoomChange(zoom)\n    }\n  }\n\n  getAspect() {\n    const { cropSize, aspect } = this.props\n    if (cropSize) {\n      return cropSize.width / cropSize.height\n    }\n    return aspect\n  }\n\n  getObjectFit() {\n    if (this.props.objectFit === 'cover') {\n      const mediaRef = this.imageRef.current || this.videoRef.current\n\n      if (mediaRef && this.containerRef) {\n        this.containerRect = this.containerRef.getBoundingClientRect()\n        const containerAspect = this.containerRect.width / this.containerRect.height\n        const naturalWidth =\n          this.imageRef.current?.naturalWidth || this.videoRef.current?.videoWidth || 0\n        const naturalHeight =\n          this.imageRef.current?.naturalHeight || this.videoRef.current?.videoHeight || 0\n        const mediaAspect = naturalWidth / naturalHeight\n\n        return mediaAspect < containerAspect ? 'horizontal-cover' : 'vertical-cover'\n      }\n      return 'horizontal-cover'\n    }\n\n    return this.props.objectFit\n  }\n\n  computeSizes = () => {\n    const mediaRef = this.imageRef.current || this.videoRef.current\n\n    if (mediaRef && this.containerRef) {\n      this.containerRect = this.containerRef.getBoundingClientRect()\n      this.saveContainerPosition()\n      const containerAspect = this.containerRect.width / this.containerRect.height\n      const naturalWidth =\n        this.imageRef.current?.naturalWidth || this.videoRef.current?.videoWidth || 0\n      const naturalHeight =\n        this.imageRef.current?.naturalHeight || this.videoRef.current?.videoHeight || 0\n      const isMediaScaledDown =\n        mediaRef.offsetWidth < naturalWidth || mediaRef.offsetHeight < naturalHeight\n      const mediaAspect = naturalWidth / naturalHeight\n\n      // We do not rely on the offsetWidth/offsetHeight if the media is scaled down\n      // as the values they report are rounded. That will result in precision losses\n      // when calculating zoom. We use the fact that the media is positionned relative\n      // to the container. That allows us to use the container's dimensions\n      // and natural aspect ratio of the media to calculate accurate media size.\n      // However, for this to work, the container should not be rotated\n      let renderedMediaSize: Size\n\n      if (isMediaScaledDown) {\n        switch (this.state.mediaObjectFit) {\n          default:\n          case 'contain':\n            renderedMediaSize =\n              containerAspect > mediaAspect\n                ? {\n                    width: this.containerRect.height * mediaAspect,\n                    height: this.containerRect.height,\n                  }\n                : {\n                    width: this.containerRect.width,\n                    height: this.containerRect.width / mediaAspect,\n                  }\n            break\n          case 'horizontal-cover':\n            renderedMediaSize = {\n              width: this.containerRect.width,\n              height: this.containerRect.width / mediaAspect,\n            }\n            break\n          case 'vertical-cover':\n            renderedMediaSize = {\n              width: this.containerRect.height * mediaAspect,\n              height: this.containerRect.height,\n            }\n            break\n        }\n      } else {\n        renderedMediaSize = {\n          width: mediaRef.offsetWidth,\n          height: mediaRef.offsetHeight,\n        }\n      }\n\n      this.mediaSize = {\n        ...renderedMediaSize,\n        naturalWidth,\n        naturalHeight,\n      }\n\n      // set media size in the parent\n      if (this.props.setMediaSize) {\n        this.props.setMediaSize(this.mediaSize)\n      }\n\n      const cropSize = this.props.cropSize\n        ? this.props.cropSize\n        : getCropSize(\n            this.mediaSize.width,\n            this.mediaSize.height,\n            this.containerRect.width,\n            this.containerRect.height,\n            this.props.aspect,\n            this.props.rotation\n          )\n\n      if (\n        this.state.cropSize?.height !== cropSize.height ||\n        this.state.cropSize?.width !== cropSize.width\n      ) {\n        this.props.onCropSizeChange && this.props.onCropSizeChange(cropSize)\n      }\n\n      this.setState({ cropSize }, this.recomputeCropPosition)\n\n      // pass crop size to parent\n      if (this.props.setCropSize) {\n        this.props.setCropSize(cropSize)\n      }\n\n      return cropSize\n    }\n  }\n\n  saveContainerPosition = () => {\n    if (this.containerRef) {\n      const bounds = this.containerRef.getBoundingClientRect()\n      this.containerPosition = { x: bounds.left, y: bounds.top }\n    }\n  }\n\n  static getMousePoint = (e: MouseEvent | React.MouseEvent | GestureEvent) => ({\n    x: Number(e.clientX),\n    y: Number(e.clientY),\n  })\n\n  static getTouchPoint = (touch: Touch | React.Touch) => ({\n    x: Number(touch.clientX),\n    y: Number(touch.clientY),\n  })\n\n  onMouseDown = (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n    if (!this.currentDoc) return\n    e.preventDefault()\n    this.currentDoc.addEventListener('mousemove', this.onMouseMove)\n    this.currentDoc.addEventListener('mouseup', this.onDragStopped)\n    this.saveContainerPosition()\n    this.onDragStart(Cropper.getMousePoint(e))\n  }\n\n  onMouseMove = (e: MouseEvent) => this.onDrag(Cropper.getMousePoint(e))\n\n  onScroll = (e: Event) => {\n    if (!this.currentDoc) return\n    e.preventDefault()\n    this.saveContainerPosition()\n  }\n\n  onTouchStart = (e: React.TouchEvent<HTMLDivElement>) => {\n    if (!this.currentDoc) return\n    this.isTouching = true\n    if (this.props.onTouchRequest && !this.props.onTouchRequest(e)) {\n      return\n    }\n\n    this.currentDoc.addEventListener('touchmove', this.onTouchMove, { passive: false }) // iOS 11 now defaults to passive: true\n    this.currentDoc.addEventListener('touchend', this.onDragStopped)\n\n    this.saveContainerPosition()\n\n    if (e.touches.length === 2) {\n      this.onPinchStart(e)\n    } else if (e.touches.length === 1) {\n      this.onDragStart(Cropper.getTouchPoint(e.touches[0]))\n    }\n  }\n\n  onTouchMove = (e: TouchEvent) => {\n    // Prevent whole page from scrolling on iOS.\n    e.preventDefault()\n    if (e.touches.length === 2) {\n      this.onPinchMove(e)\n    } else if (e.touches.length === 1) {\n      this.onDrag(Cropper.getTouchPoint(e.touches[0]))\n    }\n  }\n\n  onGestureStart = (e: GestureEvent) => {\n    if (!this.currentDoc) return\n    e.preventDefault()\n    this.currentDoc.addEventListener('gesturechange', this.onGestureChange as EventListener)\n    this.currentDoc.addEventListener('gestureend', this.onGestureEnd as EventListener)\n    this.gestureZoomStart = this.props.zoom\n    this.gestureRotationStart = this.props.rotation\n  }\n\n  onGestureChange = (e: GestureEvent) => {\n    e.preventDefault()\n    if (this.isTouching) {\n      // this is to avoid conflict between gesture and touch events\n      return\n    }\n\n    const point = Cropper.getMousePoint(e)\n    const newZoom = this.gestureZoomStart - 1 + e.scale\n    this.setNewZoom(newZoom, point, { shouldUpdatePosition: true })\n    if (this.props.onRotationChange) {\n      const newRotation = this.gestureRotationStart + e.rotation\n      this.props.onRotationChange(newRotation)\n    }\n  }\n\n  onGestureEnd = (e: GestureEvent) => {\n    this.cleanEvents()\n  }\n\n  onDragStart = ({ x, y }: Point) => {\n    this.dragStartPosition = { x, y }\n    this.dragStartCrop = { ...this.props.crop }\n    this.props.onInteractionStart?.()\n  }\n\n  onDrag = ({ x, y }: Point) => {\n    if (!this.currentWindow) return\n    if (this.rafDragTimeout) this.currentWindow.cancelAnimationFrame(this.rafDragTimeout)\n\n    this.rafDragTimeout = this.currentWindow.requestAnimationFrame(() => {\n      if (!this.state.cropSize) return\n      if (x === undefined || y === undefined) return\n      const offsetX = x - this.dragStartPosition.x\n      const offsetY = y - this.dragStartPosition.y\n      const requestedPosition = {\n        x: this.dragStartCrop.x + offsetX,\n        y: this.dragStartCrop.y + offsetY,\n      }\n\n      const newPosition = this.props.restrictPosition\n        ? restrictPosition(\n            requestedPosition,\n            this.mediaSize,\n            this.state.cropSize,\n            this.props.zoom,\n            this.props.rotation\n          )\n        : requestedPosition\n      this.props.onCropChange(newPosition)\n    })\n  }\n\n  onDragStopped = () => {\n    this.isTouching = false\n    this.cleanEvents()\n    this.emitCropData()\n    this.props.onInteractionEnd?.()\n  }\n\n  onPinchStart(e: React.TouchEvent<HTMLDivElement>) {\n    const pointA = Cropper.getTouchPoint(e.touches[0])\n    const pointB = Cropper.getTouchPoint(e.touches[1])\n    this.lastPinchDistance = getDistanceBetweenPoints(pointA, pointB)\n    this.lastPinchRotation = getRotationBetweenPoints(pointA, pointB)\n    this.onDragStart(getCenter(pointA, pointB))\n  }\n\n  onPinchMove(e: TouchEvent) {\n    if (!this.currentDoc || !this.currentWindow) return\n    const pointA = Cropper.getTouchPoint(e.touches[0])\n    const pointB = Cropper.getTouchPoint(e.touches[1])\n    const center = getCenter(pointA, pointB)\n    this.onDrag(center)\n\n    if (this.rafPinchTimeout) this.currentWindow.cancelAnimationFrame(this.rafPinchTimeout)\n    this.rafPinchTimeout = this.currentWindow.requestAnimationFrame(() => {\n      const distance = getDistanceBetweenPoints(pointA, pointB)\n      const newZoom = this.props.zoom * (distance / this.lastPinchDistance)\n      this.setNewZoom(newZoom, center, { shouldUpdatePosition: false })\n      this.lastPinchDistance = distance\n\n      const rotation = getRotationBetweenPoints(pointA, pointB)\n      const newRotation = this.props.rotation + (rotation - this.lastPinchRotation)\n      this.props.onRotationChange && this.props.onRotationChange(newRotation)\n      this.lastPinchRotation = rotation\n    })\n  }\n\n  onWheel = (e: WheelEvent) => {\n    if (!this.currentWindow) return\n    if (this.props.onWheelRequest && !this.props.onWheelRequest(e)) {\n      return\n    }\n\n    e.preventDefault()\n    const point = Cropper.getMousePoint(e)\n    const { pixelY } = normalizeWheel(e)\n    const newZoom = this.props.zoom - (pixelY * this.props.zoomSpeed) / 200\n    this.setNewZoom(newZoom, point, { shouldUpdatePosition: true })\n\n    if (!this.state.hasWheelJustStarted) {\n      this.setState({ hasWheelJustStarted: true }, () => this.props.onInteractionStart?.())\n    }\n\n    if (this.wheelTimer) {\n      clearTimeout(this.wheelTimer)\n    }\n    this.wheelTimer = this.currentWindow.setTimeout(\n      () => this.setState({ hasWheelJustStarted: false }, () => this.props.onInteractionEnd?.()),\n      250\n    )\n  }\n\n  getPointOnContainer = ({ x, y }: Point, containerTopLeft: Point): Point => {\n    if (!this.containerRect) {\n      throw new Error('The Cropper is not mounted')\n    }\n    return {\n      x: this.containerRect.width / 2 - (x - containerTopLeft.x),\n      y: this.containerRect.height / 2 - (y - containerTopLeft.y),\n    }\n  }\n\n  getPointOnMedia = ({ x, y }: Point) => {\n    const { crop, zoom } = this.props\n    return {\n      x: (x + crop.x) / zoom,\n      y: (y + crop.y) / zoom,\n    }\n  }\n\n  setNewZoom = (zoom: number, point: Point, { shouldUpdatePosition = true } = {}) => {\n    if (!this.state.cropSize || !this.props.onZoomChange) return\n\n    const newZoom = clamp(zoom, this.props.minZoom, this.props.maxZoom)\n\n    if (shouldUpdatePosition) {\n      const zoomPoint = this.getPointOnContainer(point, this.containerPosition)\n      const zoomTarget = this.getPointOnMedia(zoomPoint)\n      const requestedPosition = {\n        x: zoomTarget.x * newZoom - zoomPoint.x,\n        y: zoomTarget.y * newZoom - zoomPoint.y,\n      }\n\n      const newPosition = this.props.restrictPosition\n        ? restrictPosition(\n            requestedPosition,\n            this.mediaSize,\n            this.state.cropSize,\n            newZoom,\n            this.props.rotation\n          )\n        : requestedPosition\n\n      this.props.onCropChange(newPosition)\n    }\n    this.props.onZoomChange(newZoom)\n  }\n\n  getCropData = () => {\n    if (!this.state.cropSize) {\n      return null\n    }\n\n    // this is to ensure the crop is correctly restricted after a zoom back (https://github.com/ValentinH/react-easy-crop/issues/6)\n    const restrictedPosition = this.props.restrictPosition\n      ? restrictPosition(\n          this.props.crop,\n          this.mediaSize,\n          this.state.cropSize,\n          this.props.zoom,\n          this.props.rotation\n        )\n      : this.props.crop\n    return computeCroppedArea(\n      restrictedPosition,\n      this.mediaSize,\n      this.state.cropSize,\n      this.getAspect(),\n      this.props.zoom,\n      this.props.rotation,\n      this.props.restrictPosition\n    )\n  }\n\n  emitCropData = () => {\n    const cropData = this.getCropData()\n    if (!cropData) return\n\n    const { croppedAreaPercentages, croppedAreaPixels } = cropData\n    if (this.props.onCropComplete) {\n      this.props.onCropComplete(croppedAreaPercentages, croppedAreaPixels)\n    }\n\n    if (this.props.onCropAreaChange) {\n      this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels)\n    }\n  }\n\n  emitCropAreaChange = () => {\n    const cropData = this.getCropData()\n    if (!cropData) return\n\n    const { croppedAreaPercentages, croppedAreaPixels } = cropData\n    if (this.props.onCropAreaChange) {\n      this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels)\n    }\n  }\n\n  recomputeCropPosition = () => {\n    if (!this.state.cropSize) return\n\n    let adjustedCrop = this.props.crop\n\n    // Only scale if we're initialized and this is a legitimate resize\n    if (this.isInitialized && this.previousCropSize?.width && this.previousCropSize?.height) {\n      const sizeChanged =\n        Math.abs(this.previousCropSize.width - this.state.cropSize.width) > 1e-6 ||\n        Math.abs(this.previousCropSize.height - this.state.cropSize.height) > 1e-6\n\n      if (sizeChanged) {\n        const scaleX = this.state.cropSize.width / this.previousCropSize.width\n        const scaleY = this.state.cropSize.height / this.previousCropSize.height\n\n        adjustedCrop = {\n          x: this.props.crop.x * scaleX,\n          y: this.props.crop.y * scaleY,\n        }\n      }\n    }\n\n    const newPosition = this.props.restrictPosition\n      ? restrictPosition(\n          adjustedCrop,\n          this.mediaSize,\n          this.state.cropSize,\n          this.props.zoom,\n          this.props.rotation\n        )\n      : adjustedCrop\n\n    this.previousCropSize = this.state.cropSize\n\n    this.props.onCropChange(newPosition)\n    this.emitCropData()\n  }\n\n  onKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n    const { crop, onCropChange, keyboardStep, zoom, rotation } = this.props\n    let step = keyboardStep\n\n    if (!this.state.cropSize) return\n\n    // if the shift key is pressed, reduce the step to allow finer control\n    if (event.shiftKey) {\n      step *= 0.2\n    }\n\n    let newCrop = { ...crop }\n\n    switch (event.key) {\n      case 'ArrowUp':\n        newCrop.y -= step\n        event.preventDefault()\n        break\n      case 'ArrowDown':\n        newCrop.y += step\n        event.preventDefault()\n        break\n      case 'ArrowLeft':\n        newCrop.x -= step\n        event.preventDefault()\n        break\n      case 'ArrowRight':\n        newCrop.x += step\n        event.preventDefault()\n        break\n      default:\n        return\n    }\n\n    if (this.props.restrictPosition) {\n      newCrop = restrictPosition(newCrop, this.mediaSize, this.state.cropSize, zoom, rotation)\n    }\n\n    if (!event.repeat) {\n      this.props.onInteractionStart?.()\n    }\n\n    onCropChange(newCrop)\n  }\n\n  onKeyUp = (event: React.KeyboardEvent<HTMLDivElement>) => {\n    switch (event.key) {\n      case 'ArrowUp':\n      case 'ArrowDown':\n      case 'ArrowLeft':\n      case 'ArrowRight':\n        event.preventDefault()\n        break\n      default:\n        return\n    }\n    this.emitCropData()\n    this.props.onInteractionEnd?.()\n  }\n\n  render() {\n    const {\n      image,\n      video,\n      mediaProps,\n      cropperProps,\n      transform,\n      crop: { x, y },\n      rotation,\n      zoom,\n      cropShape,\n      showGrid,\n      roundCropAreaPixels,\n      style: { containerStyle, cropAreaStyle, mediaStyle },\n      classes: { containerClassName, cropAreaClassName, mediaClassName },\n    } = this.props\n\n    const objectFit = this.state.mediaObjectFit ?? this.getObjectFit()\n\n    return (\n      <div\n        onMouseDown={this.onMouseDown}\n        onTouchStart={this.onTouchStart}\n        ref={(el) => (this.containerRef = el)}\n        data-testid=\"container\"\n        style={containerStyle}\n        className={classNames('reactEasyCrop_Container', containerClassName)}\n      >\n        {image ? (\n          <img\n            alt=\"\"\n            className={classNames(\n              'reactEasyCrop_Image',\n              objectFit === 'contain' && 'reactEasyCrop_Contain',\n              objectFit === 'horizontal-cover' && 'reactEasyCrop_Cover_Horizontal',\n              objectFit === 'vertical-cover' && 'reactEasyCrop_Cover_Vertical',\n              mediaClassName\n            )}\n            {...(mediaProps as React.ImgHTMLAttributes<HTMLElement>)}\n            src={image}\n            ref={this.imageRef}\n            style={{\n              ...mediaStyle,\n              transform:\n                transform || `translate(${x}px, ${y}px) rotate(${rotation}deg) scale(${zoom})`,\n            }}\n            onLoad={this.onMediaLoad}\n          />\n        ) : (\n          video && (\n            <video\n              autoPlay\n              playsInline\n              loop\n              muted={true}\n              className={classNames(\n                'reactEasyCrop_Video',\n                objectFit === 'contain' && 'reactEasyCrop_Contain',\n                objectFit === 'horizontal-cover' && 'reactEasyCrop_Cover_Horizontal',\n                objectFit === 'vertical-cover' && 'reactEasyCrop_Cover_Vertical',\n                mediaClassName\n              )}\n              {...mediaProps}\n              ref={this.videoRef}\n              onLoadedMetadata={this.onMediaLoad}\n              style={{\n                ...mediaStyle,\n                transform:\n                  transform || `translate(${x}px, ${y}px) rotate(${rotation}deg) scale(${zoom})`,\n              }}\n              controls={false}\n            >\n              {(Array.isArray(video) ? video : [{ src: video }]).map((item) => (\n                <source key={item.src} {...item} />\n              ))}\n            </video>\n          )\n        )}\n        {this.state.cropSize && (\n          <div\n            ref={this.cropperRef}\n            style={{\n              ...cropAreaStyle,\n              width: roundCropAreaPixels\n                ? Math.round(this.state.cropSize.width)\n                : this.state.cropSize.width,\n              height: roundCropAreaPixels\n                ? Math.round(this.state.cropSize.height)\n                : this.state.cropSize.height,\n            }}\n            tabIndex={0}\n            onKeyDown={this.onKeyDown}\n            onKeyUp={this.onKeyUp}\n            data-testid=\"cropper\"\n            className={classNames(\n              'reactEasyCrop_CropArea',\n              cropShape === 'round' && 'reactEasyCrop_CropAreaRound',\n              showGrid && 'reactEasyCrop_CropAreaGrid',\n              cropAreaClassName\n            )}\n            {...cropperProps}\n          />\n        )}\n      </div>\n    )\n  }\n}\n\nexport default Cropper\n"],"names":["getCropSize","mediaWidth","mediaHeight","containerWidth","containerHeight","aspect","rotation","_a","rotateSize","width","height","fittingWidth","Math","min","fittingHeight","getMediaZoom","mediaSize","naturalWidth","naturalHeight","restrictPosition","position","cropSize","zoom","x","restrictPositionCoord","y","maxPosition","abs","clamp","getDistanceBetweenPoints","pointA","pointB","sqrt","pow","getRotationBetweenPoints","atan2","PI","computeCroppedArea","crop","limitAreaFn","limitArea","noOp","mediaBBoxSize","mediaNaturalBBoxSize","croppedAreaPercentages","widthInPixels","round","heightInPixels","isImgWiderThanHigh","sizePixels","croppedAreaPixels","__assign","max","value","_max","getInitialCropFromCroppedAreaPercentages","minZoom","maxZoom","getZoomFromCroppedAreaPixels","mediaZoom","getInitialCropFromCroppedAreaPixels","cropZoom","getCenter","a","b","getRadianAngle","degreeValue","rotRad","cos","sin","classNames","args","_i","arguments","length","filter","join","trim","MIN_ZOOM","MAX_ZOOM","KEYBOARD_STEP","Cropper","_super","__extends","_this","apply","cropperRef","React","createRef","imageRef","videoRef","containerPosition","containerRef","styleRef","containerRect","dragStartPosition","dragStartCrop","gestureZoomStart","gestureRotationStart","isTouching","lastPinchDistance","lastPinchRotation","rafDragTimeout","rafPinchTimeout","wheelTimer","currentDoc","document","currentWindow","window","resizeObserver","previousCropSize","isInitialized","state","hasWheelJustStarted","mediaObjectFit","undefined","initResizeObserver","ResizeObserver","isFirstResize","entries","computeSizes","observe","preventZoomSafari","e","preventDefault","cleanEvents","removeEventListener","onMouseMove","onDragStopped","onTouchMove","onGestureChange","onGestureEnd","onScroll","clearScrollEvent","onWheel","clearTimeout","onMediaLoad","emitCropData","setInitialCrop","props","onMediaLoaded","initialCroppedAreaPercentages","onCropChange","onZoomChange","initialCroppedAreaPixels","_b","mediaRef","current","getBoundingClientRect","saveContainerPosition","containerAspect","videoWidth","_c","_d","videoHeight","isMediaScaledDown","offsetWidth","offsetHeight","mediaAspect","renderedMediaSize","setMediaSize","_e","_f","onCropSizeChange","setState","recomputeCropPosition","setCropSize","bounds","left","top","onMouseDown","addEventListener","onDragStart","getMousePoint","onDrag","onTouchStart","onTouchRequest","passive","touches","onPinchStart","getTouchPoint","onPinchMove","onGestureStart","point","newZoom","scale","setNewZoom","shouldUpdatePosition","onRotationChange","newRotation","onInteractionStart","cancelAnimationFrame","requestAnimationFrame","offsetX","offsetY","requestedPosition","newPosition","onInteractionEnd","onWheelRequest","pixelY","normalizeWheel","zoomSpeed","call","setTimeout","getPointOnContainer","containerTopLeft","Error","getPointOnMedia","zoomPoint","zoomTarget","getCropData","restrictedPosition","getAspect","cropData","onCropComplete","onCropAreaChange","emitCropAreaChange","adjustedCrop","sizeChanged","scaleX","scaleY","onKeyDown","event","keyboardStep","step","shiftKey","newCrop","key","repeat","onKeyUp","prototype","componentDidMount","ownerDocument","defaultView","zoomWithScroll","disableAutomaticStylesInjection","createElement","setAttribute","nonce","innerHTML","cssStyles","head","appendChild","complete","setImageRef","setVideoRef","setCropperRef","componentWillUnmount","disconnect","parentNode","removeChild","componentDidUpdate","prevProps","objectFit","_g","_h","video","_j","load","getObjectFit","center","distance","render","image","mediaProps","cropperProps","transform","cropShape","showGrid","roundCropAreaPixels","style","containerStyle","cropAreaStyle","mediaStyle","classes","containerClassName","cropAreaClassName","mediaClassName","ref","el","className","alt","src","concat","onLoad","autoPlay","playsInline","loop","muted","onLoadedMetadata","controls","Array","isArray","map","item","tabIndex","defaultProps","Number","clientX","clientY","touch","Component"],"mappings":"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"}