valtech-components 2.0.680 → 2.0.681

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 (33) hide show
  1. package/esm2022/lib/components/templates/docs-page/docs-page.component.mjs +4 -35
  2. package/esm2022/lib/components/templates/docs-page/types.mjs +1 -1
  3. package/esm2022/lib/services/auth/auth.service.mjs +2 -11
  4. package/esm2022/lib/services/auth/types.mjs +1 -1
  5. package/esm2022/lib/version.mjs +2 -2
  6. package/esm2022/public-api.mjs +1 -7
  7. package/fesm2022/valtech-components.mjs +7 -815
  8. package/fesm2022/valtech-components.mjs.map +1 -1
  9. package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
  10. package/lib/components/organisms/article/article.component.d.ts +1 -1
  11. package/lib/components/organisms/toolbar/toolbar.component.d.ts +1 -1
  12. package/lib/components/templates/docs-page/docs-page.component.d.ts +0 -3
  13. package/lib/components/templates/docs-page/types.d.ts +0 -39
  14. package/lib/services/auth/auth.service.d.ts +1 -6
  15. package/lib/services/auth/types.d.ts +0 -18
  16. package/lib/version.d.ts +1 -1
  17. package/package.json +2 -6
  18. package/public-api.d.ts +0 -4
  19. package/esm2022/lib/components/molecules/image-crop/image-crop.component.mjs +0 -174
  20. package/esm2022/lib/components/molecules/image-crop/index.mjs +0 -2
  21. package/esm2022/lib/components/organisms/avatar-upload/avatar-upload.component.mjs +0 -345
  22. package/esm2022/lib/components/organisms/avatar-upload/types.mjs +0 -15
  23. package/esm2022/lib/services/image/image.service.mjs +0 -244
  24. package/esm2022/lib/services/image/index.mjs +0 -3
  25. package/esm2022/lib/services/image/types.mjs +0 -13
  26. package/lib/components/molecules/image-crop/image-crop.component.d.ts +0 -59
  27. package/lib/components/molecules/image-crop/index.d.ts +0 -1
  28. package/lib/components/organisms/avatar-upload/avatar-upload.component.d.ts +0 -82
  29. package/lib/components/organisms/avatar-upload/types.d.ts +0 -62
  30. package/lib/services/image/image.service.d.ts +0 -76
  31. package/lib/services/image/index.d.ts +0 -2
  32. package/lib/services/image/types.d.ts +0 -74
  33. package/src/lib/services/firebase/firebase-messaging-sw.js +0 -134
@@ -43,7 +43,7 @@ export declare class RightsFooterComponent {
43
43
  /**
44
44
  * Computed helper for color prop in template.
45
45
  */
46
- propsColor: import("@angular/core").Signal<"success" | "warning" | "danger" | "medium" | "primary" | "secondary" | "tertiary" | "light" | "dark">;
46
+ propsColor: import("@angular/core").Signal<"medium" | "primary" | "secondary" | "tertiary" | "success" | "warning" | "danger" | "light" | "dark">;
47
47
  /**
48
48
  * Computed helper for withMargin prop in template.
49
49
  */
@@ -90,7 +90,7 @@ export declare class ArticleComponent implements OnInit {
90
90
  contentInterpolation?: Record<string, string | number>;
91
91
  icon?: import("valtech-components").IconMetada;
92
92
  shape?: "round";
93
- size?: "default" | "small" | "large";
93
+ size?: "small" | "large" | "default";
94
94
  fill?: "default" | "clear" | "outline" | "solid";
95
95
  type: "button" | "submit" | "reset";
96
96
  token?: string;
@@ -72,7 +72,7 @@ export declare class ToolbarComponent implements OnInit {
72
72
  };
73
73
  showFlags?: boolean;
74
74
  color: import("@ionic/core").Color;
75
- size?: "default" | "small" | "large";
75
+ size?: "small" | "large" | "default";
76
76
  fill?: "default" | "clear" | "outline" | "solid";
77
77
  shape?: "round";
78
78
  expand?: "full" | "block";
@@ -2,7 +2,6 @@ import { AfterViewInit, OnDestroy } from '@angular/core';
2
2
  import { DocsBreadcrumbMetadata } from '../../molecules/docs-breadcrumb/types';
3
3
  import { DocsNavLinksMetadata } from '../../molecules/docs-nav-links/types';
4
4
  import { DocsTocMetadata } from '../../organisms/docs-toc/types';
5
- import { ContentReactionMetadata } from '../../molecules/content-reaction/types';
6
5
  import { DocsPageMetadata } from './types';
7
6
  import * as i0 from "@angular/core";
8
7
  /**
@@ -42,7 +41,6 @@ import * as i0 from "@angular/core";
42
41
  */
43
42
  export declare class DocsPageComponent implements AfterViewInit, OnDestroy {
44
43
  private elementRef;
45
- private router;
46
44
  private _props;
47
45
  set props(value: DocsPageMetadata);
48
46
  get props(): DocsPageMetadata;
@@ -55,7 +53,6 @@ export declare class DocsPageComponent implements AfterViewInit, OnDestroy {
55
53
  navLinksProps: import("@angular/core").Signal<DocsNavLinksMetadata>;
56
54
  showNavLinks: import("@angular/core").Signal<boolean>;
57
55
  breadcrumbProps: import("@angular/core").Signal<DocsBreadcrumbMetadata>;
58
- feedbackProps: import("@angular/core").Signal<ContentReactionMetadata>;
59
56
  static ɵfac: i0.ɵɵFactoryDeclaration<DocsPageComponent, never>;
60
57
  static ɵcmp: i0.ɵɵComponentDeclaration<DocsPageComponent, "val-docs-page", never, { "props": { "alias": "props"; "required": false; }; }, {}, never, ["*"], true, never>;
61
58
  }
@@ -66,45 +66,6 @@ export interface DocsPageMetadata {
66
66
  * Custom CSS class.
67
67
  */
68
68
  cssClass?: string;
69
- /**
70
- * Feedback/reaction widget configuration.
71
- * When enabled, shows a "Was this page helpful?" reaction widget.
72
- */
73
- feedback?: DocsPageFeedbackConfig;
74
- }
75
- /**
76
- * Configuration for the feedback reaction widget.
77
- */
78
- export interface DocsPageFeedbackConfig {
79
- /**
80
- * Enable the feedback widget.
81
- */
82
- enabled: boolean;
83
- /**
84
- * Entity type for categorizing feedback.
85
- * @default 'docs-page'
86
- */
87
- entityType?: string;
88
- /**
89
- * Entity ID for this page. If not provided, derives from current route.
90
- * @example 'components-button', 'guides-theming'
91
- */
92
- entityId?: string;
93
- /**
94
- * Custom question text. If not provided, uses i18n default.
95
- * @example '¿Te resultó útil esta página?'
96
- */
97
- question?: string;
98
- /**
99
- * Allow anonymous (unauthenticated) feedback.
100
- * @default true
101
- */
102
- allowAnonymous?: boolean;
103
- /**
104
- * Show optional comment field after reaction.
105
- * @default true
106
- */
107
- showComment?: boolean;
108
69
  }
109
70
  /**
110
71
  * Link to another documentation page.
@@ -6,7 +6,7 @@ import { AuthStateService } from './auth-state.service';
6
6
  import { TokenService } from './token.service';
7
7
  import { AuthStorageService } from './storage.service';
8
8
  import { AuthSyncService } from './sync.service';
9
- import { SigninRequest, SigninResponse, SignupRequest, SignupResponse, VerifyEmailRequest, VerifyEmailResponse, ResendCodeRequest, ResendCodeResponse, MFAVerifyResponse, RefreshResponse, GetPermissionsResponse, GetProfileResponse, UpdateProfileRequest, UpdateProfileResponse, MFASetupResponse, MFAConfirmResponse, MFADisableResponse, ForgotPasswordRequest, ForgotPasswordResponse, ResetPasswordRequest, ResetPasswordResponse, ChangePasswordResponse, DeleteAccountResponse, SwitchOrgResponse, MFAMethod, AuthError, ValtechAuthConfig, EnableNotificationsResult, NotificationPermissionState, RegisterDeviceResult, TOTPSetupResponse, TOTPVerifySetupResponse, TOTPDisableResponse, RegenerateBackupCodesResponse, BackupCodesCountResponse, OAuthProvider, LinkedProvider, HasPasswordResponse, UpdateHandleResponse, CheckHandleResponse, UpdateAvatarRequest, UpdateAvatarResponse } from './types';
9
+ import { SigninRequest, SigninResponse, SignupRequest, SignupResponse, VerifyEmailRequest, VerifyEmailResponse, ResendCodeRequest, ResendCodeResponse, MFAVerifyResponse, RefreshResponse, GetPermissionsResponse, GetProfileResponse, UpdateProfileRequest, UpdateProfileResponse, MFASetupResponse, MFAConfirmResponse, MFADisableResponse, ForgotPasswordRequest, ForgotPasswordResponse, ResetPasswordRequest, ResetPasswordResponse, ChangePasswordResponse, DeleteAccountResponse, SwitchOrgResponse, MFAMethod, AuthError, ValtechAuthConfig, EnableNotificationsResult, NotificationPermissionState, RegisterDeviceResult, TOTPSetupResponse, TOTPVerifySetupResponse, TOTPDisableResponse, RegenerateBackupCodesResponse, BackupCodesCountResponse, OAuthProvider, LinkedProvider, HasPasswordResponse, UpdateHandleResponse, CheckHandleResponse } from './types';
10
10
  import { OAuthService } from './oauth.service';
11
11
  import { FirebaseService, MessagingService } from '../firebase';
12
12
  import { I18nService } from '../i18n';
@@ -241,11 +241,6 @@ export declare class AuthService implements OnDestroy {
241
241
  * Actualiza el perfil del usuario.
242
242
  */
243
243
  updateProfile(request: UpdateProfileRequest): Observable<UpdateProfileResponse>;
244
- /**
245
- * Actualiza el avatar del usuario en el backend.
246
- * Nota: El estado local del avatar se maneja a través de getProfile().
247
- */
248
- updateAvatar(request: UpdateAvatarRequest): Observable<UpdateAvatarResponse>;
249
244
  /**
250
245
  * Inicia el proceso de recuperación de contraseña.
251
246
  * Envía un código al email del usuario.
@@ -453,24 +453,6 @@ export interface UpdateProfileResponse {
453
453
  operationId: string;
454
454
  updated: boolean;
455
455
  }
456
- /**
457
- * Request para actualizar avatar del usuario.
458
- */
459
- export interface UpdateAvatarRequest {
460
- /** URL del avatar en Firebase Storage */
461
- avatarUrl: string;
462
- /** URL del thumbnail (opcional) */
463
- avatarThumbnail?: string;
464
- }
465
- /**
466
- * Response de actualizar avatar.
467
- */
468
- export interface UpdateAvatarResponse {
469
- operationId: string;
470
- avatarUrl: string;
471
- avatarThumbnail?: string;
472
- updatedAt: string;
473
- }
474
456
  /**
475
457
  * Request para cambiar de organización activa.
476
458
  */
package/lib/version.d.ts CHANGED
@@ -2,4 +2,4 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export declare const VERSION = "2.0.680";
5
+ export declare const VERSION = "2.0.681";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "valtech-components",
3
- "version": "2.0.680",
3
+ "version": "2.0.681",
4
4
  "private": false,
5
5
  "bin": {
6
6
  "valtech-firebase-config": "./src/lib/services/firebase/scripts/generate-sw-config.js"
@@ -22,15 +22,11 @@
22
22
  "prismjs": "^1.30.0",
23
23
  "qr-code-styling": "^1.9.0",
24
24
  "rxjs": "~7.8.0",
25
- "swiper": "^11.2.8",
26
- "ngx-image-cropper": "^9.0.0"
25
+ "swiper": "^11.2.8"
27
26
  },
28
27
  "peerDependenciesMeta": {
29
28
  "@capacitor/app": {
30
29
  "optional": true
31
- },
32
- "ngx-image-cropper": {
33
- "optional": true
34
30
  }
35
31
  },
36
32
  "dependencies": {
package/public-api.d.ts CHANGED
@@ -169,7 +169,6 @@ export * from './lib/components/molecules/username-input/username-input.componen
169
169
  export * from './lib/components/molecules/username-input/types';
170
170
  export * from './lib/components/molecules/linked-providers/linked-providers.component';
171
171
  export * from './lib/components/molecules/linked-providers/types';
172
- export * from './lib/components/molecules/image-crop/image-crop.component';
173
172
  export * from './lib/components/organisms/article/article.component';
174
173
  export * from './lib/components/organisms/article/types';
175
174
  export * from './lib/components/organisms/banner/banner.component';
@@ -215,8 +214,6 @@ export * from './lib/components/organisms/terminal-404/terminal-404.component';
215
214
  export * from './lib/components/organisms/terminal-404/types';
216
215
  export * from './lib/components/organisms/bottom-nav/bottom-nav.component';
217
216
  export * from './lib/components/organisms/bottom-nav/types';
218
- export * from './lib/components/organisms/avatar-upload/avatar-upload.component';
219
- export * from './lib/components/organisms/avatar-upload/types';
220
217
  export * from './lib/components/templates/layout/layout.component';
221
218
  export * from './lib/components/templates/simple/simple.component';
222
219
  export * from './lib/components/templates/simple/types';
@@ -254,7 +251,6 @@ export * from './lib/services/app-config';
254
251
  export * from './lib/services/presets';
255
252
  export * from './lib/services/skeleton';
256
253
  export * from './lib/services/pagination';
257
- export * from './lib/services/image';
258
254
  export * from './lib/services/ads';
259
255
  export * from './lib/components/molecules/ad-slot/ad-slot.component';
260
256
  export * from './lib/services/feedback';
@@ -1,174 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, computed, EventEmitter, inject, input, Output, signal, } from '@angular/core';
3
- import { IonButton, IonButtons, IonContent, IonHeader, IonTitle, IonToolbar, } from '@ionic/angular/standalone';
4
- import { ImageCropperComponent } from 'ngx-image-cropper';
5
- import { I18nService } from '../../../services/i18n';
6
- import * as i0 from "@angular/core";
7
- /**
8
- * ImageCropComponent
9
- *
10
- * A modal-ready component for cropping images with a specified aspect ratio.
11
- * Uses ngx-image-cropper internally and provides a simple interface.
12
- *
13
- * @example Inside an ion-modal
14
- * ```html
15
- * <ion-modal [isOpen]="showCropModal">
16
- * <ng-template>
17
- * <val-image-crop
18
- * [image]="selectedFile"
19
- * [aspectRatio]="1"
20
- * [roundCropper]="true"
21
- * (cropComplete)="onCropComplete($event)"
22
- * (cancel)="showCropModal = false"
23
- * />
24
- * </ng-template>
25
- * </ion-modal>
26
- * ```
27
- */
28
- export class ImageCropComponent {
29
- constructor() {
30
- this.i18n = inject(I18nService);
31
- /** Image file to crop */
32
- this.image = input.required();
33
- /** Aspect ratio (1 for square, 16/9 for widescreen, etc.) */
34
- this.aspectRatio = input(1);
35
- /** Use round cropper (for avatars) */
36
- this.roundCropper = input(true);
37
- /** Resize output to specific width (0 = no resize) */
38
- this.resizeToWidth = input(0);
39
- /** i18n namespace for labels */
40
- this.i18nNamespace = input('ImageCrop');
41
- /** Emitted when crop is confirmed with the cropped blob */
42
- this.cropComplete = new EventEmitter();
43
- /** Emitted when user cancels the crop */
44
- this.cancel = new EventEmitter();
45
- /** Emitted when image fails to load */
46
- this.loadFailed = new EventEmitter();
47
- /** Internal signal for cropped blob */
48
- this.croppedBlob = signal(null);
49
- /** Computed text for cancel button */
50
- this.cancelText = computed(() => {
51
- this.i18n.lang(); // Track language changes
52
- return this.i18n.t('cancel', 'Common') || 'Cancelar';
53
- });
54
- /** Computed text for confirm button */
55
- this.confirmText = computed(() => {
56
- this.i18n.lang();
57
- return this.i18n.t('confirm', 'Common') || 'Confirmar';
58
- });
59
- /** Computed text for title */
60
- this.titleText = computed(() => {
61
- this.i18n.lang();
62
- return this.i18n.t('cropImage', this.i18nNamespace()) || 'Recortar imagen';
63
- });
64
- }
65
- /** Handle crop event from ngx-image-cropper */
66
- onImageCropped(event) {
67
- if (event.blob) {
68
- this.croppedBlob.set(event.blob);
69
- }
70
- }
71
- /** Confirm and emit the cropped blob */
72
- confirmCrop() {
73
- const blob = this.croppedBlob();
74
- if (blob) {
75
- this.cropComplete.emit(blob);
76
- }
77
- }
78
- /** Handle load failure */
79
- onLoadFailed() {
80
- this.loadFailed.emit();
81
- }
82
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ImageCropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
83
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: ImageCropComponent, isStandalone: true, selector: "val-image-crop", inputs: { image: { classPropertyName: "image", publicName: "image", isSignal: true, isRequired: true, transformFunction: null }, aspectRatio: { classPropertyName: "aspectRatio", publicName: "aspectRatio", isSignal: true, isRequired: false, transformFunction: null }, roundCropper: { classPropertyName: "roundCropper", publicName: "roundCropper", isSignal: true, isRequired: false, transformFunction: null }, resizeToWidth: { classPropertyName: "resizeToWidth", publicName: "resizeToWidth", isSignal: true, isRequired: false, transformFunction: null }, i18nNamespace: { classPropertyName: "i18nNamespace", publicName: "i18nNamespace", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cropComplete: "cropComplete", cancel: "cancel", loadFailed: "loadFailed" }, ngImport: i0, template: `
84
- <ion-header>
85
- <ion-toolbar>
86
- <ion-buttons slot="start">
87
- <ion-button (click)="cancel.emit()" color="medium">
88
- {{ cancelText() }}
89
- </ion-button>
90
- </ion-buttons>
91
- <ion-title>{{ titleText() }}</ion-title>
92
- <ion-buttons slot="end">
93
- <ion-button
94
- (click)="confirmCrop()"
95
- color="primary"
96
- [strong]="true"
97
- [disabled]="!croppedBlob()"
98
- >
99
- {{ confirmText() }}
100
- </ion-button>
101
- </ion-buttons>
102
- </ion-toolbar>
103
- </ion-header>
104
-
105
- <ion-content class="image-crop-content">
106
- <image-cropper
107
- [imageFile]="image()"
108
- [aspectRatio]="aspectRatio()"
109
- [maintainAspectRatio]="true"
110
- [roundCropper]="roundCropper()"
111
- [resizeToWidth]="resizeToWidth()"
112
- format="jpeg"
113
- outputType="blob"
114
- (imageCropped)="onImageCropped($event)"
115
- (loadImageFailed)="onLoadFailed()"
116
- />
117
- </ion-content>
118
- `, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%}.image-crop-content{--background: var(--ion-color-dark)}.image-crop-content::part(scroll){display:flex;flex-direction:column}image-cropper{--cropper-outline-color: rgba(255, 255, 255, .3);--cropper-background-color: var(--ion-color-dark);flex:1;height:100%;max-height:calc(100vh - 56px)}::ng-deep .ngx-ic-component{height:100%!important}::ng-deep .ngx-ic-source-image{max-height:100%!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "options", "cropperFrameAriaLabel", "output", "format", "autoCrop", "cropper", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "checkImageType", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange", "cropperChange"] }] }); }
119
- }
120
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ImageCropComponent, decorators: [{
121
- type: Component,
122
- args: [{ selector: 'val-image-crop', standalone: true, imports: [
123
- CommonModule,
124
- IonHeader,
125
- IonToolbar,
126
- IonTitle,
127
- IonButtons,
128
- IonButton,
129
- IonContent,
130
- ImageCropperComponent,
131
- ], template: `
132
- <ion-header>
133
- <ion-toolbar>
134
- <ion-buttons slot="start">
135
- <ion-button (click)="cancel.emit()" color="medium">
136
- {{ cancelText() }}
137
- </ion-button>
138
- </ion-buttons>
139
- <ion-title>{{ titleText() }}</ion-title>
140
- <ion-buttons slot="end">
141
- <ion-button
142
- (click)="confirmCrop()"
143
- color="primary"
144
- [strong]="true"
145
- [disabled]="!croppedBlob()"
146
- >
147
- {{ confirmText() }}
148
- </ion-button>
149
- </ion-buttons>
150
- </ion-toolbar>
151
- </ion-header>
152
-
153
- <ion-content class="image-crop-content">
154
- <image-cropper
155
- [imageFile]="image()"
156
- [aspectRatio]="aspectRatio()"
157
- [maintainAspectRatio]="true"
158
- [roundCropper]="roundCropper()"
159
- [resizeToWidth]="resizeToWidth()"
160
- format="jpeg"
161
- outputType="blob"
162
- (imageCropped)="onImageCropped($event)"
163
- (loadImageFailed)="onLoadFailed()"
164
- />
165
- </ion-content>
166
- `, styles: [":host{display:flex;flex-direction:column;height:100%}.image-crop-content{--background: var(--ion-color-dark)}.image-crop-content::part(scroll){display:flex;flex-direction:column}image-cropper{--cropper-outline-color: rgba(255, 255, 255, .3);--cropper-background-color: var(--ion-color-dark);flex:1;height:100%;max-height:calc(100vh - 56px)}::ng-deep .ngx-ic-component{height:100%!important}::ng-deep .ngx-ic-source-image{max-height:100%!important}\n"] }]
167
- }], propDecorators: { cropComplete: [{
168
- type: Output
169
- }], cancel: [{
170
- type: Output
171
- }], loadFailed: [{
172
- type: Output
173
- }] } });
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY3JvcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ltYWdlLWNyb3AvaW1hZ2UtY3JvcC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxHQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFxQixxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFFckQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBc0ZILE1BQU0sT0FBTyxrQkFBa0I7SUFyRi9CO1FBc0ZVLFNBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbkMseUJBQXlCO1FBQ2hCLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFRLENBQUM7UUFFeEMsNkRBQTZEO1FBQ3BELGdCQUFXLEdBQUcsS0FBSyxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXhDLHNDQUFzQztRQUM3QixpQkFBWSxHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUU3QyxzREFBc0Q7UUFDN0Msa0JBQWEsR0FBRyxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFMUMsZ0NBQWdDO1FBQ3ZCLGtCQUFhLEdBQUcsS0FBSyxDQUFTLFdBQVcsQ0FBQyxDQUFDO1FBRXBELDJEQUEyRDtRQUNqRCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFbEQseUNBQXlDO1FBQy9CLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTVDLHVDQUF1QztRQUM3QixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVoRCx1Q0FBdUM7UUFDN0IsZ0JBQVcsR0FBRyxNQUFNLENBQWMsSUFBSSxDQUFDLENBQUM7UUFFbEQsc0NBQXNDO1FBQzVCLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyx5QkFBeUI7WUFDM0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksVUFBVSxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBRUgsdUNBQXVDO1FBQzdCLGdCQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxJQUFJLFdBQVcsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVILDhCQUE4QjtRQUNwQixjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUFDO1FBQzdFLENBQUMsQ0FBQyxDQUFDO0tBcUJKO0lBbkJDLCtDQUErQztJQUMvQyxjQUFjLENBQUMsS0FBd0I7UUFDckMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMsV0FBVztRQUNULE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsWUFBWTtRQUNWLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQzsrR0FsRVUsa0JBQWtCO21HQUFsQixrQkFBa0IsMjFCQXhFbkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNULDBnQkE1Q0MsWUFBWSwrQkFDWixTQUFTLG9HQUNULFVBQVUsbUZBQ1YsUUFBUSxpRkFDUixVQUFVLDhFQUNWLFNBQVMsb1BBQ1QsVUFBVSx3S0FDVixxQkFBcUI7OzRGQTBFWixrQkFBa0I7a0JBckY5QixTQUFTOytCQUNFLGdCQUFnQixjQUNkLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsVUFBVTt3QkFDVixRQUFRO3dCQUNSLFVBQVU7d0JBQ1YsU0FBUzt3QkFDVCxVQUFVO3dCQUNWLHFCQUFxQjtxQkFDdEIsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ1Q7OEJBd0RTLFlBQVk7c0JBQXJCLE1BQU07Z0JBR0csTUFBTTtzQkFBZixNQUFNO2dCQUdHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBJb25CdXR0b24sXG4gIElvbkJ1dHRvbnMsXG4gIElvbkNvbnRlbnQsXG4gIElvbkhlYWRlcixcbiAgSW9uVGl0bGUsXG4gIElvblRvb2xiYXIsXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgSW1hZ2VDcm9wcGVkRXZlbnQsIEltYWdlQ3JvcHBlckNvbXBvbmVudCB9IGZyb20gJ25neC1pbWFnZS1jcm9wcGVyJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5cbi8qKlxuICogSW1hZ2VDcm9wQ29tcG9uZW50XG4gKlxuICogQSBtb2RhbC1yZWFkeSBjb21wb25lbnQgZm9yIGNyb3BwaW5nIGltYWdlcyB3aXRoIGEgc3BlY2lmaWVkIGFzcGVjdCByYXRpby5cbiAqIFVzZXMgbmd4LWltYWdlLWNyb3BwZXIgaW50ZXJuYWxseSBhbmQgcHJvdmlkZXMgYSBzaW1wbGUgaW50ZXJmYWNlLlxuICpcbiAqIEBleGFtcGxlIEluc2lkZSBhbiBpb24tbW9kYWxcbiAqIGBgYGh0bWxcbiAqIDxpb24tbW9kYWwgW2lzT3Blbl09XCJzaG93Q3JvcE1vZGFsXCI+XG4gKiAgIDxuZy10ZW1wbGF0ZT5cbiAqICAgICA8dmFsLWltYWdlLWNyb3BcbiAqICAgICAgIFtpbWFnZV09XCJzZWxlY3RlZEZpbGVcIlxuICogICAgICAgW2FzcGVjdFJhdGlvXT1cIjFcIlxuICogICAgICAgW3JvdW5kQ3JvcHBlcl09XCJ0cnVlXCJcbiAqICAgICAgIChjcm9wQ29tcGxldGUpPVwib25Dcm9wQ29tcGxldGUoJGV2ZW50KVwiXG4gKiAgICAgICAoY2FuY2VsKT1cInNob3dDcm9wTW9kYWwgPSBmYWxzZVwiXG4gKiAgICAgLz5cbiAqICAgPC9uZy10ZW1wbGF0ZT5cbiAqIDwvaW9uLW1vZGFsPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1pbWFnZS1jcm9wJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJb25IZWFkZXIsXG4gICAgSW9uVG9vbGJhcixcbiAgICBJb25UaXRsZSxcbiAgICBJb25CdXR0b25zLFxuICAgIElvbkJ1dHRvbixcbiAgICBJb25Db250ZW50LFxuICAgIEltYWdlQ3JvcHBlckNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJjYW5jZWwuZW1pdCgpXCIgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgIHt7IGNhbmNlbFRleHQoKSB9fVxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgICAgPGlvbi10aXRsZT57eyB0aXRsZVRleHQoKSB9fTwvaW9uLXRpdGxlPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiY29uZmlybUNyb3AoKVwiXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgW3N0cm9uZ109XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY3JvcHBlZEJsb2IoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgY29uZmlybVRleHQoKSB9fVxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuXG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW1hZ2UtY3JvcC1jb250ZW50XCI+XG4gICAgICA8aW1hZ2UtY3JvcHBlclxuICAgICAgICBbaW1hZ2VGaWxlXT1cImltYWdlKClcIlxuICAgICAgICBbYXNwZWN0UmF0aW9dPVwiYXNwZWN0UmF0aW8oKVwiXG4gICAgICAgIFttYWludGFpbkFzcGVjdFJhdGlvXT1cInRydWVcIlxuICAgICAgICBbcm91bmRDcm9wcGVyXT1cInJvdW5kQ3JvcHBlcigpXCJcbiAgICAgICAgW3Jlc2l6ZVRvV2lkdGhdPVwicmVzaXplVG9XaWR0aCgpXCJcbiAgICAgICAgZm9ybWF0PVwianBlZ1wiXG4gICAgICAgIG91dHB1dFR5cGU9XCJibG9iXCJcbiAgICAgICAgKGltYWdlQ3JvcHBlZCk9XCJvbkltYWdlQ3JvcHBlZCgkZXZlbnQpXCJcbiAgICAgICAgKGxvYWRJbWFnZUZhaWxlZCk9XCJvbkxvYWRGYWlsZWQoKVwiXG4gICAgICAvPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAuaW1hZ2UtY3JvcC1jb250ZW50IHtcbiAgICAgICAgLS1iYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICB9XG5cbiAgICAgIC5pbWFnZS1jcm9wLWNvbnRlbnQ6OnBhcnQoc2Nyb2xsKSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB9XG5cbiAgICAgIGltYWdlLWNyb3BwZXIge1xuICAgICAgICAtLWNyb3BwZXItb3V0bGluZS1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpO1xuICAgICAgICAtLWNyb3BwZXItYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA1NnB4KTtcbiAgICAgIH1cblxuICAgICAgLyogRW5zdXJlIHRoZSBjcm9wcGVyIHdyYXBwZXIgdGFrZXMgZnVsbCBoZWlnaHQgKi9cbiAgICAgIDo6bmctZGVlcCAubmd4LWljLWNvbXBvbmVudCB7XG4gICAgICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICA6Om5nLWRlZXAgLm5neC1pYy1zb3VyY2UtaW1hZ2Uge1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSW1hZ2VDcm9wQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcblxuICAvKiogSW1hZ2UgZmlsZSB0byBjcm9wICovXG4gIHJlYWRvbmx5IGltYWdlID0gaW5wdXQucmVxdWlyZWQ8RmlsZT4oKTtcblxuICAvKiogQXNwZWN0IHJhdGlvICgxIGZvciBzcXVhcmUsIDE2LzkgZm9yIHdpZGVzY3JlZW4sIGV0Yy4pICovXG4gIHJlYWRvbmx5IGFzcGVjdFJhdGlvID0gaW5wdXQ8bnVtYmVyPigxKTtcblxuICAvKiogVXNlIHJvdW5kIGNyb3BwZXIgKGZvciBhdmF0YXJzKSAqL1xuICByZWFkb25seSByb3VuZENyb3BwZXIgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICAvKiogUmVzaXplIG91dHB1dCB0byBzcGVjaWZpYyB3aWR0aCAoMCA9IG5vIHJlc2l6ZSkgKi9cbiAgcmVhZG9ubHkgcmVzaXplVG9XaWR0aCA9IGlucHV0PG51bWJlcj4oMCk7XG5cbiAgLyoqIGkxOG4gbmFtZXNwYWNlIGZvciBsYWJlbHMgKi9cbiAgcmVhZG9ubHkgaTE4bk5hbWVzcGFjZSA9IGlucHV0PHN0cmluZz4oJ0ltYWdlQ3JvcCcpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gY3JvcCBpcyBjb25maXJtZWQgd2l0aCB0aGUgY3JvcHBlZCBibG9iICovXG4gIEBPdXRwdXQoKSBjcm9wQ29tcGxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPEJsb2I+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNhbmNlbHMgdGhlIGNyb3AgKi9cbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGltYWdlIGZhaWxzIHRvIGxvYWQgKi9cbiAgQE91dHB1dCgpIGxvYWRGYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqIEludGVybmFsIHNpZ25hbCBmb3IgY3JvcHBlZCBibG9iICovXG4gIHByb3RlY3RlZCBjcm9wcGVkQmxvYiA9IHNpZ25hbDxCbG9iIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqIENvbXB1dGVkIHRleHQgZm9yIGNhbmNlbCBidXR0b24gKi9cbiAgcHJvdGVjdGVkIGNhbmNlbFRleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTsgLy8gVHJhY2sgbGFuZ3VhZ2UgY2hhbmdlc1xuICAgIHJldHVybiB0aGlzLmkxOG4udCgnY2FuY2VsJywgJ0NvbW1vbicpIHx8ICdDYW5jZWxhcic7XG4gIH0pO1xuXG4gIC8qKiBDb21wdXRlZCB0ZXh0IGZvciBjb25maXJtIGJ1dHRvbiAqL1xuICBwcm90ZWN0ZWQgY29uZmlybVRleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoJ2NvbmZpcm0nLCAnQ29tbW9uJykgfHwgJ0NvbmZpcm1hcic7XG4gIH0pO1xuXG4gIC8qKiBDb21wdXRlZCB0ZXh0IGZvciB0aXRsZSAqL1xuICBwcm90ZWN0ZWQgdGl0bGVUZXh0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KCdjcm9wSW1hZ2UnLCB0aGlzLmkxOG5OYW1lc3BhY2UoKSkgfHwgJ1JlY29ydGFyIGltYWdlbic7XG4gIH0pO1xuXG4gIC8qKiBIYW5kbGUgY3JvcCBldmVudCBmcm9tIG5neC1pbWFnZS1jcm9wcGVyICovXG4gIG9uSW1hZ2VDcm9wcGVkKGV2ZW50OiBJbWFnZUNyb3BwZWRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5ibG9iKSB7XG4gICAgICB0aGlzLmNyb3BwZWRCbG9iLnNldChldmVudC5ibG9iKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ29uZmlybSBhbmQgZW1pdCB0aGUgY3JvcHBlZCBibG9iICovXG4gIGNvbmZpcm1Dcm9wKCk6IHZvaWQge1xuICAgIGNvbnN0IGJsb2IgPSB0aGlzLmNyb3BwZWRCbG9iKCk7XG4gICAgaWYgKGJsb2IpIHtcbiAgICAgIHRoaXMuY3JvcENvbXBsZXRlLmVtaXQoYmxvYik7XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZSBsb2FkIGZhaWx1cmUgKi9cbiAgb25Mb2FkRmFpbGVkKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZEZhaWxlZC5lbWl0KCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export * from './image-crop.component';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ltYWdlLWNyb3AvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW1hZ2UtY3JvcC5jb21wb25lbnQnO1xuIl19