@paperless/core 1.26.7 → 1.27.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/build/p-2786d383.entry.js +2 -0
  3. package/dist/build/{p-e33a73c2.entry.js.map → p-2786d383.entry.js.map} +1 -1
  4. package/dist/build/p-3ea2d7a2.entry.js +2 -0
  5. package/dist/build/{p-f34e08ec.entry.js.map → p-3ea2d7a2.entry.js.map} +1 -1
  6. package/dist/build/p-57a32088.entry.js +2 -0
  7. package/dist/build/p-57a32088.entry.js.map +1 -0
  8. package/dist/build/p-6cbe8dc8.entry.js +2 -0
  9. package/dist/build/{p-f6c6919a.entry.js.map → p-6cbe8dc8.entry.js.map} +1 -1
  10. package/dist/{paperless/p-424d5c8a.entry.js → build/p-7bf042c9.entry.js} +2 -2
  11. package/dist/{paperless/p-424d5c8a.entry.js.map → build/p-7bf042c9.entry.js.map} +1 -1
  12. package/dist/build/p-b848c222.entry.js +2 -0
  13. package/dist/{paperless/p-3a6efecd.entry.js.map → build/p-b848c222.entry.js.map} +1 -1
  14. package/dist/build/p-d8641c29.entry.js +2 -0
  15. package/dist/build/{p-d23db949.entry.js.map → p-d8641c29.entry.js.map} +1 -1
  16. package/dist/build/p-fe39443a.entry.js +2 -0
  17. package/dist/build/{p-b6f43309.entry.js.map → p-fe39443a.entry.js.map} +1 -1
  18. package/dist/build/paperless.css +1 -1
  19. package/dist/build/paperless.esm.js +1 -1
  20. package/dist/cjs/p-avatar.cjs.entry.js +1 -1
  21. package/dist/cjs/p-avatar.cjs.entry.js.map +1 -1
  22. package/dist/cjs/p-backdrop.cjs.entry.js +1 -1
  23. package/dist/cjs/p-backdrop.cjs.entry.js.map +1 -1
  24. package/dist/cjs/p-cropper.cjs.entry.js +1 -1
  25. package/dist/cjs/p-cropper.cjs.entry.js.map +1 -1
  26. package/dist/cjs/p-dropdown_2.cjs.entry.js +1 -1
  27. package/dist/cjs/p-dropdown_2.cjs.entry.js.map +1 -1
  28. package/dist/cjs/p-layout.cjs.entry.js +1 -1
  29. package/dist/cjs/p-layout.cjs.entry.js.map +1 -1
  30. package/dist/cjs/p-modal-body_4.cjs.entry.js +1 -1
  31. package/dist/cjs/p-modal-body_4.cjs.entry.js.map +1 -1
  32. package/dist/cjs/p-stepper-item.cjs.entry.js +1 -1
  33. package/dist/cjs/p-stepper-item.cjs.entry.js.map +1 -1
  34. package/dist/cjs/p-stepper-line.cjs.entry.js +1 -1
  35. package/dist/cjs/p-stepper-line.cjs.entry.js.map +1 -1
  36. package/dist/collection/components/atoms/avatar/avatar.component.css +1 -1
  37. package/dist/collection/components/atoms/backdrop/backdrop.component.css +1 -1
  38. package/dist/collection/components/atoms/dropdown-menu-item/dropdown-menu-item.component.css +1 -1
  39. package/dist/collection/components/atoms/layout/layout.component.css +1 -1
  40. package/dist/collection/components/atoms/modal-container/modal-container.component.css +1 -1
  41. package/dist/collection/components/atoms/stepper-item/stepper-item.component.css +1 -1
  42. package/dist/collection/components/atoms/stepper-line/stepper-line.component.css +1 -1
  43. package/dist/collection/components/molecules/cropper/cropper.component.css +1 -1
  44. package/dist/components/avatar.component.js +1 -1
  45. package/dist/components/avatar.component.js.map +1 -1
  46. package/dist/components/backdrop.component.js +1 -1
  47. package/dist/components/backdrop.component.js.map +1 -1
  48. package/dist/components/dropdown-menu-item.component.js +1 -1
  49. package/dist/components/dropdown-menu-item.component.js.map +1 -1
  50. package/dist/components/modal-container.component.js +1 -1
  51. package/dist/components/modal-container.component.js.map +1 -1
  52. package/dist/components/p-cropper.js +1 -1
  53. package/dist/components/p-cropper.js.map +1 -1
  54. package/dist/components/p-layout.js +1 -1
  55. package/dist/components/p-layout.js.map +1 -1
  56. package/dist/components/p-stepper-item.js +1 -1
  57. package/dist/components/p-stepper-item.js.map +1 -1
  58. package/dist/components/stepper-line.component.js +1 -1
  59. package/dist/components/stepper-line.component.js.map +1 -1
  60. package/dist/esm/p-avatar.entry.js +1 -1
  61. package/dist/esm/p-avatar.entry.js.map +1 -1
  62. package/dist/esm/p-backdrop.entry.js +1 -1
  63. package/dist/esm/p-backdrop.entry.js.map +1 -1
  64. package/dist/esm/p-cropper.entry.js +1 -1
  65. package/dist/esm/p-cropper.entry.js.map +1 -1
  66. package/dist/esm/p-dropdown_2.entry.js +1 -1
  67. package/dist/esm/p-dropdown_2.entry.js.map +1 -1
  68. package/dist/esm/p-layout.entry.js +1 -1
  69. package/dist/esm/p-layout.entry.js.map +1 -1
  70. package/dist/esm/p-modal-body_4.entry.js +1 -1
  71. package/dist/esm/p-modal-body_4.entry.js.map +1 -1
  72. package/dist/esm/p-stepper-item.entry.js +1 -1
  73. package/dist/esm/p-stepper-item.entry.js.map +1 -1
  74. package/dist/esm/p-stepper-line.entry.js +1 -1
  75. package/dist/esm/p-stepper-line.entry.js.map +1 -1
  76. package/dist/index.html +1 -1
  77. package/dist/paperless/p-2786d383.entry.js +2 -0
  78. package/dist/paperless/{p-e33a73c2.entry.js.map → p-2786d383.entry.js.map} +1 -1
  79. package/dist/paperless/p-3ea2d7a2.entry.js +2 -0
  80. package/dist/paperless/{p-f34e08ec.entry.js.map → p-3ea2d7a2.entry.js.map} +1 -1
  81. package/dist/paperless/p-57a32088.entry.js +2 -0
  82. package/dist/paperless/p-57a32088.entry.js.map +1 -0
  83. package/dist/paperless/p-6cbe8dc8.entry.js +2 -0
  84. package/dist/paperless/{p-f6c6919a.entry.js.map → p-6cbe8dc8.entry.js.map} +1 -1
  85. package/dist/{build/p-424d5c8a.entry.js → paperless/p-7bf042c9.entry.js} +2 -2
  86. package/dist/{build/p-424d5c8a.entry.js.map → paperless/p-7bf042c9.entry.js.map} +1 -1
  87. package/dist/paperless/p-b848c222.entry.js +2 -0
  88. package/dist/{build/p-3a6efecd.entry.js.map → paperless/p-b848c222.entry.js.map} +1 -1
  89. package/dist/paperless/p-d8641c29.entry.js +2 -0
  90. package/dist/paperless/{p-d23db949.entry.js.map → p-d8641c29.entry.js.map} +1 -1
  91. package/dist/paperless/p-fe39443a.entry.js +2 -0
  92. package/dist/paperless/{p-b6f43309.entry.js.map → p-fe39443a.entry.js.map} +1 -1
  93. package/dist/paperless/paperless.css +249 -27
  94. package/dist/paperless/paperless.esm.js +1 -1
  95. package/dist/sw.js +1 -1
  96. package/dist/sw.js.map +1 -1
  97. package/hydrate/index.js +8 -8
  98. package/package.json +2 -2
  99. package/dist/build/p-3a6efecd.entry.js +0 -2
  100. package/dist/build/p-4cc872f7.entry.js +0 -2
  101. package/dist/build/p-4cc872f7.entry.js.map +0 -1
  102. package/dist/build/p-b6f43309.entry.js +0 -2
  103. package/dist/build/p-d23db949.entry.js +0 -2
  104. package/dist/build/p-e33a73c2.entry.js +0 -2
  105. package/dist/build/p-f34e08ec.entry.js +0 -2
  106. package/dist/build/p-f6c6919a.entry.js +0 -2
  107. package/dist/paperless/p-3a6efecd.entry.js +0 -2
  108. package/dist/paperless/p-4cc872f7.entry.js +0 -2
  109. package/dist/paperless/p-4cc872f7.entry.js.map +0 -1
  110. package/dist/paperless/p-b6f43309.entry.js +0 -2
  111. package/dist/paperless/p-d23db949.entry.js +0 -2
  112. package/dist/paperless/p-e33a73c2.entry.js +0 -2
  113. package/dist/paperless/p-f34e08ec.entry.js +0 -2
  114. package/dist/paperless/p-f6c6919a.entry.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"names":["r","e","t","f","n","Array","isArray","length","clsx","arguments","IS_BROWSER","window","document","WINDOW","IS_TOUCH_DEVICE","documentElement","HAS_POINTER_EVENT","NAMESPACE","CROPPER_CANVAS","CROPPER_CROSSHAIR","CROPPER_GIRD","CROPPER_HANDLE","CROPPER_IMAGE","CROPPER_SELECTION","CROPPER_SHADE","CROPPER_VIEWER","ACTION_SELECT","ACTION_MOVE","ACTION_SCALE","ACTION_ROTATE","ACTION_TRANSFORM","ACTION_NONE","ACTION_RESIZE_NORTH","ACTION_RESIZE_EAST","ACTION_RESIZE_SOUTH","ACTION_RESIZE_WEST","ACTION_RESIZE_NORTHEAST","ACTION_RESIZE_NORTHWEST","ACTION_RESIZE_SOUTHEAST","ACTION_RESIZE_SOUTHWEST","ATTRIBUTE_ACTION","EVENT_TOUCH_END","EVENT_TOUCH_MOVE","EVENT_TOUCH_START","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_ERROR","EVENT_KEYDOWN","EVENT_LOAD","EVENT_WHEEL","EVENT_ACTION","EVENT_ACTION_END","EVENT_ACTION_MOVE","EVENT_ACTION_START","EVENT_CHANGE","EVENT_TRANSFORM","isString","value","isNaN","Number","isNumber","isPositiveNumber","Infinity","isUndefined","isObject","hasOwnProperty","Object","prototype","isPlainObject","constructor","call","error","isFunction","isElement","node","nodeType","REGEXP_CAMEL_CASE","toKebabCase","String","replace","toLowerCase","REGEXP_KEBAB_CASE","toCamelCase","substring","slice","toUpperCase","REGEXP_SPACES","off","target","types","listener","options","trim","split","forEach","type","removeEventListener","on","addEventListener","once","assign","defaultEventOptions","bubbles","cancelable","composed","emit","detail","dispatchEvent","CustomEvent","resolvedPromise","Promise","resolve","nextTick","context","callback","then","bind","getOffset","element","ownerDocument","box","getBoundingClientRect","left","pageXOffset","clientLeft","top","pageYOffset","clientTop","REGEXP_ANGLE_UNIT","toAngleInRadian","angle","parseFloat","unit","match","Math","PI","SIZE_ADJUSTMENT_TYPE_CONTAIN","SIZE_ADJUSTMENT_TYPE_COVER","getAdjustedSizes","data","aspectRatio","width","height","isValidWidth","isValidHeight","adjustedWidth","multiplyMatrices","matrix","args","a1","b1","c1","d1","e1","f1","a2","b2","c2","d2","e2","f2","style","REGEXP_SUFFIX","DEFAULT_SHADOW_ROOT_MODE","shadowRoots","WeakMap","styleSheets","tagNames","Map","supportsAdoptedStyleSheets","adoptedStyleSheets","CSSStyleSheet","CropperElement","HTMLElement","$sharedStyle","this","themeColor","_a","_b","super","shadowRootMode","slottable","name","getPrototypeOf","$name","set","tagName","observedAttributes","attributeChangedCallback","oldValue","newValue","is","propertyName","oldPropertyValue","newPropertyValue","styleSheet","get","styles","replaceSync","textContent","$propertyChangedCallback","hasAttribute","setAttribute","removeAttribute","getAttribute","connectedCallback","attribute","property","undefined","defineProperty","enumerable","configurable","shadow","attachShadow","mode","shadowRoot","$addStyles","$style","$template","template","createElement","innerHTML","appendChild","content","slot","disconnectedCallback","has","delete","$getTagNameOf","$setStyles","properties","keys","test","$getShadowRoot","concat","$emit","$nextTick","$define","customElements","define","$version","CropperCanvas","$onPointerDown","$onPointerMove","$onPointerUp","$onWheel","$wheeling","$pointers","$action","background","disabled","scaleStep","$bind","$unbind","$handlePointerDown","$handlePointerMove","$handlePointerUp","$handleWheel","passive","capture","event","buttons","button","pointerType","ctrlKey","action","changedTouches","from","identifier","pageX","pageY","startX","startY","endX","endY","pointerId","size","relatedEvent","preventDefault","willChange","pointer","pointers2","maxRotateRate","maxScaleRate","rotate","scale","centerX","centerY","pointer2","x1","y1","x2","y2","z1","z2","atan","rotateRate","absRotateRate","abs","sqrt","scaleRate","absScaleRate","rotatable","scalable","values","setTimeout","delta","deltaY","$setAction","$toCanvas","reject","isConnected","Error","canvas","offsetWidth","offsetHeight","cropperImage","querySelector","$ready","image","getContext","a","b","c","d","$getTransform","newE","newF","destWidth","naturalWidth","destHeight","naturalHeight","fillStyle","fillRect","beforeDraw","save","translate","transform","drawImage","restore","catch","canvasCache","NATIVE_ATTRIBUTES","CropperImage","$matrix","$onLoad","$onCanvasAction","$onCanvasActionEnd","$onCanvasActionStart","$actionStartTarget","$image","Image","skewable","translatable","$canvas","includes","closest","display","position","$handleAction","$handleLoad","removeChild","$center","hidden","cropperSelectionTagName","selection","multiple","active","movable","contains","$move","x","y","$rotate","clientX","clientY","$zoom","cos","sin","scaleX","skewY","skewX","scaleY","clientRect","originX","originY","moveX","moveY","translateX","translateY","$transform","promise","complete","onLoad","onError","parentElement","container","containerWidth","containerHeight","$scale","max","min","$translate","$moveTo","$setTransform","radian","$skew","radianX","radianY","tan","newMatrix","oldMatrix","join","$resetTransform","CropperShade","$onCanvasChange","$selection","$change","$render","$reset","outlineWidth","innerWidth","CropperHandle","$onCanvasCropEnd","$onCanvasCropStart","plain","CropperSelection","$onDocumentKeyDown","NaN","initialAspectRatio","initialCoverage","resizable","zoomable","keyboard","outlined","precise","$handleKeyDown","selections","$getSelections","$removeSelection","$handleActionStart","$handleActionEnd","querySelectorAll","$createSelection","newSelection","cloneNode","insertBefore","nextSibling","index","indexOf","activeSelection","relatedTarget","currentTarget","shiftKey","offset","$resize","defaultPrevented","key","metaKey","offsetX","offsetY","hasValidAspectRatio","newWidth","newHeight","newX","newY","round","CropperGrid","bordered","columns","covered","rows","fragment","createDocumentFragment","i","row","j","column","CropperCrosshair","centered","imageCache","selectionCache","sourceImageCache","RESIZE_BOTH","RESIZE_HORIZONTAL","RESIZE_VERTICAL","RESIZE_NONE","CropperViewer","$onSelectionChange","$onSourceImageLoad","$onSourceImageTransform","resize","$sourceImage","$handleSelectionChange","$handleSourceImageLoad","$handleSourceImageTransform","oldSrc","newSrc","$transformImageByOffset","clientWidth","clientHeight","cropperComponentCss","Cropper","_maxScale","_minScale","onResize","_resizeDebounceTimeout","clearTimeout","_selectionRef","_imageRef","componentDidLoad","_loaded","render","h","Host","class","onAction","_onAction","src","alt","ref","_setImageRef","crossorigin","variant","rounded","_currentScale","onInput","ev","_onInput","step","_setInitialState","current","_setScale","_toCanvas","_setCurrentScale","setCenter","setCurrentScale","minMaxDiff","currentDiff","percentage","toSet","_toCanvasDebounceTimeout","async","returnType","valueChange","toDataURL"],"sources":["node_modules/clsx/dist/clsx.mjs","../../node_modules/@cropper/utils/dist/utils.esm.raw.js","../../node_modules/@cropper/element/dist/element.esm.raw.js","../../node_modules/@cropper/element-canvas/dist/element-canvas.esm.raw.js","../../node_modules/@cropper/element-image/dist/element-image.esm.raw.js","../../node_modules/@cropper/element-shade/dist/element-shade.esm.raw.js","../../node_modules/@cropper/element-handle/dist/element-handle.esm.raw.js","../../node_modules/@cropper/element-selection/dist/element-selection.esm.raw.js","../../node_modules/@cropper/element-grid/dist/element-grid.esm.raw.js","../../node_modules/@cropper/element-crosshair/dist/element-crosshair.esm.raw.js","../../node_modules/@cropper/element-viewer/dist/element-viewer.esm.raw.js","../../node_modules/cropperjs/dist/cropper.esm.raw.js","src/components/molecules/cropper/cropper.component.scss?tag=p-cropper&encapsulation=shadow","src/components/molecules/cropper/cropper.component.tsx"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","const IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nconst WINDOW = IS_BROWSER ? window : {};\nconst IS_TOUCH_DEVICE = IS_BROWSER ? 'ontouchstart' in WINDOW.document.documentElement : false;\nconst HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\nconst NAMESPACE = 'cropper';\nconst CROPPER_CANVAS = `${NAMESPACE}-canvas`;\nconst CROPPER_CROSSHAIR = `${NAMESPACE}-crosshair`;\nconst CROPPER_GIRD = `${NAMESPACE}-grid`;\nconst CROPPER_HANDLE = `${NAMESPACE}-handle`;\nconst CROPPER_IMAGE = `${NAMESPACE}-image`;\nconst CROPPER_SELECTION = `${NAMESPACE}-selection`;\nconst CROPPER_SHADE = `${NAMESPACE}-shade`;\nconst CROPPER_VIEWER = `${NAMESPACE}-viewer`;\n// Actions\nconst ACTION_SELECT = 'select';\nconst ACTION_MOVE = 'move';\nconst ACTION_SCALE = 'scale';\nconst ACTION_ROTATE = 'rotate';\nconst ACTION_TRANSFORM = 'transform';\nconst ACTION_NONE = 'none';\nconst ACTION_RESIZE_NORTH = 'n-resize';\nconst ACTION_RESIZE_EAST = 'e-resize';\nconst ACTION_RESIZE_SOUTH = 's-resize';\nconst ACTION_RESIZE_WEST = 'w-resize';\nconst ACTION_RESIZE_NORTHEAST = 'ne-resize';\nconst ACTION_RESIZE_NORTHWEST = 'nw-resize';\nconst ACTION_RESIZE_SOUTHEAST = 'se-resize';\nconst ACTION_RESIZE_SOUTHWEST = 'sw-resize';\n// Attributes\nconst ATTRIBUTE_ACTION = 'action';\n// Native events\nconst EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\nconst EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\nconst EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\nconst EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\nconst EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\nconst EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\nconst EVENT_ERROR = 'error';\nconst EVENT_KEYDOWN = 'keydown';\nconst EVENT_LOAD = 'load';\nconst EVENT_RESIZE = 'resize';\nconst EVENT_WHEEL = 'wheel';\n// Custom events\nconst EVENT_ACTION = 'action';\nconst EVENT_ACTION_END = 'actionend';\nconst EVENT_ACTION_MOVE = 'actionmove';\nconst EVENT_ACTION_START = 'actionstart';\nconst EVENT_CHANGE = 'change';\nconst EVENT_TRANSFORM = 'transform';\n\n/**\n * Check if the given value is a string.\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the given value is a string, else `false`.\n */\nfunction isString(value) {\n return typeof value === 'string';\n}\n/**\n * Check if the given value is not a number.\n */\nconst isNaN = Number.isNaN || WINDOW.isNaN;\n/**\n * Check if the given value is a number.\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\nfunction isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n}\n/**\n * Check if the given value is a positive number.\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\nfunction isPositiveNumber(value) {\n return isNumber(value) && value > 0 && value < Infinity;\n}\n/**\n * Check if the given value is undefined.\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n/**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\nfunction isObject(value) {\n return typeof value === 'object' && value !== null;\n}\nconst { hasOwnProperty } = Object.prototype;\n/**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\nfunction isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n try {\n const { constructor } = value;\n const { prototype } = constructor;\n return constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n }\n catch (error) {\n return false;\n }\n}\n/**\n * Check if the given value is a function.\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Check if the given node is an element.\n * @param {*} node The node to check.\n * @returns {boolean} Returns `true` if the given node is an element; otherwise, `false`.\n */\nfunction isElement(node) {\n return typeof node === 'object' && node !== null && node.nodeType === 1;\n}\nconst REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n/**\n * Transform the given string from camelCase to kebab-case.\n * @param {string} value The value to transform.\n * @returns {string} Returns the transformed value.\n */\nfunction toKebabCase(value) {\n return String(value).replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n}\nconst REGEXP_KEBAB_CASE = /-[A-z\\d]/g;\n/**\n * Transform the given string from kebab-case to camelCase.\n * @param {string} value The value to transform.\n * @returns {string} Returns the transformed value.\n */\nfunction toCamelCase(value) {\n return value.replace(REGEXP_KEBAB_CASE, (substring) => substring.slice(1).toUpperCase());\n}\nconst REGEXP_SPACES = /\\s\\s*/;\n/**\n * Remove event listener from the event target.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener}\n * @param {EventTarget} target The target of the event.\n * @param {string} types The types of the event.\n * @param {EventListenerOrEventListenerObject} listener The listener of the event.\n * @param {EventListenerOptions} [options] The options specify characteristics about the event listener.\n */\nfunction off(target, types, listener, options) {\n types.trim().split(REGEXP_SPACES).forEach((type) => {\n target.removeEventListener(type, listener, options);\n });\n}\n/**\n * Add event listener to the event target.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener}\n * @param {EventTarget} target The target of the event.\n * @param {string} types The types of the event.\n * @param {EventListenerOrEventListenerObject} listener The listener of the event.\n * @param {AddEventListenerOptions} [options] The options specify characteristics about the event listener.\n */\nfunction on(target, types, listener, options) {\n types.trim().split(REGEXP_SPACES).forEach((type) => {\n target.addEventListener(type, listener, options);\n });\n}\n/**\n * Add once event listener to the event target.\n * @param {EventTarget} target The target of the event.\n * @param {string} types The types of the event.\n * @param {EventListenerOrEventListenerObject} listener The listener of the event.\n * @param {AddEventListenerOptions} [options] The options specify characteristics about the event listener.\n */\nfunction once(target, types, listener, options) {\n on(target, types, listener, Object.assign(Object.assign({}, options), { once: true }));\n}\nconst defaultEventOptions = {\n bubbles: true,\n cancelable: true,\n composed: true,\n};\n/**\n * Dispatch event on the event target.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent}\n * @param {EventTarget} target The target of the event.\n * @param {string} type The name of the event.\n * @param {*} [detail] The data passed when initializing the event.\n * @param {CustomEventInit} [options] The other event options.\n * @returns {boolean} Returns the result value.\n */\nfunction emit(target, type, detail, options) {\n return target.dispatchEvent(new CustomEvent(type, Object.assign(Object.assign(Object.assign({}, defaultEventOptions), { detail }), options)));\n}\nconst resolvedPromise = Promise.resolve();\n/**\n * Defers the callback to be executed after the next DOM update cycle.\n * @param {*} [context] The `this` context.\n * @param {Function} [callback] The callback to execute after the next DOM update cycle.\n * @returns {Promise} A promise that resolves to nothing.\n */\nfunction nextTick(context, callback) {\n return callback\n ? resolvedPromise.then(context ? callback.bind(context) : callback)\n : resolvedPromise;\n}\n/**\n * Get the offset base on the document.\n * @param {Element} element The target element.\n * @returns {object} The offset data.\n */\nfunction getOffset(element) {\n const { documentElement } = element.ownerDocument;\n const box = element.getBoundingClientRect();\n return {\n left: box.left + (WINDOW.pageXOffset - documentElement.clientLeft),\n top: box.top + (WINDOW.pageYOffset - documentElement.clientTop),\n };\n}\nconst REGEXP_ANGLE_UNIT = /deg|g?rad|turn$/i;\n/**\n * Convert an angle to a radian number.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/angle}\n * @param {number|string} angle The angle to convert.\n * @returns {number} Returns the radian number.\n */\nfunction toAngleInRadian(angle) {\n const value = parseFloat(angle) || 0;\n if (value !== 0) {\n const [unit = 'rad'] = String(angle).match(REGEXP_ANGLE_UNIT) || [];\n switch (unit.toLowerCase()) {\n case 'deg':\n return (value / 360) * (Math.PI * 2);\n case 'grad':\n return (value / 400) * (Math.PI * 2);\n case 'turn':\n return value * (Math.PI * 2);\n }\n }\n return value;\n}\nconst SIZE_ADJUSTMENT_TYPE_CONTAIN = 'contain';\nconst SIZE_ADJUSTMENT_TYPE_COVER = 'cover';\n/**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {object} data The original sizes.\n * @param {string} [type] The adjust type.\n * @returns {object} Returns the result sizes.\n */\nfunction getAdjustedSizes(data, type = SIZE_ADJUSTMENT_TYPE_CONTAIN) {\n const { aspectRatio } = data;\n let { width, height } = data;\n const isValidWidth = isPositiveNumber(width);\n const isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n const adjustedWidth = height * aspectRatio;\n if ((type === SIZE_ADJUSTMENT_TYPE_CONTAIN && adjustedWidth > width)\n || (type === SIZE_ADJUSTMENT_TYPE_COVER && adjustedWidth < width)) {\n height = width / aspectRatio;\n }\n else {\n width = height * aspectRatio;\n }\n }\n else if (isValidWidth) {\n height = width / aspectRatio;\n }\n else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width,\n height,\n };\n}\n/**\n * Multiply multiple matrices.\n * @param {Array} matrix The first matrix.\n * @param {Array} args The rest matrices.\n * @returns {Array} Returns the result matrix.\n */\nfunction multiplyMatrices(matrix, ...args) {\n if (args.length === 0) {\n return matrix;\n }\n const [a1, b1, c1, d1, e1, f1] = matrix;\n const [a2, b2, c2, d2, e2, f2] = args[0];\n // ┌ a1 c1 e1 ┐ ┌ a2 c2 e2 ┐\n // │ b1 d1 f1 │ × │ b2 d2 f2 │\n // └ 0 0 1 ┘ └ 0 0 1 ┘\n matrix = [\n a1 * a2 + c1 * b2 /* + e1 * 0 */,\n b1 * a2 + d1 * b2 /* + f1 * 0 */,\n a1 * c2 + c1 * d2 /* + e1 * 0 */,\n b1 * c2 + d1 * d2 /* + f1 * 0 */,\n a1 * e2 + c1 * f2 + e1 /* * 1 */,\n b1 * e2 + d1 * f2 + f1 /* * 1 */,\n ];\n return multiplyMatrices(matrix, ...args.slice(1));\n}\n\nexport { ACTION_MOVE, ACTION_NONE, ACTION_RESIZE_EAST, ACTION_RESIZE_NORTH, ACTION_RESIZE_NORTHEAST, ACTION_RESIZE_NORTHWEST, ACTION_RESIZE_SOUTH, ACTION_RESIZE_SOUTHEAST, ACTION_RESIZE_SOUTHWEST, ACTION_RESIZE_WEST, ACTION_ROTATE, ACTION_SCALE, ACTION_SELECT, ACTION_TRANSFORM, ATTRIBUTE_ACTION, CROPPER_CANVAS, CROPPER_CROSSHAIR, CROPPER_GIRD, CROPPER_HANDLE, CROPPER_IMAGE, CROPPER_SELECTION, CROPPER_SHADE, CROPPER_VIEWER, EVENT_ACTION, EVENT_ACTION_END, EVENT_ACTION_MOVE, EVENT_ACTION_START, EVENT_CHANGE, EVENT_ERROR, EVENT_KEYDOWN, EVENT_LOAD, EVENT_POINTER_DOWN, EVENT_POINTER_MOVE, EVENT_POINTER_UP, EVENT_RESIZE, EVENT_TOUCH_END, EVENT_TOUCH_MOVE, EVENT_TOUCH_START, EVENT_TRANSFORM, EVENT_WHEEL, HAS_POINTER_EVENT, IS_BROWSER, IS_TOUCH_DEVICE, NAMESPACE, WINDOW, emit, getAdjustedSizes, getOffset, isElement, isFunction, isNaN, isNumber, isObject, isPlainObject, isPositiveNumber, isString, isUndefined, multiplyMatrices, nextTick, off, on, once, toAngleInRadian, toCamelCase, toKebabCase };\n","import { WINDOW, toCamelCase, toKebabCase, isNaN, isUndefined, isNumber, emit, nextTick, isObject, IS_BROWSER } from '@cropper/utils';\n\nvar style = `:host([hidden]){display:none!important}`;\n\nconst REGEXP_SUFFIX = /left|top|width|height/i;\nconst DEFAULT_SHADOW_ROOT_MODE = 'open';\nconst shadowRoots = new WeakMap();\nconst styleSheets = new WeakMap();\nconst tagNames = new Map();\nconst supportsAdoptedStyleSheets = WINDOW.document && Array.isArray(WINDOW.document.adoptedStyleSheets) && 'replaceSync' in WINDOW.CSSStyleSheet.prototype;\nclass CropperElement extends HTMLElement {\n get $sharedStyle() {\n return `${this.themeColor ? `:host{--theme-color: ${this.themeColor};}` : ''}${style}`;\n }\n constructor() {\n var _a, _b;\n super();\n this.shadowRootMode = DEFAULT_SHADOW_ROOT_MODE;\n this.slottable = true;\n const name = (_b = (_a = Object.getPrototypeOf(this)) === null || _a === void 0 ? void 0 : _a.constructor) === null || _b === void 0 ? void 0 : _b.$name;\n if (name) {\n tagNames.set(name, this.tagName.toLowerCase());\n }\n }\n static get observedAttributes() {\n return [\n 'shadow-root-mode',\n 'slottable',\n 'theme-color',\n ];\n }\n // Convert attribute to property\n attributeChangedCallback(name, oldValue, newValue) {\n if (Object.is(newValue, oldValue)) {\n return;\n }\n const propertyName = toCamelCase(name);\n const oldPropertyValue = this[propertyName];\n let newPropertyValue = newValue;\n switch (typeof oldPropertyValue) {\n case 'boolean':\n newPropertyValue = newValue !== null && newValue !== 'false';\n break;\n case 'number':\n newPropertyValue = Number(newValue);\n break;\n }\n this[propertyName] = newPropertyValue;\n switch (name) {\n case 'theme-color': {\n const styleSheet = styleSheets.get(this);\n const styles = this.$sharedStyle;\n if (styleSheet && styles) {\n if (supportsAdoptedStyleSheets) {\n styleSheet.replaceSync(styles);\n }\n else {\n styleSheet.textContent = styles;\n }\n }\n break;\n }\n }\n }\n // Convert property to attribute\n $propertyChangedCallback(name, oldValue, newValue) {\n if (Object.is(newValue, oldValue)) {\n return;\n }\n name = toKebabCase(name);\n switch (typeof newValue) {\n case 'boolean':\n if (newValue === true) {\n if (!this.hasAttribute(name)) {\n this.setAttribute(name, '');\n }\n }\n else {\n this.removeAttribute(name);\n }\n break;\n case 'number':\n if (isNaN(newValue)) {\n newValue = '';\n }\n else {\n newValue = String(newValue);\n }\n // Fall through\n // case 'string':\n // eslint-disable-next-line no-fallthrough\n default:\n if (newValue) {\n if (this.getAttribute(name) !== newValue) {\n this.setAttribute(name, newValue);\n }\n }\n else {\n this.removeAttribute(name);\n }\n }\n }\n connectedCallback() {\n // Observe properties after observed attributes\n Object.getPrototypeOf(this).constructor.observedAttributes.forEach((attribute) => {\n const property = toCamelCase(attribute);\n let value = this[property];\n if (!isUndefined(value)) {\n this.$propertyChangedCallback(property, undefined, value);\n }\n Object.defineProperty(this, property, {\n enumerable: true,\n configurable: true,\n get() {\n return value;\n },\n set(newValue) {\n const oldValue = value;\n value = newValue;\n this.$propertyChangedCallback(property, oldValue, newValue);\n },\n });\n });\n const shadow = this.attachShadow({\n mode: this.shadowRootMode || DEFAULT_SHADOW_ROOT_MODE,\n });\n if (!this.shadowRoot) {\n shadowRoots.set(this, shadow);\n }\n styleSheets.set(this, this.$addStyles(this.$sharedStyle));\n if (this.$style) {\n this.$addStyles(this.$style);\n }\n if (this.$template) {\n const template = document.createElement('template');\n template.innerHTML = this.$template;\n shadow.appendChild(template.content);\n }\n if (this.slottable) {\n const slot = document.createElement('slot');\n shadow.appendChild(slot);\n }\n }\n disconnectedCallback() {\n if (styleSheets.has(this)) {\n styleSheets.delete(this);\n }\n if (shadowRoots.has(this)) {\n shadowRoots.delete(this);\n }\n }\n // eslint-disable-next-line class-methods-use-this\n $getTagNameOf(name) {\n var _a;\n return (_a = tagNames.get(name)) !== null && _a !== void 0 ? _a : name;\n }\n $setStyles(properties) {\n Object.keys(properties).forEach((property) => {\n let value = properties[property];\n if (isNumber(value)) {\n if (value !== 0 && REGEXP_SUFFIX.test(property)) {\n value = `${value}px`;\n }\n else {\n value = String(value);\n }\n }\n this.style[property] = value;\n });\n return this;\n }\n /**\n * Outputs the shadow root of the element.\n * @returns {ShadowRoot} Returns the shadow root.\n */\n $getShadowRoot() {\n return this.shadowRoot || shadowRoots.get(this);\n }\n /**\n * Adds styles to the shadow root.\n * @param {string} styles The styles to add.\n * @returns {CSSStyleSheet|HTMLStyleElement} Returns the generated style sheet.\n */\n $addStyles(styles) {\n let styleSheet;\n const shadow = this.$getShadowRoot();\n if (supportsAdoptedStyleSheets) {\n styleSheet = new CSSStyleSheet();\n styleSheet.replaceSync(styles);\n shadow.adoptedStyleSheets = shadow.adoptedStyleSheets.concat(styleSheet);\n }\n else {\n styleSheet = document.createElement('style');\n styleSheet.textContent = styles;\n shadow.appendChild(styleSheet);\n }\n return styleSheet;\n }\n /**\n * Dispatches an event at the element.\n * @param {string} type The name of the event.\n * @param {*} [detail] The data passed when initializing the event.\n * @param {CustomEventInit} [options] The other event options.\n * @returns {boolean} Returns the result value.\n */\n $emit(type, detail, options) {\n return emit(this, type, detail, options);\n }\n /**\n * Defers the callback to be executed after the next DOM update cycle.\n * @param {Function} [callback] The callback to execute after the next DOM update cycle.\n * @returns {Promise} A promise that resolves to nothing.\n */\n $nextTick(callback) {\n return nextTick(this, callback);\n }\n /**\n * Defines the constructor as a new custom element.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/define}\n * @param {string|object} [name] The element name.\n * @param {object} [options] The element definition options.\n */\n static $define(name, options) {\n if (isObject(name)) {\n options = name;\n name = '';\n }\n if (!name) {\n name = this.$name || this.name;\n }\n name = toKebabCase(name);\n if (IS_BROWSER && WINDOW.customElements && !WINDOW.customElements.get(name)) {\n customElements.define(name, this, options);\n }\n }\n}\nCropperElement.$version = '2.0.0-beta.4';\n\nexport { CropperElement as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_CANVAS, ACTION_NONE, on, EVENT_POINTER_DOWN, EVENT_POINTER_MOVE, EVENT_POINTER_UP, EVENT_WHEEL, off, isNumber, isElement, ATTRIBUTE_ACTION, EVENT_ACTION_START, EVENT_ACTION_MOVE, ACTION_TRANSFORM, EVENT_ACTION, EVENT_ACTION_END, ACTION_SCALE, isString, isPlainObject, isPositiveNumber, getAdjustedSizes, CROPPER_IMAGE, isFunction, ACTION_ROTATE } from '@cropper/utils';\n\nvar style = `:host{display:block;min-height:100px;min-width:200px;overflow:hidden;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}:host([background]){background-color:#fff;background-image:repeating-linear-gradient(45deg,#ccc 25%,transparent 0,transparent 75%,#ccc 0,#ccc),repeating-linear-gradient(45deg,#ccc 25%,transparent 0,transparent 75%,#ccc 0,#ccc);background-image:repeating-conic-gradient(#ccc 0 25%,#fff 0 50%);background-position:0 0,.5rem .5rem;background-size:1rem 1rem}:host([disabled]){pointer-events:none}:host([disabled]):after{bottom:0;content:\"\";cursor:not-allowed;display:block;left:0;pointer-events:none;position:absolute;right:0;top:0}`;\n\nclass CropperCanvas extends CropperElement {\n constructor() {\n super(...arguments);\n this.$onPointerDown = null;\n this.$onPointerMove = null;\n this.$onPointerUp = null;\n this.$onWheel = null;\n this.$wheeling = false;\n this.$pointers = new Map();\n this.$style = style;\n this.$action = ACTION_NONE;\n this.background = false;\n this.disabled = false;\n this.scaleStep = 0.1;\n this.themeColor = '#39f';\n }\n static get observedAttributes() {\n return super.observedAttributes.concat([\n 'background',\n 'disabled',\n 'scale-step',\n ]);\n }\n connectedCallback() {\n super.connectedCallback();\n if (!this.disabled) {\n this.$bind();\n }\n }\n disconnectedCallback() {\n if (!this.disabled) {\n this.$unbind();\n }\n super.disconnectedCallback();\n }\n $propertyChangedCallback(name, oldValue, newValue) {\n if (Object.is(newValue, oldValue)) {\n return;\n }\n super.$propertyChangedCallback(name, oldValue, newValue);\n switch (name) {\n case 'disabled':\n if (newValue) {\n this.$unbind();\n }\n else {\n this.$bind();\n }\n break;\n }\n }\n $bind() {\n if (!this.$onPointerDown) {\n this.$onPointerDown = this.$handlePointerDown.bind(this);\n on(this, EVENT_POINTER_DOWN, this.$onPointerDown);\n }\n if (!this.$onPointerMove) {\n this.$onPointerMove = this.$handlePointerMove.bind(this);\n on(this.ownerDocument, EVENT_POINTER_MOVE, this.$onPointerMove);\n }\n if (!this.$onPointerUp) {\n this.$onPointerUp = this.$handlePointerUp.bind(this);\n on(this.ownerDocument, EVENT_POINTER_UP, this.$onPointerUp);\n }\n if (!this.$onWheel) {\n this.$onWheel = this.$handleWheel.bind(this);\n on(this, EVENT_WHEEL, this.$onWheel, {\n passive: false,\n capture: true,\n });\n }\n }\n $unbind() {\n if (this.$onPointerDown) {\n off(this, EVENT_POINTER_DOWN, this.$onPointerDown);\n this.$onPointerDown = null;\n }\n if (this.$onPointerMove) {\n off(this.ownerDocument, EVENT_POINTER_MOVE, this.$onPointerMove);\n this.$onPointerMove = null;\n }\n if (this.$onPointerUp) {\n off(this.ownerDocument, EVENT_POINTER_UP, this.$onPointerUp);\n this.$onPointerUp = null;\n }\n if (this.$onWheel) {\n off(this, EVENT_WHEEL, this.$onWheel, {\n capture: true,\n });\n this.$onWheel = null;\n }\n }\n $handlePointerDown(event) {\n const { buttons, button, type } = event;\n if (this.disabled || (\n // Handle pointer or mouse event, and ignore touch event\n ((type === 'pointerdown' && event.pointerType === 'mouse') || type === 'mousedown') && (\n // No primary button (Usually the left button)\n (isNumber(buttons) && buttons !== 1) || (isNumber(button) && button !== 0)\n // Open context menu\n || event.ctrlKey))) {\n return;\n }\n const { $pointers } = this;\n let action = '';\n if (event.changedTouches) {\n Array.from(event.changedTouches).forEach(({ identifier, pageX, pageY, }) => {\n $pointers.set(identifier, {\n startX: pageX,\n startY: pageY,\n endX: pageX,\n endY: pageY,\n });\n });\n }\n else {\n const { pointerId = 0, pageX, pageY } = event;\n $pointers.set(pointerId, {\n startX: pageX,\n startY: pageY,\n endX: pageX,\n endY: pageY,\n });\n }\n if ($pointers.size > 1) {\n action = ACTION_TRANSFORM;\n }\n else if (isElement(event.target)) {\n action = event.target.action || event.target.getAttribute(ATTRIBUTE_ACTION) || '';\n }\n if (this.$emit(EVENT_ACTION_START, {\n action,\n relatedEvent: event,\n }) === false) {\n return;\n }\n // Prevent page zooming in the browsers for iOS.\n event.preventDefault();\n this.$action = action;\n this.style.willChange = 'transform';\n }\n $handlePointerMove(event) {\n const { $action, $pointers } = this;\n if (this.disabled || $action === ACTION_NONE || $pointers.size === 0) {\n return;\n }\n if (this.$emit(EVENT_ACTION_MOVE, {\n action: $action,\n relatedEvent: event,\n }) === false) {\n return;\n }\n // Prevent page scrolling.\n event.preventDefault();\n if (event.changedTouches) {\n Array.from(event.changedTouches).forEach(({ identifier, pageX, pageY, }) => {\n const pointer = $pointers.get(identifier);\n if (pointer) {\n Object.assign(pointer, {\n endX: pageX,\n endY: pageY,\n });\n }\n });\n }\n else {\n const { pointerId = 0, pageX, pageY } = event;\n const pointer = $pointers.get(pointerId);\n if (pointer) {\n Object.assign(pointer, {\n endX: pageX,\n endY: pageY,\n });\n }\n }\n const detail = {\n action: $action,\n relatedEvent: event,\n };\n if ($action === ACTION_TRANSFORM) {\n const pointers2 = new Map($pointers);\n let maxRotateRate = 0;\n let maxScaleRate = 0;\n let rotate = 0;\n let scale = 0;\n let centerX = event.pageX;\n let centerY = event.pageY;\n $pointers.forEach((pointer, pointerId) => {\n pointers2.delete(pointerId);\n pointers2.forEach((pointer2) => {\n let x1 = pointer2.startX - pointer.startX;\n let y1 = pointer2.startY - pointer.startY;\n let x2 = pointer2.endX - pointer.endX;\n let y2 = pointer2.endY - pointer.endY;\n let z1 = 0;\n let z2 = 0;\n let a1 = 0;\n let a2 = 0;\n if (x1 === 0) {\n if (y1 < 0) {\n a1 = Math.PI * 2;\n }\n else if (y1 > 0) {\n a1 = Math.PI;\n }\n }\n else if (x1 > 0) {\n a1 = (Math.PI / 2) + Math.atan(y1 / x1);\n }\n else if (x1 < 0) {\n a1 = (Math.PI * 1.5) + Math.atan(y1 / x1);\n }\n if (x2 === 0) {\n if (y2 < 0) {\n a2 = Math.PI * 2;\n }\n else if (y2 > 0) {\n a2 = Math.PI;\n }\n }\n else if (x2 > 0) {\n a2 = (Math.PI / 2) + Math.atan(y2 / x2);\n }\n else if (x2 < 0) {\n a2 = (Math.PI * 1.5) + Math.atan(y2 / x2);\n }\n if (a2 > 0 || a1 > 0) {\n const rotateRate = a2 - a1;\n const absRotateRate = Math.abs(rotateRate);\n if (absRotateRate > maxRotateRate) {\n maxRotateRate = absRotateRate;\n rotate = rotateRate;\n centerX = (pointer.startX + pointer2.startX) / 2;\n centerY = (pointer.startY + pointer2.startY) / 2;\n }\n }\n x1 = Math.abs(x1);\n y1 = Math.abs(y1);\n x2 = Math.abs(x2);\n y2 = Math.abs(y2);\n if (x1 > 0 && y1 > 0) {\n z1 = Math.sqrt((x1 * x1) + (y1 * y1));\n }\n else if (x1 > 0) {\n z1 = x1;\n }\n else if (y1 > 0) {\n z1 = y1;\n }\n if (x2 > 0 && y2 > 0) {\n z2 = Math.sqrt((x2 * x2) + (y2 * y2));\n }\n else if (x2 > 0) {\n z2 = x2;\n }\n else if (y2 > 0) {\n z2 = y2;\n }\n if (z1 > 0 && z2 > 0) {\n const scaleRate = (z2 - z1) / z1;\n const absScaleRate = Math.abs(scaleRate);\n if (absScaleRate > maxScaleRate) {\n maxScaleRate = absScaleRate;\n scale = scaleRate;\n centerX = (pointer.startX + pointer2.startX) / 2;\n centerY = (pointer.startY + pointer2.startY) / 2;\n }\n }\n });\n });\n const rotatable = maxRotateRate > 0;\n const scalable = maxScaleRate > 0;\n if (rotatable && scalable) {\n detail.rotate = rotate;\n detail.scale = scale;\n detail.centerX = centerX;\n detail.centerY = centerY;\n }\n else if (rotatable) {\n detail.action = ACTION_ROTATE;\n detail.rotate = rotate;\n detail.centerX = centerX;\n detail.centerY = centerY;\n }\n else if (scalable) {\n detail.action = ACTION_SCALE;\n detail.scale = scale;\n detail.centerX = centerX;\n detail.centerY = centerY;\n }\n else {\n detail.action = ACTION_NONE;\n }\n }\n else {\n const [pointer] = Array.from($pointers.values());\n Object.assign(detail, pointer);\n }\n // Override the starting coordinate\n $pointers.forEach((pointer) => {\n pointer.startX = pointer.endX;\n pointer.startY = pointer.endY;\n });\n if (detail.action !== ACTION_NONE) {\n this.$emit(EVENT_ACTION, detail, {\n cancelable: false,\n });\n }\n }\n $handlePointerUp(event) {\n const { $action, $pointers } = this;\n if (this.disabled || $action === ACTION_NONE) {\n return;\n }\n if (this.$emit(EVENT_ACTION_END, {\n action: $action,\n relatedEvent: event,\n }) === false) {\n return;\n }\n event.preventDefault();\n if (event.changedTouches) {\n Array.from(event.changedTouches).forEach(({ identifier, }) => {\n $pointers.delete(identifier);\n });\n }\n else {\n const { pointerId = 0 } = event;\n $pointers.delete(pointerId);\n }\n if ($pointers.size === 0) {\n this.style.willChange = '';\n this.$action = ACTION_NONE;\n }\n }\n $handleWheel(event) {\n if (this.disabled) {\n return;\n }\n event.preventDefault();\n // Limit wheel speed to prevent zoom too fast (#21)\n if (this.$wheeling) {\n return;\n }\n this.$wheeling = true;\n // Debounce by 50ms\n setTimeout(() => {\n this.$wheeling = false;\n }, 50);\n const delta = event.deltaY > 0 ? -1 : 1;\n const scale = delta * this.scaleStep;\n this.$emit(EVENT_ACTION, {\n action: ACTION_SCALE,\n scale,\n relatedEvent: event,\n }, {\n cancelable: false,\n });\n }\n /**\n * Changes the current action to a new one.\n * @param {string} action The new action.\n * @returns {CropperCanvas} Returns `this` for chaining.\n */\n $setAction(action) {\n if (isString(action)) {\n this.$action = action;\n }\n return this;\n }\n /**\n * Generates a real canvas element, with the image draw into if there is one.\n * @param {object} [options] The available options.\n * @param {number} [options.width] The width of the canvas.\n * @param {number} [options.height] The height of the canvas.\n * @param {Function} [options.beforeDraw] The function called before drawing the image onto the canvas.\n * @returns {Promise} Returns a promise that resolves to the generated canvas element.\n */\n $toCanvas(options) {\n return new Promise((resolve, reject) => {\n if (!this.isConnected) {\n reject(new Error('The current element is not connected to the DOM.'));\n return;\n }\n const canvas = document.createElement('canvas');\n let width = this.offsetWidth;\n let height = this.offsetHeight;\n let scale = 1;\n if (isPlainObject(options)\n && (isPositiveNumber(options.width) || isPositiveNumber(options.height))) {\n ({ width, height } = getAdjustedSizes({\n aspectRatio: width / height,\n width: options.width,\n height: options.height,\n }));\n scale = width / this.offsetWidth;\n }\n canvas.width = width;\n canvas.height = height;\n const cropperImage = this.querySelector(this.$getTagNameOf(CROPPER_IMAGE));\n if (!cropperImage) {\n resolve(canvas);\n return;\n }\n cropperImage.$ready().then((image) => {\n const context = canvas.getContext('2d');\n if (context) {\n const [a, b, c, d, e, f] = cropperImage.$getTransform();\n let newE = e;\n let newF = f;\n let destWidth = image.naturalWidth;\n let destHeight = image.naturalHeight;\n if (scale !== 1) {\n newE *= scale;\n newF *= scale;\n destWidth *= scale;\n destHeight *= scale;\n }\n const centerX = destWidth / 2;\n const centerY = destHeight / 2;\n context.fillStyle = 'transparent';\n context.fillRect(0, 0, width, height);\n if (isPlainObject(options) && isFunction(options.beforeDraw)) {\n options.beforeDraw.call(this, context, canvas);\n }\n context.save();\n // Move the transform origin to the center of the image.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/transform-origin\n context.translate(centerX, centerY);\n context.transform(a, b, c, d, newE, newF);\n // Reset the transform origin to the top-left of the image.\n context.translate(-centerX, -centerY);\n context.drawImage(image, 0, 0, destWidth, destHeight);\n context.restore();\n }\n resolve(canvas);\n }).catch(reject);\n });\n }\n}\nCropperCanvas.$name = CROPPER_CANVAS;\nCropperCanvas.$version = '2.0.0-beta.4';\n\nexport { CropperCanvas as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_IMAGE, CROPPER_CANVAS, on, EVENT_ACTION_START, EVENT_ACTION_END, EVENT_ACTION, EVENT_LOAD, off, ACTION_TRANSFORM, ACTION_ROTATE, ACTION_SCALE, ACTION_NONE, ACTION_MOVE, CROPPER_SELECTION, once, EVENT_ERROR, isFunction, isNumber, toAngleInRadian, multiplyMatrices, EVENT_TRANSFORM } from '@cropper/utils';\n\nvar style = `:host{display:inline-block}img{display:block;height:100%;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}`;\n\nconst canvasCache = new WeakMap();\nconst NATIVE_ATTRIBUTES = [\n 'alt',\n 'crossorigin',\n 'decoding',\n 'importance',\n 'loading',\n 'referrerpolicy',\n 'sizes',\n 'src',\n 'srcset',\n];\nclass CropperImage extends CropperElement {\n constructor() {\n super(...arguments);\n this.$matrix = [1, 0, 0, 1, 0, 0];\n this.$onLoad = null;\n this.$onCanvasAction = null;\n this.$onCanvasActionEnd = null;\n this.$onCanvasActionStart = null;\n this.$actionStartTarget = null;\n this.$style = style;\n this.$image = new Image();\n this.rotatable = true;\n this.scalable = true;\n this.skewable = true;\n this.slottable = false;\n this.translatable = true;\n }\n set $canvas(element) {\n canvasCache.set(this, element);\n }\n get $canvas() {\n return canvasCache.get(this);\n }\n static get observedAttributes() {\n return super.observedAttributes.concat(NATIVE_ATTRIBUTES, [\n 'rotatable',\n 'scalable',\n 'skewable',\n 'translatable',\n ]);\n }\n attributeChangedCallback(name, oldValue, newValue) {\n if (Object.is(newValue, oldValue)) {\n return;\n }\n super.attributeChangedCallback(name, oldValue, newValue);\n // Inherits the native attributes\n if (NATIVE_ATTRIBUTES.includes(name)) {\n this.$image.setAttribute(name, newValue);\n }\n }\n connectedCallback() {\n super.connectedCallback();\n const { $image } = this;\n const $canvas = this.closest(this.$getTagNameOf(CROPPER_CANVAS));\n if ($canvas) {\n this.$canvas = $canvas;\n this.$setStyles({\n // Make it a block element to avoid side effects (#1074).\n display: 'block',\n position: 'absolute',\n });\n this.$onCanvasActionStart = (event) => {\n var _a, _b;\n this.$actionStartTarget = (_b = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.relatedEvent) === null || _b === void 0 ? void 0 : _b.target;\n };\n this.$onCanvasActionEnd = () => {\n this.$actionStartTarget = null;\n };\n this.$onCanvasAction = this.$handleAction.bind(this);\n on($canvas, EVENT_ACTION_START, this.$onCanvasActionStart);\n on($canvas, EVENT_ACTION_END, this.$onCanvasActionEnd);\n on($canvas, EVENT_ACTION, this.$onCanvasAction);\n }\n this.$onLoad = this.$handleLoad.bind(this);\n on($image, EVENT_LOAD, this.$onLoad);\n this.$getShadowRoot().appendChild($image);\n }\n disconnectedCallback() {\n const { $image, $canvas } = this;\n if ($canvas) {\n if (this.$onCanvasActionStart) {\n off($canvas, EVENT_ACTION_START, this.$onCanvasActionStart);\n this.$onCanvasActionStart = null;\n }\n if (this.$onCanvasActionEnd) {\n off($canvas, EVENT_ACTION_END, this.$onCanvasActionEnd);\n this.$onCanvasActionEnd = null;\n }\n if (this.$onCanvasAction) {\n off($canvas, EVENT_ACTION, this.$onCanvasAction);\n this.$onCanvasAction = null;\n }\n }\n if ($image && this.$onLoad) {\n off($image, EVENT_LOAD, this.$onLoad);\n this.$onLoad = null;\n }\n this.$getShadowRoot().removeChild($image);\n super.disconnectedCallback();\n }\n $handleLoad() {\n const { $image } = this;\n this.$setStyles({\n width: $image.naturalWidth,\n height: $image.naturalHeight,\n });\n if (this.$canvas) {\n this.$center('cover');\n }\n }\n $handleAction(event) {\n if (this.hidden || !(this.rotatable || this.scalable || this.translatable)) {\n return;\n }\n const { $canvas } = this;\n const { detail } = event;\n if (detail) {\n const { relatedEvent } = detail;\n let { action } = detail;\n if (action === ACTION_TRANSFORM && (!this.rotatable || !this.scalable)) {\n if (this.rotatable) {\n action = ACTION_ROTATE;\n }\n else if (this.scalable) {\n action = ACTION_SCALE;\n }\n else {\n action = ACTION_NONE;\n }\n }\n switch (action) {\n case ACTION_MOVE:\n if (this.translatable) {\n const cropperSelectionTagName = this.$getTagNameOf(CROPPER_SELECTION);\n let selection = $canvas.querySelector(cropperSelectionTagName);\n if (selection && selection.multiple && !selection.active) {\n selection = $canvas.querySelector(`${cropperSelectionTagName}[active]`);\n }\n if (!selection || selection.hidden || !selection.movable\n || !(this.$actionStartTarget && selection.contains(this.$actionStartTarget))) {\n this.$move(detail.endX - detail.startX, detail.endY - detail.startY);\n }\n }\n break;\n case ACTION_ROTATE:\n if (this.rotatable) {\n if (relatedEvent) {\n const { x, y } = this.getBoundingClientRect();\n this.$rotate(detail.rotate, relatedEvent.clientX - x, relatedEvent.clientY - y);\n }\n else {\n this.$rotate(detail.rotate);\n }\n }\n break;\n case ACTION_SCALE:\n if (this.scalable) {\n if (relatedEvent) {\n const { x, y } = this.getBoundingClientRect();\n this.$zoom(detail.scale, relatedEvent.clientX - x, relatedEvent.clientY - y);\n }\n else {\n this.$zoom(detail.scale);\n }\n }\n break;\n case ACTION_TRANSFORM:\n if (this.rotatable && this.scalable) {\n const { rotate } = detail;\n let { scale } = detail;\n if (scale < 0) {\n scale = 1 / (1 - scale);\n }\n else {\n scale += 1;\n }\n const cos = Math.cos(rotate);\n const sin = Math.sin(rotate);\n const [scaleX, skewY, skewX, scaleY] = [\n cos * scale,\n sin * scale,\n -sin * scale,\n cos * scale,\n ];\n if (relatedEvent) {\n const clientRect = this.getBoundingClientRect();\n const x = relatedEvent.clientX - clientRect.x;\n const y = relatedEvent.clientY - clientRect.y;\n const [a, b, c, d] = this.$matrix;\n const originX = clientRect.width / 2;\n const originY = clientRect.height / 2;\n const moveX = x - originX;\n const moveY = y - originY;\n const translateX = ((moveX * d) - (c * moveY)) / ((a * d) - (c * b));\n const translateY = (moveY - (b * translateX)) / d;\n /**\n * Equals to\n * this.$rotate(rotate, x, y);\n * this.$scale(scale, x, y);\n */\n this.$transform(scaleX, skewY, skewX, scaleY, translateX * (1 - scaleX) + translateY * skewX, translateY * (1 - scaleY) + translateX * skewY);\n }\n else {\n /**\n * Equals to\n * this.$rotate(rotate);\n * this.$scale(scale);\n */\n this.$transform(scaleX, skewY, skewX, scaleY, 0, 0);\n }\n }\n break;\n }\n }\n }\n /**\n * Defers the callback to execute after successfully loading the image.\n * @param {Function} [callback] The callback to execute after successfully loading the image.\n * @returns {Promise} Returns a promise that resolves to the image element.\n */\n $ready(callback) {\n const { $image } = this;\n const promise = new Promise((resolve, reject) => {\n const error = new Error('Failed to load the image source');\n if ($image.complete) {\n if ($image.naturalWidth > 0 && $image.naturalHeight > 0) {\n resolve($image);\n }\n else {\n reject(error);\n }\n }\n else {\n const onLoad = () => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n off($image, EVENT_ERROR, onError);\n resolve($image);\n };\n const onError = () => {\n off($image, EVENT_LOAD, onLoad);\n reject(error);\n };\n once($image, EVENT_LOAD, onLoad);\n once($image, EVENT_ERROR, onError);\n }\n });\n if (isFunction(callback)) {\n promise.then((image) => {\n callback(image);\n return image;\n });\n }\n return promise;\n }\n /**\n * Aligns the image to the center of its parent element.\n * @param {string} [size] The size of the image.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $center(size) {\n const { parentElement } = this;\n if (!parentElement) {\n return this;\n }\n const container = parentElement.getBoundingClientRect();\n const containerWidth = container.width;\n const containerHeight = container.height;\n const { x, y, width, height, } = this.getBoundingClientRect();\n const startX = x + (width / 2);\n const startY = y + (height / 2);\n const endX = container.x + (containerWidth / 2);\n const endY = container.y + (containerHeight / 2);\n this.$move(endX - startX, endY - startY);\n if (size && (width !== containerWidth || height !== containerHeight)) {\n const scaleX = containerWidth / width;\n const scaleY = containerHeight / height;\n switch (size) {\n case 'cover':\n this.$scale(Math.max(scaleX, scaleY));\n break;\n case 'contain':\n this.$scale(Math.min(scaleX, scaleY));\n break;\n }\n }\n return this;\n }\n /**\n * Moves the image.\n * @param {number} x The moving distance in the horizontal direction.\n * @param {number} [y] The moving distance in the vertical direction.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $move(x, y = x) {\n if (this.translatable && isNumber(x) && isNumber(y)) {\n const [a, b, c, d] = this.$matrix;\n const e = ((x * d) - (c * y)) / ((a * d) - (c * b));\n const f = (y - (b * e)) / d;\n this.$translate(e, f);\n }\n return this;\n }\n /**\n * Moves the image to a specific position.\n * @param {number} x The new position in the horizontal direction.\n * @param {number} [y] The new position in the vertical direction.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $moveTo(x, y = x) {\n if (this.translatable && isNumber(x) && isNumber(y)) {\n const [a, b, c, d] = this.$matrix;\n const e = ((x * d) - (c * y)) / ((a * d) - (c * b));\n const f = (y - (b * e)) / d;\n this.$setTransform(a, b, c, d, e, f);\n }\n return this;\n }\n /**\n * Rotates the image.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/rotate}\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/rotate}\n * @param {number|string} angle The rotation angle (in radians).\n * @param {number} [x] The rotation origin in the horizontal, defaults to the center of the image.\n * @param {number} [y] The rotation origin in the vertical, defaults to the center of the image.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $rotate(angle, x, y) {\n if (this.rotatable) {\n const radian = toAngleInRadian(angle);\n const cos = Math.cos(radian);\n const sin = Math.sin(radian);\n const [scaleX, skewY, skewX, scaleY] = [cos, sin, -sin, cos];\n if (isNumber(x) && isNumber(y)) {\n const [a, b, c, d] = this.$matrix;\n const { width, height } = this.getBoundingClientRect();\n const originX = width / 2;\n const originY = height / 2;\n const moveX = x - originX;\n const moveY = y - originY;\n const translateX = ((moveX * d) - (c * moveY)) / ((a * d) - (c * b));\n const translateY = (moveY - (b * translateX)) / d;\n /**\n * Equals to\n * this.$translate(translateX, translateX);\n * this.$rotate(angle);\n * this.$translate(-translateX, -translateX);\n */\n this.$transform(scaleX, skewY, skewX, scaleY, translateX * (1 - scaleX) - translateY * skewX, translateY * (1 - scaleY) - translateX * skewY);\n }\n else {\n this.$transform(scaleX, skewY, skewX, scaleY, 0, 0);\n }\n }\n return this;\n }\n /**\n * Zooms the image.\n * @param {number} scale The zoom factor. Positive numbers for zooming in, and negative numbers for zooming out.\n * @param {number} [x] The zoom origin in the horizontal, defaults to the center of the image.\n * @param {number} [y] The zoom origin in the vertical, defaults to the center of the image.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $zoom(scale, x, y) {\n if (!this.scalable || scale === 0) {\n return this;\n }\n if (scale < 0) {\n scale = 1 / (1 - scale);\n }\n else {\n scale += 1;\n }\n if (isNumber(x) && isNumber(y)) {\n const [a, b, c, d] = this.$matrix;\n const { width, height } = this.getBoundingClientRect();\n const originX = width / 2;\n const originY = height / 2;\n const moveX = x - originX;\n const moveY = y - originY;\n const translateX = ((moveX * d) - (c * moveY)) / ((a * d) - (c * b));\n const translateY = (moveY - (b * translateX)) / d;\n /**\n * Equals to\n * this.$translate(translateX, translateX);\n * this.$scale(scale);\n * this.$translate(-translateX, -translateX);\n */\n this.$transform(scale, 0, 0, scale, translateX * (1 - scale), translateY * (1 - scale));\n }\n else {\n this.$scale(scale);\n }\n return this;\n }\n /**\n * Scales the image.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/scale}\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/scale}\n * @param {number} x The scaling factor in the horizontal direction.\n * @param {number} [y] The scaling factor in the vertical direction.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $scale(x, y = x) {\n if (this.scalable) {\n this.$transform(x, 0, 0, y, 0, 0);\n }\n return this;\n }\n /**\n * Skews the image.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skew}\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/transform}\n * @param {number|string} x The skewing angle in the horizontal direction.\n * @param {number|string} [y] The skewing angle in the vertical direction.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $skew(x, y = 0) {\n if (this.skewable) {\n const radianX = toAngleInRadian(x);\n const radianY = toAngleInRadian(y);\n this.$transform(1, Math.tan(radianY), Math.tan(radianX), 1, 0, 0);\n }\n return this;\n }\n /**\n * Translates the image.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/translate}\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/translate}\n * @param {number} x The translating distance in the horizontal direction.\n * @param {number} [y] The translating distance in the vertical direction.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $translate(x, y = x) {\n if (this.translatable && isNumber(x) && isNumber(y)) {\n this.$transform(1, 0, 0, 1, x, y);\n }\n return this;\n }\n /**\n * Transforms the image.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix}\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/transform}\n * @param {number} a The scaling factor in the horizontal direction.\n * @param {number} b The skewing angle in the vertical direction.\n * @param {number} c The skewing angle in the horizontal direction.\n * @param {number} d The scaling factor in the vertical direction.\n * @param {number} e The translating distance in the horizontal direction.\n * @param {number} f The translating distance in the vertical direction.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $transform(a, b, c, d, e, f) {\n if (isNumber(a)\n && isNumber(b)\n && isNumber(c)\n && isNumber(d)\n && isNumber(e)\n && isNumber(f)) {\n return this.$setTransform(multiplyMatrices(this.$matrix, [a, b, c, d, e, f]));\n }\n return this;\n }\n /**\n * Resets (overrides) the current transform to the specific identity matrix.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setTransform}\n * @param {number|Array} a The scaling factor in the horizontal direction.\n * @param {number} b The skewing angle in the vertical direction.\n * @param {number} c The skewing angle in the horizontal direction.\n * @param {number} d The scaling factor in the vertical direction.\n * @param {number} e The translating distance in the horizontal direction.\n * @param {number} f The translating distance in the vertical direction.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $setTransform(a, b, c, d, e, f) {\n if (this.rotatable || this.scalable || this.skewable || this.translatable) {\n if (Array.isArray(a)) {\n [a, b, c, d, e, f] = a;\n }\n if (isNumber(a)\n && isNumber(b)\n && isNumber(c)\n && isNumber(d)\n && isNumber(e)\n && isNumber(f)) {\n const newMatrix = [a, b, c, d, e, f];\n if (this.$emit(EVENT_TRANSFORM, {\n matrix: newMatrix,\n oldMatrix: this.$matrix,\n }) === false) {\n return this;\n }\n this.$matrix = newMatrix;\n this.style.transform = `matrix(${newMatrix.join(', ')})`;\n }\n }\n return this;\n }\n /**\n * Retrieves the current transformation matrix being applied to the element.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getTransform}\n * @returns {Array} Returns the readonly transformation matrix.\n */\n $getTransform() {\n return this.$matrix.slice();\n }\n /**\n * Resets the current transform to the initial identity matrix.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/resetTransform}\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $resetTransform() {\n return this.$setTransform([1, 0, 0, 1, 0, 0]);\n }\n}\nCropperImage.$name = CROPPER_IMAGE;\nCropperImage.$version = '2.0.0-beta.4';\n\nexport { CropperImage as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_SHADE, CROPPER_CANVAS, CROPPER_SELECTION, ACTION_SELECT, on, EVENT_ACTION_START, EVENT_ACTION_END, EVENT_CHANGE, off, isNumber, WINDOW } from '@cropper/utils';\n\nvar style = `:host{display:block;height:0;left:0;outline:var(--theme-color) solid 1px;position:relative;top:0;width:0}:host([transparent]){outline-color:transparent}`;\n\nconst canvasCache = new WeakMap();\nclass CropperShade extends CropperElement {\n constructor() {\n super(...arguments);\n this.$onCanvasChange = null;\n this.$onCanvasActionEnd = null;\n this.$onCanvasActionStart = null;\n this.$style = style;\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n this.slottable = false;\n this.themeColor = 'rgba(0, 0, 0, 0.65)';\n }\n set $canvas(element) {\n canvasCache.set(this, element);\n }\n get $canvas() {\n return canvasCache.get(this);\n }\n static get observedAttributes() {\n return super.observedAttributes.concat([\n 'height',\n 'width',\n 'x',\n 'y',\n ]);\n }\n connectedCallback() {\n super.connectedCallback();\n const $canvas = this.closest(this.$getTagNameOf(CROPPER_CANVAS));\n if ($canvas) {\n this.$canvas = $canvas;\n this.style.position = 'absolute';\n const $selection = $canvas.querySelector(this.$getTagNameOf(CROPPER_SELECTION));\n if ($selection) {\n this.$onCanvasActionStart = (event) => {\n if ($selection.hidden && event.detail.action === ACTION_SELECT) {\n this.hidden = false;\n }\n };\n this.$onCanvasActionEnd = (event) => {\n if ($selection.hidden && event.detail.action === ACTION_SELECT) {\n this.hidden = true;\n }\n };\n this.$onCanvasChange = (event) => {\n const { x, y, width, height, } = event.detail;\n this.$change(x, y, width, height);\n if ($selection.hidden || (x === 0 && y === 0 && width === 0 && height === 0)) {\n this.hidden = true;\n }\n };\n on($canvas, EVENT_ACTION_START, this.$onCanvasActionStart);\n on($canvas, EVENT_ACTION_END, this.$onCanvasActionEnd);\n on($canvas, EVENT_CHANGE, this.$onCanvasChange);\n }\n }\n this.$render();\n }\n disconnectedCallback() {\n const { $canvas } = this;\n if ($canvas) {\n if (this.$onCanvasActionStart) {\n off($canvas, EVENT_ACTION_START, this.$onCanvasActionStart);\n this.$onCanvasActionStart = null;\n }\n if (this.$onCanvasActionEnd) {\n off($canvas, EVENT_ACTION_END, this.$onCanvasActionEnd);\n this.$onCanvasActionEnd = null;\n }\n if (this.$onCanvasChange) {\n off($canvas, EVENT_CHANGE, this.$onCanvasChange);\n this.$onCanvasChange = null;\n }\n }\n super.disconnectedCallback();\n }\n /**\n * Changes the position and/or size of the shade.\n * @param {number} x The new position in the horizontal direction.\n * @param {number} y The new position in the vertical direction.\n * @param {number} [width] The new width.\n * @param {number} [height] The new height.\n * @returns {CropperShade} Returns `this` for chaining.\n */\n $change(x, y, width = this.width, height = this.height) {\n if (!isNumber(x)\n || !isNumber(y)\n || !isNumber(width)\n || !isNumber(height)\n || (x === this.x && y === this.y && width === this.width && height === this.height)) {\n return this;\n }\n if (this.hidden) {\n this.hidden = false;\n }\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n return this.$render();\n }\n /**\n * Resets the shade to its initial position and size.\n * @returns {CropperShade} Returns `this` for chaining.\n */\n $reset() {\n return this.$change(0, 0, 0, 0);\n }\n /**\n * Refreshes the position or size of the shade.\n * @returns {CropperShade} Returns `this` for chaining.\n */\n $render() {\n return this.$setStyles({\n transform: `translate(${this.x}px, ${this.y}px)`,\n width: this.width,\n height: this.height,\n outlineWidth: WINDOW.innerWidth,\n });\n }\n}\nCropperShade.$name = CROPPER_SHADE;\nCropperShade.$version = '2.0.0-beta.4';\n\nexport { CropperShade as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_HANDLE, ACTION_NONE } from '@cropper/utils';\n\nvar style = `:host{background-color:var(--theme-color);display:block}:host([action=move]),:host([action=select]){height:100%;left:0;position:absolute;top:0;width:100%}:host([action=move]){cursor:move}:host([action=select]){cursor:crosshair}:host([action$=-resize]){background-color:transparent;height:15px;position:absolute;width:15px}:host([action$=-resize]):after{background-color:var(--theme-color);content:\"\";display:block;height:5px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:5px}:host([action=n-resize]),:host([action=s-resize]){cursor:ns-resize;left:50%;transform:translateX(-50%);width:100%}:host([action=n-resize]){top:-8px}:host([action=s-resize]){bottom:-8px}:host([action=e-resize]),:host([action=w-resize]){cursor:ew-resize;height:100%;top:50%;transform:translateY(-50%)}:host([action=e-resize]){right:-8px}:host([action=w-resize]){left:-8px}:host([action=ne-resize]){cursor:nesw-resize;right:-8px;top:-8px}:host([action=nw-resize]){cursor:nwse-resize;left:-8px;top:-8px}:host([action=se-resize]){bottom:-8px;cursor:nwse-resize;right:-8px}:host([action=se-resize]):after{height:15px;width:15px}@media (pointer:coarse){:host([action=se-resize]):after{height:10px;width:10px}}@media (pointer:fine){:host([action=se-resize]):after{height:5px;width:5px}}:host([action=sw-resize]){bottom:-8px;cursor:nesw-resize;left:-8px}:host([plain]){background-color:transparent}`;\n\nclass CropperHandle extends CropperElement {\n constructor() {\n super(...arguments);\n this.$onCanvasCropEnd = null;\n this.$onCanvasCropStart = null;\n this.$style = style;\n this.action = ACTION_NONE;\n this.plain = false;\n this.slottable = false;\n this.themeColor = 'rgba(51, 153, 255, 0.5)';\n }\n static get observedAttributes() {\n return super.observedAttributes.concat([\n 'action',\n 'plain',\n ]);\n }\n}\nCropperHandle.$name = CROPPER_HANDLE;\nCropperHandle.$version = '2.0.0-beta.4';\n\nexport { CropperHandle as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_SELECTION, EVENT_CHANGE, on, EVENT_KEYDOWN, off, isPositiveNumber, CROPPER_CANVAS, getAdjustedSizes, EVENT_ACTION_START, EVENT_ACTION_END, EVENT_ACTION, ACTION_SELECT, ACTION_SCALE, getOffset, ACTION_MOVE, ACTION_RESIZE_SOUTHEAST, ACTION_RESIZE_SOUTHWEST, ACTION_RESIZE_NORTHWEST, ACTION_RESIZE_NORTHEAST, isNumber, isPlainObject, CROPPER_IMAGE, isFunction, ACTION_RESIZE_WEST, ACTION_RESIZE_EAST, ACTION_RESIZE_SOUTH, ACTION_RESIZE_NORTH } from '@cropper/utils';\n\nvar style = `:host{display:block;left:0;position:relative;right:0}:host([outlined]){outline:1px solid var(--theme-color)}:host([multiple]){outline:1px dashed hsla(0,0%,100%,.5)}:host([multiple]):after{bottom:0;content:\"\";cursor:pointer;display:block;left:0;position:absolute;right:0;top:0}:host([multiple][active]){outline-color:var(--theme-color);z-index:1}:host([multiple])>*{visibility:hidden}:host([multiple][active])>*{visibility:visible}:host([multiple][active]):after{display:none}`;\n\nconst canvasCache = new WeakMap();\nclass CropperSelection extends CropperElement {\n constructor() {\n super(...arguments);\n this.$onCanvasAction = null;\n this.$onCanvasActionStart = null;\n this.$onCanvasActionEnd = null;\n this.$onDocumentKeyDown = null;\n this.$action = '';\n this.$actionStartTarget = null;\n this.$style = style;\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n this.aspectRatio = NaN;\n this.initialAspectRatio = NaN;\n this.initialCoverage = NaN;\n this.active = false;\n this.movable = false;\n this.resizable = false;\n this.zoomable = false;\n this.multiple = false;\n this.keyboard = false;\n this.outlined = false;\n this.precise = false;\n }\n set $canvas(element) {\n canvasCache.set(this, element);\n }\n get $canvas() {\n return canvasCache.get(this);\n }\n static get observedAttributes() {\n return super.observedAttributes.concat([\n 'active',\n 'aspect-ratio',\n 'height',\n 'initial-aspect-ratio',\n 'initial-coverage',\n 'keyboard',\n 'movable',\n 'multiple',\n 'outlined',\n 'precise',\n 'resizable',\n 'width',\n 'x',\n 'y',\n 'zoomable',\n ]);\n }\n $propertyChangedCallback(name, oldValue, newValue) {\n if (Object.is(newValue, oldValue)) {\n return;\n }\n super.$propertyChangedCallback(name, oldValue, newValue);\n switch (name) {\n case 'aspectRatio':\n if (!isPositiveNumber(newValue)) {\n this.aspectRatio = NaN;\n }\n break;\n case 'initialAspectRatio':\n if (!isPositiveNumber(newValue)) {\n this.initialAspectRatio = NaN;\n }\n break;\n case 'initialCoverage':\n if (!isPositiveNumber(newValue) || newValue > 1) {\n this.initialCoverage = NaN;\n }\n break;\n case 'keyboard':\n this.$nextTick(() => {\n if (this.$canvas) {\n if (newValue) {\n if (!this.$onDocumentKeyDown) {\n this.$onDocumentKeyDown = this.$handleKeyDown.bind(this);\n on(this.ownerDocument, EVENT_KEYDOWN, this.$onDocumentKeyDown);\n }\n }\n else if (this.$onDocumentKeyDown) {\n off(this.ownerDocument, EVENT_KEYDOWN, this.$onDocumentKeyDown);\n this.$onDocumentKeyDown = null;\n }\n }\n });\n break;\n case 'multiple':\n this.$nextTick(() => {\n if (this.$canvas) {\n const selections = this.$getSelections();\n if (newValue) {\n selections.forEach((selection) => {\n selection.active = false;\n });\n this.active = true;\n this.$emit(EVENT_CHANGE, {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height,\n });\n }\n else {\n this.active = false;\n selections.slice(1).forEach((selection) => {\n this.$removeSelection(selection);\n });\n }\n }\n });\n break;\n }\n }\n connectedCallback() {\n super.connectedCallback();\n const $canvas = this.closest(this.$getTagNameOf(CROPPER_CANVAS));\n if ($canvas) {\n this.$canvas = $canvas;\n this.$setStyles({\n position: 'absolute',\n transform: `translate(${this.x}px, ${this.y}px)`,\n });\n if (!this.hidden) {\n this.$render();\n }\n const { initialCoverage, parentElement } = this;\n if (isPositiveNumber(initialCoverage) && parentElement) {\n const aspectRatio = this.aspectRatio || this.initialAspectRatio;\n const { offsetWidth, offsetHeight } = parentElement;\n let width = offsetWidth * initialCoverage;\n let height = offsetHeight * initialCoverage;\n if (isPositiveNumber(aspectRatio)) {\n ({ width, height } = getAdjustedSizes({ aspectRatio, width, height }));\n }\n this.$change(this.x, this.y, width, height);\n this.$center();\n }\n this.$onCanvasActionStart = this.$handleActionStart.bind(this);\n this.$onCanvasActionEnd = this.$handleActionEnd.bind(this);\n this.$onCanvasAction = this.$handleAction.bind(this);\n on($canvas, EVENT_ACTION_START, this.$onCanvasActionStart);\n on($canvas, EVENT_ACTION_END, this.$onCanvasActionStart);\n on($canvas, EVENT_ACTION, this.$onCanvasAction);\n }\n else {\n this.$render();\n }\n }\n disconnectedCallback() {\n const { $canvas } = this;\n if ($canvas) {\n if (this.$onCanvasActionStart) {\n off($canvas, EVENT_ACTION_START, this.$onCanvasActionStart);\n this.$onCanvasActionStart = null;\n }\n if (this.$onCanvasActionEnd) {\n off($canvas, EVENT_ACTION_END, this.$onCanvasActionEnd);\n this.$onCanvasActionEnd = null;\n }\n if (this.$onCanvasAction) {\n off($canvas, EVENT_ACTION, this.$onCanvasAction);\n this.$onCanvasAction = null;\n }\n }\n super.disconnectedCallback();\n }\n $getSelections() {\n let selections = [];\n if (this.parentElement) {\n selections = Array.from(this.parentElement.querySelectorAll(this.$getTagNameOf(CROPPER_SELECTION)));\n }\n return selections;\n }\n $createSelection() {\n const newSelection = this.cloneNode(true);\n if (this.hasAttribute('id')) {\n newSelection.removeAttribute('id');\n }\n this.active = false;\n if (this.parentElement) {\n this.parentElement.insertBefore(newSelection, this.nextSibling);\n }\n return newSelection;\n }\n $removeSelection(selection = this) {\n if (this.parentElement) {\n const selections = this.$getSelections();\n if (selections.length > 1) {\n const index = selections.indexOf(selection);\n const activeSelection = selections[index + 1] || selections[index - 1];\n if (activeSelection) {\n selection.active = false;\n this.parentElement.removeChild(selection);\n activeSelection.active = true;\n activeSelection.$emit(EVENT_CHANGE, {\n x: activeSelection.x,\n y: activeSelection.y,\n width: activeSelection.width,\n height: activeSelection.height,\n });\n }\n }\n else {\n this.$reset();\n this.hidden = true;\n }\n }\n }\n $handleActionStart(event) {\n var _a, _b;\n const relatedTarget = (_b = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.relatedEvent) === null || _b === void 0 ? void 0 : _b.target;\n this.$action = '';\n this.$actionStartTarget = relatedTarget;\n if (!this.hidden\n && this.multiple\n && !this.active\n && relatedTarget === this\n && this.parentElement) {\n this.$getSelections().forEach((selection) => {\n selection.active = false;\n });\n this.active = true;\n this.$emit(EVENT_CHANGE, {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height,\n });\n }\n }\n $handleAction(event) {\n const { currentTarget, detail } = event;\n if (currentTarget && detail) {\n const { relatedEvent } = detail;\n let { action } = detail;\n // Switching to another selection\n if (!action && this.multiple) {\n // Get the `action` property from the focusing in selection\n action = this.$action || (relatedEvent === null || relatedEvent === void 0 ? void 0 : relatedEvent.target.action);\n this.$action = action;\n }\n if (!action\n || (this.hidden && action !== ACTION_SELECT)\n || (this.multiple && !this.active && action !== ACTION_SCALE)) {\n return;\n }\n const moveX = detail.endX - detail.startX;\n const moveY = detail.endY - detail.startY;\n const { width, height } = this;\n let { aspectRatio } = this;\n // Locking aspect ratio by holding shift key\n if (!isPositiveNumber(aspectRatio) && event.shiftKey) {\n aspectRatio = isPositiveNumber(width) && isPositiveNumber(height) ? width / height : 1;\n }\n switch (action) {\n case ACTION_SELECT: {\n const { $canvas } = this;\n const offset = getOffset(currentTarget);\n (this.multiple && !this.hidden ? this.$createSelection() : this).$change(detail.startX - offset.left, detail.startY - offset.top, moveX, moveY, aspectRatio);\n action = ACTION_RESIZE_SOUTHEAST;\n if (moveX < 0) {\n if (moveY > 0) {\n action = ACTION_RESIZE_SOUTHWEST;\n }\n else if (moveY < 0) {\n action = ACTION_RESIZE_NORTHWEST;\n }\n }\n else if (moveX > 0) {\n if (moveY < 0) {\n action = ACTION_RESIZE_NORTHEAST;\n }\n }\n if ($canvas) {\n $canvas.$action = action;\n }\n break;\n }\n case ACTION_MOVE:\n if (this.movable\n && (this.$actionStartTarget && this.contains(this.$actionStartTarget))) {\n this.$move(moveX, moveY);\n }\n break;\n case ACTION_SCALE:\n if (relatedEvent && this.zoomable) {\n const offset = getOffset(currentTarget);\n this.$zoom(detail.scale, relatedEvent.pageX - offset.left, relatedEvent.pageY - offset.top);\n }\n break;\n default:\n this.$resize(action, moveX, moveY, aspectRatio);\n }\n }\n }\n $handleActionEnd() {\n this.$action = '';\n this.$actionStartTarget = null;\n }\n $handleKeyDown(event) {\n if (this.hidden\n || !this.keyboard\n || (this.multiple && !this.active)\n || event.defaultPrevented) {\n return;\n }\n switch (event.key) {\n case 'Backspace':\n if (event.metaKey) {\n event.preventDefault();\n this.$removeSelection();\n }\n break;\n case 'Delete':\n event.preventDefault();\n this.$removeSelection();\n break;\n // Move to the left\n case 'ArrowLeft':\n event.preventDefault();\n this.$move(-1, 0);\n break;\n // Move to the right\n case 'ArrowRight':\n event.preventDefault();\n this.$move(1, 0);\n break;\n // Move to the top\n case 'ArrowUp':\n event.preventDefault();\n this.$move(0, -1);\n break;\n // Move to the bottom\n case 'ArrowDown':\n event.preventDefault();\n this.$move(0, 1);\n break;\n case '+':\n event.preventDefault();\n this.$zoom(0.1);\n break;\n case '-':\n event.preventDefault();\n this.$zoom(-0.1);\n break;\n }\n }\n /**\n * Aligns the selection to the center of its parent element.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $center() {\n const { parentElement } = this;\n if (!parentElement) {\n return this;\n }\n const x = (parentElement.offsetWidth - this.width) / 2;\n const y = (parentElement.offsetHeight - this.height) / 2;\n return this.$change(x, y);\n }\n /**\n * Moves the selection.\n * @param {number} x The moving distance in the horizontal direction.\n * @param {number} [y] The moving distance in the vertical direction.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $move(x, y = x) {\n return this.$moveTo(this.x + x, this.y + y);\n }\n /**\n * Moves the selection to a specific position.\n * @param {number} x The new position in the horizontal direction.\n * @param {number} [y] The new position in the vertical direction.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $moveTo(x, y = x) {\n if (!this.movable) {\n return this;\n }\n return this.$change(x, y);\n }\n /**\n * Adjusts the size the selection on a specific side or corner.\n * @param {string} action Indicates the side or corner to resize.\n * @param {number} [offsetX] The horizontal offset of the specific side or corner.\n * @param {number} [offsetY] The vertical offset of the specific side or corner.\n * @param {number} [aspectRatio] The aspect ratio for computing the new size if it is necessary.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $resize(action, offsetX = 0, offsetY = 0, aspectRatio = this.aspectRatio) {\n if (!this.resizable) {\n return this;\n }\n const hasValidAspectRatio = isPositiveNumber(aspectRatio);\n const { $canvas } = this;\n let { x, y, width, height, } = this;\n switch (action) {\n case ACTION_RESIZE_NORTH:\n y += offsetY;\n height -= offsetY;\n if (height < 0) {\n action = ACTION_RESIZE_SOUTH;\n height = -height;\n y -= height;\n }\n if (hasValidAspectRatio) {\n offsetX = offsetY * aspectRatio;\n x += offsetX / 2;\n width -= offsetX;\n if (width < 0) {\n width = -width;\n x -= width;\n }\n }\n break;\n case ACTION_RESIZE_EAST:\n width += offsetX;\n if (width < 0) {\n action = ACTION_RESIZE_WEST;\n width = -width;\n x -= width;\n }\n if (hasValidAspectRatio) {\n offsetY = offsetX / aspectRatio;\n y -= offsetY / 2;\n height += offsetY;\n if (height < 0) {\n height = -height;\n y -= height;\n }\n }\n break;\n case ACTION_RESIZE_SOUTH:\n height += offsetY;\n if (height < 0) {\n action = ACTION_RESIZE_NORTH;\n height = -height;\n y -= height;\n }\n if (hasValidAspectRatio) {\n offsetX = offsetY * aspectRatio;\n x -= offsetX / 2;\n width += offsetX;\n if (width < 0) {\n width = -width;\n x -= width;\n }\n }\n break;\n case ACTION_RESIZE_WEST:\n x += offsetX;\n width -= offsetX;\n if (width < 0) {\n action = ACTION_RESIZE_EAST;\n width = -width;\n x -= width;\n }\n if (hasValidAspectRatio) {\n offsetY = offsetX / aspectRatio;\n y += offsetY / 2;\n height -= offsetY;\n if (height < 0) {\n height = -height;\n y -= height;\n }\n }\n break;\n case ACTION_RESIZE_NORTHEAST:\n if (hasValidAspectRatio) {\n offsetY = -offsetX / aspectRatio;\n }\n y += offsetY;\n height -= offsetY;\n width += offsetX;\n if (width < 0 && height < 0) {\n action = ACTION_RESIZE_SOUTHWEST;\n width = -width;\n height = -height;\n x -= width;\n y -= height;\n }\n else if (width < 0) {\n action = ACTION_RESIZE_NORTHWEST;\n width = -width;\n x -= width;\n }\n else if (height < 0) {\n action = ACTION_RESIZE_SOUTHEAST;\n height = -height;\n y -= height;\n }\n break;\n case ACTION_RESIZE_NORTHWEST:\n if (hasValidAspectRatio) {\n offsetY = offsetX / aspectRatio;\n }\n x += offsetX;\n y += offsetY;\n width -= offsetX;\n height -= offsetY;\n if (width < 0 && height < 0) {\n action = ACTION_RESIZE_SOUTHEAST;\n width = -width;\n height = -height;\n x -= width;\n y -= height;\n }\n else if (width < 0) {\n action = ACTION_RESIZE_NORTHEAST;\n width = -width;\n x -= width;\n }\n else if (height < 0) {\n action = ACTION_RESIZE_SOUTHWEST;\n height = -height;\n y -= height;\n }\n break;\n case ACTION_RESIZE_SOUTHEAST:\n if (hasValidAspectRatio) {\n offsetY = offsetX / aspectRatio;\n }\n width += offsetX;\n height += offsetY;\n if (width < 0 && height < 0) {\n action = ACTION_RESIZE_NORTHWEST;\n width = -width;\n height = -height;\n x -= width;\n y -= height;\n }\n else if (width < 0) {\n action = ACTION_RESIZE_SOUTHWEST;\n width = -width;\n x -= width;\n }\n else if (height < 0) {\n action = ACTION_RESIZE_NORTHEAST;\n height = -height;\n y -= height;\n }\n break;\n case ACTION_RESIZE_SOUTHWEST:\n if (hasValidAspectRatio) {\n offsetY = -offsetX / aspectRatio;\n }\n x += offsetX;\n width -= offsetX;\n height += offsetY;\n if (width < 0 && height < 0) {\n action = ACTION_RESIZE_NORTHEAST;\n width = -width;\n height = -height;\n x -= width;\n y -= height;\n }\n else if (width < 0) {\n action = ACTION_RESIZE_SOUTHEAST;\n width = -width;\n x -= width;\n }\n else if (height < 0) {\n action = ACTION_RESIZE_NORTHWEST;\n height = -height;\n y -= height;\n }\n break;\n }\n if ($canvas) {\n $canvas.$setAction(action);\n }\n return this.$change(x, y, width, height);\n }\n /**\n * Zooms the selection.\n * @param {number} scale The zoom factor. Positive numbers for zooming in, and negative numbers for zooming out.\n * @param {number} [x] The zoom origin in the horizontal, defaults to the center of the selection.\n * @param {number} [y] The zoom origin in the vertical, defaults to the center of the selection.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $zoom(scale, x, y) {\n if (!this.zoomable || scale === 0) {\n return this;\n }\n if (scale < 0) {\n scale = 1 / (1 - scale);\n }\n else {\n scale += 1;\n }\n const { width, height } = this;\n const newWidth = width * scale;\n const newHeight = height * scale;\n let newX = this.x;\n let newY = this.y;\n if (isNumber(x) && isNumber(y)) {\n newX -= (newWidth - width) * ((x - this.x) / width);\n newY -= (newHeight - height) * ((y - this.y) / height);\n }\n else {\n // Zoom from the center of the selection\n newX -= (newWidth - width) / 2;\n newY -= (newHeight - height) / 2;\n }\n return this.$change(newX, newY, newWidth, newHeight);\n }\n /**\n * Changes the position and/or size of the selection.\n * @param {number} x The new position in the horizontal direction.\n * @param {number} y The new position in the vertical direction.\n * @param {number} [width] The new width.\n * @param {number} [height] The new height.\n * @param {number} [aspectRatio] The new aspect ratio for this change only.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $change(x, y, width = this.width, height = this.height, aspectRatio = this.aspectRatio) {\n if (!isNumber(x) || !isNumber(y) || !isNumber(width) || !isNumber(height)) {\n return this;\n }\n if (!this.precise) {\n x = Math.round(x);\n y = Math.round(y);\n width = Math.round(width);\n height = Math.round(height);\n }\n if (x === this.x && y === this.y && width === this.width && height === this.height) {\n return this;\n }\n if (this.hidden) {\n this.hidden = false;\n }\n if (isPositiveNumber(aspectRatio)) {\n ({ width, height } = getAdjustedSizes({ aspectRatio, width, height }, 'cover'));\n }\n if (this.$emit(EVENT_CHANGE, {\n x,\n y,\n width,\n height,\n }) === false) {\n return this;\n }\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n return this.$render();\n }\n /**\n * Resets the selection to its initial position and size.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $reset() {\n return this.$change(0, 0, 0, 0);\n }\n /**\n * Refreshes the position or size of the selection.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $render() {\n return this.$setStyles({\n transform: `translate(${this.x}px, ${this.y}px)`,\n width: this.width,\n height: this.height,\n });\n }\n /**\n * Generates a real canvas element, with the image (selected area only) draw into if there is one.\n * @param {object} [options] The available options.\n * @param {number} [options.width] The width of the canvas.\n * @param {number} [options.height] The height of the canvas.\n * @param {Function} [options.beforeDraw] The function called before drawing the image onto the canvas.\n * @returns {Promise} Returns a promise that resolves to the generated canvas element.\n */\n $toCanvas(options) {\n return new Promise((resolve, reject) => {\n if (!this.isConnected) {\n reject(new Error('The current element is not connected to the DOM.'));\n return;\n }\n const canvas = document.createElement('canvas');\n let { width, height } = this;\n let scale = 1;\n if (isPlainObject(options)\n && (isPositiveNumber(options.width) || isPositiveNumber(options.height))) {\n ({ width, height } = getAdjustedSizes({\n aspectRatio: width / height,\n width: options.width,\n height: options.height,\n }));\n scale = width / this.width;\n }\n canvas.width = width;\n canvas.height = height;\n if (!this.$canvas) {\n resolve(canvas);\n return;\n }\n const cropperImage = this.$canvas.querySelector(this.$getTagNameOf(CROPPER_IMAGE));\n if (!cropperImage) {\n resolve(canvas);\n return;\n }\n cropperImage.$ready().then((image) => {\n const context = canvas.getContext('2d');\n if (context) {\n const [a, b, c, d, e, f] = cropperImage.$getTransform();\n const offsetX = -this.x;\n const offsetY = -this.y;\n const translateX = ((offsetX * d) - (c * offsetY)) / ((a * d) - (c * b));\n const translateY = (offsetY - (b * translateX)) / d;\n let newE = a * translateX + c * translateY + e;\n let newF = b * translateX + d * translateY + f;\n let destWidth = image.naturalWidth;\n let destHeight = image.naturalHeight;\n if (scale !== 1) {\n newE *= scale;\n newF *= scale;\n destWidth *= scale;\n destHeight *= scale;\n }\n const centerX = destWidth / 2;\n const centerY = destHeight / 2;\n context.fillStyle = 'transparent';\n context.fillRect(0, 0, width, height);\n if (isPlainObject(options) && isFunction(options.beforeDraw)) {\n options.beforeDraw.call(this, context, canvas);\n }\n context.save();\n // Move the transform origin to the center of the image.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/transform-origin\n context.translate(centerX, centerY);\n context.transform(a, b, c, d, newE, newF);\n // Move the transform origin to the top-left of the image.\n context.translate(-centerX, -centerY);\n context.drawImage(image, 0, 0, destWidth, destHeight);\n context.restore();\n }\n resolve(canvas);\n }).catch(reject);\n });\n }\n}\nCropperSelection.$name = CROPPER_SELECTION;\nCropperSelection.$version = '2.0.0-beta.4';\n\nexport { CropperSelection as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_GIRD } from '@cropper/utils';\n\nvar style = `:host{display:flex;flex-direction:column;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}:host([bordered]){border:1px dashed var(--theme-color)}:host([covered]){bottom:0;left:0;position:absolute;right:0;top:0}:host>span{display:flex;flex:1}:host>span+span{border-top:1px dashed var(--theme-color)}:host>span>span{flex:1}:host>span>span+span{border-left:1px dashed var(--theme-color)}`;\n\nclass CropperGrid extends CropperElement {\n constructor() {\n super(...arguments);\n this.$style = style;\n this.bordered = false;\n this.columns = 3;\n this.covered = false;\n this.rows = 3;\n this.slottable = false;\n this.themeColor = 'rgba(238, 238, 238, 0.5)';\n }\n static get observedAttributes() {\n return super.observedAttributes.concat([\n 'bordered',\n 'columns',\n 'covered',\n 'rows',\n ]);\n }\n $propertyChangedCallback(name, oldValue, newValue) {\n if (Object.is(newValue, oldValue)) {\n return;\n }\n super.$propertyChangedCallback(name, oldValue, newValue);\n if (name === 'rows' || name === 'columns') {\n this.$render();\n }\n }\n connectedCallback() {\n super.connectedCallback();\n this.$render();\n }\n $render() {\n const shadow = this.$getShadowRoot();\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < this.rows; i += 1) {\n const row = document.createElement('span');\n row.setAttribute('role', 'row');\n for (let j = 0; j < this.columns; j += 1) {\n const column = document.createElement('span');\n column.setAttribute('role', 'gridcell');\n row.appendChild(column);\n }\n fragment.appendChild(row);\n }\n if (shadow) {\n shadow.innerHTML = '';\n shadow.appendChild(fragment);\n }\n }\n}\nCropperGrid.$name = CROPPER_GIRD;\nCropperGrid.$version = '2.0.0-beta.4';\n\nexport { CropperGrid as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_CROSSHAIR } from '@cropper/utils';\n\nvar style = `:host{display:inline-block;height:1em;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1em}:host:after,:host:before{background-color:var(--theme-color);content:\"\";display:block;position:absolute}:host:before{height:1px;left:0;top:50%;transform:translateY(-50%);width:100%}:host:after{height:100%;left:50%;top:0;transform:translateX(-50%);width:1px}:host([centered]){left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}`;\n\nclass CropperCrosshair extends CropperElement {\n constructor() {\n super(...arguments);\n this.$style = style;\n this.centered = false;\n this.slottable = false;\n this.themeColor = 'rgba(238, 238, 238, 0.5)';\n }\n static get observedAttributes() {\n return super.observedAttributes.concat([\n 'centered',\n ]);\n }\n}\nCropperCrosshair.$name = CROPPER_CROSSHAIR;\nCropperCrosshair.$version = '2.0.0-beta.4';\n\nexport { CropperCrosshair as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_VIEWER, CROPPER_SELECTION, isElement, on, EVENT_CHANGE, CROPPER_CANVAS, CROPPER_IMAGE, EVENT_LOAD, EVENT_TRANSFORM, off } from '@cropper/utils';\n\nvar style = `:host{display:block;height:100%;overflow:hidden;position:relative;width:100%}`;\n\nconst imageCache = new WeakMap();\nconst selectionCache = new WeakMap();\nconst sourceImageCache = new WeakMap();\nconst RESIZE_BOTH = 'both';\nconst RESIZE_HORIZONTAL = 'horizontal';\nconst RESIZE_VERTICAL = 'vertical';\nconst RESIZE_NONE = 'none';\nclass CropperViewer extends CropperElement {\n constructor() {\n super(...arguments);\n this.$onSelectionChange = null;\n this.$onSourceImageLoad = null;\n this.$onSourceImageTransform = null;\n this.$scale = 1;\n this.$style = style;\n this.resize = RESIZE_VERTICAL;\n this.selection = '';\n this.slottable = false;\n }\n set $image(element) {\n imageCache.set(this, element);\n }\n get $image() {\n return imageCache.get(this);\n }\n set $sourceImage(element) {\n sourceImageCache.set(this, element);\n }\n get $sourceImage() {\n return sourceImageCache.get(this);\n }\n set $selection(element) {\n selectionCache.set(this, element);\n }\n get $selection() {\n return selectionCache.get(this);\n }\n static get observedAttributes() {\n return super.observedAttributes.concat([\n 'resize',\n 'selection',\n ]);\n }\n connectedCallback() {\n super.connectedCallback();\n let $selection = null;\n if (this.selection) {\n $selection = this.ownerDocument.querySelector(this.selection);\n }\n else {\n $selection = this.closest(this.$getTagNameOf(CROPPER_SELECTION));\n }\n if (isElement($selection)) {\n this.$selection = $selection;\n this.$onSelectionChange = this.$handleSelectionChange.bind(this);\n on($selection, EVENT_CHANGE, this.$onSelectionChange);\n const $canvas = $selection.closest(this.$getTagNameOf(CROPPER_CANVAS));\n if ($canvas) {\n const $sourceImage = $canvas.querySelector(this.$getTagNameOf(CROPPER_IMAGE));\n if ($sourceImage) {\n this.$sourceImage = $sourceImage;\n this.$image = $sourceImage.cloneNode(true);\n this.$getShadowRoot().appendChild(this.$image);\n this.$onSourceImageLoad = this.$handleSourceImageLoad.bind(this);\n this.$onSourceImageTransform = this.$handleSourceImageTransform.bind(this);\n on($sourceImage.$image, EVENT_LOAD, this.$onSourceImageLoad);\n on($sourceImage, EVENT_TRANSFORM, this.$onSourceImageTransform);\n }\n }\n this.$render();\n }\n }\n disconnectedCallback() {\n const { $selection, $sourceImage } = this;\n if ($selection && this.$onSelectionChange) {\n off($selection, EVENT_CHANGE, this.$onSelectionChange);\n this.$onSelectionChange = null;\n }\n if ($sourceImage && this.$onSourceImageLoad) {\n off($sourceImage.$image, EVENT_LOAD, this.$onSourceImageLoad);\n this.$onSourceImageLoad = null;\n }\n if ($sourceImage && this.$onSourceImageTransform) {\n off($sourceImage, EVENT_TRANSFORM, this.$onSourceImageTransform);\n this.$onSourceImageTransform = null;\n }\n super.disconnectedCallback();\n }\n $handleSelectionChange(event) {\n this.$render(event.detail);\n }\n $handleSourceImageLoad() {\n const { $image, $sourceImage } = this;\n const oldSrc = $image.getAttribute('src');\n const newSrc = $sourceImage.getAttribute('src');\n if (newSrc && newSrc !== oldSrc) {\n $image.setAttribute('src', newSrc);\n $image.$ready(() => {\n setTimeout(() => {\n const { x, y } = this.$selection;\n this.$transformImageByOffset($sourceImage.$getTransform(), -x, -y);\n });\n });\n }\n }\n $handleSourceImageTransform(event) {\n const { x, y } = this.$selection;\n this.$transformImageByOffset(event.detail.matrix, -x, -y);\n }\n $render(selection) {\n const { x, y, width, height, } = selection || this.$selection;\n const styles = {};\n const { clientWidth, clientHeight } = this;\n let newWidth = clientWidth;\n let newHeight = clientHeight;\n let scale = NaN;\n switch (this.resize) {\n case RESIZE_BOTH:\n scale = 1;\n newWidth = width;\n newHeight = height;\n styles.width = width;\n styles.height = height;\n break;\n case RESIZE_HORIZONTAL:\n scale = clientHeight / height;\n newWidth = width * scale;\n styles.width = newWidth;\n break;\n case RESIZE_VERTICAL:\n scale = clientWidth / width;\n newHeight = height * scale;\n styles.height = newHeight;\n break;\n case RESIZE_NONE:\n default:\n if (clientWidth > 0) {\n scale = clientWidth / width;\n }\n else if (clientHeight > 0) {\n scale = clientHeight / height;\n }\n }\n this.$scale = scale;\n this.$setStyles(styles);\n if (this.$sourceImage) {\n this.$transformImageByOffset(this.$sourceImage.$getTransform(), -x, -y);\n }\n }\n $transformImageByOffset(matrix, x, y) {\n const { $image, $scale, $sourceImage, } = this;\n if ($sourceImage && $image && $scale > 0) {\n const [a, b, c, d, e, f] = matrix;\n const translateX = ((x * d) - (c * y)) / ((a * d) - (c * b));\n const translateY = (y - (b * translateX)) / d;\n const newE = a * translateX + c * translateY + e;\n const newF = b * translateX + d * translateY + f;\n $image.$ready((image) => {\n this.$setStyles.call($image, {\n width: image.naturalWidth * $scale,\n height: image.naturalHeight * $scale,\n });\n });\n $image.$setTransform(a, b, c, d, newE * $scale, newF * $scale);\n }\n }\n}\nCropperViewer.$name = CROPPER_VIEWER;\nCropperViewer.$version = '2.0.0-beta.4';\n\nexport { RESIZE_BOTH, RESIZE_HORIZONTAL, RESIZE_NONE, RESIZE_VERTICAL, CropperViewer as default };\n","/*! Cropper.js v2.0.0-beta.4 | (c) 2015-present Chen Fengyuan | MIT */\nimport { isString, isElement, CROPPER_IMAGE, CROPPER_CANVAS, CROPPER_SELECTION } from '@cropper/utils';\nexport * from '@cropper/utils';\nimport { CropperCanvas, CropperCrosshair, CropperGrid, CropperHandle, CropperImage, CropperSelection, CropperShade, CropperViewer } from '@cropper/elements';\nexport * from '@cropper/elements';\n\nvar DEFAULT_TEMPLATE = ('<cropper-canvas background>'\n + '<cropper-image></cropper-image>'\n + '<cropper-shade hidden></cropper-shade>'\n + '<cropper-handle action=\"select\" plain></cropper-handle>'\n + '<cropper-selection initial-coverage=\"0.5\" movable resizable zoomable>'\n + '<cropper-grid role=\"grid\" bordered covered></cropper-grid>'\n + '<cropper-crosshair centered></cropper-crosshair>'\n + '<cropper-handle action=\"move\" theme-color=\"rgba(255, 255, 255, 0.35)\"></cropper-handle>'\n + '<cropper-handle action=\"n-resize\"></cropper-handle>'\n + '<cropper-handle action=\"e-resize\"></cropper-handle>'\n + '<cropper-handle action=\"s-resize\"></cropper-handle>'\n + '<cropper-handle action=\"w-resize\"></cropper-handle>'\n + '<cropper-handle action=\"ne-resize\"></cropper-handle>'\n + '<cropper-handle action=\"nw-resize\"></cropper-handle>'\n + '<cropper-handle action=\"se-resize\"></cropper-handle>'\n + '<cropper-handle action=\"sw-resize\"></cropper-handle>'\n + '</cropper-selection>'\n + '</cropper-canvas>');\n\nconst REGEXP_ALLOWED_ELEMENTS = /^img|canvas$/;\nconst REGEXP_BLOCKED_TAGS = /<(\\/?(?:script|style)[^>]*)>/gi;\nconst DEFAULT_OPTIONS = {\n template: DEFAULT_TEMPLATE,\n};\nCropperCanvas.$define();\nCropperCrosshair.$define();\nCropperGrid.$define();\nCropperHandle.$define();\nCropperImage.$define();\nCropperSelection.$define();\nCropperShade.$define();\nCropperViewer.$define();\nclass Cropper {\n constructor(element, options) {\n this.options = DEFAULT_OPTIONS;\n if (isString(element)) {\n element = document.querySelector(element);\n }\n if (!isElement(element) || !REGEXP_ALLOWED_ELEMENTS.test(element.localName)) {\n throw new Error('The first argument is required and must be an <img> or <canvas> element.');\n }\n this.element = element;\n options = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);\n this.options = options;\n const { ownerDocument } = element;\n let { container } = options;\n if (container) {\n if (isString(container)) {\n container = ownerDocument.querySelector(container);\n }\n if (!isElement(container)) {\n throw new Error('The `container` option must be an element or a valid selector.');\n }\n }\n if (!isElement(container)) {\n if (element.parentElement) {\n container = element.parentElement;\n }\n else {\n container = ownerDocument.body;\n }\n }\n this.container = container;\n const tagName = element.localName;\n let src = '';\n if (tagName === 'img') {\n ({ src } = element);\n }\n else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n src = element.toDataURL();\n }\n const { template } = options;\n if (template && isString(template)) {\n const templateElement = document.createElement('template');\n const documentFragment = document.createDocumentFragment();\n templateElement.innerHTML = template.replace(REGEXP_BLOCKED_TAGS, '&lt;$1&gt;');\n documentFragment.appendChild(templateElement.content);\n Array.from(documentFragment.querySelectorAll(CROPPER_IMAGE)).forEach((image) => {\n image.setAttribute('src', src);\n image.setAttribute('alt', element.alt || 'The image to crop');\n });\n if (element.parentElement) {\n element.style.display = 'none';\n container.insertBefore(documentFragment, element.nextSibling);\n }\n else {\n container.appendChild(documentFragment);\n }\n }\n }\n getCropperCanvas() {\n return this.container.querySelector(CROPPER_CANVAS);\n }\n getCropperImage() {\n return this.container.querySelector(CROPPER_IMAGE);\n }\n getCropperSelection() {\n return this.container.querySelector(CROPPER_SELECTION);\n }\n getCropperSelections() {\n return this.container.querySelectorAll(CROPPER_SELECTION);\n }\n}\nCropper.version = '2.0.0-beta.4';\n\nexport { Cropper as default };\n",":host {\n\t@import '../../../style/form/range';\n\t@apply mb-6 flex w-full flex-col items-center justify-between gap-6;\n}\n","import {\n\tComponent,\n\tEvent,\n\tEventEmitter,\n\tHost,\n\tListen,\n\tProp,\n\tState,\n\th,\n} from '@stencil/core';\nimport { clsx } from 'clsx';\nimport 'cropperjs';\nimport { CropperImage, CropperSelection } from 'cropperjs';\n\n@Component({\n\ttag: 'p-cropper',\n\tstyleUrl: 'cropper.component.scss',\n\tshadow: true,\n})\nexport class Cropper {\n\t/**\n\t * Variant of the image that's being cropped\n\t */\n\t@Prop({ reflect: true }) variant: 'user' | 'company' = 'user';\n\n\t/**\n\t * The image to crop (url or base64)\n\t */\n\t@Prop() value: any;\n\n\t/**\n\t * The return type of the onchange\n\t */\n\t@Prop() returnType: 'canvas' | 'base64' = 'base64';\n\n\t/**\n\t * Event when the value changes\n\t */\n\t@Event({\n\t\tbubbles: false,\n\t})\n\tvalueChange: EventEmitter<any>;\n\n\tprivate _imageRef: CropperImage;\n\tprivate _selectionRef: CropperSelection;\n\n\tprivate _maxScale = 0;\n\tprivate _minScale = 0;\n\n\tprivate _resizeDebounceTimeout: NodeJS.Timer;\n\tprivate _toCanvasDebounceTimeout: NodeJS.Timer;\n\n\t@State()\n\tprivate _loaded = false;\n\n\t@State()\n\tprivate _currentScale = 0;\n\n\t@Listen('resize', { target: 'window' })\n\tonResize() {\n\t\tif (this._resizeDebounceTimeout) {\n\t\t\tclearTimeout(this._resizeDebounceTimeout);\n\t\t}\n\n\t\tthis._resizeDebounceTimeout = setTimeout(() => {\n\t\t\tthis._selectionRef.$center();\n\t\t\tthis._imageRef.$center();\n\t\t}, 200);\n\t}\n\n\tcomponentDidLoad() {\n\t\tsetTimeout(() => {\n\t\t\tthis._loaded = true;\n\t\t}, 200);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<Host class=\"p-cropper\">\n\t\t\t\t{this._loaded && (\n\t\t\t\t\t<cropper-canvas\n\t\t\t\t\t\tclass=\"h-[17.5rem] w-full border-0 border-b border-solid border-mystic-medium bg-white\"\n\t\t\t\t\t\tonAction={() => this._onAction()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<cropper-image\n\t\t\t\t\t\t\tsrc={this.value}\n\t\t\t\t\t\t\talt=\"Picture\"\n\t\t\t\t\t\t\tref={(ref) =>\n\t\t\t\t\t\t\t\tthis._setImageRef(ref as CropperImage)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tscalable\n\t\t\t\t\t\t\tcrossorigin=\"anonymous\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<cropper-shade\n\t\t\t\t\t\t\tclass={clsx({\n\t\t\t\t\t\t\t\t'rounded-round': this.variant === 'user',\n\t\t\t\t\t\t\t\trounded: this.variant === 'company',\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\ttheme-color=\"rgba(255, 255, 255, 0.5)\"\n\t\t\t\t\t\t\thidden\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<cropper-selection\n\t\t\t\t\t\t\tinitial-coverage=\"0.7\"\n\t\t\t\t\t\t\taspect-ratio=\"1\"\n\t\t\t\t\t\t\tref={(ref) =>\n\t\t\t\t\t\t\t\t(this._selectionRef = ref as CropperSelection)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<cropper-handle action=\"move\" plain></cropper-handle>\n\t\t\t\t\t</cropper-canvas>\n\t\t\t\t)}\n\n\t\t\t\t<div class=\"flex w-full items-center gap-2 px-14 text-storm-vague tablet:max-w-xs tablet:px-1\">\n\t\t\t\t\t<p-icon variant=\"minus\" />\n\t\t\t\t\t<input\n\t\t\t\t\t\tclass=\"p-input w-full\"\n\t\t\t\t\t\ttype=\"range\"\n\t\t\t\t\t\tmin=\"0\"\n\t\t\t\t\t\tmax=\"100\"\n\t\t\t\t\t\tvalue={this._currentScale}\n\t\t\t\t\t\tonInput={(ev) =>\n\t\t\t\t\t\t\tthis._onInput((ev.target as HTMLInputElement).value)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstep=\"0.5\"\n\t\t\t\t\t/>\n\t\t\t\t\t<p-icon variant=\"plus\" />\n\t\t\t\t</div>\n\t\t\t</Host>\n\t\t);\n\t}\n\n\tprivate _setImageRef(ref: CropperImage) {\n\t\tif (this._imageRef) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._imageRef = ref;\n\t\tthis._imageRef.$ready((image) =>\n\t\t\tsetTimeout(() => this._setInitialState(image), 200)\n\t\t);\n\t}\n\n\tprivate _setInitialState(image) {\n\t\tlet scale: number;\n\t\tif (image.naturalWidth > image.naturalHeight) {\n\t\t\t// set scale by height\n\t\t\tscale = 200 / image.naturalHeight;\n\t\t}\n\n\t\tif (image.naturalHeight >= image.naturalWidth) {\n\t\t\t// set scale by width\n\t\t\tscale = 200 / image.naturalWidth;\n\t\t}\n\n\t\tconst current = this._imageRef.$getTransform();\n\n\t\tthis._minScale = scale;\n\t\tthis._maxScale = current[0];\n\n\t\tthis._selectionRef.$resize('nw-resize', 200, 200, 1);\n\t\tthis._selectionRef.$center();\n\n\t\tthis._setScale(scale);\n\t\tthis._toCanvas();\n\t}\n\n\tprivate _onAction() {\n\t\tthis._setCurrentScale();\n\t\tthis._toCanvas();\n\t}\n\n\tprivate _setScale(\n\t\tscale: number,\n\t\tsetCenter: boolean = true,\n\t\tsetCurrentScale: boolean = true\n\t) {\n\t\tconst transform = this._imageRef.$getTransform();\n\t\tthis._imageRef.$setTransform([\n\t\t\tscale,\n\t\t\t0,\n\t\t\t0,\n\t\t\tscale,\n\t\t\ttransform[4],\n\t\t\ttransform[5],\n\t\t]);\n\n\t\tif (setCenter) {\n\t\t\tthis._imageRef.$center();\n\t\t}\n\n\t\tif (setCurrentScale) {\n\t\t\tthis._setCurrentScale();\n\t\t}\n\t}\n\n\tprivate _setCurrentScale() {\n\t\tconst transform = this._imageRef.$getTransform();\n\t\tconst current = transform[0];\n\n\t\tif (current < this._minScale) {\n\t\t\tthis._setScale(this._minScale, true, false);\n\t\t\tthis._currentScale = 0;\n\t\t\treturn;\n\t\t}\n\n\t\tif (current > this._maxScale) {\n\t\t\tthis._setScale(this._maxScale, true, false);\n\t\t\tthis._currentScale = 100;\n\t\t\treturn;\n\t\t}\n\n\t\tif (current === this._minScale) {\n\t\t\tthis._currentScale = 0;\n\t\t\treturn;\n\t\t}\n\n\t\tif (current === this._maxScale) {\n\t\t\tthis._currentScale = 100;\n\t\t\treturn;\n\t\t}\n\n\t\tconst minMaxDiff = this._maxScale - this._minScale;\n\t\tconst currentDiff = current - this._minScale;\n\n\t\tconst percentage = (currentDiff / minMaxDiff) * 100;\n\t\tthis._currentScale = percentage;\n\t}\n\n\tprivate _onInput(value) {\n\t\tconst transform = this._imageRef.$getTransform();\n\t\tconst current = transform[0];\n\t\tconst minMaxDiff = this._maxScale - this._minScale;\n\n\t\tconst toSet = minMaxDiff * (value / 100);\n\n\t\tif (toSet === current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._setScale(toSet + this._minScale, false, false);\n\t\tthis._currentScale = value;\n\n\t\tthis._toCanvas();\n\t}\n\n\tprivate _toCanvas() {\n\t\tif (this._toCanvasDebounceTimeout) {\n\t\t\tclearTimeout(this._toCanvasDebounceTimeout);\n\t\t}\n\n\t\tthis._toCanvasDebounceTimeout = setTimeout(async () => {\n\t\t\tconst canvas = await this._selectionRef.$toCanvas();\n\t\t\tif (this.returnType === 'canvas') {\n\t\t\t\tthis.valueChange.emit(canvas);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst data = canvas.toDataURL('image/png');\n\t\t\tthis.valueChange.emit(data);\n\t\t}, 200);\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["r","e","t","f","n","Array","isArray","length","clsx","arguments","IS_BROWSER","window","document","WINDOW","IS_TOUCH_DEVICE","documentElement","HAS_POINTER_EVENT","NAMESPACE","CROPPER_CANVAS","CROPPER_CROSSHAIR","CROPPER_GIRD","CROPPER_HANDLE","CROPPER_IMAGE","CROPPER_SELECTION","CROPPER_SHADE","CROPPER_VIEWER","ACTION_SELECT","ACTION_MOVE","ACTION_SCALE","ACTION_ROTATE","ACTION_TRANSFORM","ACTION_NONE","ACTION_RESIZE_NORTH","ACTION_RESIZE_EAST","ACTION_RESIZE_SOUTH","ACTION_RESIZE_WEST","ACTION_RESIZE_NORTHEAST","ACTION_RESIZE_NORTHWEST","ACTION_RESIZE_SOUTHEAST","ACTION_RESIZE_SOUTHWEST","ATTRIBUTE_ACTION","EVENT_TOUCH_END","EVENT_TOUCH_MOVE","EVENT_TOUCH_START","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_ERROR","EVENT_KEYDOWN","EVENT_LOAD","EVENT_WHEEL","EVENT_ACTION","EVENT_ACTION_END","EVENT_ACTION_MOVE","EVENT_ACTION_START","EVENT_CHANGE","EVENT_TRANSFORM","isString","value","isNaN","Number","isNumber","isPositiveNumber","Infinity","isUndefined","isObject","hasOwnProperty","Object","prototype","isPlainObject","constructor","call","error","isFunction","isElement","node","nodeType","REGEXP_CAMEL_CASE","toKebabCase","String","replace","toLowerCase","REGEXP_KEBAB_CASE","toCamelCase","substring","slice","toUpperCase","REGEXP_SPACES","off","target","types","listener","options","trim","split","forEach","type","removeEventListener","on","addEventListener","once","assign","defaultEventOptions","bubbles","cancelable","composed","emit","detail","dispatchEvent","CustomEvent","resolvedPromise","Promise","resolve","nextTick","context","callback","then","bind","getOffset","element","ownerDocument","box","getBoundingClientRect","left","pageXOffset","clientLeft","top","pageYOffset","clientTop","REGEXP_ANGLE_UNIT","toAngleInRadian","angle","parseFloat","unit","match","Math","PI","SIZE_ADJUSTMENT_TYPE_CONTAIN","SIZE_ADJUSTMENT_TYPE_COVER","getAdjustedSizes","data","aspectRatio","width","height","isValidWidth","isValidHeight","adjustedWidth","multiplyMatrices","matrix","args","a1","b1","c1","d1","e1","f1","a2","b2","c2","d2","e2","f2","style","REGEXP_SUFFIX","DEFAULT_SHADOW_ROOT_MODE","shadowRoots","WeakMap","styleSheets","tagNames","Map","supportsAdoptedStyleSheets","adoptedStyleSheets","CSSStyleSheet","CropperElement","HTMLElement","$sharedStyle","this","themeColor","_a","_b","super","shadowRootMode","slottable","name","getPrototypeOf","$name","set","tagName","observedAttributes","attributeChangedCallback","oldValue","newValue","is","propertyName","oldPropertyValue","newPropertyValue","styleSheet","get","styles","replaceSync","textContent","$propertyChangedCallback","hasAttribute","setAttribute","removeAttribute","getAttribute","connectedCallback","attribute","property","undefined","defineProperty","enumerable","configurable","shadow","attachShadow","mode","shadowRoot","$addStyles","$style","$template","template","createElement","innerHTML","appendChild","content","slot","disconnectedCallback","has","delete","$getTagNameOf","$setStyles","properties","keys","test","$getShadowRoot","concat","$emit","$nextTick","$define","customElements","define","$version","CropperCanvas","$onPointerDown","$onPointerMove","$onPointerUp","$onWheel","$wheeling","$pointers","$action","background","disabled","scaleStep","$bind","$unbind","$handlePointerDown","$handlePointerMove","$handlePointerUp","$handleWheel","passive","capture","event","buttons","button","pointerType","ctrlKey","action","changedTouches","from","identifier","pageX","pageY","startX","startY","endX","endY","pointerId","size","relatedEvent","preventDefault","willChange","pointer","pointers2","maxRotateRate","maxScaleRate","rotate","scale","centerX","centerY","pointer2","x1","y1","x2","y2","z1","z2","atan","rotateRate","absRotateRate","abs","sqrt","scaleRate","absScaleRate","rotatable","scalable","values","setTimeout","delta","deltaY","$setAction","$toCanvas","reject","isConnected","Error","canvas","offsetWidth","offsetHeight","cropperImage","querySelector","$ready","image","getContext","a","b","c","d","$getTransform","newE","newF","destWidth","naturalWidth","destHeight","naturalHeight","fillStyle","fillRect","beforeDraw","save","translate","transform","drawImage","restore","catch","canvasCache","NATIVE_ATTRIBUTES","CropperImage","$matrix","$onLoad","$onCanvasAction","$onCanvasActionEnd","$onCanvasActionStart","$actionStartTarget","$image","Image","skewable","translatable","$canvas","includes","closest","display","position","$handleAction","$handleLoad","removeChild","$center","hidden","cropperSelectionTagName","selection","multiple","active","movable","contains","$move","x","y","$rotate","clientX","clientY","$zoom","cos","sin","scaleX","skewY","skewX","scaleY","clientRect","originX","originY","moveX","moveY","translateX","translateY","$transform","promise","complete","onLoad","onError","parentElement","container","containerWidth","containerHeight","$scale","max","min","$translate","$moveTo","$setTransform","radian","$skew","radianX","radianY","tan","newMatrix","oldMatrix","join","$resetTransform","CropperShade","$onCanvasChange","$selection","$change","$render","$reset","outlineWidth","innerWidth","CropperHandle","$onCanvasCropEnd","$onCanvasCropStart","plain","CropperSelection","$onDocumentKeyDown","NaN","initialAspectRatio","initialCoverage","resizable","zoomable","keyboard","outlined","precise","$handleKeyDown","selections","$getSelections","$removeSelection","$handleActionStart","$handleActionEnd","querySelectorAll","$createSelection","newSelection","cloneNode","insertBefore","nextSibling","index","indexOf","activeSelection","relatedTarget","currentTarget","shiftKey","offset","$resize","defaultPrevented","key","metaKey","offsetX","offsetY","hasValidAspectRatio","newWidth","newHeight","newX","newY","round","CropperGrid","bordered","columns","covered","rows","fragment","createDocumentFragment","i","row","j","column","CropperCrosshair","centered","imageCache","selectionCache","sourceImageCache","RESIZE_BOTH","RESIZE_HORIZONTAL","RESIZE_VERTICAL","RESIZE_NONE","CropperViewer","$onSelectionChange","$onSourceImageLoad","$onSourceImageTransform","resize","$sourceImage","$handleSelectionChange","$handleSourceImageLoad","$handleSourceImageTransform","oldSrc","newSrc","$transformImageByOffset","clientWidth","clientHeight","cropperComponentCss","Cropper","_maxScale","_minScale","onResize","_resizeDebounceTimeout","clearTimeout","_selectionRef","_imageRef","componentDidLoad","_loaded","render","h","Host","class","onAction","_onAction","src","alt","ref","_setImageRef","crossorigin","variant","rounded","_currentScale","onInput","ev","_onInput","step","_setInitialState","current","_setScale","_toCanvas","_setCurrentScale","setCenter","setCurrentScale","minMaxDiff","currentDiff","percentage","toSet","_toCanvasDebounceTimeout","async","returnType","valueChange","toDataURL"],"sources":["node_modules/clsx/dist/clsx.mjs","../../node_modules/@cropper/utils/dist/utils.esm.raw.js","../../node_modules/@cropper/element/dist/element.esm.raw.js","../../node_modules/@cropper/element-canvas/dist/element-canvas.esm.raw.js","../../node_modules/@cropper/element-image/dist/element-image.esm.raw.js","../../node_modules/@cropper/element-shade/dist/element-shade.esm.raw.js","../../node_modules/@cropper/element-handle/dist/element-handle.esm.raw.js","../../node_modules/@cropper/element-selection/dist/element-selection.esm.raw.js","../../node_modules/@cropper/element-grid/dist/element-grid.esm.raw.js","../../node_modules/@cropper/element-crosshair/dist/element-crosshair.esm.raw.js","../../node_modules/@cropper/element-viewer/dist/element-viewer.esm.raw.js","../../node_modules/cropperjs/dist/cropper.esm.raw.js","src/components/molecules/cropper/cropper.component.scss?tag=p-cropper&encapsulation=shadow","src/components/molecules/cropper/cropper.component.tsx"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","const IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nconst WINDOW = IS_BROWSER ? window : {};\nconst IS_TOUCH_DEVICE = IS_BROWSER ? 'ontouchstart' in WINDOW.document.documentElement : false;\nconst HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\nconst NAMESPACE = 'cropper';\nconst CROPPER_CANVAS = `${NAMESPACE}-canvas`;\nconst CROPPER_CROSSHAIR = `${NAMESPACE}-crosshair`;\nconst CROPPER_GIRD = `${NAMESPACE}-grid`;\nconst CROPPER_HANDLE = `${NAMESPACE}-handle`;\nconst CROPPER_IMAGE = `${NAMESPACE}-image`;\nconst CROPPER_SELECTION = `${NAMESPACE}-selection`;\nconst CROPPER_SHADE = `${NAMESPACE}-shade`;\nconst CROPPER_VIEWER = `${NAMESPACE}-viewer`;\n// Actions\nconst ACTION_SELECT = 'select';\nconst ACTION_MOVE = 'move';\nconst ACTION_SCALE = 'scale';\nconst ACTION_ROTATE = 'rotate';\nconst ACTION_TRANSFORM = 'transform';\nconst ACTION_NONE = 'none';\nconst ACTION_RESIZE_NORTH = 'n-resize';\nconst ACTION_RESIZE_EAST = 'e-resize';\nconst ACTION_RESIZE_SOUTH = 's-resize';\nconst ACTION_RESIZE_WEST = 'w-resize';\nconst ACTION_RESIZE_NORTHEAST = 'ne-resize';\nconst ACTION_RESIZE_NORTHWEST = 'nw-resize';\nconst ACTION_RESIZE_SOUTHEAST = 'se-resize';\nconst ACTION_RESIZE_SOUTHWEST = 'sw-resize';\n// Attributes\nconst ATTRIBUTE_ACTION = 'action';\n// Native events\nconst EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\nconst EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\nconst EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\nconst EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\nconst EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\nconst EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\nconst EVENT_ERROR = 'error';\nconst EVENT_KEYDOWN = 'keydown';\nconst EVENT_LOAD = 'load';\nconst EVENT_RESIZE = 'resize';\nconst EVENT_WHEEL = 'wheel';\n// Custom events\nconst EVENT_ACTION = 'action';\nconst EVENT_ACTION_END = 'actionend';\nconst EVENT_ACTION_MOVE = 'actionmove';\nconst EVENT_ACTION_START = 'actionstart';\nconst EVENT_CHANGE = 'change';\nconst EVENT_TRANSFORM = 'transform';\n\n/**\n * Check if the given value is a string.\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the given value is a string, else `false`.\n */\nfunction isString(value) {\n return typeof value === 'string';\n}\n/**\n * Check if the given value is not a number.\n */\nconst isNaN = Number.isNaN || WINDOW.isNaN;\n/**\n * Check if the given value is a number.\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\nfunction isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n}\n/**\n * Check if the given value is a positive number.\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\nfunction isPositiveNumber(value) {\n return isNumber(value) && value > 0 && value < Infinity;\n}\n/**\n * Check if the given value is undefined.\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n/**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\nfunction isObject(value) {\n return typeof value === 'object' && value !== null;\n}\nconst { hasOwnProperty } = Object.prototype;\n/**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\nfunction isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n try {\n const { constructor } = value;\n const { prototype } = constructor;\n return constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n }\n catch (error) {\n return false;\n }\n}\n/**\n * Check if the given value is a function.\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Check if the given node is an element.\n * @param {*} node The node to check.\n * @returns {boolean} Returns `true` if the given node is an element; otherwise, `false`.\n */\nfunction isElement(node) {\n return typeof node === 'object' && node !== null && node.nodeType === 1;\n}\nconst REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n/**\n * Transform the given string from camelCase to kebab-case.\n * @param {string} value The value to transform.\n * @returns {string} Returns the transformed value.\n */\nfunction toKebabCase(value) {\n return String(value).replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n}\nconst REGEXP_KEBAB_CASE = /-[A-z\\d]/g;\n/**\n * Transform the given string from kebab-case to camelCase.\n * @param {string} value The value to transform.\n * @returns {string} Returns the transformed value.\n */\nfunction toCamelCase(value) {\n return value.replace(REGEXP_KEBAB_CASE, (substring) => substring.slice(1).toUpperCase());\n}\nconst REGEXP_SPACES = /\\s\\s*/;\n/**\n * Remove event listener from the event target.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener}\n * @param {EventTarget} target The target of the event.\n * @param {string} types The types of the event.\n * @param {EventListenerOrEventListenerObject} listener The listener of the event.\n * @param {EventListenerOptions} [options] The options specify characteristics about the event listener.\n */\nfunction off(target, types, listener, options) {\n types.trim().split(REGEXP_SPACES).forEach((type) => {\n target.removeEventListener(type, listener, options);\n });\n}\n/**\n * Add event listener to the event target.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener}\n * @param {EventTarget} target The target of the event.\n * @param {string} types The types of the event.\n * @param {EventListenerOrEventListenerObject} listener The listener of the event.\n * @param {AddEventListenerOptions} [options] The options specify characteristics about the event listener.\n */\nfunction on(target, types, listener, options) {\n types.trim().split(REGEXP_SPACES).forEach((type) => {\n target.addEventListener(type, listener, options);\n });\n}\n/**\n * Add once event listener to the event target.\n * @param {EventTarget} target The target of the event.\n * @param {string} types The types of the event.\n * @param {EventListenerOrEventListenerObject} listener The listener of the event.\n * @param {AddEventListenerOptions} [options] The options specify characteristics about the event listener.\n */\nfunction once(target, types, listener, options) {\n on(target, types, listener, Object.assign(Object.assign({}, options), { once: true }));\n}\nconst defaultEventOptions = {\n bubbles: true,\n cancelable: true,\n composed: true,\n};\n/**\n * Dispatch event on the event target.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent}\n * @param {EventTarget} target The target of the event.\n * @param {string} type The name of the event.\n * @param {*} [detail] The data passed when initializing the event.\n * @param {CustomEventInit} [options] The other event options.\n * @returns {boolean} Returns the result value.\n */\nfunction emit(target, type, detail, options) {\n return target.dispatchEvent(new CustomEvent(type, Object.assign(Object.assign(Object.assign({}, defaultEventOptions), { detail }), options)));\n}\nconst resolvedPromise = Promise.resolve();\n/**\n * Defers the callback to be executed after the next DOM update cycle.\n * @param {*} [context] The `this` context.\n * @param {Function} [callback] The callback to execute after the next DOM update cycle.\n * @returns {Promise} A promise that resolves to nothing.\n */\nfunction nextTick(context, callback) {\n return callback\n ? resolvedPromise.then(context ? callback.bind(context) : callback)\n : resolvedPromise;\n}\n/**\n * Get the offset base on the document.\n * @param {Element} element The target element.\n * @returns {object} The offset data.\n */\nfunction getOffset(element) {\n const { documentElement } = element.ownerDocument;\n const box = element.getBoundingClientRect();\n return {\n left: box.left + (WINDOW.pageXOffset - documentElement.clientLeft),\n top: box.top + (WINDOW.pageYOffset - documentElement.clientTop),\n };\n}\nconst REGEXP_ANGLE_UNIT = /deg|g?rad|turn$/i;\n/**\n * Convert an angle to a radian number.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/angle}\n * @param {number|string} angle The angle to convert.\n * @returns {number} Returns the radian number.\n */\nfunction toAngleInRadian(angle) {\n const value = parseFloat(angle) || 0;\n if (value !== 0) {\n const [unit = 'rad'] = String(angle).match(REGEXP_ANGLE_UNIT) || [];\n switch (unit.toLowerCase()) {\n case 'deg':\n return (value / 360) * (Math.PI * 2);\n case 'grad':\n return (value / 400) * (Math.PI * 2);\n case 'turn':\n return value * (Math.PI * 2);\n }\n }\n return value;\n}\nconst SIZE_ADJUSTMENT_TYPE_CONTAIN = 'contain';\nconst SIZE_ADJUSTMENT_TYPE_COVER = 'cover';\n/**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {object} data The original sizes.\n * @param {string} [type] The adjust type.\n * @returns {object} Returns the result sizes.\n */\nfunction getAdjustedSizes(data, type = SIZE_ADJUSTMENT_TYPE_CONTAIN) {\n const { aspectRatio } = data;\n let { width, height } = data;\n const isValidWidth = isPositiveNumber(width);\n const isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n const adjustedWidth = height * aspectRatio;\n if ((type === SIZE_ADJUSTMENT_TYPE_CONTAIN && adjustedWidth > width)\n || (type === SIZE_ADJUSTMENT_TYPE_COVER && adjustedWidth < width)) {\n height = width / aspectRatio;\n }\n else {\n width = height * aspectRatio;\n }\n }\n else if (isValidWidth) {\n height = width / aspectRatio;\n }\n else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width,\n height,\n };\n}\n/**\n * Multiply multiple matrices.\n * @param {Array} matrix The first matrix.\n * @param {Array} args The rest matrices.\n * @returns {Array} Returns the result matrix.\n */\nfunction multiplyMatrices(matrix, ...args) {\n if (args.length === 0) {\n return matrix;\n }\n const [a1, b1, c1, d1, e1, f1] = matrix;\n const [a2, b2, c2, d2, e2, f2] = args[0];\n // ┌ a1 c1 e1 ┐ ┌ a2 c2 e2 ┐\n // │ b1 d1 f1 │ × │ b2 d2 f2 │\n // └ 0 0 1 ┘ └ 0 0 1 ┘\n matrix = [\n a1 * a2 + c1 * b2 /* + e1 * 0 */,\n b1 * a2 + d1 * b2 /* + f1 * 0 */,\n a1 * c2 + c1 * d2 /* + e1 * 0 */,\n b1 * c2 + d1 * d2 /* + f1 * 0 */,\n a1 * e2 + c1 * f2 + e1 /* * 1 */,\n b1 * e2 + d1 * f2 + f1 /* * 1 */,\n ];\n return multiplyMatrices(matrix, ...args.slice(1));\n}\n\nexport { ACTION_MOVE, ACTION_NONE, ACTION_RESIZE_EAST, ACTION_RESIZE_NORTH, ACTION_RESIZE_NORTHEAST, ACTION_RESIZE_NORTHWEST, ACTION_RESIZE_SOUTH, ACTION_RESIZE_SOUTHEAST, ACTION_RESIZE_SOUTHWEST, ACTION_RESIZE_WEST, ACTION_ROTATE, ACTION_SCALE, ACTION_SELECT, ACTION_TRANSFORM, ATTRIBUTE_ACTION, CROPPER_CANVAS, CROPPER_CROSSHAIR, CROPPER_GIRD, CROPPER_HANDLE, CROPPER_IMAGE, CROPPER_SELECTION, CROPPER_SHADE, CROPPER_VIEWER, EVENT_ACTION, EVENT_ACTION_END, EVENT_ACTION_MOVE, EVENT_ACTION_START, EVENT_CHANGE, EVENT_ERROR, EVENT_KEYDOWN, EVENT_LOAD, EVENT_POINTER_DOWN, EVENT_POINTER_MOVE, EVENT_POINTER_UP, EVENT_RESIZE, EVENT_TOUCH_END, EVENT_TOUCH_MOVE, EVENT_TOUCH_START, EVENT_TRANSFORM, EVENT_WHEEL, HAS_POINTER_EVENT, IS_BROWSER, IS_TOUCH_DEVICE, NAMESPACE, WINDOW, emit, getAdjustedSizes, getOffset, isElement, isFunction, isNaN, isNumber, isObject, isPlainObject, isPositiveNumber, isString, isUndefined, multiplyMatrices, nextTick, off, on, once, toAngleInRadian, toCamelCase, toKebabCase };\n","import { WINDOW, toCamelCase, toKebabCase, isNaN, isUndefined, isNumber, emit, nextTick, isObject, IS_BROWSER } from '@cropper/utils';\n\nvar style = `:host([hidden]){display:none!important}`;\n\nconst REGEXP_SUFFIX = /left|top|width|height/i;\nconst DEFAULT_SHADOW_ROOT_MODE = 'open';\nconst shadowRoots = new WeakMap();\nconst styleSheets = new WeakMap();\nconst tagNames = new Map();\nconst supportsAdoptedStyleSheets = WINDOW.document && Array.isArray(WINDOW.document.adoptedStyleSheets) && 'replaceSync' in WINDOW.CSSStyleSheet.prototype;\nclass CropperElement extends HTMLElement {\n get $sharedStyle() {\n return `${this.themeColor ? `:host{--theme-color: ${this.themeColor};}` : ''}${style}`;\n }\n constructor() {\n var _a, _b;\n super();\n this.shadowRootMode = DEFAULT_SHADOW_ROOT_MODE;\n this.slottable = true;\n const name = (_b = (_a = Object.getPrototypeOf(this)) === null || _a === void 0 ? void 0 : _a.constructor) === null || _b === void 0 ? void 0 : _b.$name;\n if (name) {\n tagNames.set(name, this.tagName.toLowerCase());\n }\n }\n static get observedAttributes() {\n return [\n 'shadow-root-mode',\n 'slottable',\n 'theme-color',\n ];\n }\n // Convert attribute to property\n attributeChangedCallback(name, oldValue, newValue) {\n if (Object.is(newValue, oldValue)) {\n return;\n }\n const propertyName = toCamelCase(name);\n const oldPropertyValue = this[propertyName];\n let newPropertyValue = newValue;\n switch (typeof oldPropertyValue) {\n case 'boolean':\n newPropertyValue = newValue !== null && newValue !== 'false';\n break;\n case 'number':\n newPropertyValue = Number(newValue);\n break;\n }\n this[propertyName] = newPropertyValue;\n switch (name) {\n case 'theme-color': {\n const styleSheet = styleSheets.get(this);\n const styles = this.$sharedStyle;\n if (styleSheet && styles) {\n if (supportsAdoptedStyleSheets) {\n styleSheet.replaceSync(styles);\n }\n else {\n styleSheet.textContent = styles;\n }\n }\n break;\n }\n }\n }\n // Convert property to attribute\n $propertyChangedCallback(name, oldValue, newValue) {\n if (Object.is(newValue, oldValue)) {\n return;\n }\n name = toKebabCase(name);\n switch (typeof newValue) {\n case 'boolean':\n if (newValue === true) {\n if (!this.hasAttribute(name)) {\n this.setAttribute(name, '');\n }\n }\n else {\n this.removeAttribute(name);\n }\n break;\n case 'number':\n if (isNaN(newValue)) {\n newValue = '';\n }\n else {\n newValue = String(newValue);\n }\n // Fall through\n // case 'string':\n // eslint-disable-next-line no-fallthrough\n default:\n if (newValue) {\n if (this.getAttribute(name) !== newValue) {\n this.setAttribute(name, newValue);\n }\n }\n else {\n this.removeAttribute(name);\n }\n }\n }\n connectedCallback() {\n // Observe properties after observed attributes\n Object.getPrototypeOf(this).constructor.observedAttributes.forEach((attribute) => {\n const property = toCamelCase(attribute);\n let value = this[property];\n if (!isUndefined(value)) {\n this.$propertyChangedCallback(property, undefined, value);\n }\n Object.defineProperty(this, property, {\n enumerable: true,\n configurable: true,\n get() {\n return value;\n },\n set(newValue) {\n const oldValue = value;\n value = newValue;\n this.$propertyChangedCallback(property, oldValue, newValue);\n },\n });\n });\n const shadow = this.attachShadow({\n mode: this.shadowRootMode || DEFAULT_SHADOW_ROOT_MODE,\n });\n if (!this.shadowRoot) {\n shadowRoots.set(this, shadow);\n }\n styleSheets.set(this, this.$addStyles(this.$sharedStyle));\n if (this.$style) {\n this.$addStyles(this.$style);\n }\n if (this.$template) {\n const template = document.createElement('template');\n template.innerHTML = this.$template;\n shadow.appendChild(template.content);\n }\n if (this.slottable) {\n const slot = document.createElement('slot');\n shadow.appendChild(slot);\n }\n }\n disconnectedCallback() {\n if (styleSheets.has(this)) {\n styleSheets.delete(this);\n }\n if (shadowRoots.has(this)) {\n shadowRoots.delete(this);\n }\n }\n // eslint-disable-next-line class-methods-use-this\n $getTagNameOf(name) {\n var _a;\n return (_a = tagNames.get(name)) !== null && _a !== void 0 ? _a : name;\n }\n $setStyles(properties) {\n Object.keys(properties).forEach((property) => {\n let value = properties[property];\n if (isNumber(value)) {\n if (value !== 0 && REGEXP_SUFFIX.test(property)) {\n value = `${value}px`;\n }\n else {\n value = String(value);\n }\n }\n this.style[property] = value;\n });\n return this;\n }\n /**\n * Outputs the shadow root of the element.\n * @returns {ShadowRoot} Returns the shadow root.\n */\n $getShadowRoot() {\n return this.shadowRoot || shadowRoots.get(this);\n }\n /**\n * Adds styles to the shadow root.\n * @param {string} styles The styles to add.\n * @returns {CSSStyleSheet|HTMLStyleElement} Returns the generated style sheet.\n */\n $addStyles(styles) {\n let styleSheet;\n const shadow = this.$getShadowRoot();\n if (supportsAdoptedStyleSheets) {\n styleSheet = new CSSStyleSheet();\n styleSheet.replaceSync(styles);\n shadow.adoptedStyleSheets = shadow.adoptedStyleSheets.concat(styleSheet);\n }\n else {\n styleSheet = document.createElement('style');\n styleSheet.textContent = styles;\n shadow.appendChild(styleSheet);\n }\n return styleSheet;\n }\n /**\n * Dispatches an event at the element.\n * @param {string} type The name of the event.\n * @param {*} [detail] The data passed when initializing the event.\n * @param {CustomEventInit} [options] The other event options.\n * @returns {boolean} Returns the result value.\n */\n $emit(type, detail, options) {\n return emit(this, type, detail, options);\n }\n /**\n * Defers the callback to be executed after the next DOM update cycle.\n * @param {Function} [callback] The callback to execute after the next DOM update cycle.\n * @returns {Promise} A promise that resolves to nothing.\n */\n $nextTick(callback) {\n return nextTick(this, callback);\n }\n /**\n * Defines the constructor as a new custom element.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/define}\n * @param {string|object} [name] The element name.\n * @param {object} [options] The element definition options.\n */\n static $define(name, options) {\n if (isObject(name)) {\n options = name;\n name = '';\n }\n if (!name) {\n name = this.$name || this.name;\n }\n name = toKebabCase(name);\n if (IS_BROWSER && WINDOW.customElements && !WINDOW.customElements.get(name)) {\n customElements.define(name, this, options);\n }\n }\n}\nCropperElement.$version = '2.0.0-beta.4';\n\nexport { CropperElement as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_CANVAS, ACTION_NONE, on, EVENT_POINTER_DOWN, EVENT_POINTER_MOVE, EVENT_POINTER_UP, EVENT_WHEEL, off, isNumber, isElement, ATTRIBUTE_ACTION, EVENT_ACTION_START, EVENT_ACTION_MOVE, ACTION_TRANSFORM, EVENT_ACTION, EVENT_ACTION_END, ACTION_SCALE, isString, isPlainObject, isPositiveNumber, getAdjustedSizes, CROPPER_IMAGE, isFunction, ACTION_ROTATE } from '@cropper/utils';\n\nvar style = `:host{display:block;min-height:100px;min-width:200px;overflow:hidden;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}:host([background]){background-color:#fff;background-image:repeating-linear-gradient(45deg,#ccc 25%,transparent 0,transparent 75%,#ccc 0,#ccc),repeating-linear-gradient(45deg,#ccc 25%,transparent 0,transparent 75%,#ccc 0,#ccc);background-image:repeating-conic-gradient(#ccc 0 25%,#fff 0 50%);background-position:0 0,.5rem .5rem;background-size:1rem 1rem}:host([disabled]){pointer-events:none}:host([disabled]):after{bottom:0;content:\"\";cursor:not-allowed;display:block;left:0;pointer-events:none;position:absolute;right:0;top:0}`;\n\nclass CropperCanvas extends CropperElement {\n constructor() {\n super(...arguments);\n this.$onPointerDown = null;\n this.$onPointerMove = null;\n this.$onPointerUp = null;\n this.$onWheel = null;\n this.$wheeling = false;\n this.$pointers = new Map();\n this.$style = style;\n this.$action = ACTION_NONE;\n this.background = false;\n this.disabled = false;\n this.scaleStep = 0.1;\n this.themeColor = '#39f';\n }\n static get observedAttributes() {\n return super.observedAttributes.concat([\n 'background',\n 'disabled',\n 'scale-step',\n ]);\n }\n connectedCallback() {\n super.connectedCallback();\n if (!this.disabled) {\n this.$bind();\n }\n }\n disconnectedCallback() {\n if (!this.disabled) {\n this.$unbind();\n }\n super.disconnectedCallback();\n }\n $propertyChangedCallback(name, oldValue, newValue) {\n if (Object.is(newValue, oldValue)) {\n return;\n }\n super.$propertyChangedCallback(name, oldValue, newValue);\n switch (name) {\n case 'disabled':\n if (newValue) {\n this.$unbind();\n }\n else {\n this.$bind();\n }\n break;\n }\n }\n $bind() {\n if (!this.$onPointerDown) {\n this.$onPointerDown = this.$handlePointerDown.bind(this);\n on(this, EVENT_POINTER_DOWN, this.$onPointerDown);\n }\n if (!this.$onPointerMove) {\n this.$onPointerMove = this.$handlePointerMove.bind(this);\n on(this.ownerDocument, EVENT_POINTER_MOVE, this.$onPointerMove);\n }\n if (!this.$onPointerUp) {\n this.$onPointerUp = this.$handlePointerUp.bind(this);\n on(this.ownerDocument, EVENT_POINTER_UP, this.$onPointerUp);\n }\n if (!this.$onWheel) {\n this.$onWheel = this.$handleWheel.bind(this);\n on(this, EVENT_WHEEL, this.$onWheel, {\n passive: false,\n capture: true,\n });\n }\n }\n $unbind() {\n if (this.$onPointerDown) {\n off(this, EVENT_POINTER_DOWN, this.$onPointerDown);\n this.$onPointerDown = null;\n }\n if (this.$onPointerMove) {\n off(this.ownerDocument, EVENT_POINTER_MOVE, this.$onPointerMove);\n this.$onPointerMove = null;\n }\n if (this.$onPointerUp) {\n off(this.ownerDocument, EVENT_POINTER_UP, this.$onPointerUp);\n this.$onPointerUp = null;\n }\n if (this.$onWheel) {\n off(this, EVENT_WHEEL, this.$onWheel, {\n capture: true,\n });\n this.$onWheel = null;\n }\n }\n $handlePointerDown(event) {\n const { buttons, button, type } = event;\n if (this.disabled || (\n // Handle pointer or mouse event, and ignore touch event\n ((type === 'pointerdown' && event.pointerType === 'mouse') || type === 'mousedown') && (\n // No primary button (Usually the left button)\n (isNumber(buttons) && buttons !== 1) || (isNumber(button) && button !== 0)\n // Open context menu\n || event.ctrlKey))) {\n return;\n }\n const { $pointers } = this;\n let action = '';\n if (event.changedTouches) {\n Array.from(event.changedTouches).forEach(({ identifier, pageX, pageY, }) => {\n $pointers.set(identifier, {\n startX: pageX,\n startY: pageY,\n endX: pageX,\n endY: pageY,\n });\n });\n }\n else {\n const { pointerId = 0, pageX, pageY } = event;\n $pointers.set(pointerId, {\n startX: pageX,\n startY: pageY,\n endX: pageX,\n endY: pageY,\n });\n }\n if ($pointers.size > 1) {\n action = ACTION_TRANSFORM;\n }\n else if (isElement(event.target)) {\n action = event.target.action || event.target.getAttribute(ATTRIBUTE_ACTION) || '';\n }\n if (this.$emit(EVENT_ACTION_START, {\n action,\n relatedEvent: event,\n }) === false) {\n return;\n }\n // Prevent page zooming in the browsers for iOS.\n event.preventDefault();\n this.$action = action;\n this.style.willChange = 'transform';\n }\n $handlePointerMove(event) {\n const { $action, $pointers } = this;\n if (this.disabled || $action === ACTION_NONE || $pointers.size === 0) {\n return;\n }\n if (this.$emit(EVENT_ACTION_MOVE, {\n action: $action,\n relatedEvent: event,\n }) === false) {\n return;\n }\n // Prevent page scrolling.\n event.preventDefault();\n if (event.changedTouches) {\n Array.from(event.changedTouches).forEach(({ identifier, pageX, pageY, }) => {\n const pointer = $pointers.get(identifier);\n if (pointer) {\n Object.assign(pointer, {\n endX: pageX,\n endY: pageY,\n });\n }\n });\n }\n else {\n const { pointerId = 0, pageX, pageY } = event;\n const pointer = $pointers.get(pointerId);\n if (pointer) {\n Object.assign(pointer, {\n endX: pageX,\n endY: pageY,\n });\n }\n }\n const detail = {\n action: $action,\n relatedEvent: event,\n };\n if ($action === ACTION_TRANSFORM) {\n const pointers2 = new Map($pointers);\n let maxRotateRate = 0;\n let maxScaleRate = 0;\n let rotate = 0;\n let scale = 0;\n let centerX = event.pageX;\n let centerY = event.pageY;\n $pointers.forEach((pointer, pointerId) => {\n pointers2.delete(pointerId);\n pointers2.forEach((pointer2) => {\n let x1 = pointer2.startX - pointer.startX;\n let y1 = pointer2.startY - pointer.startY;\n let x2 = pointer2.endX - pointer.endX;\n let y2 = pointer2.endY - pointer.endY;\n let z1 = 0;\n let z2 = 0;\n let a1 = 0;\n let a2 = 0;\n if (x1 === 0) {\n if (y1 < 0) {\n a1 = Math.PI * 2;\n }\n else if (y1 > 0) {\n a1 = Math.PI;\n }\n }\n else if (x1 > 0) {\n a1 = (Math.PI / 2) + Math.atan(y1 / x1);\n }\n else if (x1 < 0) {\n a1 = (Math.PI * 1.5) + Math.atan(y1 / x1);\n }\n if (x2 === 0) {\n if (y2 < 0) {\n a2 = Math.PI * 2;\n }\n else if (y2 > 0) {\n a2 = Math.PI;\n }\n }\n else if (x2 > 0) {\n a2 = (Math.PI / 2) + Math.atan(y2 / x2);\n }\n else if (x2 < 0) {\n a2 = (Math.PI * 1.5) + Math.atan(y2 / x2);\n }\n if (a2 > 0 || a1 > 0) {\n const rotateRate = a2 - a1;\n const absRotateRate = Math.abs(rotateRate);\n if (absRotateRate > maxRotateRate) {\n maxRotateRate = absRotateRate;\n rotate = rotateRate;\n centerX = (pointer.startX + pointer2.startX) / 2;\n centerY = (pointer.startY + pointer2.startY) / 2;\n }\n }\n x1 = Math.abs(x1);\n y1 = Math.abs(y1);\n x2 = Math.abs(x2);\n y2 = Math.abs(y2);\n if (x1 > 0 && y1 > 0) {\n z1 = Math.sqrt((x1 * x1) + (y1 * y1));\n }\n else if (x1 > 0) {\n z1 = x1;\n }\n else if (y1 > 0) {\n z1 = y1;\n }\n if (x2 > 0 && y2 > 0) {\n z2 = Math.sqrt((x2 * x2) + (y2 * y2));\n }\n else if (x2 > 0) {\n z2 = x2;\n }\n else if (y2 > 0) {\n z2 = y2;\n }\n if (z1 > 0 && z2 > 0) {\n const scaleRate = (z2 - z1) / z1;\n const absScaleRate = Math.abs(scaleRate);\n if (absScaleRate > maxScaleRate) {\n maxScaleRate = absScaleRate;\n scale = scaleRate;\n centerX = (pointer.startX + pointer2.startX) / 2;\n centerY = (pointer.startY + pointer2.startY) / 2;\n }\n }\n });\n });\n const rotatable = maxRotateRate > 0;\n const scalable = maxScaleRate > 0;\n if (rotatable && scalable) {\n detail.rotate = rotate;\n detail.scale = scale;\n detail.centerX = centerX;\n detail.centerY = centerY;\n }\n else if (rotatable) {\n detail.action = ACTION_ROTATE;\n detail.rotate = rotate;\n detail.centerX = centerX;\n detail.centerY = centerY;\n }\n else if (scalable) {\n detail.action = ACTION_SCALE;\n detail.scale = scale;\n detail.centerX = centerX;\n detail.centerY = centerY;\n }\n else {\n detail.action = ACTION_NONE;\n }\n }\n else {\n const [pointer] = Array.from($pointers.values());\n Object.assign(detail, pointer);\n }\n // Override the starting coordinate\n $pointers.forEach((pointer) => {\n pointer.startX = pointer.endX;\n pointer.startY = pointer.endY;\n });\n if (detail.action !== ACTION_NONE) {\n this.$emit(EVENT_ACTION, detail, {\n cancelable: false,\n });\n }\n }\n $handlePointerUp(event) {\n const { $action, $pointers } = this;\n if (this.disabled || $action === ACTION_NONE) {\n return;\n }\n if (this.$emit(EVENT_ACTION_END, {\n action: $action,\n relatedEvent: event,\n }) === false) {\n return;\n }\n event.preventDefault();\n if (event.changedTouches) {\n Array.from(event.changedTouches).forEach(({ identifier, }) => {\n $pointers.delete(identifier);\n });\n }\n else {\n const { pointerId = 0 } = event;\n $pointers.delete(pointerId);\n }\n if ($pointers.size === 0) {\n this.style.willChange = '';\n this.$action = ACTION_NONE;\n }\n }\n $handleWheel(event) {\n if (this.disabled) {\n return;\n }\n event.preventDefault();\n // Limit wheel speed to prevent zoom too fast (#21)\n if (this.$wheeling) {\n return;\n }\n this.$wheeling = true;\n // Debounce by 50ms\n setTimeout(() => {\n this.$wheeling = false;\n }, 50);\n const delta = event.deltaY > 0 ? -1 : 1;\n const scale = delta * this.scaleStep;\n this.$emit(EVENT_ACTION, {\n action: ACTION_SCALE,\n scale,\n relatedEvent: event,\n }, {\n cancelable: false,\n });\n }\n /**\n * Changes the current action to a new one.\n * @param {string} action The new action.\n * @returns {CropperCanvas} Returns `this` for chaining.\n */\n $setAction(action) {\n if (isString(action)) {\n this.$action = action;\n }\n return this;\n }\n /**\n * Generates a real canvas element, with the image draw into if there is one.\n * @param {object} [options] The available options.\n * @param {number} [options.width] The width of the canvas.\n * @param {number} [options.height] The height of the canvas.\n * @param {Function} [options.beforeDraw] The function called before drawing the image onto the canvas.\n * @returns {Promise} Returns a promise that resolves to the generated canvas element.\n */\n $toCanvas(options) {\n return new Promise((resolve, reject) => {\n if (!this.isConnected) {\n reject(new Error('The current element is not connected to the DOM.'));\n return;\n }\n const canvas = document.createElement('canvas');\n let width = this.offsetWidth;\n let height = this.offsetHeight;\n let scale = 1;\n if (isPlainObject(options)\n && (isPositiveNumber(options.width) || isPositiveNumber(options.height))) {\n ({ width, height } = getAdjustedSizes({\n aspectRatio: width / height,\n width: options.width,\n height: options.height,\n }));\n scale = width / this.offsetWidth;\n }\n canvas.width = width;\n canvas.height = height;\n const cropperImage = this.querySelector(this.$getTagNameOf(CROPPER_IMAGE));\n if (!cropperImage) {\n resolve(canvas);\n return;\n }\n cropperImage.$ready().then((image) => {\n const context = canvas.getContext('2d');\n if (context) {\n const [a, b, c, d, e, f] = cropperImage.$getTransform();\n let newE = e;\n let newF = f;\n let destWidth = image.naturalWidth;\n let destHeight = image.naturalHeight;\n if (scale !== 1) {\n newE *= scale;\n newF *= scale;\n destWidth *= scale;\n destHeight *= scale;\n }\n const centerX = destWidth / 2;\n const centerY = destHeight / 2;\n context.fillStyle = 'transparent';\n context.fillRect(0, 0, width, height);\n if (isPlainObject(options) && isFunction(options.beforeDraw)) {\n options.beforeDraw.call(this, context, canvas);\n }\n context.save();\n // Move the transform origin to the center of the image.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/transform-origin\n context.translate(centerX, centerY);\n context.transform(a, b, c, d, newE, newF);\n // Reset the transform origin to the top-left of the image.\n context.translate(-centerX, -centerY);\n context.drawImage(image, 0, 0, destWidth, destHeight);\n context.restore();\n }\n resolve(canvas);\n }).catch(reject);\n });\n }\n}\nCropperCanvas.$name = CROPPER_CANVAS;\nCropperCanvas.$version = '2.0.0-beta.4';\n\nexport { CropperCanvas as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_IMAGE, CROPPER_CANVAS, on, EVENT_ACTION_START, EVENT_ACTION_END, EVENT_ACTION, EVENT_LOAD, off, ACTION_TRANSFORM, ACTION_ROTATE, ACTION_SCALE, ACTION_NONE, ACTION_MOVE, CROPPER_SELECTION, once, EVENT_ERROR, isFunction, isNumber, toAngleInRadian, multiplyMatrices, EVENT_TRANSFORM } from '@cropper/utils';\n\nvar style = `:host{display:inline-block}img{display:block;height:100%;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}`;\n\nconst canvasCache = new WeakMap();\nconst NATIVE_ATTRIBUTES = [\n 'alt',\n 'crossorigin',\n 'decoding',\n 'importance',\n 'loading',\n 'referrerpolicy',\n 'sizes',\n 'src',\n 'srcset',\n];\nclass CropperImage extends CropperElement {\n constructor() {\n super(...arguments);\n this.$matrix = [1, 0, 0, 1, 0, 0];\n this.$onLoad = null;\n this.$onCanvasAction = null;\n this.$onCanvasActionEnd = null;\n this.$onCanvasActionStart = null;\n this.$actionStartTarget = null;\n this.$style = style;\n this.$image = new Image();\n this.rotatable = true;\n this.scalable = true;\n this.skewable = true;\n this.slottable = false;\n this.translatable = true;\n }\n set $canvas(element) {\n canvasCache.set(this, element);\n }\n get $canvas() {\n return canvasCache.get(this);\n }\n static get observedAttributes() {\n return super.observedAttributes.concat(NATIVE_ATTRIBUTES, [\n 'rotatable',\n 'scalable',\n 'skewable',\n 'translatable',\n ]);\n }\n attributeChangedCallback(name, oldValue, newValue) {\n if (Object.is(newValue, oldValue)) {\n return;\n }\n super.attributeChangedCallback(name, oldValue, newValue);\n // Inherits the native attributes\n if (NATIVE_ATTRIBUTES.includes(name)) {\n this.$image.setAttribute(name, newValue);\n }\n }\n connectedCallback() {\n super.connectedCallback();\n const { $image } = this;\n const $canvas = this.closest(this.$getTagNameOf(CROPPER_CANVAS));\n if ($canvas) {\n this.$canvas = $canvas;\n this.$setStyles({\n // Make it a block element to avoid side effects (#1074).\n display: 'block',\n position: 'absolute',\n });\n this.$onCanvasActionStart = (event) => {\n var _a, _b;\n this.$actionStartTarget = (_b = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.relatedEvent) === null || _b === void 0 ? void 0 : _b.target;\n };\n this.$onCanvasActionEnd = () => {\n this.$actionStartTarget = null;\n };\n this.$onCanvasAction = this.$handleAction.bind(this);\n on($canvas, EVENT_ACTION_START, this.$onCanvasActionStart);\n on($canvas, EVENT_ACTION_END, this.$onCanvasActionEnd);\n on($canvas, EVENT_ACTION, this.$onCanvasAction);\n }\n this.$onLoad = this.$handleLoad.bind(this);\n on($image, EVENT_LOAD, this.$onLoad);\n this.$getShadowRoot().appendChild($image);\n }\n disconnectedCallback() {\n const { $image, $canvas } = this;\n if ($canvas) {\n if (this.$onCanvasActionStart) {\n off($canvas, EVENT_ACTION_START, this.$onCanvasActionStart);\n this.$onCanvasActionStart = null;\n }\n if (this.$onCanvasActionEnd) {\n off($canvas, EVENT_ACTION_END, this.$onCanvasActionEnd);\n this.$onCanvasActionEnd = null;\n }\n if (this.$onCanvasAction) {\n off($canvas, EVENT_ACTION, this.$onCanvasAction);\n this.$onCanvasAction = null;\n }\n }\n if ($image && this.$onLoad) {\n off($image, EVENT_LOAD, this.$onLoad);\n this.$onLoad = null;\n }\n this.$getShadowRoot().removeChild($image);\n super.disconnectedCallback();\n }\n $handleLoad() {\n const { $image } = this;\n this.$setStyles({\n width: $image.naturalWidth,\n height: $image.naturalHeight,\n });\n if (this.$canvas) {\n this.$center('cover');\n }\n }\n $handleAction(event) {\n if (this.hidden || !(this.rotatable || this.scalable || this.translatable)) {\n return;\n }\n const { $canvas } = this;\n const { detail } = event;\n if (detail) {\n const { relatedEvent } = detail;\n let { action } = detail;\n if (action === ACTION_TRANSFORM && (!this.rotatable || !this.scalable)) {\n if (this.rotatable) {\n action = ACTION_ROTATE;\n }\n else if (this.scalable) {\n action = ACTION_SCALE;\n }\n else {\n action = ACTION_NONE;\n }\n }\n switch (action) {\n case ACTION_MOVE:\n if (this.translatable) {\n const cropperSelectionTagName = this.$getTagNameOf(CROPPER_SELECTION);\n let selection = $canvas.querySelector(cropperSelectionTagName);\n if (selection && selection.multiple && !selection.active) {\n selection = $canvas.querySelector(`${cropperSelectionTagName}[active]`);\n }\n if (!selection || selection.hidden || !selection.movable\n || !(this.$actionStartTarget && selection.contains(this.$actionStartTarget))) {\n this.$move(detail.endX - detail.startX, detail.endY - detail.startY);\n }\n }\n break;\n case ACTION_ROTATE:\n if (this.rotatable) {\n if (relatedEvent) {\n const { x, y } = this.getBoundingClientRect();\n this.$rotate(detail.rotate, relatedEvent.clientX - x, relatedEvent.clientY - y);\n }\n else {\n this.$rotate(detail.rotate);\n }\n }\n break;\n case ACTION_SCALE:\n if (this.scalable) {\n if (relatedEvent) {\n const { x, y } = this.getBoundingClientRect();\n this.$zoom(detail.scale, relatedEvent.clientX - x, relatedEvent.clientY - y);\n }\n else {\n this.$zoom(detail.scale);\n }\n }\n break;\n case ACTION_TRANSFORM:\n if (this.rotatable && this.scalable) {\n const { rotate } = detail;\n let { scale } = detail;\n if (scale < 0) {\n scale = 1 / (1 - scale);\n }\n else {\n scale += 1;\n }\n const cos = Math.cos(rotate);\n const sin = Math.sin(rotate);\n const [scaleX, skewY, skewX, scaleY] = [\n cos * scale,\n sin * scale,\n -sin * scale,\n cos * scale,\n ];\n if (relatedEvent) {\n const clientRect = this.getBoundingClientRect();\n const x = relatedEvent.clientX - clientRect.x;\n const y = relatedEvent.clientY - clientRect.y;\n const [a, b, c, d] = this.$matrix;\n const originX = clientRect.width / 2;\n const originY = clientRect.height / 2;\n const moveX = x - originX;\n const moveY = y - originY;\n const translateX = ((moveX * d) - (c * moveY)) / ((a * d) - (c * b));\n const translateY = (moveY - (b * translateX)) / d;\n /**\n * Equals to\n * this.$rotate(rotate, x, y);\n * this.$scale(scale, x, y);\n */\n this.$transform(scaleX, skewY, skewX, scaleY, translateX * (1 - scaleX) + translateY * skewX, translateY * (1 - scaleY) + translateX * skewY);\n }\n else {\n /**\n * Equals to\n * this.$rotate(rotate);\n * this.$scale(scale);\n */\n this.$transform(scaleX, skewY, skewX, scaleY, 0, 0);\n }\n }\n break;\n }\n }\n }\n /**\n * Defers the callback to execute after successfully loading the image.\n * @param {Function} [callback] The callback to execute after successfully loading the image.\n * @returns {Promise} Returns a promise that resolves to the image element.\n */\n $ready(callback) {\n const { $image } = this;\n const promise = new Promise((resolve, reject) => {\n const error = new Error('Failed to load the image source');\n if ($image.complete) {\n if ($image.naturalWidth > 0 && $image.naturalHeight > 0) {\n resolve($image);\n }\n else {\n reject(error);\n }\n }\n else {\n const onLoad = () => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n off($image, EVENT_ERROR, onError);\n resolve($image);\n };\n const onError = () => {\n off($image, EVENT_LOAD, onLoad);\n reject(error);\n };\n once($image, EVENT_LOAD, onLoad);\n once($image, EVENT_ERROR, onError);\n }\n });\n if (isFunction(callback)) {\n promise.then((image) => {\n callback(image);\n return image;\n });\n }\n return promise;\n }\n /**\n * Aligns the image to the center of its parent element.\n * @param {string} [size] The size of the image.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $center(size) {\n const { parentElement } = this;\n if (!parentElement) {\n return this;\n }\n const container = parentElement.getBoundingClientRect();\n const containerWidth = container.width;\n const containerHeight = container.height;\n const { x, y, width, height, } = this.getBoundingClientRect();\n const startX = x + (width / 2);\n const startY = y + (height / 2);\n const endX = container.x + (containerWidth / 2);\n const endY = container.y + (containerHeight / 2);\n this.$move(endX - startX, endY - startY);\n if (size && (width !== containerWidth || height !== containerHeight)) {\n const scaleX = containerWidth / width;\n const scaleY = containerHeight / height;\n switch (size) {\n case 'cover':\n this.$scale(Math.max(scaleX, scaleY));\n break;\n case 'contain':\n this.$scale(Math.min(scaleX, scaleY));\n break;\n }\n }\n return this;\n }\n /**\n * Moves the image.\n * @param {number} x The moving distance in the horizontal direction.\n * @param {number} [y] The moving distance in the vertical direction.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $move(x, y = x) {\n if (this.translatable && isNumber(x) && isNumber(y)) {\n const [a, b, c, d] = this.$matrix;\n const e = ((x * d) - (c * y)) / ((a * d) - (c * b));\n const f = (y - (b * e)) / d;\n this.$translate(e, f);\n }\n return this;\n }\n /**\n * Moves the image to a specific position.\n * @param {number} x The new position in the horizontal direction.\n * @param {number} [y] The new position in the vertical direction.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $moveTo(x, y = x) {\n if (this.translatable && isNumber(x) && isNumber(y)) {\n const [a, b, c, d] = this.$matrix;\n const e = ((x * d) - (c * y)) / ((a * d) - (c * b));\n const f = (y - (b * e)) / d;\n this.$setTransform(a, b, c, d, e, f);\n }\n return this;\n }\n /**\n * Rotates the image.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/rotate}\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/rotate}\n * @param {number|string} angle The rotation angle (in radians).\n * @param {number} [x] The rotation origin in the horizontal, defaults to the center of the image.\n * @param {number} [y] The rotation origin in the vertical, defaults to the center of the image.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $rotate(angle, x, y) {\n if (this.rotatable) {\n const radian = toAngleInRadian(angle);\n const cos = Math.cos(radian);\n const sin = Math.sin(radian);\n const [scaleX, skewY, skewX, scaleY] = [cos, sin, -sin, cos];\n if (isNumber(x) && isNumber(y)) {\n const [a, b, c, d] = this.$matrix;\n const { width, height } = this.getBoundingClientRect();\n const originX = width / 2;\n const originY = height / 2;\n const moveX = x - originX;\n const moveY = y - originY;\n const translateX = ((moveX * d) - (c * moveY)) / ((a * d) - (c * b));\n const translateY = (moveY - (b * translateX)) / d;\n /**\n * Equals to\n * this.$translate(translateX, translateX);\n * this.$rotate(angle);\n * this.$translate(-translateX, -translateX);\n */\n this.$transform(scaleX, skewY, skewX, scaleY, translateX * (1 - scaleX) - translateY * skewX, translateY * (1 - scaleY) - translateX * skewY);\n }\n else {\n this.$transform(scaleX, skewY, skewX, scaleY, 0, 0);\n }\n }\n return this;\n }\n /**\n * Zooms the image.\n * @param {number} scale The zoom factor. Positive numbers for zooming in, and negative numbers for zooming out.\n * @param {number} [x] The zoom origin in the horizontal, defaults to the center of the image.\n * @param {number} [y] The zoom origin in the vertical, defaults to the center of the image.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $zoom(scale, x, y) {\n if (!this.scalable || scale === 0) {\n return this;\n }\n if (scale < 0) {\n scale = 1 / (1 - scale);\n }\n else {\n scale += 1;\n }\n if (isNumber(x) && isNumber(y)) {\n const [a, b, c, d] = this.$matrix;\n const { width, height } = this.getBoundingClientRect();\n const originX = width / 2;\n const originY = height / 2;\n const moveX = x - originX;\n const moveY = y - originY;\n const translateX = ((moveX * d) - (c * moveY)) / ((a * d) - (c * b));\n const translateY = (moveY - (b * translateX)) / d;\n /**\n * Equals to\n * this.$translate(translateX, translateX);\n * this.$scale(scale);\n * this.$translate(-translateX, -translateX);\n */\n this.$transform(scale, 0, 0, scale, translateX * (1 - scale), translateY * (1 - scale));\n }\n else {\n this.$scale(scale);\n }\n return this;\n }\n /**\n * Scales the image.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/scale}\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/scale}\n * @param {number} x The scaling factor in the horizontal direction.\n * @param {number} [y] The scaling factor in the vertical direction.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $scale(x, y = x) {\n if (this.scalable) {\n this.$transform(x, 0, 0, y, 0, 0);\n }\n return this;\n }\n /**\n * Skews the image.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skew}\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/transform}\n * @param {number|string} x The skewing angle in the horizontal direction.\n * @param {number|string} [y] The skewing angle in the vertical direction.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $skew(x, y = 0) {\n if (this.skewable) {\n const radianX = toAngleInRadian(x);\n const radianY = toAngleInRadian(y);\n this.$transform(1, Math.tan(radianY), Math.tan(radianX), 1, 0, 0);\n }\n return this;\n }\n /**\n * Translates the image.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/translate}\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/translate}\n * @param {number} x The translating distance in the horizontal direction.\n * @param {number} [y] The translating distance in the vertical direction.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $translate(x, y = x) {\n if (this.translatable && isNumber(x) && isNumber(y)) {\n this.$transform(1, 0, 0, 1, x, y);\n }\n return this;\n }\n /**\n * Transforms the image.\n * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix}\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/transform}\n * @param {number} a The scaling factor in the horizontal direction.\n * @param {number} b The skewing angle in the vertical direction.\n * @param {number} c The skewing angle in the horizontal direction.\n * @param {number} d The scaling factor in the vertical direction.\n * @param {number} e The translating distance in the horizontal direction.\n * @param {number} f The translating distance in the vertical direction.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $transform(a, b, c, d, e, f) {\n if (isNumber(a)\n && isNumber(b)\n && isNumber(c)\n && isNumber(d)\n && isNumber(e)\n && isNumber(f)) {\n return this.$setTransform(multiplyMatrices(this.$matrix, [a, b, c, d, e, f]));\n }\n return this;\n }\n /**\n * Resets (overrides) the current transform to the specific identity matrix.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setTransform}\n * @param {number|Array} a The scaling factor in the horizontal direction.\n * @param {number} b The skewing angle in the vertical direction.\n * @param {number} c The skewing angle in the horizontal direction.\n * @param {number} d The scaling factor in the vertical direction.\n * @param {number} e The translating distance in the horizontal direction.\n * @param {number} f The translating distance in the vertical direction.\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $setTransform(a, b, c, d, e, f) {\n if (this.rotatable || this.scalable || this.skewable || this.translatable) {\n if (Array.isArray(a)) {\n [a, b, c, d, e, f] = a;\n }\n if (isNumber(a)\n && isNumber(b)\n && isNumber(c)\n && isNumber(d)\n && isNumber(e)\n && isNumber(f)) {\n const newMatrix = [a, b, c, d, e, f];\n if (this.$emit(EVENT_TRANSFORM, {\n matrix: newMatrix,\n oldMatrix: this.$matrix,\n }) === false) {\n return this;\n }\n this.$matrix = newMatrix;\n this.style.transform = `matrix(${newMatrix.join(', ')})`;\n }\n }\n return this;\n }\n /**\n * Retrieves the current transformation matrix being applied to the element.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getTransform}\n * @returns {Array} Returns the readonly transformation matrix.\n */\n $getTransform() {\n return this.$matrix.slice();\n }\n /**\n * Resets the current transform to the initial identity matrix.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/resetTransform}\n * @returns {CropperImage} Returns `this` for chaining.\n */\n $resetTransform() {\n return this.$setTransform([1, 0, 0, 1, 0, 0]);\n }\n}\nCropperImage.$name = CROPPER_IMAGE;\nCropperImage.$version = '2.0.0-beta.4';\n\nexport { CropperImage as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_SHADE, CROPPER_CANVAS, CROPPER_SELECTION, ACTION_SELECT, on, EVENT_ACTION_START, EVENT_ACTION_END, EVENT_CHANGE, off, isNumber, WINDOW } from '@cropper/utils';\n\nvar style = `:host{display:block;height:0;left:0;outline:var(--theme-color) solid 1px;position:relative;top:0;width:0}:host([transparent]){outline-color:transparent}`;\n\nconst canvasCache = new WeakMap();\nclass CropperShade extends CropperElement {\n constructor() {\n super(...arguments);\n this.$onCanvasChange = null;\n this.$onCanvasActionEnd = null;\n this.$onCanvasActionStart = null;\n this.$style = style;\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n this.slottable = false;\n this.themeColor = 'rgba(0, 0, 0, 0.65)';\n }\n set $canvas(element) {\n canvasCache.set(this, element);\n }\n get $canvas() {\n return canvasCache.get(this);\n }\n static get observedAttributes() {\n return super.observedAttributes.concat([\n 'height',\n 'width',\n 'x',\n 'y',\n ]);\n }\n connectedCallback() {\n super.connectedCallback();\n const $canvas = this.closest(this.$getTagNameOf(CROPPER_CANVAS));\n if ($canvas) {\n this.$canvas = $canvas;\n this.style.position = 'absolute';\n const $selection = $canvas.querySelector(this.$getTagNameOf(CROPPER_SELECTION));\n if ($selection) {\n this.$onCanvasActionStart = (event) => {\n if ($selection.hidden && event.detail.action === ACTION_SELECT) {\n this.hidden = false;\n }\n };\n this.$onCanvasActionEnd = (event) => {\n if ($selection.hidden && event.detail.action === ACTION_SELECT) {\n this.hidden = true;\n }\n };\n this.$onCanvasChange = (event) => {\n const { x, y, width, height, } = event.detail;\n this.$change(x, y, width, height);\n if ($selection.hidden || (x === 0 && y === 0 && width === 0 && height === 0)) {\n this.hidden = true;\n }\n };\n on($canvas, EVENT_ACTION_START, this.$onCanvasActionStart);\n on($canvas, EVENT_ACTION_END, this.$onCanvasActionEnd);\n on($canvas, EVENT_CHANGE, this.$onCanvasChange);\n }\n }\n this.$render();\n }\n disconnectedCallback() {\n const { $canvas } = this;\n if ($canvas) {\n if (this.$onCanvasActionStart) {\n off($canvas, EVENT_ACTION_START, this.$onCanvasActionStart);\n this.$onCanvasActionStart = null;\n }\n if (this.$onCanvasActionEnd) {\n off($canvas, EVENT_ACTION_END, this.$onCanvasActionEnd);\n this.$onCanvasActionEnd = null;\n }\n if (this.$onCanvasChange) {\n off($canvas, EVENT_CHANGE, this.$onCanvasChange);\n this.$onCanvasChange = null;\n }\n }\n super.disconnectedCallback();\n }\n /**\n * Changes the position and/or size of the shade.\n * @param {number} x The new position in the horizontal direction.\n * @param {number} y The new position in the vertical direction.\n * @param {number} [width] The new width.\n * @param {number} [height] The new height.\n * @returns {CropperShade} Returns `this` for chaining.\n */\n $change(x, y, width = this.width, height = this.height) {\n if (!isNumber(x)\n || !isNumber(y)\n || !isNumber(width)\n || !isNumber(height)\n || (x === this.x && y === this.y && width === this.width && height === this.height)) {\n return this;\n }\n if (this.hidden) {\n this.hidden = false;\n }\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n return this.$render();\n }\n /**\n * Resets the shade to its initial position and size.\n * @returns {CropperShade} Returns `this` for chaining.\n */\n $reset() {\n return this.$change(0, 0, 0, 0);\n }\n /**\n * Refreshes the position or size of the shade.\n * @returns {CropperShade} Returns `this` for chaining.\n */\n $render() {\n return this.$setStyles({\n transform: `translate(${this.x}px, ${this.y}px)`,\n width: this.width,\n height: this.height,\n outlineWidth: WINDOW.innerWidth,\n });\n }\n}\nCropperShade.$name = CROPPER_SHADE;\nCropperShade.$version = '2.0.0-beta.4';\n\nexport { CropperShade as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_HANDLE, ACTION_NONE } from '@cropper/utils';\n\nvar style = `:host{background-color:var(--theme-color);display:block}:host([action=move]),:host([action=select]){height:100%;left:0;position:absolute;top:0;width:100%}:host([action=move]){cursor:move}:host([action=select]){cursor:crosshair}:host([action$=-resize]){background-color:transparent;height:15px;position:absolute;width:15px}:host([action$=-resize]):after{background-color:var(--theme-color);content:\"\";display:block;height:5px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:5px}:host([action=n-resize]),:host([action=s-resize]){cursor:ns-resize;left:50%;transform:translateX(-50%);width:100%}:host([action=n-resize]){top:-8px}:host([action=s-resize]){bottom:-8px}:host([action=e-resize]),:host([action=w-resize]){cursor:ew-resize;height:100%;top:50%;transform:translateY(-50%)}:host([action=e-resize]){right:-8px}:host([action=w-resize]){left:-8px}:host([action=ne-resize]){cursor:nesw-resize;right:-8px;top:-8px}:host([action=nw-resize]){cursor:nwse-resize;left:-8px;top:-8px}:host([action=se-resize]){bottom:-8px;cursor:nwse-resize;right:-8px}:host([action=se-resize]):after{height:15px;width:15px}@media (pointer:coarse){:host([action=se-resize]):after{height:10px;width:10px}}@media (pointer:fine){:host([action=se-resize]):after{height:5px;width:5px}}:host([action=sw-resize]){bottom:-8px;cursor:nesw-resize;left:-8px}:host([plain]){background-color:transparent}`;\n\nclass CropperHandle extends CropperElement {\n constructor() {\n super(...arguments);\n this.$onCanvasCropEnd = null;\n this.$onCanvasCropStart = null;\n this.$style = style;\n this.action = ACTION_NONE;\n this.plain = false;\n this.slottable = false;\n this.themeColor = 'rgba(51, 153, 255, 0.5)';\n }\n static get observedAttributes() {\n return super.observedAttributes.concat([\n 'action',\n 'plain',\n ]);\n }\n}\nCropperHandle.$name = CROPPER_HANDLE;\nCropperHandle.$version = '2.0.0-beta.4';\n\nexport { CropperHandle as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_SELECTION, EVENT_CHANGE, on, EVENT_KEYDOWN, off, isPositiveNumber, CROPPER_CANVAS, getAdjustedSizes, EVENT_ACTION_START, EVENT_ACTION_END, EVENT_ACTION, ACTION_SELECT, ACTION_SCALE, getOffset, ACTION_MOVE, ACTION_RESIZE_SOUTHEAST, ACTION_RESIZE_SOUTHWEST, ACTION_RESIZE_NORTHWEST, ACTION_RESIZE_NORTHEAST, isNumber, isPlainObject, CROPPER_IMAGE, isFunction, ACTION_RESIZE_WEST, ACTION_RESIZE_EAST, ACTION_RESIZE_SOUTH, ACTION_RESIZE_NORTH } from '@cropper/utils';\n\nvar style = `:host{display:block;left:0;position:relative;right:0}:host([outlined]){outline:1px solid var(--theme-color)}:host([multiple]){outline:1px dashed hsla(0,0%,100%,.5)}:host([multiple]):after{bottom:0;content:\"\";cursor:pointer;display:block;left:0;position:absolute;right:0;top:0}:host([multiple][active]){outline-color:var(--theme-color);z-index:1}:host([multiple])>*{visibility:hidden}:host([multiple][active])>*{visibility:visible}:host([multiple][active]):after{display:none}`;\n\nconst canvasCache = new WeakMap();\nclass CropperSelection extends CropperElement {\n constructor() {\n super(...arguments);\n this.$onCanvasAction = null;\n this.$onCanvasActionStart = null;\n this.$onCanvasActionEnd = null;\n this.$onDocumentKeyDown = null;\n this.$action = '';\n this.$actionStartTarget = null;\n this.$style = style;\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n this.aspectRatio = NaN;\n this.initialAspectRatio = NaN;\n this.initialCoverage = NaN;\n this.active = false;\n this.movable = false;\n this.resizable = false;\n this.zoomable = false;\n this.multiple = false;\n this.keyboard = false;\n this.outlined = false;\n this.precise = false;\n }\n set $canvas(element) {\n canvasCache.set(this, element);\n }\n get $canvas() {\n return canvasCache.get(this);\n }\n static get observedAttributes() {\n return super.observedAttributes.concat([\n 'active',\n 'aspect-ratio',\n 'height',\n 'initial-aspect-ratio',\n 'initial-coverage',\n 'keyboard',\n 'movable',\n 'multiple',\n 'outlined',\n 'precise',\n 'resizable',\n 'width',\n 'x',\n 'y',\n 'zoomable',\n ]);\n }\n $propertyChangedCallback(name, oldValue, newValue) {\n if (Object.is(newValue, oldValue)) {\n return;\n }\n super.$propertyChangedCallback(name, oldValue, newValue);\n switch (name) {\n case 'aspectRatio':\n if (!isPositiveNumber(newValue)) {\n this.aspectRatio = NaN;\n }\n break;\n case 'initialAspectRatio':\n if (!isPositiveNumber(newValue)) {\n this.initialAspectRatio = NaN;\n }\n break;\n case 'initialCoverage':\n if (!isPositiveNumber(newValue) || newValue > 1) {\n this.initialCoverage = NaN;\n }\n break;\n case 'keyboard':\n this.$nextTick(() => {\n if (this.$canvas) {\n if (newValue) {\n if (!this.$onDocumentKeyDown) {\n this.$onDocumentKeyDown = this.$handleKeyDown.bind(this);\n on(this.ownerDocument, EVENT_KEYDOWN, this.$onDocumentKeyDown);\n }\n }\n else if (this.$onDocumentKeyDown) {\n off(this.ownerDocument, EVENT_KEYDOWN, this.$onDocumentKeyDown);\n this.$onDocumentKeyDown = null;\n }\n }\n });\n break;\n case 'multiple':\n this.$nextTick(() => {\n if (this.$canvas) {\n const selections = this.$getSelections();\n if (newValue) {\n selections.forEach((selection) => {\n selection.active = false;\n });\n this.active = true;\n this.$emit(EVENT_CHANGE, {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height,\n });\n }\n else {\n this.active = false;\n selections.slice(1).forEach((selection) => {\n this.$removeSelection(selection);\n });\n }\n }\n });\n break;\n }\n }\n connectedCallback() {\n super.connectedCallback();\n const $canvas = this.closest(this.$getTagNameOf(CROPPER_CANVAS));\n if ($canvas) {\n this.$canvas = $canvas;\n this.$setStyles({\n position: 'absolute',\n transform: `translate(${this.x}px, ${this.y}px)`,\n });\n if (!this.hidden) {\n this.$render();\n }\n const { initialCoverage, parentElement } = this;\n if (isPositiveNumber(initialCoverage) && parentElement) {\n const aspectRatio = this.aspectRatio || this.initialAspectRatio;\n const { offsetWidth, offsetHeight } = parentElement;\n let width = offsetWidth * initialCoverage;\n let height = offsetHeight * initialCoverage;\n if (isPositiveNumber(aspectRatio)) {\n ({ width, height } = getAdjustedSizes({ aspectRatio, width, height }));\n }\n this.$change(this.x, this.y, width, height);\n this.$center();\n }\n this.$onCanvasActionStart = this.$handleActionStart.bind(this);\n this.$onCanvasActionEnd = this.$handleActionEnd.bind(this);\n this.$onCanvasAction = this.$handleAction.bind(this);\n on($canvas, EVENT_ACTION_START, this.$onCanvasActionStart);\n on($canvas, EVENT_ACTION_END, this.$onCanvasActionStart);\n on($canvas, EVENT_ACTION, this.$onCanvasAction);\n }\n else {\n this.$render();\n }\n }\n disconnectedCallback() {\n const { $canvas } = this;\n if ($canvas) {\n if (this.$onCanvasActionStart) {\n off($canvas, EVENT_ACTION_START, this.$onCanvasActionStart);\n this.$onCanvasActionStart = null;\n }\n if (this.$onCanvasActionEnd) {\n off($canvas, EVENT_ACTION_END, this.$onCanvasActionEnd);\n this.$onCanvasActionEnd = null;\n }\n if (this.$onCanvasAction) {\n off($canvas, EVENT_ACTION, this.$onCanvasAction);\n this.$onCanvasAction = null;\n }\n }\n super.disconnectedCallback();\n }\n $getSelections() {\n let selections = [];\n if (this.parentElement) {\n selections = Array.from(this.parentElement.querySelectorAll(this.$getTagNameOf(CROPPER_SELECTION)));\n }\n return selections;\n }\n $createSelection() {\n const newSelection = this.cloneNode(true);\n if (this.hasAttribute('id')) {\n newSelection.removeAttribute('id');\n }\n this.active = false;\n if (this.parentElement) {\n this.parentElement.insertBefore(newSelection, this.nextSibling);\n }\n return newSelection;\n }\n $removeSelection(selection = this) {\n if (this.parentElement) {\n const selections = this.$getSelections();\n if (selections.length > 1) {\n const index = selections.indexOf(selection);\n const activeSelection = selections[index + 1] || selections[index - 1];\n if (activeSelection) {\n selection.active = false;\n this.parentElement.removeChild(selection);\n activeSelection.active = true;\n activeSelection.$emit(EVENT_CHANGE, {\n x: activeSelection.x,\n y: activeSelection.y,\n width: activeSelection.width,\n height: activeSelection.height,\n });\n }\n }\n else {\n this.$reset();\n this.hidden = true;\n }\n }\n }\n $handleActionStart(event) {\n var _a, _b;\n const relatedTarget = (_b = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.relatedEvent) === null || _b === void 0 ? void 0 : _b.target;\n this.$action = '';\n this.$actionStartTarget = relatedTarget;\n if (!this.hidden\n && this.multiple\n && !this.active\n && relatedTarget === this\n && this.parentElement) {\n this.$getSelections().forEach((selection) => {\n selection.active = false;\n });\n this.active = true;\n this.$emit(EVENT_CHANGE, {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height,\n });\n }\n }\n $handleAction(event) {\n const { currentTarget, detail } = event;\n if (currentTarget && detail) {\n const { relatedEvent } = detail;\n let { action } = detail;\n // Switching to another selection\n if (!action && this.multiple) {\n // Get the `action` property from the focusing in selection\n action = this.$action || (relatedEvent === null || relatedEvent === void 0 ? void 0 : relatedEvent.target.action);\n this.$action = action;\n }\n if (!action\n || (this.hidden && action !== ACTION_SELECT)\n || (this.multiple && !this.active && action !== ACTION_SCALE)) {\n return;\n }\n const moveX = detail.endX - detail.startX;\n const moveY = detail.endY - detail.startY;\n const { width, height } = this;\n let { aspectRatio } = this;\n // Locking aspect ratio by holding shift key\n if (!isPositiveNumber(aspectRatio) && event.shiftKey) {\n aspectRatio = isPositiveNumber(width) && isPositiveNumber(height) ? width / height : 1;\n }\n switch (action) {\n case ACTION_SELECT: {\n const { $canvas } = this;\n const offset = getOffset(currentTarget);\n (this.multiple && !this.hidden ? this.$createSelection() : this).$change(detail.startX - offset.left, detail.startY - offset.top, moveX, moveY, aspectRatio);\n action = ACTION_RESIZE_SOUTHEAST;\n if (moveX < 0) {\n if (moveY > 0) {\n action = ACTION_RESIZE_SOUTHWEST;\n }\n else if (moveY < 0) {\n action = ACTION_RESIZE_NORTHWEST;\n }\n }\n else if (moveX > 0) {\n if (moveY < 0) {\n action = ACTION_RESIZE_NORTHEAST;\n }\n }\n if ($canvas) {\n $canvas.$action = action;\n }\n break;\n }\n case ACTION_MOVE:\n if (this.movable\n && (this.$actionStartTarget && this.contains(this.$actionStartTarget))) {\n this.$move(moveX, moveY);\n }\n break;\n case ACTION_SCALE:\n if (relatedEvent && this.zoomable) {\n const offset = getOffset(currentTarget);\n this.$zoom(detail.scale, relatedEvent.pageX - offset.left, relatedEvent.pageY - offset.top);\n }\n break;\n default:\n this.$resize(action, moveX, moveY, aspectRatio);\n }\n }\n }\n $handleActionEnd() {\n this.$action = '';\n this.$actionStartTarget = null;\n }\n $handleKeyDown(event) {\n if (this.hidden\n || !this.keyboard\n || (this.multiple && !this.active)\n || event.defaultPrevented) {\n return;\n }\n switch (event.key) {\n case 'Backspace':\n if (event.metaKey) {\n event.preventDefault();\n this.$removeSelection();\n }\n break;\n case 'Delete':\n event.preventDefault();\n this.$removeSelection();\n break;\n // Move to the left\n case 'ArrowLeft':\n event.preventDefault();\n this.$move(-1, 0);\n break;\n // Move to the right\n case 'ArrowRight':\n event.preventDefault();\n this.$move(1, 0);\n break;\n // Move to the top\n case 'ArrowUp':\n event.preventDefault();\n this.$move(0, -1);\n break;\n // Move to the bottom\n case 'ArrowDown':\n event.preventDefault();\n this.$move(0, 1);\n break;\n case '+':\n event.preventDefault();\n this.$zoom(0.1);\n break;\n case '-':\n event.preventDefault();\n this.$zoom(-0.1);\n break;\n }\n }\n /**\n * Aligns the selection to the center of its parent element.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $center() {\n const { parentElement } = this;\n if (!parentElement) {\n return this;\n }\n const x = (parentElement.offsetWidth - this.width) / 2;\n const y = (parentElement.offsetHeight - this.height) / 2;\n return this.$change(x, y);\n }\n /**\n * Moves the selection.\n * @param {number} x The moving distance in the horizontal direction.\n * @param {number} [y] The moving distance in the vertical direction.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $move(x, y = x) {\n return this.$moveTo(this.x + x, this.y + y);\n }\n /**\n * Moves the selection to a specific position.\n * @param {number} x The new position in the horizontal direction.\n * @param {number} [y] The new position in the vertical direction.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $moveTo(x, y = x) {\n if (!this.movable) {\n return this;\n }\n return this.$change(x, y);\n }\n /**\n * Adjusts the size the selection on a specific side or corner.\n * @param {string} action Indicates the side or corner to resize.\n * @param {number} [offsetX] The horizontal offset of the specific side or corner.\n * @param {number} [offsetY] The vertical offset of the specific side or corner.\n * @param {number} [aspectRatio] The aspect ratio for computing the new size if it is necessary.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $resize(action, offsetX = 0, offsetY = 0, aspectRatio = this.aspectRatio) {\n if (!this.resizable) {\n return this;\n }\n const hasValidAspectRatio = isPositiveNumber(aspectRatio);\n const { $canvas } = this;\n let { x, y, width, height, } = this;\n switch (action) {\n case ACTION_RESIZE_NORTH:\n y += offsetY;\n height -= offsetY;\n if (height < 0) {\n action = ACTION_RESIZE_SOUTH;\n height = -height;\n y -= height;\n }\n if (hasValidAspectRatio) {\n offsetX = offsetY * aspectRatio;\n x += offsetX / 2;\n width -= offsetX;\n if (width < 0) {\n width = -width;\n x -= width;\n }\n }\n break;\n case ACTION_RESIZE_EAST:\n width += offsetX;\n if (width < 0) {\n action = ACTION_RESIZE_WEST;\n width = -width;\n x -= width;\n }\n if (hasValidAspectRatio) {\n offsetY = offsetX / aspectRatio;\n y -= offsetY / 2;\n height += offsetY;\n if (height < 0) {\n height = -height;\n y -= height;\n }\n }\n break;\n case ACTION_RESIZE_SOUTH:\n height += offsetY;\n if (height < 0) {\n action = ACTION_RESIZE_NORTH;\n height = -height;\n y -= height;\n }\n if (hasValidAspectRatio) {\n offsetX = offsetY * aspectRatio;\n x -= offsetX / 2;\n width += offsetX;\n if (width < 0) {\n width = -width;\n x -= width;\n }\n }\n break;\n case ACTION_RESIZE_WEST:\n x += offsetX;\n width -= offsetX;\n if (width < 0) {\n action = ACTION_RESIZE_EAST;\n width = -width;\n x -= width;\n }\n if (hasValidAspectRatio) {\n offsetY = offsetX / aspectRatio;\n y += offsetY / 2;\n height -= offsetY;\n if (height < 0) {\n height = -height;\n y -= height;\n }\n }\n break;\n case ACTION_RESIZE_NORTHEAST:\n if (hasValidAspectRatio) {\n offsetY = -offsetX / aspectRatio;\n }\n y += offsetY;\n height -= offsetY;\n width += offsetX;\n if (width < 0 && height < 0) {\n action = ACTION_RESIZE_SOUTHWEST;\n width = -width;\n height = -height;\n x -= width;\n y -= height;\n }\n else if (width < 0) {\n action = ACTION_RESIZE_NORTHWEST;\n width = -width;\n x -= width;\n }\n else if (height < 0) {\n action = ACTION_RESIZE_SOUTHEAST;\n height = -height;\n y -= height;\n }\n break;\n case ACTION_RESIZE_NORTHWEST:\n if (hasValidAspectRatio) {\n offsetY = offsetX / aspectRatio;\n }\n x += offsetX;\n y += offsetY;\n width -= offsetX;\n height -= offsetY;\n if (width < 0 && height < 0) {\n action = ACTION_RESIZE_SOUTHEAST;\n width = -width;\n height = -height;\n x -= width;\n y -= height;\n }\n else if (width < 0) {\n action = ACTION_RESIZE_NORTHEAST;\n width = -width;\n x -= width;\n }\n else if (height < 0) {\n action = ACTION_RESIZE_SOUTHWEST;\n height = -height;\n y -= height;\n }\n break;\n case ACTION_RESIZE_SOUTHEAST:\n if (hasValidAspectRatio) {\n offsetY = offsetX / aspectRatio;\n }\n width += offsetX;\n height += offsetY;\n if (width < 0 && height < 0) {\n action = ACTION_RESIZE_NORTHWEST;\n width = -width;\n height = -height;\n x -= width;\n y -= height;\n }\n else if (width < 0) {\n action = ACTION_RESIZE_SOUTHWEST;\n width = -width;\n x -= width;\n }\n else if (height < 0) {\n action = ACTION_RESIZE_NORTHEAST;\n height = -height;\n y -= height;\n }\n break;\n case ACTION_RESIZE_SOUTHWEST:\n if (hasValidAspectRatio) {\n offsetY = -offsetX / aspectRatio;\n }\n x += offsetX;\n width -= offsetX;\n height += offsetY;\n if (width < 0 && height < 0) {\n action = ACTION_RESIZE_NORTHEAST;\n width = -width;\n height = -height;\n x -= width;\n y -= height;\n }\n else if (width < 0) {\n action = ACTION_RESIZE_SOUTHEAST;\n width = -width;\n x -= width;\n }\n else if (height < 0) {\n action = ACTION_RESIZE_NORTHWEST;\n height = -height;\n y -= height;\n }\n break;\n }\n if ($canvas) {\n $canvas.$setAction(action);\n }\n return this.$change(x, y, width, height);\n }\n /**\n * Zooms the selection.\n * @param {number} scale The zoom factor. Positive numbers for zooming in, and negative numbers for zooming out.\n * @param {number} [x] The zoom origin in the horizontal, defaults to the center of the selection.\n * @param {number} [y] The zoom origin in the vertical, defaults to the center of the selection.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $zoom(scale, x, y) {\n if (!this.zoomable || scale === 0) {\n return this;\n }\n if (scale < 0) {\n scale = 1 / (1 - scale);\n }\n else {\n scale += 1;\n }\n const { width, height } = this;\n const newWidth = width * scale;\n const newHeight = height * scale;\n let newX = this.x;\n let newY = this.y;\n if (isNumber(x) && isNumber(y)) {\n newX -= (newWidth - width) * ((x - this.x) / width);\n newY -= (newHeight - height) * ((y - this.y) / height);\n }\n else {\n // Zoom from the center of the selection\n newX -= (newWidth - width) / 2;\n newY -= (newHeight - height) / 2;\n }\n return this.$change(newX, newY, newWidth, newHeight);\n }\n /**\n * Changes the position and/or size of the selection.\n * @param {number} x The new position in the horizontal direction.\n * @param {number} y The new position in the vertical direction.\n * @param {number} [width] The new width.\n * @param {number} [height] The new height.\n * @param {number} [aspectRatio] The new aspect ratio for this change only.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $change(x, y, width = this.width, height = this.height, aspectRatio = this.aspectRatio) {\n if (!isNumber(x) || !isNumber(y) || !isNumber(width) || !isNumber(height)) {\n return this;\n }\n if (!this.precise) {\n x = Math.round(x);\n y = Math.round(y);\n width = Math.round(width);\n height = Math.round(height);\n }\n if (x === this.x && y === this.y && width === this.width && height === this.height) {\n return this;\n }\n if (this.hidden) {\n this.hidden = false;\n }\n if (isPositiveNumber(aspectRatio)) {\n ({ width, height } = getAdjustedSizes({ aspectRatio, width, height }, 'cover'));\n }\n if (this.$emit(EVENT_CHANGE, {\n x,\n y,\n width,\n height,\n }) === false) {\n return this;\n }\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n return this.$render();\n }\n /**\n * Resets the selection to its initial position and size.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $reset() {\n return this.$change(0, 0, 0, 0);\n }\n /**\n * Refreshes the position or size of the selection.\n * @returns {CropperSelection} Returns `this` for chaining.\n */\n $render() {\n return this.$setStyles({\n transform: `translate(${this.x}px, ${this.y}px)`,\n width: this.width,\n height: this.height,\n });\n }\n /**\n * Generates a real canvas element, with the image (selected area only) draw into if there is one.\n * @param {object} [options] The available options.\n * @param {number} [options.width] The width of the canvas.\n * @param {number} [options.height] The height of the canvas.\n * @param {Function} [options.beforeDraw] The function called before drawing the image onto the canvas.\n * @returns {Promise} Returns a promise that resolves to the generated canvas element.\n */\n $toCanvas(options) {\n return new Promise((resolve, reject) => {\n if (!this.isConnected) {\n reject(new Error('The current element is not connected to the DOM.'));\n return;\n }\n const canvas = document.createElement('canvas');\n let { width, height } = this;\n let scale = 1;\n if (isPlainObject(options)\n && (isPositiveNumber(options.width) || isPositiveNumber(options.height))) {\n ({ width, height } = getAdjustedSizes({\n aspectRatio: width / height,\n width: options.width,\n height: options.height,\n }));\n scale = width / this.width;\n }\n canvas.width = width;\n canvas.height = height;\n if (!this.$canvas) {\n resolve(canvas);\n return;\n }\n const cropperImage = this.$canvas.querySelector(this.$getTagNameOf(CROPPER_IMAGE));\n if (!cropperImage) {\n resolve(canvas);\n return;\n }\n cropperImage.$ready().then((image) => {\n const context = canvas.getContext('2d');\n if (context) {\n const [a, b, c, d, e, f] = cropperImage.$getTransform();\n const offsetX = -this.x;\n const offsetY = -this.y;\n const translateX = ((offsetX * d) - (c * offsetY)) / ((a * d) - (c * b));\n const translateY = (offsetY - (b * translateX)) / d;\n let newE = a * translateX + c * translateY + e;\n let newF = b * translateX + d * translateY + f;\n let destWidth = image.naturalWidth;\n let destHeight = image.naturalHeight;\n if (scale !== 1) {\n newE *= scale;\n newF *= scale;\n destWidth *= scale;\n destHeight *= scale;\n }\n const centerX = destWidth / 2;\n const centerY = destHeight / 2;\n context.fillStyle = 'transparent';\n context.fillRect(0, 0, width, height);\n if (isPlainObject(options) && isFunction(options.beforeDraw)) {\n options.beforeDraw.call(this, context, canvas);\n }\n context.save();\n // Move the transform origin to the center of the image.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/transform-origin\n context.translate(centerX, centerY);\n context.transform(a, b, c, d, newE, newF);\n // Move the transform origin to the top-left of the image.\n context.translate(-centerX, -centerY);\n context.drawImage(image, 0, 0, destWidth, destHeight);\n context.restore();\n }\n resolve(canvas);\n }).catch(reject);\n });\n }\n}\nCropperSelection.$name = CROPPER_SELECTION;\nCropperSelection.$version = '2.0.0-beta.4';\n\nexport { CropperSelection as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_GIRD } from '@cropper/utils';\n\nvar style = `:host{display:flex;flex-direction:column;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}:host([bordered]){border:1px dashed var(--theme-color)}:host([covered]){bottom:0;left:0;position:absolute;right:0;top:0}:host>span{display:flex;flex:1}:host>span+span{border-top:1px dashed var(--theme-color)}:host>span>span{flex:1}:host>span>span+span{border-left:1px dashed var(--theme-color)}`;\n\nclass CropperGrid extends CropperElement {\n constructor() {\n super(...arguments);\n this.$style = style;\n this.bordered = false;\n this.columns = 3;\n this.covered = false;\n this.rows = 3;\n this.slottable = false;\n this.themeColor = 'rgba(238, 238, 238, 0.5)';\n }\n static get observedAttributes() {\n return super.observedAttributes.concat([\n 'bordered',\n 'columns',\n 'covered',\n 'rows',\n ]);\n }\n $propertyChangedCallback(name, oldValue, newValue) {\n if (Object.is(newValue, oldValue)) {\n return;\n }\n super.$propertyChangedCallback(name, oldValue, newValue);\n if (name === 'rows' || name === 'columns') {\n this.$render();\n }\n }\n connectedCallback() {\n super.connectedCallback();\n this.$render();\n }\n $render() {\n const shadow = this.$getShadowRoot();\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < this.rows; i += 1) {\n const row = document.createElement('span');\n row.setAttribute('role', 'row');\n for (let j = 0; j < this.columns; j += 1) {\n const column = document.createElement('span');\n column.setAttribute('role', 'gridcell');\n row.appendChild(column);\n }\n fragment.appendChild(row);\n }\n if (shadow) {\n shadow.innerHTML = '';\n shadow.appendChild(fragment);\n }\n }\n}\nCropperGrid.$name = CROPPER_GIRD;\nCropperGrid.$version = '2.0.0-beta.4';\n\nexport { CropperGrid as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_CROSSHAIR } from '@cropper/utils';\n\nvar style = `:host{display:inline-block;height:1em;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1em}:host:after,:host:before{background-color:var(--theme-color);content:\"\";display:block;position:absolute}:host:before{height:1px;left:0;top:50%;transform:translateY(-50%);width:100%}:host:after{height:100%;left:50%;top:0;transform:translateX(-50%);width:1px}:host([centered]){left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}`;\n\nclass CropperCrosshair extends CropperElement {\n constructor() {\n super(...arguments);\n this.$style = style;\n this.centered = false;\n this.slottable = false;\n this.themeColor = 'rgba(238, 238, 238, 0.5)';\n }\n static get observedAttributes() {\n return super.observedAttributes.concat([\n 'centered',\n ]);\n }\n}\nCropperCrosshair.$name = CROPPER_CROSSHAIR;\nCropperCrosshair.$version = '2.0.0-beta.4';\n\nexport { CropperCrosshair as default };\n","import CropperElement from '@cropper/element';\nimport { CROPPER_VIEWER, CROPPER_SELECTION, isElement, on, EVENT_CHANGE, CROPPER_CANVAS, CROPPER_IMAGE, EVENT_LOAD, EVENT_TRANSFORM, off } from '@cropper/utils';\n\nvar style = `:host{display:block;height:100%;overflow:hidden;position:relative;width:100%}`;\n\nconst imageCache = new WeakMap();\nconst selectionCache = new WeakMap();\nconst sourceImageCache = new WeakMap();\nconst RESIZE_BOTH = 'both';\nconst RESIZE_HORIZONTAL = 'horizontal';\nconst RESIZE_VERTICAL = 'vertical';\nconst RESIZE_NONE = 'none';\nclass CropperViewer extends CropperElement {\n constructor() {\n super(...arguments);\n this.$onSelectionChange = null;\n this.$onSourceImageLoad = null;\n this.$onSourceImageTransform = null;\n this.$scale = 1;\n this.$style = style;\n this.resize = RESIZE_VERTICAL;\n this.selection = '';\n this.slottable = false;\n }\n set $image(element) {\n imageCache.set(this, element);\n }\n get $image() {\n return imageCache.get(this);\n }\n set $sourceImage(element) {\n sourceImageCache.set(this, element);\n }\n get $sourceImage() {\n return sourceImageCache.get(this);\n }\n set $selection(element) {\n selectionCache.set(this, element);\n }\n get $selection() {\n return selectionCache.get(this);\n }\n static get observedAttributes() {\n return super.observedAttributes.concat([\n 'resize',\n 'selection',\n ]);\n }\n connectedCallback() {\n super.connectedCallback();\n let $selection = null;\n if (this.selection) {\n $selection = this.ownerDocument.querySelector(this.selection);\n }\n else {\n $selection = this.closest(this.$getTagNameOf(CROPPER_SELECTION));\n }\n if (isElement($selection)) {\n this.$selection = $selection;\n this.$onSelectionChange = this.$handleSelectionChange.bind(this);\n on($selection, EVENT_CHANGE, this.$onSelectionChange);\n const $canvas = $selection.closest(this.$getTagNameOf(CROPPER_CANVAS));\n if ($canvas) {\n const $sourceImage = $canvas.querySelector(this.$getTagNameOf(CROPPER_IMAGE));\n if ($sourceImage) {\n this.$sourceImage = $sourceImage;\n this.$image = $sourceImage.cloneNode(true);\n this.$getShadowRoot().appendChild(this.$image);\n this.$onSourceImageLoad = this.$handleSourceImageLoad.bind(this);\n this.$onSourceImageTransform = this.$handleSourceImageTransform.bind(this);\n on($sourceImage.$image, EVENT_LOAD, this.$onSourceImageLoad);\n on($sourceImage, EVENT_TRANSFORM, this.$onSourceImageTransform);\n }\n }\n this.$render();\n }\n }\n disconnectedCallback() {\n const { $selection, $sourceImage } = this;\n if ($selection && this.$onSelectionChange) {\n off($selection, EVENT_CHANGE, this.$onSelectionChange);\n this.$onSelectionChange = null;\n }\n if ($sourceImage && this.$onSourceImageLoad) {\n off($sourceImage.$image, EVENT_LOAD, this.$onSourceImageLoad);\n this.$onSourceImageLoad = null;\n }\n if ($sourceImage && this.$onSourceImageTransform) {\n off($sourceImage, EVENT_TRANSFORM, this.$onSourceImageTransform);\n this.$onSourceImageTransform = null;\n }\n super.disconnectedCallback();\n }\n $handleSelectionChange(event) {\n this.$render(event.detail);\n }\n $handleSourceImageLoad() {\n const { $image, $sourceImage } = this;\n const oldSrc = $image.getAttribute('src');\n const newSrc = $sourceImage.getAttribute('src');\n if (newSrc && newSrc !== oldSrc) {\n $image.setAttribute('src', newSrc);\n $image.$ready(() => {\n setTimeout(() => {\n const { x, y } = this.$selection;\n this.$transformImageByOffset($sourceImage.$getTransform(), -x, -y);\n });\n });\n }\n }\n $handleSourceImageTransform(event) {\n const { x, y } = this.$selection;\n this.$transformImageByOffset(event.detail.matrix, -x, -y);\n }\n $render(selection) {\n const { x, y, width, height, } = selection || this.$selection;\n const styles = {};\n const { clientWidth, clientHeight } = this;\n let newWidth = clientWidth;\n let newHeight = clientHeight;\n let scale = NaN;\n switch (this.resize) {\n case RESIZE_BOTH:\n scale = 1;\n newWidth = width;\n newHeight = height;\n styles.width = width;\n styles.height = height;\n break;\n case RESIZE_HORIZONTAL:\n scale = clientHeight / height;\n newWidth = width * scale;\n styles.width = newWidth;\n break;\n case RESIZE_VERTICAL:\n scale = clientWidth / width;\n newHeight = height * scale;\n styles.height = newHeight;\n break;\n case RESIZE_NONE:\n default:\n if (clientWidth > 0) {\n scale = clientWidth / width;\n }\n else if (clientHeight > 0) {\n scale = clientHeight / height;\n }\n }\n this.$scale = scale;\n this.$setStyles(styles);\n if (this.$sourceImage) {\n this.$transformImageByOffset(this.$sourceImage.$getTransform(), -x, -y);\n }\n }\n $transformImageByOffset(matrix, x, y) {\n const { $image, $scale, $sourceImage, } = this;\n if ($sourceImage && $image && $scale > 0) {\n const [a, b, c, d, e, f] = matrix;\n const translateX = ((x * d) - (c * y)) / ((a * d) - (c * b));\n const translateY = (y - (b * translateX)) / d;\n const newE = a * translateX + c * translateY + e;\n const newF = b * translateX + d * translateY + f;\n $image.$ready((image) => {\n this.$setStyles.call($image, {\n width: image.naturalWidth * $scale,\n height: image.naturalHeight * $scale,\n });\n });\n $image.$setTransform(a, b, c, d, newE * $scale, newF * $scale);\n }\n }\n}\nCropperViewer.$name = CROPPER_VIEWER;\nCropperViewer.$version = '2.0.0-beta.4';\n\nexport { RESIZE_BOTH, RESIZE_HORIZONTAL, RESIZE_NONE, RESIZE_VERTICAL, CropperViewer as default };\n","/*! Cropper.js v2.0.0-beta.4 | (c) 2015-present Chen Fengyuan | MIT */\nimport { isString, isElement, CROPPER_IMAGE, CROPPER_CANVAS, CROPPER_SELECTION } from '@cropper/utils';\nexport * from '@cropper/utils';\nimport { CropperCanvas, CropperCrosshair, CropperGrid, CropperHandle, CropperImage, CropperSelection, CropperShade, CropperViewer } from '@cropper/elements';\nexport * from '@cropper/elements';\n\nvar DEFAULT_TEMPLATE = ('<cropper-canvas background>'\n + '<cropper-image></cropper-image>'\n + '<cropper-shade hidden></cropper-shade>'\n + '<cropper-handle action=\"select\" plain></cropper-handle>'\n + '<cropper-selection initial-coverage=\"0.5\" movable resizable zoomable>'\n + '<cropper-grid role=\"grid\" bordered covered></cropper-grid>'\n + '<cropper-crosshair centered></cropper-crosshair>'\n + '<cropper-handle action=\"move\" theme-color=\"rgba(255, 255, 255, 0.35)\"></cropper-handle>'\n + '<cropper-handle action=\"n-resize\"></cropper-handle>'\n + '<cropper-handle action=\"e-resize\"></cropper-handle>'\n + '<cropper-handle action=\"s-resize\"></cropper-handle>'\n + '<cropper-handle action=\"w-resize\"></cropper-handle>'\n + '<cropper-handle action=\"ne-resize\"></cropper-handle>'\n + '<cropper-handle action=\"nw-resize\"></cropper-handle>'\n + '<cropper-handle action=\"se-resize\"></cropper-handle>'\n + '<cropper-handle action=\"sw-resize\"></cropper-handle>'\n + '</cropper-selection>'\n + '</cropper-canvas>');\n\nconst REGEXP_ALLOWED_ELEMENTS = /^img|canvas$/;\nconst REGEXP_BLOCKED_TAGS = /<(\\/?(?:script|style)[^>]*)>/gi;\nconst DEFAULT_OPTIONS = {\n template: DEFAULT_TEMPLATE,\n};\nCropperCanvas.$define();\nCropperCrosshair.$define();\nCropperGrid.$define();\nCropperHandle.$define();\nCropperImage.$define();\nCropperSelection.$define();\nCropperShade.$define();\nCropperViewer.$define();\nclass Cropper {\n constructor(element, options) {\n this.options = DEFAULT_OPTIONS;\n if (isString(element)) {\n element = document.querySelector(element);\n }\n if (!isElement(element) || !REGEXP_ALLOWED_ELEMENTS.test(element.localName)) {\n throw new Error('The first argument is required and must be an <img> or <canvas> element.');\n }\n this.element = element;\n options = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);\n this.options = options;\n const { ownerDocument } = element;\n let { container } = options;\n if (container) {\n if (isString(container)) {\n container = ownerDocument.querySelector(container);\n }\n if (!isElement(container)) {\n throw new Error('The `container` option must be an element or a valid selector.');\n }\n }\n if (!isElement(container)) {\n if (element.parentElement) {\n container = element.parentElement;\n }\n else {\n container = ownerDocument.body;\n }\n }\n this.container = container;\n const tagName = element.localName;\n let src = '';\n if (tagName === 'img') {\n ({ src } = element);\n }\n else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n src = element.toDataURL();\n }\n const { template } = options;\n if (template && isString(template)) {\n const templateElement = document.createElement('template');\n const documentFragment = document.createDocumentFragment();\n templateElement.innerHTML = template.replace(REGEXP_BLOCKED_TAGS, '&lt;$1&gt;');\n documentFragment.appendChild(templateElement.content);\n Array.from(documentFragment.querySelectorAll(CROPPER_IMAGE)).forEach((image) => {\n image.setAttribute('src', src);\n image.setAttribute('alt', element.alt || 'The image to crop');\n });\n if (element.parentElement) {\n element.style.display = 'none';\n container.insertBefore(documentFragment, element.nextSibling);\n }\n else {\n container.appendChild(documentFragment);\n }\n }\n }\n getCropperCanvas() {\n return this.container.querySelector(CROPPER_CANVAS);\n }\n getCropperImage() {\n return this.container.querySelector(CROPPER_IMAGE);\n }\n getCropperSelection() {\n return this.container.querySelector(CROPPER_SELECTION);\n }\n getCropperSelections() {\n return this.container.querySelectorAll(CROPPER_SELECTION);\n }\n}\nCropper.version = '2.0.0-beta.4';\n\nexport { Cropper as default };\n",":host {\n\t@import '../../../style/form/range';\n\t@apply mb-6 flex w-full flex-col items-center justify-between gap-6;\n}\n","import {\n\tComponent,\n\tEvent,\n\tEventEmitter,\n\tHost,\n\tListen,\n\tProp,\n\tState,\n\th,\n} from '@stencil/core';\nimport { clsx } from 'clsx';\nimport 'cropperjs';\nimport { CropperImage, CropperSelection } from 'cropperjs';\n\n@Component({\n\ttag: 'p-cropper',\n\tstyleUrl: 'cropper.component.scss',\n\tshadow: true,\n})\nexport class Cropper {\n\t/**\n\t * Variant of the image that's being cropped\n\t */\n\t@Prop({ reflect: true }) variant: 'user' | 'company' = 'user';\n\n\t/**\n\t * The image to crop (url or base64)\n\t */\n\t@Prop() value: any;\n\n\t/**\n\t * The return type of the onchange\n\t */\n\t@Prop() returnType: 'canvas' | 'base64' = 'base64';\n\n\t/**\n\t * Event when the value changes\n\t */\n\t@Event({\n\t\tbubbles: false,\n\t})\n\tvalueChange: EventEmitter<any>;\n\n\tprivate _imageRef: CropperImage;\n\tprivate _selectionRef: CropperSelection;\n\n\tprivate _maxScale = 0;\n\tprivate _minScale = 0;\n\n\tprivate _resizeDebounceTimeout: NodeJS.Timer;\n\tprivate _toCanvasDebounceTimeout: NodeJS.Timer;\n\n\t@State()\n\tprivate _loaded = false;\n\n\t@State()\n\tprivate _currentScale = 0;\n\n\t@Listen('resize', { target: 'window' })\n\tonResize() {\n\t\tif (this._resizeDebounceTimeout) {\n\t\t\tclearTimeout(this._resizeDebounceTimeout);\n\t\t}\n\n\t\tthis._resizeDebounceTimeout = setTimeout(() => {\n\t\t\tthis._selectionRef.$center();\n\t\t\tthis._imageRef.$center();\n\t\t}, 200);\n\t}\n\n\tcomponentDidLoad() {\n\t\tsetTimeout(() => {\n\t\t\tthis._loaded = true;\n\t\t}, 200);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<Host class=\"p-cropper\">\n\t\t\t\t{this._loaded && (\n\t\t\t\t\t<cropper-canvas\n\t\t\t\t\t\tclass=\"h-[17.5rem] w-full border-0 border-b border-solid border-mystic-medium bg-white\"\n\t\t\t\t\t\tonAction={() => this._onAction()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<cropper-image\n\t\t\t\t\t\t\tsrc={this.value}\n\t\t\t\t\t\t\talt=\"Picture\"\n\t\t\t\t\t\t\tref={(ref) =>\n\t\t\t\t\t\t\t\tthis._setImageRef(ref as CropperImage)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tscalable\n\t\t\t\t\t\t\tcrossorigin=\"anonymous\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<cropper-shade\n\t\t\t\t\t\t\tclass={clsx({\n\t\t\t\t\t\t\t\t'rounded-round': this.variant === 'user',\n\t\t\t\t\t\t\t\trounded: this.variant === 'company',\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\ttheme-color=\"rgba(255, 255, 255, 0.5)\"\n\t\t\t\t\t\t\thidden\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<cropper-selection\n\t\t\t\t\t\t\tinitial-coverage=\"0.7\"\n\t\t\t\t\t\t\taspect-ratio=\"1\"\n\t\t\t\t\t\t\tref={(ref) =>\n\t\t\t\t\t\t\t\t(this._selectionRef = ref as CropperSelection)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<cropper-handle action=\"move\" plain></cropper-handle>\n\t\t\t\t\t</cropper-canvas>\n\t\t\t\t)}\n\n\t\t\t\t<div class=\"flex w-full items-center gap-2 px-14 text-storm-vague tablet:max-w-xs tablet:px-1\">\n\t\t\t\t\t<p-icon variant=\"minus\" />\n\t\t\t\t\t<input\n\t\t\t\t\t\tclass=\"p-input w-full\"\n\t\t\t\t\t\ttype=\"range\"\n\t\t\t\t\t\tmin=\"0\"\n\t\t\t\t\t\tmax=\"100\"\n\t\t\t\t\t\tvalue={this._currentScale}\n\t\t\t\t\t\tonInput={(ev) =>\n\t\t\t\t\t\t\tthis._onInput((ev.target as HTMLInputElement).value)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstep=\"0.5\"\n\t\t\t\t\t/>\n\t\t\t\t\t<p-icon variant=\"plus\" />\n\t\t\t\t</div>\n\t\t\t</Host>\n\t\t);\n\t}\n\n\tprivate _setImageRef(ref: CropperImage) {\n\t\tif (this._imageRef) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._imageRef = ref;\n\t\tthis._imageRef.$ready((image) =>\n\t\t\tsetTimeout(() => this._setInitialState(image), 200)\n\t\t);\n\t}\n\n\tprivate _setInitialState(image) {\n\t\tlet scale: number;\n\t\tif (image.naturalWidth > image.naturalHeight) {\n\t\t\t// set scale by height\n\t\t\tscale = 200 / image.naturalHeight;\n\t\t}\n\n\t\tif (image.naturalHeight >= image.naturalWidth) {\n\t\t\t// set scale by width\n\t\t\tscale = 200 / image.naturalWidth;\n\t\t}\n\n\t\tconst current = this._imageRef.$getTransform();\n\n\t\tthis._minScale = scale;\n\t\tthis._maxScale = current[0];\n\n\t\tthis._selectionRef.$resize('nw-resize', 200, 200, 1);\n\t\tthis._selectionRef.$center();\n\n\t\tthis._setScale(scale);\n\t\tthis._toCanvas();\n\t}\n\n\tprivate _onAction() {\n\t\tthis._setCurrentScale();\n\t\tthis._toCanvas();\n\t}\n\n\tprivate _setScale(\n\t\tscale: number,\n\t\tsetCenter: boolean = true,\n\t\tsetCurrentScale: boolean = true\n\t) {\n\t\tconst transform = this._imageRef.$getTransform();\n\t\tthis._imageRef.$setTransform([\n\t\t\tscale,\n\t\t\t0,\n\t\t\t0,\n\t\t\tscale,\n\t\t\ttransform[4],\n\t\t\ttransform[5],\n\t\t]);\n\n\t\tif (setCenter) {\n\t\t\tthis._imageRef.$center();\n\t\t}\n\n\t\tif (setCurrentScale) {\n\t\t\tthis._setCurrentScale();\n\t\t}\n\t}\n\n\tprivate _setCurrentScale() {\n\t\tconst transform = this._imageRef.$getTransform();\n\t\tconst current = transform[0];\n\n\t\tif (current < this._minScale) {\n\t\t\tthis._setScale(this._minScale, true, false);\n\t\t\tthis._currentScale = 0;\n\t\t\treturn;\n\t\t}\n\n\t\tif (current > this._maxScale) {\n\t\t\tthis._setScale(this._maxScale, true, false);\n\t\t\tthis._currentScale = 100;\n\t\t\treturn;\n\t\t}\n\n\t\tif (current === this._minScale) {\n\t\t\tthis._currentScale = 0;\n\t\t\treturn;\n\t\t}\n\n\t\tif (current === this._maxScale) {\n\t\t\tthis._currentScale = 100;\n\t\t\treturn;\n\t\t}\n\n\t\tconst minMaxDiff = this._maxScale - this._minScale;\n\t\tconst currentDiff = current - this._minScale;\n\n\t\tconst percentage = (currentDiff / minMaxDiff) * 100;\n\t\tthis._currentScale = percentage;\n\t}\n\n\tprivate _onInput(value) {\n\t\tconst transform = this._imageRef.$getTransform();\n\t\tconst current = transform[0];\n\t\tconst minMaxDiff = this._maxScale - this._minScale;\n\n\t\tconst toSet = minMaxDiff * (value / 100);\n\n\t\tif (toSet === current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._setScale(toSet + this._minScale, false, false);\n\t\tthis._currentScale = value;\n\n\t\tthis._toCanvas();\n\t}\n\n\tprivate _toCanvas() {\n\t\tif (this._toCanvasDebounceTimeout) {\n\t\t\tclearTimeout(this._toCanvasDebounceTimeout);\n\t\t}\n\n\t\tthis._toCanvasDebounceTimeout = setTimeout(async () => {\n\t\t\tconst canvas = await this._selectionRef.$toCanvas();\n\t\t\tif (this.returnType === 'canvas') {\n\t\t\t\tthis.valueChange.emit(canvas);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst data = canvas.toDataURL('image/png');\n\t\t\tthis.valueChange.emit(data);\n\t\t}, 200);\n\t}\n}\n"],"mappings":"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"}