@datarailsshared/datarailsshared 1.5.298 → 1.5.300

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.
@@ -3160,6 +3160,7 @@ var LinkTheme;
3160
3160
  (function (LinkTheme) {
3161
3161
  LinkTheme["DEFAULT"] = "DEFAULT";
3162
3162
  LinkTheme["DEFAULT_UNDERLINE"] = "DEFAULT_UNDERLINE";
3163
+ LinkTheme["GRAY_UNDERLINE"] = "GRAY_UNDERLINE";
3163
3164
  })(LinkTheme || (LinkTheme = {}));
3164
3165
  const DEFAULT_LINK_FONT_SIZE = '14px';
3165
3166
  const DEFAULT_LINK_FONT_WEIGHT = 400;
@@ -3170,11 +3171,11 @@ class DrLinkComponent {
3170
3171
  this.theme = LinkTheme.DEFAULT;
3171
3172
  }
3172
3173
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3173
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrLinkComponent, selector: "dr-link", inputs: { link: "link", fontSize: "fontSize", fontWeight: "fontWeight", theme: "theme" }, ngImport: i0, template: "<a class=\"dr-link\"\n [class]=\"theme\"\n [href]=\"link\"\n [style.font-weight]=\"fontWeight\"\n [style.font-size]=\"fontSize\">\n <ng-content></ng-content>\n</a>\n", styles: [".dr-link{font-family:Poppins,sans-serif;font-style:normal;font-size:14px;font-weight:400;line-height:22px;color:#4646ce}.dr-link.DEFAULT{text-decoration:none!important}.dr-link.DEFAULT_UNDERLINE{text-decoration:underline!important}\n"] }); }
3174
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrLinkComponent, selector: "dr-link", inputs: { link: "link", fontSize: "fontSize", fontWeight: "fontWeight", theme: "theme" }, ngImport: i0, template: "<a class=\"dr-link\"\n [class]=\"theme\"\n [href]=\"link\"\n [style.font-weight]=\"fontWeight\"\n [style.font-size]=\"fontSize\">\n <ng-content></ng-content>\n</a>\n", styles: [".dr-link{font-family:Poppins,sans-serif;font-style:normal;font-size:14px;font-weight:400;line-height:22px;color:#4646ce}.dr-link.DEFAULT{text-decoration:none!important}.dr-link.DEFAULT_UNDERLINE{text-decoration:underline!important}.dr-link.GRAY_UNDERLINE{color:#6d6e6f;text-decoration:underline!important}\n"] }); }
3174
3175
  }
3175
3176
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrLinkComponent, decorators: [{
3176
3177
  type: Component,
3177
- args: [{ selector: 'dr-link', template: "<a class=\"dr-link\"\n [class]=\"theme\"\n [href]=\"link\"\n [style.font-weight]=\"fontWeight\"\n [style.font-size]=\"fontSize\">\n <ng-content></ng-content>\n</a>\n", styles: [".dr-link{font-family:Poppins,sans-serif;font-style:normal;font-size:14px;font-weight:400;line-height:22px;color:#4646ce}.dr-link.DEFAULT{text-decoration:none!important}.dr-link.DEFAULT_UNDERLINE{text-decoration:underline!important}\n"] }]
3178
+ args: [{ selector: 'dr-link', template: "<a class=\"dr-link\"\n [class]=\"theme\"\n [href]=\"link\"\n [style.font-weight]=\"fontWeight\"\n [style.font-size]=\"fontSize\">\n <ng-content></ng-content>\n</a>\n", styles: [".dr-link{font-family:Poppins,sans-serif;font-style:normal;font-size:14px;font-weight:400;line-height:22px;color:#4646ce}.dr-link.DEFAULT{text-decoration:none!important}.dr-link.DEFAULT_UNDERLINE{text-decoration:underline!important}.dr-link.GRAY_UNDERLINE{color:#6d6e6f;text-decoration:underline!important}\n"] }]
3178
3179
  }], propDecorators: { link: [{
3179
3180
  type: Input,
3180
3181
  args: [{ required: true }]
@@ -8365,6 +8366,221 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
8365
8366
  }]
8366
8367
  }] });
8367
8368
 
8369
+ class DrSliderComponent {
8370
+ constructor() {
8371
+ this.max = 100;
8372
+ this.min = 1;
8373
+ this.step = 1;
8374
+ this.rangeValue = 1;
8375
+ this.onChange = () => {
8376
+ };
8377
+ this.onTouched = () => {
8378
+ };
8379
+ }
8380
+ registerOnChange(fn) {
8381
+ this.onChange = fn;
8382
+ }
8383
+ registerOnTouched(fn) {
8384
+ this.onTouched = fn;
8385
+ }
8386
+ setDisabledState(isDisabled) {
8387
+ this.disabled = isDisabled;
8388
+ }
8389
+ writeValue(value) {
8390
+ this.rangeValue = value;
8391
+ }
8392
+ setValue(event) {
8393
+ this.writeValue(event.target.value);
8394
+ this.onChange(this.rangeValue);
8395
+ this.onTouched();
8396
+ }
8397
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrSliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8398
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrSliderComponent, isStandalone: true, selector: "dr-slider", inputs: { disabled: "disabled", max: "max", min: "min", step: "step", rangeValue: "rangeValue" }, providers: [
8399
+ { provide: NG_VALUE_ACCESSOR, useExisting: DrSliderComponent, multi: true }
8400
+ ], ngImport: i0, template: "<input type=\"range\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [disabled]=\"disabled\"\n [value]=\"rangeValue\"\n (change)=\"setValue($event)\"\n/>\n", styles: ["input[type=range]{appearance:none;background:transparent;cursor:pointer}input[type=range]:focus{outline:none}input[type=range]::-webkit-slider-runnable-track{height:4px;border-radius:4px;background-color:#dfe0e3}input[type=range]::-webkit-slider-thumb{appearance:none;margin-top:-5px;height:14px;width:14px;border-radius:14px;background-color:#4646ce}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8401
+ }
8402
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrSliderComponent, decorators: [{
8403
+ type: Component,
8404
+ args: [{ selector: 'dr-slider', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
8405
+ { provide: NG_VALUE_ACCESSOR, useExisting: DrSliderComponent, multi: true }
8406
+ ], standalone: true, template: "<input type=\"range\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [disabled]=\"disabled\"\n [value]=\"rangeValue\"\n (change)=\"setValue($event)\"\n/>\n", styles: ["input[type=range]{appearance:none;background:transparent;cursor:pointer}input[type=range]:focus{outline:none}input[type=range]::-webkit-slider-runnable-track{height:4px;border-radius:4px;background-color:#dfe0e3}input[type=range]::-webkit-slider-thumb{appearance:none;margin-top:-5px;height:14px;width:14px;border-radius:14px;background-color:#4646ce}\n"] }]
8407
+ }], propDecorators: { disabled: [{
8408
+ type: Input
8409
+ }], max: [{
8410
+ type: Input
8411
+ }], min: [{
8412
+ type: Input
8413
+ }], step: [{
8414
+ type: Input
8415
+ }], rangeValue: [{
8416
+ type: Input
8417
+ }] } });
8418
+
8419
+ var CROP_IMAGE_MODES;
8420
+ (function (CROP_IMAGE_MODES) {
8421
+ CROP_IMAGE_MODES["SQUARE"] = "square";
8422
+ CROP_IMAGE_MODES["RECTANGLE"] = "rectangle";
8423
+ })(CROP_IMAGE_MODES || (CROP_IMAGE_MODES = {}));
8424
+
8425
+ class DrImageCropperCanvasService {
8426
+ constructor() {
8427
+ this.ALPHA_FOR_SHADOW = 0.2;
8428
+ // this param means that a side of a white square is half of a side of a canvas
8429
+ this.CROP_AREA_PROPORTION = 2;
8430
+ this.RECTANGULAR_SHADOW_WIDTH = 30;
8431
+ this.RECTANGULAR_SHADOW_HEIGHT = 70;
8432
+ }
8433
+ drawShape(canvasSize, cropMode, zoomLevel, htmlImageElement) {
8434
+ this.clearCanvas(canvasSize);
8435
+ this.drawImageByZoom(canvasSize, zoomLevel, htmlImageElement);
8436
+ this.drawShadow(cropMode, canvasSize);
8437
+ }
8438
+ getCoordinates(cropMode, canvasSize) {
8439
+ return cropMode === CROP_IMAGE_MODES.SQUARE
8440
+ ? this.getCoordinatesForSquare(canvasSize)
8441
+ : this.getCoordinatesForRectangle(canvasSize);
8442
+ }
8443
+ getCoordinatesForSquare(canvasSize) {
8444
+ const shadowLength = canvasSize / (this.CROP_AREA_PROPORTION * 2);
8445
+ const bottomPosition = canvasSize - shadowLength;
8446
+ return [shadowLength, shadowLength, bottomPosition, bottomPosition].join(',');
8447
+ }
8448
+ getCoordinatesForRectangle(canvasSize) {
8449
+ return [
8450
+ this.RECTANGULAR_SHADOW_WIDTH,
8451
+ this.RECTANGULAR_SHADOW_HEIGHT,
8452
+ canvasSize - this.RECTANGULAR_SHADOW_WIDTH,
8453
+ canvasSize - this.RECTANGULAR_SHADOW_HEIGHT
8454
+ ].join(',');
8455
+ }
8456
+ drawShadow(cropMode, canvasSize) {
8457
+ this.ctx.globalAlpha = this.ALPHA_FOR_SHADOW;
8458
+ this.ctx.fillStyle = 'black';
8459
+ if (cropMode === CROP_IMAGE_MODES.SQUARE) {
8460
+ this.drawSquareShadow(canvasSize);
8461
+ }
8462
+ else if (cropMode === CROP_IMAGE_MODES.RECTANGLE) {
8463
+ this.drawRectangularShadow(canvasSize);
8464
+ }
8465
+ this.ctx.globalAlpha = 1;
8466
+ }
8467
+ drawSquareShadow(canvasSize) {
8468
+ const shadowLength = canvasSize / (this.CROP_AREA_PROPORTION * 2);
8469
+ this.ctx.fillRect(0, 0, shadowLength, canvasSize);
8470
+ this.ctx.fillRect(canvasSize - shadowLength, 0, shadowLength, canvasSize);
8471
+ this.ctx.fillRect(shadowLength, 0, 2 * shadowLength, shadowLength);
8472
+ this.ctx.fillRect(shadowLength, canvasSize - shadowLength, 2 * shadowLength, shadowLength);
8473
+ }
8474
+ drawRectangularShadow(canvasSize) {
8475
+ this.ctx.fillRect(0, 0, this.RECTANGULAR_SHADOW_WIDTH, canvasSize);
8476
+ this.ctx.fillRect(canvasSize - this.RECTANGULAR_SHADOW_WIDTH, 0, this.RECTANGULAR_SHADOW_WIDTH, canvasSize);
8477
+ this.ctx.fillRect(this.RECTANGULAR_SHADOW_WIDTH, 0, canvasSize - 2 * this.RECTANGULAR_SHADOW_WIDTH, this.RECTANGULAR_SHADOW_HEIGHT);
8478
+ this.ctx.fillRect(this.RECTANGULAR_SHADOW_WIDTH, canvasSize - this.RECTANGULAR_SHADOW_HEIGHT, canvasSize - 2 * this.RECTANGULAR_SHADOW_WIDTH, this.RECTANGULAR_SHADOW_HEIGHT);
8479
+ }
8480
+ drawImageByZoom(canvasSize, zoomLevel, htmlImageElement) {
8481
+ const maxImageDimension = Math.max(htmlImageElement.width, htmlImageElement.height);
8482
+ const proportion = canvasSize / (this.CROP_AREA_PROPORTION * maxImageDimension);
8483
+ const suitableWidth = htmlImageElement.width * proportion * zoomLevel;
8484
+ const suitableHeight = htmlImageElement.height * proportion * zoomLevel;
8485
+ const rectX = (canvasSize - suitableWidth) / 2;
8486
+ const rectY = (canvasSize - suitableHeight) / 2;
8487
+ this.ctx.drawImage(htmlImageElement, rectX, rectY, suitableWidth, suitableHeight);
8488
+ }
8489
+ clearCanvas(canvasSize) {
8490
+ this.ctx.fillStyle = 'white';
8491
+ this.ctx.fillRect(0, 0, canvasSize, canvasSize);
8492
+ }
8493
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrImageCropperCanvasService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8494
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrImageCropperCanvasService }); }
8495
+ }
8496
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrImageCropperCanvasService, decorators: [{
8497
+ type: Injectable
8498
+ }] });
8499
+
8500
+ class DrImageCropperComponent {
8501
+ constructor(canvasService) {
8502
+ this.canvasService = canvasService;
8503
+ this.maxZoom = 10;
8504
+ this.minZoom = 0.5;
8505
+ this.zoomStep = 0.1;
8506
+ this.zoomLevel = 1;
8507
+ this.cropChanged = new EventEmitter();
8508
+ this.clearClicked = new EventEmitter();
8509
+ this.cropMode = CROP_IMAGE_MODES.SQUARE;
8510
+ this.CROP_IMAGE_MODES = CROP_IMAGE_MODES;
8511
+ }
8512
+ ngOnChanges(changes) {
8513
+ if (changes.imageFile && this.imageFile) {
8514
+ this.readImageFile();
8515
+ }
8516
+ }
8517
+ ngAfterViewInit() {
8518
+ this.canvasService.ctx = this.canvasElement.nativeElement.getContext('2d');
8519
+ }
8520
+ drawImage(newZoomEvent) {
8521
+ if (newZoomEvent !== undefined) {
8522
+ this.zoomLevel = newZoomEvent.target.value;
8523
+ }
8524
+ this.onCropModeUpdated();
8525
+ }
8526
+ onCropModeUpdated(cropMode) {
8527
+ if (cropMode) {
8528
+ this.cropMode = cropMode;
8529
+ }
8530
+ this.canvasService.drawShape(this.cropperSize, this.cropMode, this.zoomLevel, this.htmlImageElement);
8531
+ const coordinates = this.canvasService.getCoordinates(this.cropMode, this.cropperSize);
8532
+ this.canvasElement.nativeElement.toBlob((blob) => {
8533
+ const file = new File([blob], this.imageFile.name, { type: this.imageFile.type, lastModified: Date.now() });
8534
+ this.cropChanged.emit({ file, coordinates, cropMode: this.cropMode });
8535
+ }, this.imageFile.type);
8536
+ }
8537
+ readImageFile() {
8538
+ const reader = new FileReader();
8539
+ reader.onload = () => {
8540
+ this.htmlImageElement = new Image();
8541
+ this.htmlImageElement.src = this.getImagesStringSrc(reader);
8542
+ this.htmlImageElement.onload = () => {
8543
+ this.canvasElement.nativeElement.width = this.canvasElement.nativeElement.height = this.cropperSize;
8544
+ this.drawImage();
8545
+ };
8546
+ };
8547
+ reader.readAsDataURL(this.imageFile);
8548
+ }
8549
+ getImagesStringSrc(reader) {
8550
+ if (typeof reader.result === 'string')
8551
+ return reader.result;
8552
+ const decoder = new TextDecoder();
8553
+ return decoder.decode(reader.result);
8554
+ }
8555
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrImageCropperComponent, deps: [{ token: DrImageCropperCanvasService }], target: i0.ɵɵFactoryTarget.Component }); }
8556
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrImageCropperComponent, isStandalone: true, selector: "dr-image-cropper", inputs: { cropperSize: "cropperSize", imageFile: "imageFile", maxZoom: "maxZoom", minZoom: "minZoom", zoomStep: "zoomStep", zoomLevel: "zoomLevel" }, outputs: { cropChanged: "cropChanged", clearClicked: "clearClicked" }, providers: [DrImageCropperCanvasService], viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["imageCanvas"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"crop-mode-btns-container\">\n <dr-button theme=\"ghost\"\n [class.active-mode]=\"cropMode === CROP_IMAGE_MODES.SQUARE\"\n (click)=\"onCropModeUpdated(CROP_IMAGE_MODES.SQUARE)\">\n <div class=\"mode-btn\">\n <div class=\"mode-btn__square-icon\"></div>\n Square\n </div>\n </dr-button>\n <dr-button theme=\"ghost\"\n [class.active-mode]=\"cropMode === CROP_IMAGE_MODES.RECTANGLE\"\n (click)=\"onCropModeUpdated(CROP_IMAGE_MODES.RECTANGLE)\">\n <div class=\"mode-btn\">\n <div class=\"mode-btn__rectangle-icon\"></div>\n Rectangle\n </div>\n </dr-button>\n</div>\n\n<div class=\"image-cropper\">\n <canvas #imageCanvas></canvas>\n</div>\n<dr-slider\n [(ngModel)]=\"zoomLevel\"\n [max]=\"maxZoom\"\n [min]=\"minZoom\"\n [step]=\"zoomStep\"\n [style.width]=\"cropperSize + 'px'\"\n class=\"image-crop-slider\"\n (input)=\"drawImage($event)\">\n</dr-slider>\n<dr-button [theme]=\"'ghost'\" (click)=\"clearClicked.emit()\" class=\"try-another-btn\">\n Try another image\n</dr-button>\n", styles: [":host{display:flex;flex-direction:column}:host .crop-mode-btns-container{display:flex;justify-content:center;margin-bottom:16px}:host .crop-mode-btns-container ::ng-deep dr-button.active-mode>button{background:#eaeaff}:host .crop-mode-btns-container ::ng-deep dr-button>button{height:56px;width:80px}:host .crop-mode-btns-container dr-button:not(:first-child){margin-left:8px}:host .crop-mode-btns-container .mode-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;color:#333;height:56px;width:80px}:host .crop-mode-btns-container .mode-btn__rectangle-icon{height:8px;width:24px;margin-top:4px;margin-bottom:4px}:host .crop-mode-btns-container .mode-btn__square-icon{width:16px;height:16px}:host .crop-mode-btns-container .mode-btn__rectangle-icon,:host .crop-mode-btns-container .mode-btn__square-icon{border:1px solid #333333}:host .image-cropper{overflow:hidden;position:relative}:host .image-cropper__shadow{position:absolute}:host .image-crop-slider{margin-top:8px}:host .try-another-btn{display:flex;justify-content:center;margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DrSliderComponent, selector: "dr-slider", inputs: ["disabled", "max", "min", "step", "rangeValue"] }, { kind: "ngmodule", type: DrInputsModule }, { kind: "component", type: DrButtonComponent, selector: "dr-button", inputs: ["theme", "icon", "iconColor", "iconSize", "iconAfter", "iconAfterColor", "iconAfterSize", "disabled", "isLoading", "isActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8557
+ }
8558
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrImageCropperComponent, decorators: [{
8559
+ type: Component,
8560
+ args: [{ selector: 'dr-image-cropper', changeDetection: ChangeDetectionStrategy.OnPush, imports: [FormsModule, DrSliderComponent, DrInputsModule], standalone: true, providers: [DrImageCropperCanvasService], template: "<div class=\"crop-mode-btns-container\">\n <dr-button theme=\"ghost\"\n [class.active-mode]=\"cropMode === CROP_IMAGE_MODES.SQUARE\"\n (click)=\"onCropModeUpdated(CROP_IMAGE_MODES.SQUARE)\">\n <div class=\"mode-btn\">\n <div class=\"mode-btn__square-icon\"></div>\n Square\n </div>\n </dr-button>\n <dr-button theme=\"ghost\"\n [class.active-mode]=\"cropMode === CROP_IMAGE_MODES.RECTANGLE\"\n (click)=\"onCropModeUpdated(CROP_IMAGE_MODES.RECTANGLE)\">\n <div class=\"mode-btn\">\n <div class=\"mode-btn__rectangle-icon\"></div>\n Rectangle\n </div>\n </dr-button>\n</div>\n\n<div class=\"image-cropper\">\n <canvas #imageCanvas></canvas>\n</div>\n<dr-slider\n [(ngModel)]=\"zoomLevel\"\n [max]=\"maxZoom\"\n [min]=\"minZoom\"\n [step]=\"zoomStep\"\n [style.width]=\"cropperSize + 'px'\"\n class=\"image-crop-slider\"\n (input)=\"drawImage($event)\">\n</dr-slider>\n<dr-button [theme]=\"'ghost'\" (click)=\"clearClicked.emit()\" class=\"try-another-btn\">\n Try another image\n</dr-button>\n", styles: [":host{display:flex;flex-direction:column}:host .crop-mode-btns-container{display:flex;justify-content:center;margin-bottom:16px}:host .crop-mode-btns-container ::ng-deep dr-button.active-mode>button{background:#eaeaff}:host .crop-mode-btns-container ::ng-deep dr-button>button{height:56px;width:80px}:host .crop-mode-btns-container dr-button:not(:first-child){margin-left:8px}:host .crop-mode-btns-container .mode-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;color:#333;height:56px;width:80px}:host .crop-mode-btns-container .mode-btn__rectangle-icon{height:8px;width:24px;margin-top:4px;margin-bottom:4px}:host .crop-mode-btns-container .mode-btn__square-icon{width:16px;height:16px}:host .crop-mode-btns-container .mode-btn__rectangle-icon,:host .crop-mode-btns-container .mode-btn__square-icon{border:1px solid #333333}:host .image-cropper{overflow:hidden;position:relative}:host .image-cropper__shadow{position:absolute}:host .image-crop-slider{margin-top:8px}:host .try-another-btn{display:flex;justify-content:center;margin-top:8px}\n"] }]
8561
+ }], ctorParameters: function () { return [{ type: DrImageCropperCanvasService }]; }, propDecorators: { cropperSize: [{
8562
+ type: Input,
8563
+ args: [{ required: true }]
8564
+ }], imageFile: [{
8565
+ type: Input,
8566
+ args: [{ required: true }]
8567
+ }], maxZoom: [{
8568
+ type: Input
8569
+ }], minZoom: [{
8570
+ type: Input
8571
+ }], zoomStep: [{
8572
+ type: Input
8573
+ }], zoomLevel: [{
8574
+ type: Input
8575
+ }], cropChanged: [{
8576
+ type: Output
8577
+ }], clearClicked: [{
8578
+ type: Output
8579
+ }], canvasElement: [{
8580
+ type: ViewChild,
8581
+ args: ['imageCanvas', { static: true }]
8582
+ }] } });
8583
+
8368
8584
  class DrDropdownModule {
8369
8585
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrDropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8370
8586
  /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DrDropdownModule, declarations: [DrDropdownDirective,
@@ -8856,5 +9072,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
8856
9072
  * Generated bundle index. Do not edit.
8857
9073
  */
8858
9074
 
8859
- export { AnyTagComponent, BadgeStatus, CHAT_MESSAGE_TYPE, CalendarView, ChatMessage, ChatRole, CheckboxComponent, ClickOutsideDirective, ClickOutsideModule, CodeEditorHintWrapperComponent, CustomDateFormat, DEFAULT_LINK_FONT_SIZE, DEFAULT_LINK_FONT_WEIGHT, DIALOG_BUTTON_LABEL, DIALOG_FIELD_TYPE, DIALOG_SIZE, DateFromats, DatePickerPeriodPosition, DateTagComponent, DateTagModule, DateTags, DayTagComponent, DefaultToastrComponent, DefaultTreeviewEventParser, DefaultTreeviewI18n, DialogModalWrapperComponent, DialogService, DialogWrapperComponent, DownlineTreeviewEventParser, DrAccordionComponent, DrAccordionItemBodyComponent, DrAccordionItemComponent, DrAccordionItemHeaderComponent, DrAccordionModule, DrAlertComponent, DrAlertModule, DrAlertTheme, DrAvatarComponent, DrAvatarModule, DrAvatarPipe, DrAvatarService, DrBadgeStatusComponent, DrBadgeStatusModule, DrButtonComponent, DrChatAlertComponent, DrChatComponent, DrChatCustomMessageDirective, DrChatFormComponent, DrChatMessageComponent, DrChatMessageFileComponent, DrChatMessageTextComponent, DrChatModule, DrChatSuggestionsComponent, DrCodeEditorComponent, DrCodeEditorModule, DrCodemirrorComponent, DrDatePickerComponent, DrDatePickerCustomHeaderComponent, DrDatePickerFormatDirective, DrDatePickerRangeComponent, DrDatePickerWithTimeframeComponent, DrDetailsListComponent, DrDetailsListModule, DrDialogModule, DrDotFlashingComponent, DrDropdownComponent, DrDropdownDirective, DrDropdownItemShowPipe, DrDropdownModule, DrDropdownPositionDirective, DrDropdownService, DrErrorComponent, DrErrorModule, DrInputComponent, DrInputsModule, DrLayoutBodyComponent, DrLayoutComponent, DrLayoutHeaderComponent, DrLayoutModule, DrLinkComponent, DrModelDebounceChangeDirective, DrPopoverAlignmentDimension, DrPopoverComponent, DrPopoverDirective, DrPopoverModule, DrPopoverRef, DrPopoverService, DrScenarioConfigurationComponent, DrScenarioModule, DrScenarioTagConfigurationComponent, DrSelectAddItemComponent, DrSelectComponent, DrSharedUtils, DrShowTimeframePipe, DrSpinnerComponent, DrSpinnerDirective, DrSpinnerModule, DrStepperModule, DrTabComponent, DrTabsComponent, DrTabsModule, DrTagComponent, DrTagModule, DrTagsConstructorComponent, DrTagsConstructorModule, DrToastrModule, DrToastrService, DrToggleButtonComponent, DrToggleComponent, DrTooltipDirective, DrTooltipModule, FeedbackSentiment, ForecastTagComponent, ICodeEditorHintIcon, IMAGE_TYPES, LinkTheme, ListTagComponent, ListTagModule, MonthTagComponent, OrderDownlineTreeviewEventParser, QuarterTagComponent, RadioButtonComponent, RadioGroupComponent, Scenario, ScenarioService, StepperComponent, TagTypes, TagsConfigSubType, TagsConstructorService, TimeframeOption, ToastrStatus, ToastrStatusIcon, ToggleButtonMode, TooltipComponent, TooltipDefaultComponent, TooltipInfoComponent, TooltipInfoSimpleComponent, TooltipNoBodyComponent, TooltipPosition, TooltipProcessDefaultComponent, TooltipTheme, TreeviewComponent, TreeviewConfig, TreeviewEventParser, TreeviewHelper, TreeviewI18n, TreeviewItem, TreeviewModule, TreeviewPipe, WeekTagComponent, YearTagComponent };
9075
+ export { AnyTagComponent, BadgeStatus, CHAT_MESSAGE_TYPE, CROP_IMAGE_MODES, CalendarView, ChatMessage, ChatRole, CheckboxComponent, ClickOutsideDirective, ClickOutsideModule, CodeEditorHintWrapperComponent, CustomDateFormat, DEFAULT_LINK_FONT_SIZE, DEFAULT_LINK_FONT_WEIGHT, DIALOG_BUTTON_LABEL, DIALOG_FIELD_TYPE, DIALOG_SIZE, DateFromats, DatePickerPeriodPosition, DateTagComponent, DateTagModule, DateTags, DayTagComponent, DefaultToastrComponent, DefaultTreeviewEventParser, DefaultTreeviewI18n, DialogModalWrapperComponent, DialogService, DialogWrapperComponent, DownlineTreeviewEventParser, DrAccordionComponent, DrAccordionItemBodyComponent, DrAccordionItemComponent, DrAccordionItemHeaderComponent, DrAccordionModule, DrAlertComponent, DrAlertModule, DrAlertTheme, DrAvatarComponent, DrAvatarModule, DrAvatarPipe, DrAvatarService, DrBadgeStatusComponent, DrBadgeStatusModule, DrButtonComponent, DrChatAlertComponent, DrChatComponent, DrChatCustomMessageDirective, DrChatFormComponent, DrChatMessageComponent, DrChatMessageFileComponent, DrChatMessageTextComponent, DrChatModule, DrChatSuggestionsComponent, DrCodeEditorComponent, DrCodeEditorModule, DrCodemirrorComponent, DrDatePickerComponent, DrDatePickerCustomHeaderComponent, DrDatePickerFormatDirective, DrDatePickerRangeComponent, DrDatePickerWithTimeframeComponent, DrDetailsListComponent, DrDetailsListModule, DrDialogModule, DrDotFlashingComponent, DrDropdownComponent, DrDropdownDirective, DrDropdownItemShowPipe, DrDropdownModule, DrDropdownPositionDirective, DrDropdownService, DrErrorComponent, DrErrorModule, DrImageCropperComponent, DrInputComponent, DrInputsModule, DrLayoutBodyComponent, DrLayoutComponent, DrLayoutHeaderComponent, DrLayoutModule, DrLinkComponent, DrModelDebounceChangeDirective, DrPopoverAlignmentDimension, DrPopoverComponent, DrPopoverDirective, DrPopoverModule, DrPopoverRef, DrPopoverService, DrScenarioConfigurationComponent, DrScenarioModule, DrScenarioTagConfigurationComponent, DrSelectAddItemComponent, DrSelectComponent, DrSharedUtils, DrShowTimeframePipe, DrSliderComponent, DrSpinnerComponent, DrSpinnerDirective, DrSpinnerModule, DrStepperModule, DrTabComponent, DrTabsComponent, DrTabsModule, DrTagComponent, DrTagModule, DrTagsConstructorComponent, DrTagsConstructorModule, DrToastrModule, DrToastrService, DrToggleButtonComponent, DrToggleComponent, DrTooltipDirective, DrTooltipModule, FeedbackSentiment, ForecastTagComponent, ICodeEditorHintIcon, IMAGE_TYPES, LinkTheme, ListTagComponent, ListTagModule, MonthTagComponent, OrderDownlineTreeviewEventParser, QuarterTagComponent, RadioButtonComponent, RadioGroupComponent, Scenario, ScenarioService, StepperComponent, TagTypes, TagsConfigSubType, TagsConstructorService, TimeframeOption, ToastrStatus, ToastrStatusIcon, ToggleButtonMode, TooltipComponent, TooltipDefaultComponent, TooltipInfoComponent, TooltipInfoSimpleComponent, TooltipNoBodyComponent, TooltipPosition, TooltipProcessDefaultComponent, TooltipTheme, TreeviewComponent, TreeviewConfig, TreeviewEventParser, TreeviewHelper, TreeviewI18n, TreeviewItem, TreeviewModule, TreeviewPipe, WeekTagComponent, YearTagComponent };
8860
9076
  //# sourceMappingURL=datarailsshared-datarailsshared.mjs.map