ngx-image-cropper 5.0.1 → 6.0.3

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 (64) hide show
  1. package/README.md +1 -0
  2. package/esm2020/lib/component/image-cropper.component.mjs +540 -0
  3. package/esm2020/lib/image-cropper.module.mjs +26 -0
  4. package/esm2020/lib/interfaces/cropper-options.interface.mjs +2 -0
  5. package/esm2020/lib/interfaces/cropper-position.interface.mjs +2 -0
  6. package/esm2020/lib/interfaces/cropper.settings.mjs +51 -0
  7. package/esm2020/lib/interfaces/dimensions.interface.mjs +2 -0
  8. package/esm2020/lib/interfaces/exif-transform.interface.mjs +2 -0
  9. package/esm2020/lib/interfaces/image-cropped-event.interface.mjs +2 -0
  10. package/esm2020/lib/interfaces/image-transform.interface.mjs +2 -0
  11. package/esm2020/lib/interfaces/index.mjs +2 -0
  12. package/esm2020/lib/interfaces/loaded-image.interface.mjs +2 -0
  13. package/esm2020/lib/interfaces/move-start.interface.mjs +7 -0
  14. package/esm2020/lib/services/crop.service.mjs +117 -0
  15. package/esm2020/lib/services/cropper-position.service.mjs +201 -0
  16. package/esm2020/lib/services/load-image.service.mjs +168 -0
  17. package/esm2020/lib/utils/blob.utils.mjs +12 -0
  18. package/esm2020/lib/utils/exif.utils.mjs +89 -0
  19. package/esm2020/lib/utils/hammer.utils.mjs +2 -0
  20. package/esm2020/lib/utils/keyboard.utils.mjs +40 -0
  21. package/esm2020/lib/utils/resize.utils.mjs +75 -0
  22. package/esm2020/ngx-image-cropper.mjs +5 -0
  23. package/esm2020/public-api.mjs +6 -0
  24. package/fesm2015/{ngx-image-cropper.js → ngx-image-cropper.mjs} +252 -1035
  25. package/fesm2015/ngx-image-cropper.mjs.map +1 -0
  26. package/fesm2020/ngx-image-cropper.mjs +1316 -0
  27. package/fesm2020/ngx-image-cropper.mjs.map +1 -0
  28. package/lib/component/image-cropper.component.d.ts +12 -9
  29. package/lib/image-cropper.module.d.ts +6 -0
  30. package/lib/interfaces/cropper.settings.d.ts +1 -1
  31. package/lib/services/crop.service.d.ts +3 -0
  32. package/lib/services/cropper-position.service.d.ts +3 -0
  33. package/lib/services/load-image.service.d.ts +3 -0
  34. package/lib/utils/hammer.utils.d.ts +1 -1
  35. package/ngx-image-cropper.d.ts +1 -3
  36. package/package.json +24 -13
  37. package/bundles/ngx-image-cropper.umd.js +0 -2418
  38. package/bundles/ngx-image-cropper.umd.js.map +0 -1
  39. package/bundles/ngx-image-cropper.umd.min.js +0 -16
  40. package/bundles/ngx-image-cropper.umd.min.js.map +0 -1
  41. package/esm2015/lib/component/image-cropper.component.js +0 -827
  42. package/esm2015/lib/image-cropper.module.js +0 -24
  43. package/esm2015/lib/interfaces/cropper-options.interface.js +0 -56
  44. package/esm2015/lib/interfaces/cropper-position.interface.js +0 -20
  45. package/esm2015/lib/interfaces/cropper.settings.js +0 -140
  46. package/esm2015/lib/interfaces/dimensions.interface.js +0 -16
  47. package/esm2015/lib/interfaces/exif-transform.interface.js +0 -16
  48. package/esm2015/lib/interfaces/image-cropped-event.interface.js +0 -24
  49. package/esm2015/lib/interfaces/image-transform.interface.js +0 -20
  50. package/esm2015/lib/interfaces/index.js +0 -6
  51. package/esm2015/lib/interfaces/loaded-image.interface.js +0 -18
  52. package/esm2015/lib/interfaces/move-start.interface.js +0 -37
  53. package/esm2015/lib/services/crop.service.js +0 -176
  54. package/esm2015/lib/services/cropper-position.service.js +0 -259
  55. package/esm2015/lib/services/load-image.service.js +0 -304
  56. package/esm2015/lib/utils/blob.utils.js +0 -26
  57. package/esm2015/lib/utils/exif.utils.js +0 -128
  58. package/esm2015/lib/utils/hammer.utils.js +0 -29
  59. package/esm2015/lib/utils/keyboard.utils.js +0 -58
  60. package/esm2015/lib/utils/resize.utils.js +0 -116
  61. package/esm2015/ngx-image-cropper.js +0 -13
  62. package/esm2015/public-api.js +0 -11
  63. package/fesm2015/ngx-image-cropper.js.map +0 -1
  64. package/ngx-image-cropper.metadata.json +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ngx-image-cropper.umd.js","sources":["../../../projects/ngx-image-cropper/src/lib/interfaces/cropper.settings.ts","../../../projects/ngx-image-cropper/src/lib/interfaces/move-start.interface.ts","../../../node_modules/tslib/tslib.es6.js","../../../projects/ngx-image-cropper/src/lib/utils/resize.utils.ts","../../../projects/ngx-image-cropper/src/lib/services/crop.service.ts","../../../projects/ngx-image-cropper/src/lib/services/cropper-position.service.ts","../../../projects/ngx-image-cropper/src/lib/utils/exif.utils.ts","../../../projects/ngx-image-cropper/src/lib/services/load-image.service.ts","../../../projects/ngx-image-cropper/src/lib/utils/keyboard.utils.ts","../../../projects/ngx-image-cropper/src/lib/component/image-cropper.component.ts","../../../projects/ngx-image-cropper/src/lib/image-cropper.module.ts","../../../projects/ngx-image-cropper/src/lib/utils/blob.utils.ts"],"sourcesContent":["import { CropperOptions, OutputFormat } from './cropper-options.interface';\nimport { ImageTransform } from './image-transform.interface';\nimport { SimpleChanges } from '@angular/core';\n\nexport class CropperSettings {\n\n // From options\n format: OutputFormat = 'png';\n maintainAspectRatio = true;\n transform: ImageTransform = {};\n aspectRatio = 1;\n resizeToWidth = 0;\n resizeToHeight = 0;\n cropperMinWidth = 0;\n cropperMinHeight = 0;\n cropperMaxHeight = 0;\n cropperMaxWidth = 0;\n cropperStaticWidth = 0;\n cropperStaticHeight = 0;\n canvasRotation = 0;\n initialStepSize = 3;\n roundCropper = false;\n onlyScaleDown = false;\n imageQuality = 92;\n autoCrop = true;\n backgroundColor: string = undefined;\n containWithinAspectRatio = false;\n hideResizeSquares = false;\n alignImage: 'left' | 'center' = 'center';\n\n // Internal\n cropperScaledMinWidth = 20;\n cropperScaledMinHeight = 20;\n cropperScaledMaxWidth = 20;\n cropperScaledMaxHeight = 20;\n stepSize = this.initialStepSize;\n\n setOptions(options: Partial<CropperOptions>): void {\n Object.keys(options)\n .filter((k) => k in this)\n .forEach((k) => this[k] = options[k]);\n this.validateOptions();\n }\n\n setOptionsFromChanges(changes: SimpleChanges): void {\n Object.keys(changes)\n .filter((k) => k in this)\n .forEach((k) => this[k] = changes[k].currentValue);\n this.validateOptions();\n }\n\n private validateOptions(): void {\n if (this.maintainAspectRatio && !this.aspectRatio) {\n throw new Error('`aspectRatio` should > 0 when `maintainAspectRatio` is enabled');\n }\n }\n}\n","export interface MoveStart {\n active: boolean;\n type: MoveTypes | null;\n position: string | null;\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n clientX: number;\n clientY: number;\n}\n\nexport enum MoveTypes {\n Move = 'move',\n Resize = 'resize',\n Pinch = 'pinch'\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/*\n * Hermite resize - fast image resize/resample using Hermite filter.\n * https://github.com/viliusle/Hermite-resize\n */\n\nexport function resizeCanvas(canvas: HTMLCanvasElement, width: number, height: number) {\n const width_source = canvas.width;\n const height_source = canvas.height;\n width = Math.round(width);\n height = Math.round(height);\n\n const ratio_w = width_source / width;\n const ratio_h = height_source / height;\n const ratio_w_half = Math.ceil(ratio_w / 2);\n const ratio_h_half = Math.ceil(ratio_h / 2);\n\n const ctx = canvas.getContext('2d');\n if (ctx) {\n const img = ctx.getImageData(0, 0, width_source, height_source);\n const img2 = ctx.createImageData(width, height);\n const data = img.data;\n const data2 = img2.data;\n\n for (let j = 0; j < height; j++) {\n for (let i = 0; i < width; i++) {\n const x2 = (i + j * width) * 4;\n const center_y = j * ratio_h;\n let weight = 0;\n let weights = 0;\n let weights_alpha = 0;\n let gx_r = 0;\n let gx_g = 0;\n let gx_b = 0;\n let gx_a = 0;\n\n const xx_start = Math.floor(i * ratio_w);\n const yy_start = Math.floor(j * ratio_h);\n let xx_stop = Math.ceil((i + 1) * ratio_w);\n let yy_stop = Math.ceil((j + 1) * ratio_h);\n xx_stop = Math.min(xx_stop, width_source);\n yy_stop = Math.min(yy_stop, height_source);\n\n for (let yy = yy_start; yy < yy_stop; yy++) {\n const dy = Math.abs(center_y - yy) / ratio_h_half;\n const center_x = i * ratio_w;\n const w0 = dy * dy; //pre-calc part of w\n for (let xx = xx_start; xx < xx_stop; xx++) {\n const dx = Math.abs(center_x - xx) / ratio_w_half;\n const w = Math.sqrt(w0 + dx * dx);\n if (w >= 1) {\n //pixel too far\n continue;\n }\n //hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n const pos_x = 4 * (xx + yy * width_source);\n //alpha\n gx_a += weight * data[pos_x + 3];\n weights_alpha += weight;\n //colors\n if (data[pos_x + 3] < 255)\n weight = weight * data[pos_x + 3] / 250;\n gx_r += weight * data[pos_x];\n gx_g += weight * data[pos_x + 1];\n gx_b += weight * data[pos_x + 2];\n weights += weight;\n }\n }\n data2[x2] = gx_r / weights;\n data2[x2 + 1] = gx_g / weights;\n data2[x2 + 2] = gx_b / weights;\n data2[x2 + 3] = gx_a / weights_alpha;\n }\n }\n\n\n canvas.width = width;\n canvas.height = height;\n\n //draw\n ctx.putImageData(img2, 0, 0);\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { CropperPosition, ImageCroppedEvent, LoadedImage } from '../interfaces';\nimport { CropperSettings } from '../interfaces/cropper.settings';\nimport { resizeCanvas } from '../utils/resize.utils';\n\n@Injectable({ providedIn: 'root' })\nexport class CropService {\n\n crop(sourceImage: ElementRef, loadedImage: LoadedImage, cropper: CropperPosition, settings: CropperSettings): ImageCroppedEvent | null {\n const imagePosition = this.getImagePosition(sourceImage, loadedImage, cropper, settings);\n const width = imagePosition.x2 - imagePosition.x1;\n const height = imagePosition.y2 - imagePosition.y1;\n const cropCanvas = document.createElement('canvas') as HTMLCanvasElement;\n cropCanvas.width = width;\n cropCanvas.height = height;\n\n const ctx = cropCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n if (settings.backgroundColor != null) {\n ctx.fillStyle = settings.backgroundColor;\n ctx.fillRect(0, 0, width, height);\n }\n\n const scaleX = (settings.transform.scale || 1) * (settings.transform.flipH ? -1 : 1);\n const scaleY = (settings.transform.scale || 1) * (settings.transform.flipV ? -1 : 1);\n\n const transformedImage = loadedImage.transformed;\n ctx.setTransform(scaleX, 0, 0, scaleY, transformedImage.size.width / 2, transformedImage.size.height / 2);\n ctx.translate(-imagePosition.x1 / scaleX, -imagePosition.y1 / scaleY);\n ctx.rotate((settings.transform.rotate || 0) * Math.PI / 180);\n ctx.drawImage(transformedImage.image, -transformedImage.size.width / 2, -transformedImage.size.height / 2);\n\n const output: ImageCroppedEvent = {\n width, height,\n imagePosition,\n cropperPosition: { ...cropper }\n };\n if (settings.containWithinAspectRatio) {\n output.offsetImagePosition = this.getOffsetImagePosition(sourceImage, loadedImage, cropper, settings);\n }\n const resizeRatio = this.getResizeRatio(width, height, settings);\n if (resizeRatio !== 1) {\n output.width = Math.round(width * resizeRatio);\n output.height = settings.maintainAspectRatio\n ? Math.round(output.width / settings.aspectRatio)\n : Math.round(height * resizeRatio);\n resizeCanvas(cropCanvas, output.width, output.height);\n }\n output.base64 = cropCanvas.toDataURL('image/' + settings.format, this.getQuality(settings));\n return output;\n }\n\n private getImagePosition(sourceImage: ElementRef, loadedImage: LoadedImage, cropper: CropperPosition, settings: CropperSettings): CropperPosition {\n const sourceImageElement = sourceImage.nativeElement;\n const ratio = loadedImage.transformed.size.width / sourceImageElement.offsetWidth;\n\n const out: CropperPosition = {\n x1: Math.round(cropper.x1 * ratio),\n y1: Math.round(cropper.y1 * ratio),\n x2: Math.round(cropper.x2 * ratio),\n y2: Math.round(cropper.y2 * ratio)\n };\n\n if (!settings.containWithinAspectRatio) {\n out.x1 = Math.max(out.x1, 0);\n out.y1 = Math.max(out.y1, 0);\n out.x2 = Math.min(out.x2, loadedImage.transformed.size.width);\n out.y2 = Math.min(out.y2, loadedImage.transformed.size.height);\n }\n\n return out;\n }\n\n private getOffsetImagePosition(sourceImage: ElementRef, loadedImage: LoadedImage, cropper: CropperPosition, settings: CropperSettings): CropperPosition {\n const canvasRotation = settings.canvasRotation + loadedImage.exifTransform.rotate;\n const sourceImageElement = sourceImage.nativeElement;\n const ratio = loadedImage.transformed.size.width / sourceImageElement.offsetWidth;\n let offsetX: number;\n let offsetY: number;\n\n if (canvasRotation % 2) {\n offsetX = (loadedImage.transformed.size.width - loadedImage.original.size.height) / 2;\n offsetY = (loadedImage.transformed.size.height - loadedImage.original.size.width) / 2;\n } else {\n offsetX = (loadedImage.transformed.size.width - loadedImage.original.size.width) / 2;\n offsetY = (loadedImage.transformed.size.height - loadedImage.original.size.height) / 2;\n }\n\n const out: CropperPosition = {\n x1: Math.round(cropper.x1 * ratio) - offsetX,\n y1: Math.round(cropper.y1 * ratio) - offsetY,\n x2: Math.round(cropper.x2 * ratio) - offsetX,\n y2: Math.round(cropper.y2 * ratio) - offsetY\n };\n\n if (!settings.containWithinAspectRatio) {\n out.x1 = Math.max(out.x1, 0);\n out.y1 = Math.max(out.y1, 0);\n out.x2 = Math.min(out.x2, loadedImage.transformed.size.width);\n out.y2 = Math.min(out.y2, loadedImage.transformed.size.height);\n }\n\n return out;\n }\n\n getResizeRatio(width: number, height: number, settings: CropperSettings): number {\n const ratioWidth = settings.resizeToWidth / width;\n const ratioHeight = settings.resizeToHeight / height;\n const ratios = new Array<number>();\n\n if (settings.resizeToWidth > 0) {\n ratios.push(ratioWidth);\n }\n if (settings.resizeToHeight > 0) {\n ratios.push(ratioHeight);\n }\n\n const result = ratios.length === 0 ? 1 : Math.min(...ratios);\n\n if (result > 1 && !settings.onlyScaleDown) {\n return result;\n }\n return Math.min(result, 1);\n }\n\n getQuality(settings: CropperSettings): number {\n return Math.min(1, Math.max(0, settings.imageQuality / 100));\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { CropperPosition, Dimensions, MoveStart } from '../interfaces';\nimport { CropperSettings } from '../interfaces/cropper.settings';\n\n@Injectable({ providedIn: 'root' })\nexport class CropperPositionService {\n\n resetCropperPosition(sourceImage: ElementRef, cropperPosition: CropperPosition, settings: CropperSettings): void {\n if (!sourceImage?.nativeElement) {\n return;\n }\n const sourceImageElement = sourceImage.nativeElement;\n if (settings.cropperStaticHeight && settings.cropperStaticWidth) {\n cropperPosition.x1 = 0;\n cropperPosition.x2 = sourceImageElement.offsetWidth > settings.cropperStaticWidth ?\n settings.cropperStaticWidth : sourceImageElement.offsetWidth;\n cropperPosition.y1 = 0;\n cropperPosition.y2 = sourceImageElement.offsetHeight > settings.cropperStaticHeight ?\n settings.cropperStaticHeight : sourceImageElement.offsetHeight;\n } else {\n const cropperWidth = Math.min(settings.cropperScaledMaxWidth, sourceImageElement.offsetWidth);\n const cropperHeight = Math.min(settings.cropperScaledMaxHeight, sourceImageElement.offsetHeight);\n if (!settings.maintainAspectRatio) {\n cropperPosition.x1 = 0;\n cropperPosition.x2 = cropperWidth;\n cropperPosition.y1 = 0;\n cropperPosition.y2 = cropperHeight;\n } else if (sourceImageElement.offsetWidth / settings.aspectRatio < sourceImageElement.offsetHeight) {\n cropperPosition.x1 = 0;\n cropperPosition.x2 = cropperWidth;\n const cropperHeightWithAspectRatio = cropperWidth / settings.aspectRatio;\n cropperPosition.y1 = (sourceImageElement.offsetHeight - cropperHeightWithAspectRatio) / 2;\n cropperPosition.y2 = cropperPosition.y1 + cropperHeightWithAspectRatio;\n } else {\n cropperPosition.y1 = 0;\n cropperPosition.y2 = cropperHeight;\n const cropperWidthWithAspectRatio = cropperHeight * settings.aspectRatio;\n cropperPosition.x1 = (sourceImageElement.offsetWidth - cropperWidthWithAspectRatio) / 2;\n cropperPosition.x2 = cropperPosition.x1 + cropperWidthWithAspectRatio;\n }\n }\n }\n\n move(event: any, moveStart: MoveStart, cropperPosition: CropperPosition) {\n const diffX = this.getClientX(event) - moveStart.clientX;\n const diffY = this.getClientY(event) - moveStart.clientY;\n\n cropperPosition.x1 = moveStart.x1 + diffX;\n cropperPosition.y1 = moveStart.y1 + diffY;\n cropperPosition.x2 = moveStart.x2 + diffX;\n cropperPosition.y2 = moveStart.y2 + diffY;\n }\n\n resize(event: any, moveStart: MoveStart, cropperPosition: CropperPosition, maxSize: Dimensions, settings: CropperSettings): void {\n const moveX = this.getClientX(event) - moveStart.clientX;\n const moveY = this.getClientY(event) - moveStart.clientY;\n switch (moveStart.position) {\n case 'left':\n cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth),\n cropperPosition.x2 - settings.cropperScaledMinWidth);\n break;\n case 'topleft':\n cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth),\n cropperPosition.x2 - settings.cropperScaledMinWidth);\n cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight),\n cropperPosition.y2 - settings.cropperScaledMinHeight);\n break;\n case 'top':\n cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight),\n cropperPosition.y2 - settings.cropperScaledMinHeight);\n break;\n case 'topright':\n cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth),\n cropperPosition.x1 + settings.cropperScaledMinWidth);\n cropperPosition.y1 = Math.min(Math.max(moveStart.y1 + moveY, cropperPosition.y2 - settings.cropperScaledMaxHeight),\n cropperPosition.y2 - settings.cropperScaledMinHeight);\n break;\n case 'right':\n cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth),\n cropperPosition.x1 + settings.cropperScaledMinWidth);\n break;\n case 'bottomright':\n cropperPosition.x2 = Math.max(Math.min(moveStart.x2 + moveX, cropperPosition.x1 + settings.cropperScaledMaxWidth),\n cropperPosition.x1 + settings.cropperScaledMinWidth);\n cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight),\n cropperPosition.y1 + settings.cropperScaledMinHeight);\n break;\n case 'bottom':\n cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight),\n cropperPosition.y1 + settings.cropperScaledMinHeight);\n break;\n case 'bottomleft':\n cropperPosition.x1 = Math.min(Math.max(moveStart.x1 + moveX, cropperPosition.x2 - settings.cropperScaledMaxWidth),\n cropperPosition.x2 - settings.cropperScaledMinWidth);\n cropperPosition.y2 = Math.max(Math.min(moveStart.y2 + moveY, cropperPosition.y1 + settings.cropperScaledMaxHeight),\n cropperPosition.y1 + settings.cropperScaledMinHeight);\n break;\n case 'center':\n const scale = event.scale;\n const newWidth = Math.min(\n Math.max(settings.cropperScaledMinWidth, (Math.abs(moveStart.x2 - moveStart.x1)) * scale),\n settings.cropperScaledMaxWidth);\n const newHeight = Math.min(\n Math.max(settings.cropperScaledMinHeight, (Math.abs(moveStart.y2 - moveStart.y1)) * scale),\n settings.cropperScaledMaxHeight);\n cropperPosition.x1 = moveStart.clientX - newWidth / 2;\n cropperPosition.x2 = moveStart.clientX + newWidth / 2;\n cropperPosition.y1 = moveStart.clientY - newHeight / 2;\n cropperPosition.y2 = moveStart.clientY + newHeight / 2;\n if (cropperPosition.x1 < 0) {\n cropperPosition.x2 -= cropperPosition.x1;\n cropperPosition.x1 = 0;\n } else if (cropperPosition.x2 > maxSize.width) {\n cropperPosition.x1 -= (cropperPosition.x2 - maxSize.width);\n cropperPosition.x2 = maxSize.width;\n }\n if (cropperPosition.y1 < 0) {\n cropperPosition.y2 -= cropperPosition.y1;\n cropperPosition.y1 = 0;\n } else if (cropperPosition.y2 > maxSize.height) {\n cropperPosition.y1 -= (cropperPosition.y2 - maxSize.height);\n cropperPosition.y2 = maxSize.height;\n }\n break;\n }\n\n if (settings.maintainAspectRatio) {\n this.checkAspectRatio(moveStart.position, cropperPosition, maxSize, settings);\n }\n }\n\n checkAspectRatio(position: string, cropperPosition: CropperPosition, maxSize: Dimensions, settings: CropperSettings): void {\n let overflowX = 0;\n let overflowY = 0;\n\n switch (position) {\n case 'top':\n cropperPosition.x2 = cropperPosition.x1 + (cropperPosition.y2 - cropperPosition.y1) * settings.aspectRatio;\n overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\n overflowY = Math.max(0 - cropperPosition.y1, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y1 += (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\n }\n break;\n case 'bottom':\n cropperPosition.x2 = cropperPosition.x1 + (cropperPosition.y2 - cropperPosition.y1) * settings.aspectRatio;\n overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\n overflowY = Math.max(cropperPosition.y2 - maxSize.height, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y2 -= (overflowY * settings.aspectRatio) > overflowX ? overflowY : (overflowX / settings.aspectRatio);\n }\n break;\n case 'topleft':\n cropperPosition.y1 = cropperPosition.y2 - (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\n overflowX = Math.max(0 - cropperPosition.x1, 0);\n overflowY = Math.max(0 - cropperPosition.y1, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x1 += (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y1 += (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\n }\n break;\n case 'topright':\n cropperPosition.y1 = cropperPosition.y2 - (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\n overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\n overflowY = Math.max(0 - cropperPosition.y1, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y1 += (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\n }\n break;\n case 'right':\n case 'bottomright':\n cropperPosition.y2 = cropperPosition.y1 + (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\n overflowX = Math.max(cropperPosition.x2 - maxSize.width, 0);\n overflowY = Math.max(cropperPosition.y2 - maxSize.height, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x2 -= (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y2 -= (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\n }\n break;\n case 'left':\n case 'bottomleft':\n cropperPosition.y2 = cropperPosition.y1 + (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\n overflowX = Math.max(0 - cropperPosition.x1, 0);\n overflowY = Math.max(cropperPosition.y2 - maxSize.height, 0);\n if (overflowX > 0 || overflowY > 0) {\n cropperPosition.x1 += (overflowY * settings.aspectRatio) > overflowX ? (overflowY * settings.aspectRatio) : overflowX;\n cropperPosition.y2 -= (overflowY * settings.aspectRatio) > overflowX ? overflowY : overflowX / settings.aspectRatio;\n }\n break;\n case 'center':\n cropperPosition.x2 = cropperPosition.x1 + (cropperPosition.y2 - cropperPosition.y1) * settings.aspectRatio;\n cropperPosition.y2 = cropperPosition.y1 + (cropperPosition.x2 - cropperPosition.x1) / settings.aspectRatio;\n const overflowX1 = Math.max(0 - cropperPosition.x1, 0);\n const overflowX2 = Math.max(cropperPosition.x2 - maxSize.width, 0);\n const overflowY1 = Math.max(cropperPosition.y2 - maxSize.height, 0);\n const overflowY2 = Math.max(0 - cropperPosition.y1, 0);\n if (overflowX1 > 0 || overflowX2 > 0 || overflowY1 > 0 || overflowY2 > 0) {\n cropperPosition.x1 += (overflowY1 * settings.aspectRatio) > overflowX1 ? (overflowY1 * settings.aspectRatio) : overflowX1;\n cropperPosition.x2 -= (overflowY2 * settings.aspectRatio) > overflowX2 ? (overflowY2 * settings.aspectRatio) : overflowX2;\n cropperPosition.y1 += (overflowY2 * settings.aspectRatio) > overflowX2 ? overflowY2 : overflowX2 / settings.aspectRatio;\n cropperPosition.y2 -= (overflowY1 * settings.aspectRatio) > overflowX1 ? overflowY1 : overflowX1 / settings.aspectRatio;\n }\n break;\n }\n }\n\n getClientX(event: any): number {\n return event.touches?.[0].clientX || event.clientX || 0;\n }\n\n getClientY(event: any): number {\n return event.touches?.[0].clientY || event.clientY || 0;\n }\n}\n","import { ExifTransform } from '../interfaces/exif-transform.interface';\n\n// Black 2x1 JPEG, with the following meta information set:\n// - EXIF Orientation: 6 (Rotated 90° CCW)\n// Source: https://github.com/blueimp/JavaScript-Load-Image\nconst testAutoOrientationImageURL =\n 'data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA' +\n 'AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' +\n 'QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' +\n 'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/x' +\n 'ABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAA' +\n 'AAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==';\n\nexport function supportsAutomaticRotation(): Promise<boolean> {\n return new Promise((resolve) => {\n const img = new Image();\n img.onload = () => {\n // Check if browser supports automatic image orientation:\n const supported = img.width === 1 && img.height === 2;\n resolve(supported);\n };\n img.src = testAutoOrientationImageURL;\n });\n}\n\nexport function getTransformationsFromExifData(exifRotationOrBase64Image: number | string): ExifTransform {\n if (typeof exifRotationOrBase64Image === 'string') {\n exifRotationOrBase64Image = getExifRotation(exifRotationOrBase64Image);\n }\n switch (exifRotationOrBase64Image) {\n case 2:\n return { rotate: 0, flip: true };\n case 3:\n return { rotate: 2, flip: false };\n case 4:\n return { rotate: 2, flip: true };\n case 5:\n return { rotate: 1, flip: true };\n case 6:\n return { rotate: 1, flip: false };\n case 7:\n return { rotate: 3, flip: true };\n case 8:\n return { rotate: 3, flip: false };\n default:\n return { rotate: 0, flip: false };\n }\n}\n\nfunction getExifRotation(imageBase64: string): number {\n const view = new DataView(base64ToArrayBuffer(imageBase64));\n if (view.getUint16(0, false) !== 0xFFD8) {\n return -2;\n }\n const length = view.byteLength;\n let offset = 2;\n while (offset < length) {\n if (view.getUint16(offset + 2, false) <= 8) return -1;\n const marker = view.getUint16(offset, false);\n offset += 2;\n if (marker == 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) {\n return -1;\n }\n\n const little = view.getUint16(offset += 6, false) == 0x4949;\n offset += view.getUint32(offset + 4, little);\n const tags = view.getUint16(offset, little);\n offset += 2;\n for (let i = 0; i < tags; i++) {\n if (view.getUint16(offset + (i * 12), little) == 0x0112) {\n return view.getUint16(offset + (i * 12) + 8, little);\n }\n }\n } else if ((marker & 0xFF00) !== 0xFF00) {\n break;\n } else {\n offset += view.getUint16(offset, false);\n }\n }\n return -1;\n}\n\nfunction base64ToArrayBuffer(imageBase64: string) {\n imageBase64 = imageBase64.replace(/^data\\:([^\\;]+)\\;base64,/gmi, '');\n const binaryString = atob(imageBase64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n}\n","import { Injectable } from '@angular/core';\nimport { Dimensions, LoadedImage } from '../interfaces';\nimport { CropperSettings } from '../interfaces/cropper.settings';\nimport { ExifTransform } from '../interfaces/exif-transform.interface';\nimport { getTransformationsFromExifData, supportsAutomaticRotation } from '../utils/exif.utils';\n\ninterface LoadImageBase64 {\n originalImage: HTMLImageElement;\n originalBase64: string;\n}\n\n@Injectable({providedIn: 'root'})\nexport class LoadImageService {\n\n private autoRotateSupported: Promise<boolean> = supportsAutomaticRotation();\n\n loadImageFile(file: File, cropperSettings: CropperSettings): Promise<LoadedImage> {\n return new Promise((resolve, reject) => {\n const fileReader = new FileReader();\n fileReader.onload = (event: any) => {\n this.loadImage(event.target.result, file.type, cropperSettings)\n .then(resolve)\n .catch(reject);\n };\n fileReader.readAsDataURL(file);\n });\n }\n\n private loadImage(imageBase64: string, imageType: string, cropperSettings: CropperSettings): Promise<LoadedImage> {\n if (!this.isValidImageType(imageType)) {\n return Promise.reject(new Error('Invalid image type'));\n }\n return this.loadBase64Image(imageBase64, cropperSettings);\n }\n\n private isValidImageType(type: string): boolean {\n return /image\\/(png|jpg|jpeg|bmp|gif|tiff|webp)/.test(type);\n }\n\n loadImageFromURL(url: string, cropperSettings: CropperSettings): Promise<LoadedImage> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onerror = () => reject;\n img.onload = () => {\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n canvas.width = img.width;\n canvas.height = img.height;\n context.drawImage(img, 0, 0);\n this.loadBase64Image(canvas.toDataURL(), cropperSettings).then(resolve);\n };\n img.crossOrigin = 'anonymous';\n img.src = url;\n });\n }\n\n loadBase64Image(imageBase64: string, cropperSettings: CropperSettings): Promise<LoadedImage> {\n return new Promise<LoadImageBase64>((resolve, reject) => {\n const originalImage = new Image();\n originalImage.onload = () => resolve({\n originalImage,\n originalBase64: imageBase64\n });\n originalImage.onerror = reject;\n originalImage.src = imageBase64;\n }).then((res: LoadImageBase64) => this.transformImageBase64(res, cropperSettings));\n }\n\n private async transformImageBase64(res: LoadImageBase64, cropperSettings: CropperSettings): Promise<LoadedImage> {\n const autoRotate = await this.autoRotateSupported;\n const exifTransform = await getTransformationsFromExifData(autoRotate ? -1 : res.originalBase64);\n if (!res.originalImage || !res.originalImage.complete) {\n return Promise.reject(new Error('No image loaded'));\n }\n const loadedImage = {\n original: {\n base64: res.originalBase64,\n image: res.originalImage,\n size: {\n width: res.originalImage.naturalWidth,\n height: res.originalImage.naturalHeight\n }\n },\n exifTransform\n };\n return this.transformLoadedImage(loadedImage, cropperSettings);\n }\n\n async transformLoadedImage(loadedImage: Partial<LoadedImage>, cropperSettings: CropperSettings): Promise<LoadedImage> {\n const canvasRotation = cropperSettings.canvasRotation + loadedImage.exifTransform.rotate;\n const originalSize = {\n width: loadedImage.original.image.naturalWidth,\n height: loadedImage.original.image.naturalHeight\n };\n if (canvasRotation === 0 && !loadedImage.exifTransform.flip && !cropperSettings.containWithinAspectRatio) {\n return {\n original: {\n base64: loadedImage.original.base64,\n image: loadedImage.original.image,\n size: {...originalSize}\n },\n transformed: {\n base64: loadedImage.original.base64,\n image: loadedImage.original.image,\n size: {...originalSize}\n },\n exifTransform: loadedImage.exifTransform\n };\n }\n\n const transformedSize = this.getTransformedSize(originalSize, loadedImage.exifTransform, cropperSettings);\n const canvas = document.createElement('canvas');\n canvas.width = transformedSize.width;\n canvas.height = transformedSize.height;\n const ctx = canvas.getContext('2d');\n ctx.setTransform(\n loadedImage.exifTransform.flip ? -1 : 1,\n 0,\n 0,\n 1,\n canvas.width / 2,\n canvas.height / 2\n );\n ctx.rotate(Math.PI * (canvasRotation / 2));\n ctx.drawImage(\n loadedImage.original.image,\n -originalSize.width / 2,\n -originalSize.height / 2\n );\n const transformedBase64 = canvas.toDataURL();\n const transformedImage = await this.loadImageFromBase64(transformedBase64);\n return {\n original: {\n base64: loadedImage.original.base64,\n image: loadedImage.original.image,\n size: {...originalSize}\n },\n transformed: {\n base64: transformedBase64,\n image: transformedImage,\n size: {\n width: transformedImage.width,\n height: transformedImage.height\n }\n },\n exifTransform: loadedImage.exifTransform\n };\n }\n\n private loadImageFromBase64(imageBase64: string): Promise<HTMLImageElement> {\n return new Promise<HTMLImageElement>(((resolve, reject) => {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = reject;\n image.src = imageBase64;\n }));\n }\n\n private getTransformedSize(\n originalSize: { width: number, height: number },\n exifTransform: ExifTransform,\n cropperSettings: CropperSettings\n ): Dimensions {\n const canvasRotation = cropperSettings.canvasRotation + exifTransform.rotate;\n if (cropperSettings.containWithinAspectRatio) {\n if (canvasRotation % 2) {\n const minWidthToContain = originalSize.width * cropperSettings.aspectRatio;\n const minHeightToContain = originalSize.height / cropperSettings.aspectRatio;\n return {\n width: Math.max(originalSize.height, minWidthToContain),\n height: Math.max(originalSize.width, minHeightToContain)\n };\n } else {\n const minWidthToContain = originalSize.height * cropperSettings.aspectRatio;\n const minHeightToContain = originalSize.width / cropperSettings.aspectRatio;\n return {\n width: Math.max(originalSize.width, minWidthToContain),\n height: Math.max(originalSize.height, minHeightToContain)\n };\n }\n }\n\n if (canvasRotation % 2) {\n return {\n height: originalSize.width,\n width: originalSize.height\n };\n }\n return {\n width: originalSize.width,\n height: originalSize.height\n };\n }\n}\n","export function getPositionForKey(key: string): string {\n switch (key) {\n case 'ArrowUp':\n return 'top';\n case 'ArrowRight':\n return 'right';\n case 'ArrowDown':\n return 'bottom';\n case 'ArrowLeft':\n default:\n return 'left';\n }\n}\n\nexport function getInvertedPositionForKey(key: string): string {\n switch (key) {\n case 'ArrowUp':\n return 'bottom';\n case 'ArrowRight':\n return 'left';\n case 'ArrowDown':\n return 'top';\n case 'ArrowLeft':\n default:\n return 'right';\n }\n}\n\nexport function getEventForKey(key: string, stepSize: number): any {\n switch (key) {\n case 'ArrowUp':\n return {clientX: 0, clientY: stepSize * -1};\n case 'ArrowRight':\n return {clientX: stepSize, clientY: 0};\n case 'ArrowDown':\n return {clientX: 0, clientY: stepSize};\n case 'ArrowLeft':\n default:\n return {clientX: stepSize * -1, clientY: 0};\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n isDevMode,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { DomSanitizer, SafeStyle, SafeUrl } from '@angular/platform-browser';\nimport { CropperPosition, Dimensions, ImageCroppedEvent, ImageTransform, LoadedImage, MoveStart } from '../interfaces';\nimport { OutputFormat } from '../interfaces/cropper-options.interface';\nimport { CropperSettings } from '../interfaces/cropper.settings';\nimport { MoveTypes } from '../interfaces/move-start.interface';\nimport { CropService } from '../services/crop.service';\nimport { CropperPositionService } from '../services/cropper-position.service';\nimport { LoadImageService } from '../services/load-image.service';\nimport { HammerStatic } from '../utils/hammer.utils';\nimport { getEventForKey, getInvertedPositionForKey, getPositionForKey } from '../utils/keyboard.utils';\n\n@Component({\n selector: 'image-cropper',\n templateUrl: './image-cropper.component.html',\n styleUrls: ['./image-cropper.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ImageCropperComponent implements OnChanges, OnInit {\n private Hammer: HammerStatic = window?.['Hammer'] || null;\n private settings = new CropperSettings();\n private setImageMaxSizeRetries = 0;\n private moveStart: MoveStart;\n private loadedImage: LoadedImage;\n\n safeImgDataUrl: SafeUrl | string;\n safeTransformStyle: SafeStyle | string;\n marginLeft: SafeStyle | string = '0px';\n maxSize: Dimensions;\n moveTypes = MoveTypes;\n imageVisible = false;\n\n @ViewChild('wrapper', { static: true }) wrapper: ElementRef<HTMLDivElement>;\n @ViewChild('sourceImage', { static: false }) sourceImage: ElementRef<HTMLDivElement>;\n\n @Input() imageChangedEvent: any;\n @Input() imageURL: string;\n @Input() imageBase64: string;\n @Input() imageFile: File;\n\n @Input() format: OutputFormat = this.settings.format;\n @Input() transform: ImageTransform = {};\n @Input() maintainAspectRatio = this.settings.maintainAspectRatio;\n @Input() aspectRatio = this.settings.aspectRatio;\n @Input() resizeToWidth = this.settings.resizeToWidth;\n @Input() resizeToHeight = this.settings.resizeToHeight;\n @Input() cropperMinWidth = this.settings.cropperMinWidth;\n @Input() cropperMinHeight = this.settings.cropperMinHeight;\n @Input() cropperMaxHeight = this.settings.cropperMaxHeight;\n @Input() cropperMaxWidth = this.settings.cropperMaxWidth;\n @Input() cropperStaticWidth = this.settings.cropperStaticWidth;\n @Input() cropperStaticHeight = this.settings.cropperStaticHeight;\n @Input() canvasRotation = this.settings.canvasRotation;\n @Input() initialStepSize = this.settings.initialStepSize;\n @Input() roundCropper = this.settings.roundCropper;\n @Input() onlyScaleDown = this.settings.onlyScaleDown;\n @Input() imageQuality = this.settings.imageQuality;\n @Input() autoCrop = this.settings.autoCrop;\n @Input() backgroundColor = this.settings.backgroundColor;\n @Input() containWithinAspectRatio = this.settings.containWithinAspectRatio;\n @Input() hideResizeSquares = this.settings.hideResizeSquares;\n @Input() cropper: CropperPosition = {\n x1: -100,\n y1: -100,\n x2: 10000,\n y2: 10000\n };\n @HostBinding('style.text-align')\n @Input() alignImage: 'left' | 'center' = this.settings.alignImage;\n @HostBinding('class.disabled')\n @Input() disabled = false;\n\n @Output() imageCropped = new EventEmitter<ImageCroppedEvent>();\n @Output() startCropImage = new EventEmitter<void>();\n @Output() imageLoaded = new EventEmitter<LoadedImage>();\n @Output() cropperReady = new EventEmitter<Dimensions>();\n @Output() loadImageFailed = new EventEmitter<void>();\n\n constructor(\n private cropService: CropService,\n private cropperPositionService: CropperPositionService,\n private loadImageService: LoadImageService,\n private sanitizer: DomSanitizer,\n private cd: ChangeDetectorRef\n ) {\n this.reset();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.onChangesUpdateSettings(changes);\n this.onChangesInputImage(changes);\n\n if (this.loadedImage?.original.image.complete && (changes.containWithinAspectRatio || changes.canvasRotation)) {\n this.loadImageService\n .transformLoadedImage(this.loadedImage, this.settings)\n .then((res) => this.setLoadedImage(res))\n .catch((err) => this.loadImageError(err));\n }\n if (changes.cropper || changes.maintainAspectRatio || changes.aspectRatio) {\n this.setMaxSize();\n this.setCropperScaledMinSize();\n this.setCropperScaledMaxSize();\n if (this.maintainAspectRatio && (changes.maintainAspectRatio || changes.aspectRatio)) {\n this.resetCropperPosition();\n } else if (changes.cropper) {\n this.checkCropperPosition(false);\n this.doAutoCrop();\n }\n this.cd.markForCheck();\n }\n if (changes.transform) {\n this.transform = this.transform || {};\n this.setCssTransform();\n this.doAutoCrop();\n }\n }\n\n private onChangesUpdateSettings(changes: SimpleChanges) {\n this.settings.setOptionsFromChanges(changes);\n\n if (this.settings.cropperStaticHeight && this.settings.cropperStaticWidth) {\n this.settings.setOptions({\n hideResizeSquares: true,\n cropperMinWidth: this.settings.cropperStaticWidth,\n cropperMinHeight: this.settings.cropperStaticHeight,\n cropperMaxHeight: this.settings.cropperStaticHeight,\n cropperMaxWidth: this.settings.cropperStaticWidth,\n maintainAspectRatio: false\n });\n }\n }\n\n private onChangesInputImage(changes: SimpleChanges): void {\n if (changes.imageChangedEvent || changes.imageURL || changes.imageBase64 || changes.imageFile) {\n this.reset();\n }\n if (changes.imageChangedEvent && this.isValidImageChangedEvent()) {\n this.loadImageFile(this.imageChangedEvent.target.files[0]);\n }\n if (changes.imageURL && this.imageURL) {\n this.loadImageFromURL(this.imageURL);\n }\n if (changes.imageBase64 && this.imageBase64) {\n this.loadBase64Image(this.imageBase64);\n }\n if (changes.imageFile && this.imageFile) {\n this.loadImageFile(this.imageFile);\n }\n }\n\n private isValidImageChangedEvent(): boolean {\n return this.imageChangedEvent?.target?.files?.length > 0;\n }\n\n private setCssTransform() {\n this.safeTransformStyle = this.sanitizer.bypassSecurityTrustStyle(\n 'scaleX(' + (this.transform.scale || 1) * (this.transform.flipH ? -1 : 1) + ')' +\n 'scaleY(' + (this.transform.scale || 1) * (this.transform.flipV ? -1 : 1) + ')' +\n 'rotate(' + (this.transform.rotate || 0) + 'deg)'\n );\n }\n\n ngOnInit(): void {\n this.settings.stepSize = this.initialStepSize;\n this.activatePinchGesture();\n }\n\n private reset(): void {\n this.imageVisible = false;\n this.loadedImage = null;\n this.safeImgDataUrl = 'data:image/png;base64,iVBORw0KGg'\n + 'oAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAU'\n + 'AAarVyFEAAAAASUVORK5CYII=';\n this.moveStart = {\n active: false,\n type: null,\n position: null,\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n clientX: 0,\n clientY: 0\n };\n this.maxSize = {\n width: 0,\n height: 0\n };\n this.cropper.x1 = -100;\n this.cropper.y1 = -100;\n this.cropper.x2 = 10000;\n this.cropper.y2 = 10000;\n }\n\n private loadImageFile(file: File): void {\n this.loadImageService\n .loadImageFile(file, this.settings)\n .then((res) => this.setLoadedImage(res))\n .catch((err) => this.loadImageError(err));\n }\n\n private loadBase64Image(imageBase64: string): void {\n this.loadImageService\n .loadBase64Image(imageBase64, this.settings)\n .then((res) => this.setLoadedImage(res))\n .catch((err) => this.loadImageError(err));\n }\n\n private loadImageFromURL(url: string): void {\n this.loadImageService\n .loadImageFromURL(url, this.settings)\n .then((res) => this.setLoadedImage(res))\n .catch((err) => this.loadImageError(err));\n }\n\n private setLoadedImage(loadedImage: LoadedImage): void {\n this.loadedImage = loadedImage;\n this.safeImgDataUrl = this.sanitizer.bypassSecurityTrustResourceUrl(loadedImage.transformed.base64);\n this.cd.markForCheck();\n }\n\n private loadImageError(error: any): void {\n console.error(error);\n this.loadImageFailed.emit();\n }\n\n imageLoadedInView(): void {\n if (this.loadedImage != null) {\n this.imageLoaded.emit(this.loadedImage);\n this.setImageMaxSizeRetries = 0;\n setTimeout(() => this.checkImageMaxSizeRecursively());\n }\n }\n\n private checkImageMaxSizeRecursively(): void {\n if (this.setImageMaxSizeRetries > 40) {\n this.loadImageFailed.emit();\n } else if (this.sourceImageLoaded()) {\n this.setMaxSize();\n this.setCropperScaledMinSize();\n this.setCropperScaledMaxSize();\n this.resetCropperPosition();\n this.cropperReady.emit({ ...this.maxSize });\n this.cd.markForCheck();\n } else {\n this.setImageMaxSizeRetries++;\n setTimeout(() => this.checkImageMaxSizeRecursively(), 50);\n }\n }\n\n private sourceImageLoaded(): boolean {\n return this.sourceImage?.nativeElement?.offsetWidth > 0;\n }\n\n @HostListener('window:resize')\n onResize(): void {\n if (!this.loadedImage) {\n return;\n }\n this.resizeCropperPosition();\n this.setMaxSize();\n this.setCropperScaledMinSize();\n this.setCropperScaledMaxSize();\n }\n\n private activatePinchGesture() {\n if (this.Hammer) {\n const hammer = new this.Hammer(this.wrapper.nativeElement);\n hammer.get('pinch').set({ enable: true });\n hammer.on('pinchmove', this.onPinch.bind(this));\n hammer.on('pinchend', this.pinchStop.bind(this));\n hammer.on('pinchstart', this.startPinch.bind(this));\n } else if (isDevMode()) {\n console.warn('[NgxImageCropper] Could not find HammerJS - Pinch Gesture won\\'t work');\n }\n }\n\n private resizeCropperPosition(): void {\n const sourceImageElement = this.sourceImage.nativeElement;\n if (this.maxSize.width !== sourceImageElement.offsetWidth || this.maxSize.height !== sourceImageElement.offsetHeight) {\n this.cropper.x1 = this.cropper.x1 * sourceImageElement.offsetWidth / this.maxSize.width;\n this.cropper.x2 = this.cropper.x2 * sourceImageElement.offsetWidth / this.maxSize.width;\n this.cropper.y1 = this.cropper.y1 * sourceImageElement.offsetHeight / this.maxSize.height;\n this.cropper.y2 = this.cropper.y2 * sourceImageElement.offsetHeight / this.maxSize.height;\n }\n }\n\n resetCropperPosition(): void {\n this.cropperPositionService.resetCropperPosition(this.sourceImage, this.cropper, this.settings);\n this.doAutoCrop();\n this.imageVisible = true;\n }\n\n keyboardAccess(event: KeyboardEvent) {\n this.changeKeyboardStepSize(event);\n this.keyboardMoveCropper(event);\n }\n\n private changeKeyboardStepSize(event: KeyboardEvent): void {\n const key = +event.key;\n if (key >= 1 && key <= 9) {\n this.settings.stepSize = key;\n }\n }\n\n private keyboardMoveCropper(event) {\n const keyboardWhiteList: string[] = ['ArrowUp', 'ArrowDown', 'ArrowRight', 'ArrowLeft'];\n if (!(keyboardWhiteList.includes(event.key))) {\n return;\n }\n const moveType = event.shiftKey ? MoveTypes.Resize : MoveTypes.Move;\n const position = event.altKey ? getInvertedPositionForKey(event.key) : getPositionForKey(event.key);\n const moveEvent = getEventForKey(event.key, this.settings.stepSize);\n event.preventDefault();\n event.stopPropagation();\n this.startMove({ clientX: 0, clientY: 0 }, moveType, position);\n this.moveImg(moveEvent);\n this.moveStop();\n }\n\n startMove(event: any, moveType: MoveTypes, position: string | null = null): void {\n if (this.moveStart?.active && this.moveStart?.type === MoveTypes.Pinch) {\n return;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n this.moveStart = {\n active: true,\n type: moveType,\n position,\n clientX: this.cropperPositionService.getClientX(event),\n clientY: this.cropperPositionService.getClientY(event),\n ...this.cropper\n };\n }\n\n startPinch(event: any) {\n if (!this.safeImgDataUrl) {\n return;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n this.moveStart = {\n active: true,\n type: MoveTypes.Pinch,\n position: 'center',\n clientX: this.cropper.x1 + (this.cropper.x2 - this.cropper.x1) / 2,\n clientY: this.cropper.y1 + (this.cropper.y2 - this.cropper.y1) / 2,\n ...this.cropper\n };\n }\n\n @HostListener('document:mousemove', ['$event'])\n @HostListener('document:touchmove', ['$event'])\n moveImg(event: any): void {\n if (this.moveStart.active) {\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (this.moveStart.type === MoveTypes.Move) {\n this.cropperPositionService.move(event, this.moveStart, this.cropper);\n this.checkCropperPosition(true);\n } else if (this.moveStart.type === MoveTypes.Resize) {\n if (!this.cropperStaticWidth && !this.cropperStaticHeight) {\n this.cropperPositionService.resize(event, this.moveStart, this.cropper, this.maxSize, this.settings);\n }\n this.checkCropperPosition(false);\n }\n this.cd.detectChanges();\n }\n }\n\n onPinch(event: any) {\n if (this.moveStart.active) {\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (this.moveStart.type === MoveTypes.Pinch) {\n this.cropperPositionService.resize(event, this.moveStart, this.cropper, this.maxSize, this.settings);\n this.checkCropperPosition(false);\n }\n this.cd.detectChanges();\n }\n }\n\n private setMaxSize(): void {\n if (this.sourceImage) {\n const sourceImageElement = this.sourceImage.nativeElement;\n this.maxSize.width = sourceImageElement.offsetWidth;\n this.maxSize.height = sourceImageElement.offsetHeight;\n this.marginLeft = this.sanitizer.bypassSecurityTrustStyle('calc(50% - ' + this.maxSize.width / 2 + 'px)');\n }\n }\n\n private setCropperScaledMinSize(): void {\n if (this.loadedImage?.transformed?.image) {\n this.setCropperScaledMinWidth();\n this.setCropperScaledMinHeight();\n } else {\n this.settings.cropperScaledMinWidth = 20;\n this.settings.cropperScaledMinHeight = 20;\n }\n }\n\n private setCropperScaledMinWidth(): void {\n this.settings.cropperScaledMinWidth = this.cropperMinWidth > 0\n ? Math.max(20, this.cropperMinWidth / this.loadedImage.transformed.image.width * this.maxSize.width)\n : 20;\n }\n\n private setCropperScaledMinHeight(): void {\n if (this.maintainAspectRatio) {\n this.settings.cropperScaledMinHeight = Math.max(20, this.settings.cropperScaledMinWidth / this.aspectRatio);\n } else if (this.cropperMinHeight > 0) {\n this.settings.cropperScaledMinHeight = Math.max(\n 20,\n this.cropperMinHeight / this.loadedImage.transformed.image.height * this.maxSize.height\n );\n } else {\n this.settings.cropperScaledMinHeight = 20;\n }\n }\n\n private setCropperScaledMaxSize(): void {\n if (this.loadedImage?.transformed?.image) {\n const ratio = this.loadedImage.transformed.size.width / this.maxSize.width;\n this.settings.cropperScaledMaxWidth = this.cropperMaxWidth > 20 ? this.cropperMaxWidth / ratio : this.maxSize.width;\n this.settings.cropperScaledMaxHeight = this.cropperMaxHeight > 20 ? this.cropperMaxHeight / ratio : this.maxSize.height;\n if (this.maintainAspectRatio) {\n if (this.settings.cropperScaledMaxWidth > this.settings.cropperScaledMaxHeight * this.aspectRatio) {\n this.settings.cropperScaledMaxWidth = this.settings.cropperScaledMaxHeight * this.aspectRatio;\n } else if (this.settings.cropperScaledMaxWidth < this.settings.cropperScaledMaxHeight * this.aspectRatio) {\n this.settings.cropperScaledMaxHeight = this.settings.cropperScaledMaxWidth / this.aspectRatio;\n }\n }\n } else {\n this.settings.cropperScaledMaxWidth = this.maxSize.width;\n this.settings.cropperScaledMaxHeight = this.maxSize.height;\n }\n }\n\n private checkCropperPosition(maintainSize = false): void {\n if (this.cropper.x1 < 0) {\n this.cropper.x2 -= maintainSize ? this.cropper.x1 : 0;\n this.cropper.x1 = 0;\n }\n if (this.cropper.y1 < 0) {\n this.cropper.y2 -= maintainSize ? this.cropper.y1 : 0;\n this.cropper.y1 = 0;\n }\n if (this.cropper.x2 > this.maxSize.width) {\n this.cropper.x1 -= maintainSize ? (this.cropper.x2 - this.maxSize.width) : 0;\n this.cropper.x2 = this.maxSize.width;\n }\n if (this.cropper.y2 > this.maxSize.height) {\n this.cropper.y1 -= maintainSize ? (this.cropper.y2 - this.maxSize.height) : 0;\n this.cropper.y2 = this.maxSize.height;\n }\n }\n\n @HostListener('document:mouseup')\n @HostListener('document:touchend')\n moveStop(): void {\n if (this.moveStart.active) {\n this.moveStart.active = false;\n this.doAutoCrop();\n }\n }\n\n pinchStop(): void {\n if (this.moveStart.active) {\n this.moveStart.active = false;\n this.doAutoCrop();\n }\n }\n\n private doAutoCrop(): void {\n if (this.autoCrop) {\n this.crop();\n }\n }\n\n crop(): ImageCroppedEvent | null {\n if (this.loadedImage?.transformed?.image != null) {\n this.startCropImage.emit();\n const output = this.cropService.crop(this.sourceImage, this.loadedImage, this.cropper, this.settings);\n if (output != null) {\n this.imageCropped.emit(output);\n }\n return output;\n }\n return null;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ImageCropperComponent } from './component/image-cropper.component';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n ImageCropperComponent\n ],\n exports: [\n ImageCropperComponent\n ]\n})\nexport class ImageCropperModule {\n}\n","export function base64ToFile(base64Image: string): Blob {\n const split = base64Image.split(',');\n const type = split[0].replace('data:', '').replace(';base64', '');\n const byteString = atob(split[1]);\n const ab = new ArrayBuffer(byteString.length);\n const ia = new Uint8Array(ab);\n for (let i = 0; i < byteString.length; i += 1) {\n ia[i] = byteString.charCodeAt(i);\n }\n return new Blob([ab], {type});\n}\n"],"names":["Injectable","EventEmitter","isDevMode","Component","ChangeDetectionStrategy","DomSanitizer","ChangeDetectorRef","ViewChild","Input","HostBinding","Output","HostListener","NgModule","CommonModule"],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/platform-browser"),require("@angular/common")):"function"==typeof define&&define.amd?define("ngx-image-cropper",["exports","@angular/core","@angular/platform-browser","@angular/common"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self)["ngx-image-cropper"]={},t.ng.core,t.ng.platformBrowser,t.ng.common)}(this,(function(t,e,i,r){"use strict";var o=function(){function t(){this.format="png",this.maintainAspectRatio=!0,this.transform={},this.aspectRatio=1,this.resizeToWidth=0,this.resizeToHeight=0,this.cropperMinWidth=0,this.cropperMinHeight=0,this.cropperMaxHeight=0,this.cropperMaxWidth=0,this.cropperStaticWidth=0,this.cropperStaticHeight=0,this.canvasRotation=0,this.initialStepSize=3,this.roundCropper=!1,this.onlyScaleDown=!1,this.imageQuality=92,this.autoCrop=!0,this.backgroundColor=void 0,this.containWithinAspectRatio=!1,this.hideResizeSquares=!1,this.alignImage="center",this.cropperScaledMinWidth=20,this.cropperScaledMinHeight=20,this.cropperScaledMaxWidth=20,this.cropperScaledMaxHeight=20,this.stepSize=this.initialStepSize}return t.prototype.setOptions=function(t){var e=this;Object.keys(t).filter((function(t){return t in e})).forEach((function(i){return e[i]=t[i]})),this.validateOptions()},t.prototype.setOptionsFromChanges=function(t){var e=this;Object.keys(t).filter((function(t){return t in e})).forEach((function(i){return e[i]=t[i].currentValue})),this.validateOptions()},t.prototype.validateOptions=function(){if(this.maintainAspectRatio&&!this.aspectRatio)throw new Error("`aspectRatio` should > 0 when `maintainAspectRatio` is enabled")},t}();var a={Move:"move",Resize:"resize",Pinch:"pinch"};
2
- /*! *****************************************************************************
3
- Copyright (c) Microsoft Corporation.
4
-
5
- Permission to use, copy, modify, and/or distribute this software for any
6
- purpose with or without fee is hereby granted.
7
-
8
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
9
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
10
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
11
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
13
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
- PERFORMANCE OF THIS SOFTWARE.
15
- ***************************************************************************** */function n(t,e,i,r){return new(i||(i=Promise))((function(o,a){function n(t){try{p(r.next(t))}catch(t){a(t)}}function s(t){try{p(r.throw(t))}catch(t){a(t)}}function p(t){var e;t.done?o(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(n,s)}p((r=r.apply(t,e||[])).next())}))}function s(t,e){var i,r,o,a,n={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(i)throw new TypeError("Generator is already executing.");for(;n;)try{if(i=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return n.label++,{value:a[1],done:!1};case 5:n.label++,r=a[1],a=[0];continue;case 7:a=n.ops.pop(),n.trys.pop();continue;default:if(!(o=n.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){n=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){n.label=a[1];break}if(6===a[0]&&n.label<o[1]){n.label=o[1],o=a;break}if(o&&n.label<o[2]){n.label=o[2],n.ops.push(a);break}o[2]&&n.ops.pop(),n.trys.pop();continue}a=e.call(t,n)}catch(t){a=[6,t],r=0}finally{i=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,s])}}}Object.create;function p(t,e){var i="function"==typeof Symbol&&t[Symbol.iterator];if(!i)return t;var r,o,a=i.call(t),n=[];try{for(;(void 0===e||e-- >0)&&!(r=a.next()).done;)n.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}return n}Object.create;function c(t,e,i){var r=t.width,o=t.height,a=r/(e=Math.round(e)),n=o/(i=Math.round(i)),s=Math.ceil(a/2),p=Math.ceil(n/2),c=t.getContext("2d");if(c){for(var h=c.getImageData(0,0,r,o),g=c.createImageData(e,i),l=h.data,d=g.data,m=0;m<i;m++)for(var u=0;u<e;u++){var x=4*(u+m*e),f=m*n,y=0,v=0,A=0,M=0,S=0,w=0,z=0,b=Math.floor(u*a),I=Math.floor(m*n),R=Math.ceil((u+1)*a),C=Math.ceil((m+1)*n);R=Math.min(R,r),C=Math.min(C,o);for(var E=I;E<C;E++)for(var H=Math.abs(f-E)/p,W=u*a,B=H*H,k=b;k<R;k++){var T=Math.abs(W-k)/s,Q=Math.sqrt(B+T*T);if(!(Q>=1)){var P=4*(k+E*r);z+=(y=2*Q*Q*Q-3*Q*Q+1)*l[P+3],A+=y,l[P+3]<255&&(y=y*l[P+3]/250),M+=y*l[P],S+=y*l[P+1],w+=y*l[P+2],v+=y}}d[x]=M/v,d[x+1]=S/v,d[x+2]=w/v,d[x+3]=z/A}t.width=e,t.height=i,c.putImageData(g,0,0)}}var h=function(){function t(){}return t.prototype.crop=function(t,e,i,r){var o=this.getImagePosition(t,e,i,r),a=o.x2-o.x1,n=o.y2-o.y1,s=document.createElement("canvas");s.width=a,s.height=n;var p=s.getContext("2d");if(p){null!=r.backgroundColor&&(p.fillStyle=r.backgroundColor,p.fillRect(0,0,a,n));var h=(r.transform.scale||1)*(r.transform.flipH?-1:1),g=(r.transform.scale||1)*(r.transform.flipV?-1:1),l=e.transformed;p.setTransform(h,0,0,g,l.size.width/2,l.size.height/2),p.translate(-o.x1/h,-o.y1/g),p.rotate((r.transform.rotate||0)*Math.PI/180),p.drawImage(l.image,-l.size.width/2,-l.size.height/2);var d={width:a,height:n,imagePosition:o,cropperPosition:Object.assign({},i)};r.containWithinAspectRatio&&(d.offsetImagePosition=this.getOffsetImagePosition(t,e,i,r));var m=this.getResizeRatio(a,n,r);return 1!==m&&(d.width=Math.round(a*m),d.height=r.maintainAspectRatio?Math.round(d.width/r.aspectRatio):Math.round(n*m),c(s,d.width,d.height)),d.base64=s.toDataURL("image/"+r.format,this.getQuality(r)),d}},t.prototype.getImagePosition=function(t,e,i,r){var o=t.nativeElement,a=e.transformed.size.width/o.offsetWidth,n={x1:Math.round(i.x1*a),y1:Math.round(i.y1*a),x2:Math.round(i.x2*a),y2:Math.round(i.y2*a)};return r.containWithinAspectRatio||(n.x1=Math.max(n.x1,0),n.y1=Math.max(n.y1,0),n.x2=Math.min(n.x2,e.transformed.size.width),n.y2=Math.min(n.y2,e.transformed.size.height)),n},t.prototype.getOffsetImagePosition=function(t,e,i,r){var o,a,n=r.canvasRotation+e.exifTransform.rotate,s=t.nativeElement,p=e.transformed.size.width/s.offsetWidth;n%2?(o=(e.transformed.size.width-e.original.size.height)/2,a=(e.transformed.size.height-e.original.size.width)/2):(o=(e.transformed.size.width-e.original.size.width)/2,a=(e.transformed.size.height-e.original.size.height)/2);var c={x1:Math.round(i.x1*p)-o,y1:Math.round(i.y1*p)-a,x2:Math.round(i.x2*p)-o,y2:Math.round(i.y2*p)-a};return r.containWithinAspectRatio||(c.x1=Math.max(c.x1,0),c.y1=Math.max(c.y1,0),c.x2=Math.min(c.x2,e.transformed.size.width),c.y2=Math.min(c.y2,e.transformed.size.height)),c},t.prototype.getResizeRatio=function(t,e,i){var r=i.resizeToWidth/t,o=i.resizeToHeight/e,a=new Array;i.resizeToWidth>0&&a.push(r),i.resizeToHeight>0&&a.push(o);var n=0===a.length?1:Math.min.apply(Math,function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(p(arguments[e]));return t}(a));return n>1&&!i.onlyScaleDown?n:Math.min(n,1)},t.prototype.getQuality=function(t){return Math.min(1,Math.max(0,t.imageQuality/100))},t}();h.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],h.ɵprov=e.ɵɵdefineInjectable({factory:function(){return new h},token:h,providedIn:"root"});var g=function(){function t(){}return t.prototype.resetCropperPosition=function(t,e,i){if(null==t?void 0:t.nativeElement){var r=t.nativeElement;if(i.cropperStaticHeight&&i.cropperStaticWidth)e.x1=0,e.x2=r.offsetWidth>i.cropperStaticWidth?i.cropperStaticWidth:r.offsetWidth,e.y1=0,e.y2=r.offsetHeight>i.cropperStaticHeight?i.cropperStaticHeight:r.offsetHeight;else{var o=Math.min(i.cropperScaledMaxWidth,r.offsetWidth),a=Math.min(i.cropperScaledMaxHeight,r.offsetHeight);if(i.maintainAspectRatio)if(r.offsetWidth/i.aspectRatio<r.offsetHeight){e.x1=0,e.x2=o;var n=o/i.aspectRatio;e.y1=(r.offsetHeight-n)/2,e.y2=e.y1+n}else{e.y1=0,e.y2=a;var s=a*i.aspectRatio;e.x1=(r.offsetWidth-s)/2,e.x2=e.x1+s}else e.x1=0,e.x2=o,e.y1=0,e.y2=a}}},t.prototype.move=function(t,e,i){var r=this.getClientX(t)-e.clientX,o=this.getClientY(t)-e.clientY;i.x1=e.x1+r,i.y1=e.y1+o,i.x2=e.x2+r,i.y2=e.y2+o},t.prototype.resize=function(t,e,i,r,o){var a=this.getClientX(t)-e.clientX,n=this.getClientY(t)-e.clientY;switch(e.position){case"left":i.x1=Math.min(Math.max(e.x1+a,i.x2-o.cropperScaledMaxWidth),i.x2-o.cropperScaledMinWidth);break;case"topleft":i.x1=Math.min(Math.max(e.x1+a,i.x2-o.cropperScaledMaxWidth),i.x2-o.cropperScaledMinWidth),i.y1=Math.min(Math.max(e.y1+n,i.y2-o.cropperScaledMaxHeight),i.y2-o.cropperScaledMinHeight);break;case"top":i.y1=Math.min(Math.max(e.y1+n,i.y2-o.cropperScaledMaxHeight),i.y2-o.cropperScaledMinHeight);break;case"topright":i.x2=Math.max(Math.min(e.x2+a,i.x1+o.cropperScaledMaxWidth),i.x1+o.cropperScaledMinWidth),i.y1=Math.min(Math.max(e.y1+n,i.y2-o.cropperScaledMaxHeight),i.y2-o.cropperScaledMinHeight);break;case"right":i.x2=Math.max(Math.min(e.x2+a,i.x1+o.cropperScaledMaxWidth),i.x1+o.cropperScaledMinWidth);break;case"bottomright":i.x2=Math.max(Math.min(e.x2+a,i.x1+o.cropperScaledMaxWidth),i.x1+o.cropperScaledMinWidth),i.y2=Math.max(Math.min(e.y2+n,i.y1+o.cropperScaledMaxHeight),i.y1+o.cropperScaledMinHeight);break;case"bottom":i.y2=Math.max(Math.min(e.y2+n,i.y1+o.cropperScaledMaxHeight),i.y1+o.cropperScaledMinHeight);break;case"bottomleft":i.x1=Math.min(Math.max(e.x1+a,i.x2-o.cropperScaledMaxWidth),i.x2-o.cropperScaledMinWidth),i.y2=Math.max(Math.min(e.y2+n,i.y1+o.cropperScaledMaxHeight),i.y1+o.cropperScaledMinHeight);break;case"center":var s=t.scale,p=Math.min(Math.max(o.cropperScaledMinWidth,Math.abs(e.x2-e.x1)*s),o.cropperScaledMaxWidth),c=Math.min(Math.max(o.cropperScaledMinHeight,Math.abs(e.y2-e.y1)*s),o.cropperScaledMaxHeight);i.x1=e.clientX-p/2,i.x2=e.clientX+p/2,i.y1=e.clientY-c/2,i.y2=e.clientY+c/2,i.x1<0?(i.x2-=i.x1,i.x1=0):i.x2>r.width&&(i.x1-=i.x2-r.width,i.x2=r.width),i.y1<0?(i.y2-=i.y1,i.y1=0):i.y2>r.height&&(i.y1-=i.y2-r.height,i.y2=r.height)}o.maintainAspectRatio&&this.checkAspectRatio(e.position,i,r,o)},t.prototype.checkAspectRatio=function(t,e,i,r){var o=0,a=0;switch(t){case"top":e.x2=e.x1+(e.y2-e.y1)*r.aspectRatio,o=Math.max(e.x2-i.width,0),a=Math.max(0-e.y1,0),(o>0||a>0)&&(e.x2-=a*r.aspectRatio>o?a*r.aspectRatio:o,e.y1+=a*r.aspectRatio>o?a:o/r.aspectRatio);break;case"bottom":e.x2=e.x1+(e.y2-e.y1)*r.aspectRatio,o=Math.max(e.x2-i.width,0),a=Math.max(e.y2-i.height,0),(o>0||a>0)&&(e.x2-=a*r.aspectRatio>o?a*r.aspectRatio:o,e.y2-=a*r.aspectRatio>o?a:o/r.aspectRatio);break;case"topleft":e.y1=e.y2-(e.x2-e.x1)/r.aspectRatio,o=Math.max(0-e.x1,0),a=Math.max(0-e.y1,0),(o>0||a>0)&&(e.x1+=a*r.aspectRatio>o?a*r.aspectRatio:o,e.y1+=a*r.aspectRatio>o?a:o/r.aspectRatio);break;case"topright":e.y1=e.y2-(e.x2-e.x1)/r.aspectRatio,o=Math.max(e.x2-i.width,0),a=Math.max(0-e.y1,0),(o>0||a>0)&&(e.x2-=a*r.aspectRatio>o?a*r.aspectRatio:o,e.y1+=a*r.aspectRatio>o?a:o/r.aspectRatio);break;case"right":case"bottomright":e.y2=e.y1+(e.x2-e.x1)/r.aspectRatio,o=Math.max(e.x2-i.width,0),a=Math.max(e.y2-i.height,0),(o>0||a>0)&&(e.x2-=a*r.aspectRatio>o?a*r.aspectRatio:o,e.y2-=a*r.aspectRatio>o?a:o/r.aspectRatio);break;case"left":case"bottomleft":e.y2=e.y1+(e.x2-e.x1)/r.aspectRatio,o=Math.max(0-e.x1,0),a=Math.max(e.y2-i.height,0),(o>0||a>0)&&(e.x1+=a*r.aspectRatio>o?a*r.aspectRatio:o,e.y2-=a*r.aspectRatio>o?a:o/r.aspectRatio);break;case"center":e.x2=e.x1+(e.y2-e.y1)*r.aspectRatio,e.y2=e.y1+(e.x2-e.x1)/r.aspectRatio;var n=Math.max(0-e.x1,0),s=Math.max(e.x2-i.width,0),p=Math.max(e.y2-i.height,0),c=Math.max(0-e.y1,0);(n>0||s>0||p>0||c>0)&&(e.x1+=p*r.aspectRatio>n?p*r.aspectRatio:n,e.x2-=c*r.aspectRatio>s?c*r.aspectRatio:s,e.y1+=c*r.aspectRatio>s?c:s/r.aspectRatio,e.y2-=p*r.aspectRatio>n?p:n/r.aspectRatio)}},t.prototype.getClientX=function(t){var e;return(null===(e=t.touches)||void 0===e?void 0:e[0].clientX)||t.clientX||0},t.prototype.getClientY=function(t){var e;return(null===(e=t.touches)||void 0===e?void 0:e[0].clientY)||t.clientY||0},t}();g.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],g.ɵprov=e.ɵɵdefineInjectable({factory:function(){return new g},token:g,providedIn:"root"});function l(t){switch("string"==typeof t&&(t=function(t){var e=new DataView(function(t){t=t.replace(/^data\:([^\;]+)\;base64,/gim,"");for(var e=atob(t),i=e.length,r=new Uint8Array(i),o=0;o<i;o++)r[o]=e.charCodeAt(o);return r.buffer}(t));if(65496!==e.getUint16(0,!1))return-2;var i=e.byteLength,r=2;for(;r<i;){if(e.getUint16(r+2,!1)<=8)return-1;var o=e.getUint16(r,!1);if(r+=2,65505==o){if(1165519206!==e.getUint32(r+=2,!1))return-1;var a=18761==e.getUint16(r+=6,!1);r+=e.getUint32(r+4,a);var n=e.getUint16(r,a);r+=2;for(var s=0;s<n;s++)if(274==e.getUint16(r+12*s,a))return e.getUint16(r+12*s+8,a)}else{if(65280!=(65280&o))break;r+=e.getUint16(r,!1)}}return-1}(t)),t){case 2:return{rotate:0,flip:!0};case 3:return{rotate:2,flip:!1};case 4:return{rotate:2,flip:!0};case 5:return{rotate:1,flip:!0};case 6:return{rotate:1,flip:!1};case 7:return{rotate:3,flip:!0};case 8:return{rotate:3,flip:!1};default:return{rotate:0,flip:!1}}}var d=function(){function t(){this.autoRotateSupported=new Promise((function(t){var e=new Image;e.onload=function(){var i=1===e.width&&2===e.height;t(i)},e.src="data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q=="}))}return t.prototype.loadImageFile=function(t,e){var i=this;return new Promise((function(r,o){var a=new FileReader;a.onload=function(a){i.loadImage(a.target.result,t.type,e).then(r).catch(o)},a.readAsDataURL(t)}))},t.prototype.loadImage=function(t,e,i){return this.isValidImageType(e)?this.loadBase64Image(t,i):Promise.reject(new Error("Invalid image type"))},t.prototype.isValidImageType=function(t){return/image\/(png|jpg|jpeg|bmp|gif|tiff|webp)/.test(t)},t.prototype.loadImageFromURL=function(t,e){var i=this;return new Promise((function(r,o){var a=new Image;a.onerror=function(){return o},a.onload=function(){var t=document.createElement("canvas"),o=t.getContext("2d");t.width=a.width,t.height=a.height,o.drawImage(a,0,0),i.loadBase64Image(t.toDataURL(),e).then(r)},a.crossOrigin="anonymous",a.src=t}))},t.prototype.loadBase64Image=function(t,e){var i=this;return new Promise((function(e,i){var r=new Image;r.onload=function(){return e({originalImage:r,originalBase64:t})},r.onerror=i,r.src=t})).then((function(t){return i.transformImageBase64(t,e)}))},t.prototype.transformImageBase64=function(t,e){return n(this,void 0,void 0,(function(){var i,r;return s(this,(function(o){switch(o.label){case 0:return[4,this.autoRotateSupported];case 1:return[4,l(o.sent()?-1:t.originalBase64)];case 2:return i=o.sent(),t.originalImage&&t.originalImage.complete?(r={original:{base64:t.originalBase64,image:t.originalImage,size:{width:t.originalImage.naturalWidth,height:t.originalImage.naturalHeight}},exifTransform:i},[2,this.transformLoadedImage(r,e)]):[2,Promise.reject(new Error("No image loaded"))]}}))}))},t.prototype.transformLoadedImage=function(t,e){return n(this,void 0,void 0,(function(){var i,r,o,a,n,p,c;return s(this,(function(s){switch(s.label){case 0:return i=e.canvasRotation+t.exifTransform.rotate,r={width:t.original.image.naturalWidth,height:t.original.image.naturalHeight},0!==i||t.exifTransform.flip||e.containWithinAspectRatio?(o=this.getTransformedSize(r,t.exifTransform,e),(a=document.createElement("canvas")).width=o.width,a.height=o.height,(n=a.getContext("2d")).setTransform(t.exifTransform.flip?-1:1,0,0,1,a.width/2,a.height/2),n.rotate(Math.PI*(i/2)),n.drawImage(t.original.image,-r.width/2,-r.height/2),p=a.toDataURL(),[4,this.loadImageFromBase64(p)]):[2,{original:{base64:t.original.base64,image:t.original.image,size:Object.assign({},r)},transformed:{base64:t.original.base64,image:t.original.image,size:Object.assign({},r)},exifTransform:t.exifTransform}];case 1:return c=s.sent(),[2,{original:{base64:t.original.base64,image:t.original.image,size:Object.assign({},r)},transformed:{base64:p,image:c,size:{width:c.width,height:c.height}},exifTransform:t.exifTransform}]}}))}))},t.prototype.loadImageFromBase64=function(t){return new Promise((function(e,i){var r=new Image;r.onload=function(){return e(r)},r.onerror=i,r.src=t}))},t.prototype.getTransformedSize=function(t,e,i){var r=i.canvasRotation+e.rotate;if(i.containWithinAspectRatio){if(r%2){var o=t.width*i.aspectRatio,a=t.height/i.aspectRatio;return{width:Math.max(t.height,o),height:Math.max(t.width,a)}}o=t.height*i.aspectRatio,a=t.width/i.aspectRatio;return{width:Math.max(t.width,o),height:Math.max(t.height,a)}}return r%2?{height:t.width,width:t.height}:{width:t.width,height:t.height}},t}();d.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}],d.ɵprov=e.ɵɵdefineInjectable({factory:function(){return new d},token:d,providedIn:"root"});var m=function(){function t(t,i,r,n,s){this.cropService=t,this.cropperPositionService=i,this.loadImageService=r,this.sanitizer=n,this.cd=s,this.Hammer=(null===window||void 0===window?void 0:window.Hammer)||null,this.settings=new o,this.setImageMaxSizeRetries=0,this.marginLeft="0px",this.moveTypes=a,this.imageVisible=!1,this.format=this.settings.format,this.transform={},this.maintainAspectRatio=this.settings.maintainAspectRatio,this.aspectRatio=this.settings.aspectRatio,this.resizeToWidth=this.settings.resizeToWidth,this.resizeToHeight=this.settings.resizeToHeight,this.cropperMinWidth=this.settings.cropperMinWidth,this.cropperMinHeight=this.settings.cropperMinHeight,this.cropperMaxHeight=this.settings.cropperMaxHeight,this.cropperMaxWidth=this.settings.cropperMaxWidth,this.cropperStaticWidth=this.settings.cropperStaticWidth,this.cropperStaticHeight=this.settings.cropperStaticHeight,this.canvasRotation=this.settings.canvasRotation,this.initialStepSize=this.settings.initialStepSize,this.roundCropper=this.settings.roundCropper,this.onlyScaleDown=this.settings.onlyScaleDown,this.imageQuality=this.settings.imageQuality,this.autoCrop=this.settings.autoCrop,this.backgroundColor=this.settings.backgroundColor,this.containWithinAspectRatio=this.settings.containWithinAspectRatio,this.hideResizeSquares=this.settings.hideResizeSquares,this.cropper={x1:-100,y1:-100,x2:1e4,y2:1e4},this.alignImage=this.settings.alignImage,this.disabled=!1,this.imageCropped=new e.EventEmitter,this.startCropImage=new e.EventEmitter,this.imageLoaded=new e.EventEmitter,this.cropperReady=new e.EventEmitter,this.loadImageFailed=new e.EventEmitter,this.reset()}return t.prototype.ngOnChanges=function(t){var e,i=this;this.onChangesUpdateSettings(t),this.onChangesInputImage(t),(null===(e=this.loadedImage)||void 0===e?void 0:e.original.image.complete)&&(t.containWithinAspectRatio||t.canvasRotation)&&this.loadImageService.transformLoadedImage(this.loadedImage,this.settings).then((function(t){return i.setLoadedImage(t)})).catch((function(t){return i.loadImageError(t)})),(t.cropper||t.maintainAspectRatio||t.aspectRatio)&&(this.setMaxSize(),this.setCropperScaledMinSize(),this.setCropperScaledMaxSize(),this.maintainAspectRatio&&(t.maintainAspectRatio||t.aspectRatio)?this.resetCropperPosition():t.cropper&&(this.checkCropperPosition(!1),this.doAutoCrop()),this.cd.markForCheck()),t.transform&&(this.transform=this.transform||{},this.setCssTransform(),this.doAutoCrop())},t.prototype.onChangesUpdateSettings=function(t){this.settings.setOptionsFromChanges(t),this.settings.cropperStaticHeight&&this.settings.cropperStaticWidth&&this.settings.setOptions({hideResizeSquares:!0,cropperMinWidth:this.settings.cropperStaticWidth,cropperMinHeight:this.settings.cropperStaticHeight,cropperMaxHeight:this.settings.cropperStaticHeight,cropperMaxWidth:this.settings.cropperStaticWidth,maintainAspectRatio:!1})},t.prototype.onChangesInputImage=function(t){(t.imageChangedEvent||t.imageURL||t.imageBase64||t.imageFile)&&this.reset(),t.imageChangedEvent&&this.isValidImageChangedEvent()&&this.loadImageFile(this.imageChangedEvent.target.files[0]),t.imageURL&&this.imageURL&&this.loadImageFromURL(this.imageURL),t.imageBase64&&this.imageBase64&&this.loadBase64Image(this.imageBase64),t.imageFile&&this.imageFile&&this.loadImageFile(this.imageFile)},t.prototype.isValidImageChangedEvent=function(){var t,e,i;return(null===(i=null===(e=null===(t=this.imageChangedEvent)||void 0===t?void 0:t.target)||void 0===e?void 0:e.files)||void 0===i?void 0:i.length)>0},t.prototype.setCssTransform=function(){this.safeTransformStyle=this.sanitizer.bypassSecurityTrustStyle("scaleX("+(this.transform.scale||1)*(this.transform.flipH?-1:1)+")scaleY("+(this.transform.scale||1)*(this.transform.flipV?-1:1)+")rotate("+(this.transform.rotate||0)+"deg)")},t.prototype.ngOnInit=function(){this.settings.stepSize=this.initialStepSize,this.activatePinchGesture()},t.prototype.reset=function(){this.imageVisible=!1,this.loadedImage=null,this.safeImgDataUrl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=",this.moveStart={active:!1,type:null,position:null,x1:0,y1:0,x2:0,y2:0,clientX:0,clientY:0},this.maxSize={width:0,height:0},this.cropper.x1=-100,this.cropper.y1=-100,this.cropper.x2=1e4,this.cropper.y2=1e4},t.prototype.loadImageFile=function(t){var e=this;this.loadImageService.loadImageFile(t,this.settings).then((function(t){return e.setLoadedImage(t)})).catch((function(t){return e.loadImageError(t)}))},t.prototype.loadBase64Image=function(t){var e=this;this.loadImageService.loadBase64Image(t,this.settings).then((function(t){return e.setLoadedImage(t)})).catch((function(t){return e.loadImageError(t)}))},t.prototype.loadImageFromURL=function(t){var e=this;this.loadImageService.loadImageFromURL(t,this.settings).then((function(t){return e.setLoadedImage(t)})).catch((function(t){return e.loadImageError(t)}))},t.prototype.setLoadedImage=function(t){this.loadedImage=t,this.safeImgDataUrl=this.sanitizer.bypassSecurityTrustResourceUrl(t.transformed.base64),this.cd.markForCheck()},t.prototype.loadImageError=function(t){console.error(t),this.loadImageFailed.emit()},t.prototype.imageLoadedInView=function(){var t=this;null!=this.loadedImage&&(this.imageLoaded.emit(this.loadedImage),this.setImageMaxSizeRetries=0,setTimeout((function(){return t.checkImageMaxSizeRecursively()})))},t.prototype.checkImageMaxSizeRecursively=function(){var t=this;this.setImageMaxSizeRetries>40?this.loadImageFailed.emit():this.sourceImageLoaded()?(this.setMaxSize(),this.setCropperScaledMinSize(),this.setCropperScaledMaxSize(),this.resetCropperPosition(),this.cropperReady.emit(Object.assign({},this.maxSize)),this.cd.markForCheck()):(this.setImageMaxSizeRetries++,setTimeout((function(){return t.checkImageMaxSizeRecursively()}),50))},t.prototype.sourceImageLoaded=function(){var t,e;return(null===(e=null===(t=this.sourceImage)||void 0===t?void 0:t.nativeElement)||void 0===e?void 0:e.offsetWidth)>0},t.prototype.onResize=function(){this.loadedImage&&(this.resizeCropperPosition(),this.setMaxSize(),this.setCropperScaledMinSize(),this.setCropperScaledMaxSize())},t.prototype.activatePinchGesture=function(){if(this.Hammer){var t=new this.Hammer(this.wrapper.nativeElement);t.get("pinch").set({enable:!0}),t.on("pinchmove",this.onPinch.bind(this)),t.on("pinchend",this.pinchStop.bind(this)),t.on("pinchstart",this.startPinch.bind(this))}else e.isDevMode()&&console.warn("[NgxImageCropper] Could not find HammerJS - Pinch Gesture won't work")},t.prototype.resizeCropperPosition=function(){var t=this.sourceImage.nativeElement;this.maxSize.width===t.offsetWidth&&this.maxSize.height===t.offsetHeight||(this.cropper.x1=this.cropper.x1*t.offsetWidth/this.maxSize.width,this.cropper.x2=this.cropper.x2*t.offsetWidth/this.maxSize.width,this.cropper.y1=this.cropper.y1*t.offsetHeight/this.maxSize.height,this.cropper.y2=this.cropper.y2*t.offsetHeight/this.maxSize.height)},t.prototype.resetCropperPosition=function(){this.cropperPositionService.resetCropperPosition(this.sourceImage,this.cropper,this.settings),this.doAutoCrop(),this.imageVisible=!0},t.prototype.keyboardAccess=function(t){this.changeKeyboardStepSize(t),this.keyboardMoveCropper(t)},t.prototype.changeKeyboardStepSize=function(t){var e=+t.key;e>=1&&e<=9&&(this.settings.stepSize=e)},t.prototype.keyboardMoveCropper=function(t){if(["ArrowUp","ArrowDown","ArrowRight","ArrowLeft"].includes(t.key)){var e=t.shiftKey?a.Resize:a.Move,i=t.altKey?function(t){switch(t){case"ArrowUp":return"bottom";case"ArrowRight":return"left";case"ArrowDown":return"top";case"ArrowLeft":default:return"right"}}(t.key):function(t){switch(t){case"ArrowUp":return"top";case"ArrowRight":return"right";case"ArrowDown":return"bottom";case"ArrowLeft":default:return"left"}}(t.key),r=function(t,e){switch(t){case"ArrowUp":return{clientX:0,clientY:-1*e};case"ArrowRight":return{clientX:e,clientY:0};case"ArrowDown":return{clientX:0,clientY:e};case"ArrowLeft":default:return{clientX:-1*e,clientY:0}}}(t.key,this.settings.stepSize);t.preventDefault(),t.stopPropagation(),this.startMove({clientX:0,clientY:0},e,i),this.moveImg(r),this.moveStop()}},t.prototype.startMove=function(t,e,i){var r,o;void 0===i&&(i=null),(null===(r=this.moveStart)||void 0===r?void 0:r.active)&&(null===(o=this.moveStart)||void 0===o?void 0:o.type)===a.Pinch||(t.preventDefault&&t.preventDefault(),this.moveStart=Object.assign({active:!0,type:e,position:i,clientX:this.cropperPositionService.getClientX(t),clientY:this.cropperPositionService.getClientY(t)},this.cropper))},t.prototype.startPinch=function(t){this.safeImgDataUrl&&(t.preventDefault&&t.preventDefault(),this.moveStart=Object.assign({active:!0,type:a.Pinch,position:"center",clientX:this.cropper.x1+(this.cropper.x2-this.cropper.x1)/2,clientY:this.cropper.y1+(this.cropper.y2-this.cropper.y1)/2},this.cropper))},t.prototype.moveImg=function(t){this.moveStart.active&&(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),this.moveStart.type===a.Move?(this.cropperPositionService.move(t,this.moveStart,this.cropper),this.checkCropperPosition(!0)):this.moveStart.type===a.Resize&&(this.cropperStaticWidth||this.cropperStaticHeight||this.cropperPositionService.resize(t,this.moveStart,this.cropper,this.maxSize,this.settings),this.checkCropperPosition(!1)),this.cd.detectChanges())},t.prototype.onPinch=function(t){this.moveStart.active&&(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),this.moveStart.type===a.Pinch&&(this.cropperPositionService.resize(t,this.moveStart,this.cropper,this.maxSize,this.settings),this.checkCropperPosition(!1)),this.cd.detectChanges())},t.prototype.setMaxSize=function(){if(this.sourceImage){var t=this.sourceImage.nativeElement;this.maxSize.width=t.offsetWidth,this.maxSize.height=t.offsetHeight,this.marginLeft=this.sanitizer.bypassSecurityTrustStyle("calc(50% - "+this.maxSize.width/2+"px)")}},t.prototype.setCropperScaledMinSize=function(){var t,e;(null===(e=null===(t=this.loadedImage)||void 0===t?void 0:t.transformed)||void 0===e?void 0:e.image)?(this.setCropperScaledMinWidth(),this.setCropperScaledMinHeight()):(this.settings.cropperScaledMinWidth=20,this.settings.cropperScaledMinHeight=20)},t.prototype.setCropperScaledMinWidth=function(){this.settings.cropperScaledMinWidth=this.cropperMinWidth>0?Math.max(20,this.cropperMinWidth/this.loadedImage.transformed.image.width*this.maxSize.width):20},t.prototype.setCropperScaledMinHeight=function(){this.maintainAspectRatio?this.settings.cropperScaledMinHeight=Math.max(20,this.settings.cropperScaledMinWidth/this.aspectRatio):this.cropperMinHeight>0?this.settings.cropperScaledMinHeight=Math.max(20,this.cropperMinHeight/this.loadedImage.transformed.image.height*this.maxSize.height):this.settings.cropperScaledMinHeight=20},t.prototype.setCropperScaledMaxSize=function(){var t,e;if(null===(e=null===(t=this.loadedImage)||void 0===t?void 0:t.transformed)||void 0===e?void 0:e.image){var i=this.loadedImage.transformed.size.width/this.maxSize.width;this.settings.cropperScaledMaxWidth=this.cropperMaxWidth>20?this.cropperMaxWidth/i:this.maxSize.width,this.settings.cropperScaledMaxHeight=this.cropperMaxHeight>20?this.cropperMaxHeight/i:this.maxSize.height,this.maintainAspectRatio&&(this.settings.cropperScaledMaxWidth>this.settings.cropperScaledMaxHeight*this.aspectRatio?this.settings.cropperScaledMaxWidth=this.settings.cropperScaledMaxHeight*this.aspectRatio:this.settings.cropperScaledMaxWidth<this.settings.cropperScaledMaxHeight*this.aspectRatio&&(this.settings.cropperScaledMaxHeight=this.settings.cropperScaledMaxWidth/this.aspectRatio))}else this.settings.cropperScaledMaxWidth=this.maxSize.width,this.settings.cropperScaledMaxHeight=this.maxSize.height},t.prototype.checkCropperPosition=function(t){void 0===t&&(t=!1),this.cropper.x1<0&&(this.cropper.x2-=t?this.cropper.x1:0,this.cropper.x1=0),this.cropper.y1<0&&(this.cropper.y2-=t?this.cropper.y1:0,this.cropper.y1=0),this.cropper.x2>this.maxSize.width&&(this.cropper.x1-=t?this.cropper.x2-this.maxSize.width:0,this.cropper.x2=this.maxSize.width),this.cropper.y2>this.maxSize.height&&(this.cropper.y1-=t?this.cropper.y2-this.maxSize.height:0,this.cropper.y2=this.maxSize.height)},t.prototype.moveStop=function(){this.moveStart.active&&(this.moveStart.active=!1,this.doAutoCrop())},t.prototype.pinchStop=function(){this.moveStart.active&&(this.moveStart.active=!1,this.doAutoCrop())},t.prototype.doAutoCrop=function(){this.autoCrop&&this.crop()},t.prototype.crop=function(){var t,e;if(null!=(null===(e=null===(t=this.loadedImage)||void 0===t?void 0:t.transformed)||void 0===e?void 0:e.image)){this.startCropImage.emit();var i=this.cropService.crop(this.sourceImage,this.loadedImage,this.cropper,this.settings);return null!=i&&this.imageCropped.emit(i),i}return null},t}();m.decorators=[{type:e.Component,args:[{selector:"image-cropper",template:'<div [style.background]="imageVisible && backgroundColor"\n #wrapper\n>\n <img\n #sourceImage\n class="ngx-ic-source-image"\n *ngIf="safeImgDataUrl"\n [src]="safeImgDataUrl"\n [style.visibility]="imageVisible ? \'visible\' : \'hidden\'"\n [style.transform]="safeTransformStyle"\n (load)="imageLoadedInView()"\n />\n <div\n class="ngx-ic-overlay"\n [style.width.px]="maxSize.width"\n [style.height.px]="maxSize.height"\n [style.margin-left]="alignImage === \'center\' ? marginLeft : null"\n ></div>\n <div class="ngx-ic-cropper"\n *ngIf="imageVisible"\n [class.ngx-ic-round]="roundCropper"\n [style.top.px]="cropper.y1"\n [style.left.px]="cropper.x1"\n [style.width.px]="cropper.x2 - cropper.x1"\n [style.height.px]="cropper.y2 - cropper.y1"\n [style.margin-left]="alignImage === \'center\' ? marginLeft : null"\n [style.visibility]="imageVisible ? \'visible\' : \'hidden\'"\n (keydown)="keyboardAccess($event)"\n tabindex="0"\n >\n <div\n (mousedown)="startMove($event, moveTypes.Move)"\n (touchstart)="startMove($event, moveTypes.Move)"\n class="ngx-ic-move">\n </div>\n <ng-container *ngIf="!hideResizeSquares">\n <span class="ngx-ic-resize ngx-ic-topleft"\n (mousedown)="startMove($event, moveTypes.Resize, \'topleft\')"\n (touchstart)="startMove($event, moveTypes.Resize, \'topleft\')">\n <span class="ngx-ic-square"></span>\n </span>\n <span class="ngx-ic-resize ngx-ic-top">\n <span class="ngx-ic-square"></span>\n </span>\n <span class="ngx-ic-resize ngx-ic-topright"\n (mousedown)="startMove($event, moveTypes.Resize, \'topright\')"\n (touchstart)="startMove($event, moveTypes.Resize, \'topright\')">\n <span class="ngx-ic-square"></span>\n </span>\n <span class="ngx-ic-resize ngx-ic-right">\n <span class="ngx-ic-square"></span>\n </span>\n <span class="ngx-ic-resize ngx-ic-bottomright"\n (mousedown)="startMove($event, moveTypes.Resize, \'bottomright\')"\n (touchstart)="startMove($event, moveTypes.Resize, \'bottomright\')">\n <span class="ngx-ic-square"></span>\n </span>\n <span class="ngx-ic-resize ngx-ic-bottom">\n <span class="ngx-ic-square"></span>\n </span>\n <span class="ngx-ic-resize ngx-ic-bottomleft"\n (mousedown)="startMove($event, moveTypes.Resize, \'bottomleft\')"\n (touchstart)="startMove($event, moveTypes.Resize, \'bottomleft\')">\n <span class="ngx-ic-square"></span>\n </span>\n <span class="ngx-ic-resize ngx-ic-left">\n <span class="ngx-ic-square"></span>\n </span>\n <span class="ngx-ic-resize-bar ngx-ic-top"\n (mousedown)="startMove($event, moveTypes.Resize, \'top\')"\n (touchstart)="startMove($event, moveTypes.Resize, \'top\')">\n </span>\n <span class="ngx-ic-resize-bar ngx-ic-right"\n (mousedown)="startMove($event, moveTypes.Resize, \'right\')"\n (touchstart)="startMove($event, moveTypes.Resize, \'right\')">\n </span>\n <span class="ngx-ic-resize-bar ngx-ic-bottom"\n (mousedown)="startMove($event, moveTypes.Resize, \'bottom\')"\n (touchstart)="startMove($event, moveTypes.Resize, \'bottom\')">\n </span>\n <span class="ngx-ic-resize-bar ngx-ic-left"\n (mousedown)="startMove($event, moveTypes.Resize, \'left\')"\n (touchstart)="startMove($event, moveTypes.Resize, \'left\')">\n </span>\n </ng-container>\n </div>\n</div>\n',changeDetection:e.ChangeDetectionStrategy.OnPush,styles:[':host{display:flex;max-height:100%;max-width:100%;overflow:hidden;padding:5px;text-align:center}:host,:host>div{position:relative;width:100%}:host>div img.ngx-ic-source-image{max-height:100%;max-width:100%;transform-origin:center}:host .ngx-ic-overlay{left:0;outline:var(--cropper-overlay-color,#fff) solid 100vw;pointer-events:none;position:absolute;top:0;touch-action:none}:host .ngx-ic-cropper{background:transparent;color:#53535c;display:flex;outline:100vw solid hsla(0,0%,100%,.3);outline:var(--cropper-outline-color,hsla(0,0%,100%,.3)) solid 100vw;position:absolute;touch-action:none}@media (orientation:portrait){:host .ngx-ic-cropper{outline-width:100vh}}:host .ngx-ic-cropper:after{border:1px dashed;bottom:0;color:inherit;content:"";left:0;opacity:.75;pointer-events:none;position:absolute;right:0;top:0;z-index:1}:host .ngx-ic-cropper .ngx-ic-move{border:1px solid hsla(0,0%,100%,.5);cursor:move;width:100%}:host .ngx-ic-cropper:focus .ngx-ic-move{border-color:#1e90ff;border-width:2px}:host .ngx-ic-cropper .ngx-ic-resize{display:inline-block;line-height:6px;opacity:.85;padding:8px;position:absolute;z-index:1}:host .ngx-ic-cropper .ngx-ic-resize .ngx-ic-square{background:#53535c;border:1px solid hsla(0,0%,100%,.5);box-sizing:content-box;display:inline-block;height:6px;width:6px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-topleft{cursor:nwse-resize;left:-12px;top:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-top{cursor:ns-resize;left:calc(50% - 12px);top:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-topright{cursor:nesw-resize;right:-12px;top:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-right{cursor:ew-resize;right:-12px;top:calc(50% - 12px)}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottomright{bottom:-12px;cursor:nwse-resize;right:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottom{bottom:-12px;cursor:ns-resize;left:calc(50% - 12px)}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-bottomleft{bottom:-12px;cursor:nesw-resize;left:-12px}:host .ngx-ic-cropper .ngx-ic-resize.ngx-ic-left{cursor:ew-resize;left:-12px;top:calc(50% - 12px)}:host .ngx-ic-cropper .ngx-ic-resize-bar{position:absolute;z-index:1}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-top{cursor:ns-resize;height:22px;left:11px;top:-11px;width:calc(100% - 22px)}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-right{cursor:ew-resize;height:calc(100% - 22px);right:-11px;top:11px;width:22px}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-bottom{bottom:-11px;cursor:ns-resize;height:22px;left:11px;width:calc(100% - 22px)}:host .ngx-ic-cropper .ngx-ic-resize-bar.ngx-ic-left{cursor:ew-resize;height:calc(100% - 22px);left:-11px;top:11px;width:22px}:host .ngx-ic-cropper.ngx-ic-round{outline-color:transparent}:host .ngx-ic-cropper.ngx-ic-round:after{border-radius:100%;box-shadow:0 0 0 100vw hsla(0,0%,100%,.3);box-shadow:0 0 0 100vw var(--cropper-outline-color,hsla(0,0%,100%,.3))}@media (orientation:portrait){:host .ngx-ic-cropper.ngx-ic-round:after{box-shadow:0 0 0 100vh hsla(0,0%,100%,.3);box-shadow:0 0 0 100vh var(--cropper-outline-color,hsla(0,0%,100%,.3))}}:host .ngx-ic-cropper.ngx-ic-round .ngx-ic-move{border-radius:100%}:host.disabled .ngx-ic-cropper .ngx-ic-move,:host.disabled .ngx-ic-cropper .ngx-ic-resize,:host.disabled .ngx-ic-cropper .ngx-ic-resize-bar{display:none}']}]}],m.ctorParameters=function(){return[{type:h},{type:g},{type:d},{type:i.DomSanitizer},{type:e.ChangeDetectorRef}]},m.propDecorators={wrapper:[{type:e.ViewChild,args:["wrapper",{static:!0}]}],sourceImage:[{type:e.ViewChild,args:["sourceImage",{static:!1}]}],imageChangedEvent:[{type:e.Input}],imageURL:[{type:e.Input}],imageBase64:[{type:e.Input}],imageFile:[{type:e.Input}],format:[{type:e.Input}],transform:[{type:e.Input}],maintainAspectRatio:[{type:e.Input}],aspectRatio:[{type:e.Input}],resizeToWidth:[{type:e.Input}],resizeToHeight:[{type:e.Input}],cropperMinWidth:[{type:e.Input}],cropperMinHeight:[{type:e.Input}],cropperMaxHeight:[{type:e.Input}],cropperMaxWidth:[{type:e.Input}],cropperStaticWidth:[{type:e.Input}],cropperStaticHeight:[{type:e.Input}],canvasRotation:[{type:e.Input}],initialStepSize:[{type:e.Input}],roundCropper:[{type:e.Input}],onlyScaleDown:[{type:e.Input}],imageQuality:[{type:e.Input}],autoCrop:[{type:e.Input}],backgroundColor:[{type:e.Input}],containWithinAspectRatio:[{type:e.Input}],hideResizeSquares:[{type:e.Input}],cropper:[{type:e.Input}],alignImage:[{type:e.HostBinding,args:["style.text-align"]},{type:e.Input}],disabled:[{type:e.HostBinding,args:["class.disabled"]},{type:e.Input}],imageCropped:[{type:e.Output}],startCropImage:[{type:e.Output}],imageLoaded:[{type:e.Output}],cropperReady:[{type:e.Output}],loadImageFailed:[{type:e.Output}],onResize:[{type:e.HostListener,args:["window:resize"]}],moveImg:[{type:e.HostListener,args:["document:mousemove",["$event"]]},{type:e.HostListener,args:["document:touchmove",["$event"]]}],moveStop:[{type:e.HostListener,args:["document:mouseup"]},{type:e.HostListener,args:["document:touchend"]}]};var u=function(){};u.decorators=[{type:e.NgModule,args:[{imports:[r.CommonModule],declarations:[m],exports:[m]}]}],t.ImageCropperComponent=m,t.ImageCropperModule=u,t.base64ToFile=function(t){for(var e=t.split(","),i=e[0].replace("data:","").replace(";base64",""),r=atob(e[1]),o=new ArrayBuffer(r.length),a=new Uint8Array(o),n=0;n<r.length;n+=1)a[n]=r.charCodeAt(n);return new Blob([o],{type:i})},t.resizeCanvas=c,t.ɵa=h,t.ɵb=g,t.ɵc=d,Object.defineProperty(t,"__esModule",{value:!0})}));
16
- //# sourceMappingURL=ngx-image-cropper.umd.min.js.map