@unipin/angular-applet 17.3.0 → 17.4.0

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 (61) hide show
  1. package/esm2022/lib/components/approval/detail/approval-detail.component.mjs +3 -3
  2. package/esm2022/lib/components/approval/form/approval-form.component.mjs +3 -3
  3. package/esm2022/lib/components/approval/list/approval-list.component.mjs +3 -3
  4. package/esm2022/lib/components/approval/services/approval.service.mjs +3 -3
  5. package/esm2022/lib/components/audit/detail/audit-detail.component.mjs +3 -3
  6. package/esm2022/lib/components/audit/list/audit-list.component.mjs +3 -3
  7. package/esm2022/lib/components/audit/service/audit.service.mjs +3 -3
  8. package/esm2022/lib/components/buttons/group/btn-group.component.mjs +5 -5
  9. package/esm2022/lib/components/buttons/loading/btn-loading.component.mjs +3 -3
  10. package/esm2022/lib/components/containers/applet-container/applet-container.component.mjs +3 -3
  11. package/esm2022/lib/components/containers/colum-header-container/column-header-container.component.mjs +3 -3
  12. package/esm2022/lib/components/containers/column-container/column-container.component.mjs +3 -3
  13. package/esm2022/lib/components/containers/column-container/directives/lazy-route.directive.mjs +3 -3
  14. package/esm2022/lib/components/containers/list-container/interfaces/list-container-config.interface.mjs +1 -1
  15. package/esm2022/lib/components/containers/list-container/list-pagination-container/list-pagination-container.component.mjs +8 -7
  16. package/esm2022/lib/components/containers/list-container/list-snapshot-container/list-snapshot-container.component.mjs +8 -7
  17. package/esm2022/lib/components/containers/modal-container/modal-container.component.mjs +3 -3
  18. package/esm2022/lib/components/filter/filter.component.mjs +3 -3
  19. package/esm2022/lib/components/forms/currency-input/form-currency-input.component.mjs +153 -0
  20. package/esm2022/lib/components/forms/date/form-date.component.mjs +11 -7
  21. package/esm2022/lib/components/forms/image-picker/directives/drag-n-drop.directive.mjs +3 -3
  22. package/esm2022/lib/components/forms/image-picker/form-image-picker.component.mjs +3 -3
  23. package/esm2022/lib/components/forms/index.mjs +2 -1
  24. package/esm2022/lib/components/forms/input/form-input.component.mjs +3 -3
  25. package/esm2022/lib/components/forms/number/form-number.component.mjs +3 -3
  26. package/esm2022/lib/components/forms/number/pipes/locale-number.pipe.mjs +3 -3
  27. package/esm2022/lib/components/forms/password/form-password.component.mjs +3 -3
  28. package/esm2022/lib/components/forms/searchable-select/form-searchable-select.component.mjs +3 -3
  29. package/esm2022/lib/components/forms/select/form-select.component.mjs +5 -5
  30. package/esm2022/lib/components/forms/textarea/form-textarea.component.mjs +3 -3
  31. package/esm2022/lib/components/grids/grid-pagination/grid-pagination.component.mjs +9 -5
  32. package/esm2022/lib/components/grids/grid-snapshot/grid-snapshot.component.mjs +9 -5
  33. package/esm2022/lib/components/grids/services/grid.service.mjs +3 -3
  34. package/esm2022/lib/components/index.mjs +2 -2
  35. package/esm2022/lib/components/tabs/tab-content/tab-content.component.mjs +3 -3
  36. package/esm2022/lib/components/tabs/tab-group/tab-group.component.mjs +3 -3
  37. package/esm2022/lib/components/tabs/tabs.component.module.mjs +4 -4
  38. package/esm2022/lib/interceptors/header/header.interceptor.mjs +3 -3
  39. package/esm2022/lib/interceptors/refresh-token/refresh-token.interceptor.mjs +3 -3
  40. package/esm2022/lib/modules/permission/directive/permission.directive.mjs +3 -3
  41. package/esm2022/lib/modules/permission/pages/401/unauthorized.page.mjs +3 -3
  42. package/esm2022/lib/modules/permission/pages/loading/loading.page.mjs +3 -3
  43. package/esm2022/lib/modules/permission/permission.module.mjs +4 -4
  44. package/esm2022/lib/modules/permission/services/permission.service.mjs +3 -3
  45. package/esm2022/lib/resolvers/auth/auth.resolver.mjs +3 -3
  46. package/esm2022/lib/services/auth/auth.service.mjs +3 -3
  47. package/esm2022/lib/services/country/country.service.mjs +3 -3
  48. package/esm2022/lib/services/currency/currency.service.mjs +9 -13
  49. package/esm2022/lib/services/profile/profile.service.mjs +3 -3
  50. package/esm2022/public-api.mjs +2 -2
  51. package/fesm2022/unipin-angular-applet.mjs +1465 -1313
  52. package/fesm2022/unipin-angular-applet.mjs.map +1 -1
  53. package/lib/components/containers/list-container/interfaces/list-container-config.interface.d.ts +2 -3
  54. package/lib/components/forms/currency-input/form-currency-input.component.d.ts +55 -0
  55. package/lib/components/forms/date/form-date.component.d.ts +1 -0
  56. package/lib/components/forms/index.d.ts +1 -0
  57. package/lib/components/index.d.ts +1 -1
  58. package/lib/services/currency/currency.service.d.ts +1 -1
  59. package/package.json +1 -1
  60. package/public-api.d.ts +1 -1
  61. package/src/assets/scss/select.scss +1 -1
@@ -4,10 +4,10 @@ import { RouterModule } from '@angular/router';
4
4
  import { IonicModule } from '@ionic/angular';
5
5
  import { FilterComponent } from '../../../filter';
6
6
  import { GridSnapshotComponent } from '../../../grids';
7
+ import { ButtonGroupComponent } from '../../../buttons';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@angular/router";
9
- import * as i2 from "@ionic/angular";
10
- import * as i3 from "@angular/common";
10
+ import * as i2 from "@angular/common";
11
11
  export class ListSnapshotContainerComponent {
12
12
  constructor(id, router) {
13
13
  this.id = id;
@@ -30,10 +30,10 @@ export class ListSnapshotContainerComponent {
30
30
  this.gridApi.paginationGoToFirstPage();
31
31
  this.gridApi.purgeInfiniteCache();
32
32
  }
33
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: ListSnapshotContainerComponent, deps: [{ token: 'id', attribute: true }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
34
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: ListSnapshotContainerComponent, isStandalone: true, selector: "up-list-snapshot-container", inputs: { header: "header", config: "config" }, outputs: { onRowClick: "onRowClick", onGridReady: "onGridReady", onSearch: "onSearch" }, host: { classAttribute: "d-flex flex-column h-100 w-100" }, ngImport: i0, template: "<div class=\"d-flex align-items-center justify-content-between gap-4 p-4 flex-shrink-0 flex-wrap\">\n <div class=\"flex-grow-1 d-flex align-items-center gap-3\">\n <h3 class=\"m-0\">{{ header }}</h3>\n\n <ion-button routerLink=\"{{ config.baseUrl }}create\" *ngIf=\"config.permissions.canCreate\">\n <ion-icon name=\"add\" slot=\"start\" />\n Create\n </ion-button>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-1\" *ngIf=\"config.filterConfig\">\n <up-filter placeholder=\"Type to search\" id=\"filter-{{ id }}\" [config]=\"config.filterConfig\" (onSearch)=\"search($event)\" />\n </div>\n</div>\n\n<div class=\"flex-grow-1 px-1 pb-1\">\n <up-snapshot-grid [config]=\"config.gridConfig\" [id]=\"gridId\" (onGridReady)=\"setGridApi($event)\" (onRowClick)=\"openDetail($event)\" />\n</div>\n", styles: ["up-filter{min-width:300px}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.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: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i2.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: FilterComponent, selector: "up-filter", inputs: ["id", "config"], outputs: ["onSearch"] }, { kind: "component", type: GridSnapshotComponent, selector: "up-snapshot-grid", inputs: ["id", "config", "rowSelection"], outputs: ["onRowClick", "onGridReady", "onSelectionChanged"] }] }); }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ListSnapshotContainerComponent, deps: [{ token: 'id', attribute: true }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
34
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: ListSnapshotContainerComponent, isStandalone: true, selector: "up-list-snapshot-container", inputs: { header: "header", config: "config" }, outputs: { onRowClick: "onRowClick", onGridReady: "onGridReady", onSearch: "onSearch" }, host: { classAttribute: "d-flex flex-column h-100 w-100" }, ngImport: i0, template: "<div class=\"d-flex align-items-center justify-content-between gap-4 p-4 flex-shrink-0 flex-wrap\">\n <div class=\"flex-grow-1 d-flex align-items-center gap-3\">\n <h3 class=\"m-0\">{{ header }}</h3>\n\n <up-btn-group *ngIf=\"config.buttons && config.buttons.length > 0\" id=\"btn-list-snapshot-container\" [config]=\"config.buttons\" />\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-1\" *ngIf=\"config.filterConfig\">\n <up-filter placeholder=\"Type to search\" id=\"filter-{{ id }}\" [config]=\"config.filterConfig\" (onSearch)=\"search($event)\" />\n </div>\n</div>\n\n<div class=\"flex-grow-1 px-1 pb-1\">\n <up-snapshot-grid [config]=\"config.gridConfig\" [id]=\"gridId\" (onGridReady)=\"setGridApi($event)\" (onRowClick)=\"openDetail($event)\" />\n</div>\n", styles: ["up-filter{min-width:300px}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "component", type: FilterComponent, selector: "up-filter", inputs: ["id", "config"], outputs: ["onSearch"] }, { kind: "component", type: ButtonGroupComponent, selector: "up-btn-group", inputs: ["config"] }, { kind: "component", type: GridSnapshotComponent, selector: "up-snapshot-grid", inputs: ["id", "config", "rowSelection"], outputs: ["onRowClick", "onGridReady", "onSelectionChanged"] }] }); }
35
35
  }
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: ListSnapshotContainerComponent, decorators: [{
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ListSnapshotContainerComponent, decorators: [{
37
37
  type: Component,
38
38
  args: [{ standalone: true, selector: 'up-list-snapshot-container', host: {
39
39
  class: 'd-flex flex-column h-100 w-100'
@@ -42,8 +42,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
42
42
  CommonModule,
43
43
  RouterModule,
44
44
  FilterComponent,
45
+ ButtonGroupComponent,
45
46
  GridSnapshotComponent
46
- ], template: "<div class=\"d-flex align-items-center justify-content-between gap-4 p-4 flex-shrink-0 flex-wrap\">\n <div class=\"flex-grow-1 d-flex align-items-center gap-3\">\n <h3 class=\"m-0\">{{ header }}</h3>\n\n <ion-button routerLink=\"{{ config.baseUrl }}create\" *ngIf=\"config.permissions.canCreate\">\n <ion-icon name=\"add\" slot=\"start\" />\n Create\n </ion-button>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-1\" *ngIf=\"config.filterConfig\">\n <up-filter placeholder=\"Type to search\" id=\"filter-{{ id }}\" [config]=\"config.filterConfig\" (onSearch)=\"search($event)\" />\n </div>\n</div>\n\n<div class=\"flex-grow-1 px-1 pb-1\">\n <up-snapshot-grid [config]=\"config.gridConfig\" [id]=\"gridId\" (onGridReady)=\"setGridApi($event)\" (onRowClick)=\"openDetail($event)\" />\n</div>\n", styles: ["up-filter{min-width:300px}\n"] }]
47
+ ], template: "<div class=\"d-flex align-items-center justify-content-between gap-4 p-4 flex-shrink-0 flex-wrap\">\n <div class=\"flex-grow-1 d-flex align-items-center gap-3\">\n <h3 class=\"m-0\">{{ header }}</h3>\n\n <up-btn-group *ngIf=\"config.buttons && config.buttons.length > 0\" id=\"btn-list-snapshot-container\" [config]=\"config.buttons\" />\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-1\" *ngIf=\"config.filterConfig\">\n <up-filter placeholder=\"Type to search\" id=\"filter-{{ id }}\" [config]=\"config.filterConfig\" (onSearch)=\"search($event)\" />\n </div>\n</div>\n\n<div class=\"flex-grow-1 px-1 pb-1\">\n <up-snapshot-grid [config]=\"config.gridConfig\" [id]=\"gridId\" (onGridReady)=\"setGridApi($event)\" (onRowClick)=\"openDetail($event)\" />\n</div>\n", styles: ["up-filter{min-width:300px}\n"] }]
47
48
  }], ctorParameters: () => [{ type: undefined, decorators: [{
48
49
  type: Attribute,
49
50
  args: ['id']
@@ -60,4 +61,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
60
61
  }], onSearch: [{
61
62
  type: Output
62
63
  }] } });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1zbmFwc2hvdC1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2NvbnRhaW5lcnMvbGlzdC1jb250YWluZXIvbGlzdC1zbmFwc2hvdC1jb250YWluZXIvbGlzdC1zbmFwc2hvdC1jb250YWluZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2NvbnRhaW5lcnMvbGlzdC1jb250YWluZXIvbGlzdC1zbmFwc2hvdC1jb250YWluZXIvbGlzdC1zbmFwc2hvdC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBVSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQWtCdkQsTUFBTSxPQUFPLDhCQUE4QjtJQTZDekMsWUFDMEIsRUFBVSxFQUNmLE1BQWM7UUFEVCxPQUFFLEdBQUYsRUFBRSxDQUFRO1FBQ2YsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQTVCVCxlQUFVLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFRbkQsZ0JBQVcsR0FBaUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVEvRCxhQUFRLEdBQW9DLElBQUksWUFBWSxFQUFFLENBQUM7UUFPbEYsV0FBTSxHQUF1QixRQUFTLElBQUksQ0FBQyxFQUFFLElBQUcsR0FBSSxFQUFFLENBQUM7SUFNMUQsQ0FBQztJQVdFLFVBQVUsQ0FBQyxJQUFTO1FBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUUsR0FBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQVEsR0FBSSxJQUFJLENBQUMsSUFBSyxFQUFFLENBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakcsQ0FBQztJQVVNLFVBQVUsQ0FBQyxFQUFrQjtRQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQVNNLE1BQU0sQ0FBQyxDQUFvQjtRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0QixJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3BDLENBQUM7OEdBekZVLDhCQUE4QixrQkE4QzVCLElBQUk7a0dBOUNOLDhCQUE4QiwyUkMxQjNDLDYxQkFrQkEscUZEQ0ksV0FBVyxraUJBQ1gsWUFBWSxrSUFDWixZQUFZLGdSQUNaLGVBQWUsdUdBQ2YscUJBQXFCOzsyRkFHWiw4QkFBOEI7a0JBaEIxQyxTQUFTO2lDQUNJLElBQUksWUFDTiw0QkFBNEIsUUFHaEM7d0JBQ0osS0FBSyxFQUFFLGdDQUFnQztxQkFDeEMsV0FDUTt3QkFDUCxXQUFXO3dCQUNYLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixlQUFlO3dCQUNmLHFCQUFxQjtxQkFDdEI7OzBCQWdERSxTQUFTOzJCQUFDLElBQUk7OERBeENpQixNQUFNO3NCQUF2QyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFNUyxNQUFNO3NCQUF2QyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFPQyxVQUFVO3NCQUFuQyxNQUFNO2dCQVFtQixXQUFXO3NCQUFwQyxNQUFNO2dCQVFtQixRQUFRO3NCQUFqQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBBdHRyaWJ1dGUsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlciwgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElvbmljTW9kdWxlIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgR3JpZEFwaSwgR3JpZFJlYWR5RXZlbnQgfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvY29yZSc7XG5pbXBvcnQgeyBMaXN0Q29udGFpbmVyQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9saXN0LWNvbnRhaW5lci1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZpbHRlclNlYXJjaEV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL2ludGVyZmFjZXMvZmlsdGVyLXNlYXJjaC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyJztcbmltcG9ydCB7IEdyaWRTbmFwc2hvdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2dyaWRzJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAndXAtbGlzdC1zbmFwc2hvdC1jb250YWluZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC1zbmFwc2hvdC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saXN0LXNuYXBzaG90LWNvbnRhaW5lci5jb21wb25lbnQuc2NzcyddLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdkLWZsZXggZmxleC1jb2x1bW4gaC0xMDAgdy0xMDAnXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBJb25pY01vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIEZpbHRlckNvbXBvbmVudCxcbiAgICBHcmlkU25hcHNob3RDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaXN0U25hcHNob3RDb250YWluZXJDb21wb25lbnQge1xuXG4gIC8qKlxuICAgKiBBbiBJbnB1dCB2YXJpYWJsZSB0aGF0IHVzZWQgdG8gc3RyaW5nIGZvciBjdXN0b21pemluZyBoZWFkZXIuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqLyBcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGhlYWRlciE6IHN0cmluZztcbiAgLyoqXG4gICAqIEFuIGlucHV0IHZhcmlhYmxlIHRoYXQgdXNlZCB0byBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgY3VzdG9taXppbmcgbGlzdCBjb250YWluZXIgY29uZmlnIHByb3BlcnRpZXMuIFRoaXNcbiAgICogb2JqZWN0IGRlZmluZWQgYnkgTGlzdENvbnRhaW5lckNvbmZpZyBpbnRlcmZhY2UgYWxsb3dzIHNwZWNpZnlpbmcgYmFzZVVybCwgZ3JpZENvbmZpZywgZmlsdGVyQ29uZmlnIGFuZCBwZXJtaXNzaW9uLlxuICAgKiBAdHlwZSB7TGlzdENvbnRhaW5lckNvbmZpZ31cbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBjb25maWchOiBMaXN0Q29udGFpbmVyQ29uZmlnO1xuICAvKipcbiAgICogVGhlIGBvblJvd0NsaWNrYCBFdmVudEVtaXR0ZXIgaXMgdXNlZCB0byBub3RpZnkgcGFyZW50IGNvbXBvbmVudHMgb3IgbGlzdGVuZXJzXG4gICAqIHdoZW4gYSByb3cgaXMgY2xpY2tlZCB3aXRoaW4gdGhlIGN1cnJlbnQgY29tcG9uZW50LiBJdCBlbWl0cyBhbiBldmVudCBjb250YWluaW5nXG4gICAqIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIGNsaWNrZWQgcm93LlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPGFueT59XG4gICAqL1xuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IG9uUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKipcbiAgICogVGhlIGBvbkdyaWRSZWFkeWAgRXZlbnRFbWl0dGVyIGlzIHVzZWQgdG8gaW5mb3JtIHBhcmVudCBjb21wb25lbnRzIG9yIGxpc3RlbmVyc1xuICAgKiB3aGVuIHRoZSBncmlkIHdpdGhpbiB0aGUgY3VycmVudCBjb21wb25lbnQgaXMgcmVhZHkgZm9yIGludGVyYWN0aW9uLiBJdCBlbWl0cyBhblxuICAgKiBldmVudCBvZiB0eXBlIGBHcmlkUmVhZHlFdmVudGAsIHdoaWNoIG1heSBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBncmlkJ3NcbiAgICogcmVhZGluZXNzIGFuZCBjYXBhYmlsaXRpZXMuICBcbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxHcmlkUmVhZHlFdmVudD59ICAgIFxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBvbkdyaWRSZWFkeTogRXZlbnRFbWl0dGVyPEdyaWRSZWFkeUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqXG4gICAqIFRoZSBgb25TZWFyY2hgIEV2ZW50RW1pdHRlciBpcyB1c2VkIHRvIGluZm9ybSBwYXJlbnQgY29tcG9uZW50cyBvciBsaXN0ZW5lcnNcbiAgICogd2hlbiBhIHNlYXJjaCBldmVudCBpcyB0cmlnZ2VyZWQgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBvbmVudC4gSXQgZW1pdHMgYW5cbiAgICogZXZlbnQgb2YgdHlwZSBgRmlsdGVyU2VhcmNoRXZlbnRgLCB3aGljaCBtYXkgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGVcbiAgICogc2VhcmNoIHF1ZXJ5IGFuZCBhZGRpdGlvbmFsIGRldGFpbHMgcmVsYXRlZCB0byB0aGUgc2VhcmNoIG9wZXJhdGlvbi5cbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxGaWx0ZXJTZWFyY2hFdmVudD59XG4gICAqL1xuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IG9uU2VhcmNoOiBFdmVudEVtaXR0ZXI8RmlsdGVyU2VhcmNoRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKipcbiAgICogVGhlIGBncmlkSWRgIHByb3BlcnR5IGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgZ3JpZCBlbGVtZW50LiBJdCBpc1xuICAgKiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBiYXNlZCBvbiB0aGUgY29tcG9uZW50J3MgYGlkYCBwcm9wZXJ0eS4gSWYgdGhlIGBpZGBcbiAgICogcHJvcGVydHkgaXMgbm90IHNldCwgYSBkZWZhdWx0IHZhbHVlIG9mICdwJyBpcyB1c2VkLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgcHVibGljIGdyaWRJZDogYGdyaWQtJHsgc3RyaW5nIH1gID0gYGdyaWQtJHsgdGhpcy5pZD8/ICdwJyB9YDtcbiAgcHJvdGVjdGVkIGdyaWRBcGkhOiBHcmlkQXBpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBBdHRyaWJ1dGUoJ2lkJykgcHVibGljIGlkOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyXG4gICkgeyB9XG4gIFxuICAvKipcbiAgICogVGhlIGBvcGVuRGV0YWlsYCBtZXRob2QgaXMgdXNlZCB0byB0cmlnZ2VyIGFjdGlvbnMgd2hlbiBhIHVzZXIgcmVxdWVzdHMgdG8gb3BlblxuICAgKiB0aGUgZGV0YWlsIHZpZXcgZm9yIGEgc3BlY2lmaWMgZGF0YSBpdGVtLiBJdCBlbWl0cyBhIGBkYXRhYCBldmVudCB1c2luZyB0aGVcbiAgICogYG9uUm93Q2xpY2tgIEV2ZW50RW1pdHRlciwgcHJvdmlkaW5nIGV4dGVybmFsIGNvbXBvbmVudHMgb3IgbGlzdGVuZXJzIHdpdGhcbiAgICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNsaWNrZWQgZGF0YS4gQWRkaXRpb25hbGx5LCBpdCBuYXZpZ2F0ZXMgdG8gdGhlIGRldGFpbFxuICAgKiByb3V0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGEgaXRlbSB1c2luZyB0aGUgQW5ndWxhciBSb3V0ZXIuXG4gICAqIFxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIGl0ZW0gZm9yIHdoaWNoIHRoZSBkZXRhaWwgdmlldyBpcyB0byBiZSBvcGVuZWQuXG4gICAqL1xuICBwdWJsaWMgb3BlbkRldGFpbChkYXRhOiBhbnkpOiB2b2lkeyBcbiAgICB0aGlzLm9uUm93Q2xpY2suZW1pdChkYXRhKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbIGAkeyB0aGlzLmNvbmZpZy5iYXNlVXJsIH0keyBkYXRhLmd1aWQgfWAgXSwgeyBwcmVzZXJ2ZUZyYWdtZW50OiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBgc2V0R3JpZEFwaWAgbWV0aG9kIGlzIHVzZWQgdG8gc2V0IHRoZSBncmlkIEFQSSB3aGVuIHRoZSBncmlkIGlzIHJlYWR5LCB0eXBpY2FsbHlcbiAgICogYWZ0ZXIgdGhlIGBncmlkUmVhZHlgIGV2ZW50IGlzIGZpcmVkLiBJdCBhc3NpZ25zIHRoZSBncmlkIEFQSSB0byB0aGUgY29tcG9uZW50J3NcbiAgICogYGdyaWRBcGlgIHByb3BlcnR5IGFuZCBlbWl0cyB0aGUgYG9uR3JpZFJlYWR5YCBldmVudCwgcHJvdmlkaW5nIGV4dGVybmFsIGNvbXBvbmVudHNcbiAgICogb3IgbGlzdGVuZXJzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdyaWQncyByZWFkaW5lc3MuXG4gICAqIFxuICAgKiBAcGFyYW0ge0dyaWRSZWFkeUV2ZW50fSBldiAtIFRoZSBgR3JpZFJlYWR5RXZlbnRgIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdyaWQncyByZWFkaW5lc3MuXG4gICAqL1xuICBwdWJsaWMgc2V0R3JpZEFwaShldjogR3JpZFJlYWR5RXZlbnQpOiB2b2lkeyBcbiAgICB0aGlzLmdyaWRBcGkgPSBldi5hcGk7IFxuICAgIHRoaXMub25HcmlkUmVhZHkuZW1pdChldik7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGBzZWFyY2hgIG1ldGhvZCBpcyB1c2VkIHRvIHRyaWdnZXIgYSBzZWFyY2ggb3BlcmF0aW9uIGJhc2VkIG9uIHRoZSBwcm92aWRlZFxuICAgKiBgRmlsdGVyU2VhcmNoRXZlbnRgLiBJdCBlbWl0cyB0aGUgYG9uU2VhcmNoYCBldmVudCwgcHJvdmlkaW5nIGV4dGVybmFsIGNvbXBvbmVudHNcbiAgICogb3IgbGlzdGVuZXJzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlYXJjaCBxdWVyeS4gQWRkaXRpb25hbGx5LCBpdCByZWZyZXNoZXNcbiAgICogdGhlIGdyaWQgY2FjaGUgdXNpbmcgdGhlIGByZWZyZXNoSW5maW5pdGVDYWNoZWAgbWV0aG9kIG9mIHRoZSBncmlkIEFQSS5cbiAgICogQHBhcmFtIHtGaWx0ZXJTZWFyY2hFdmVudH0gayAtIFRoZSBgRmlsdGVyU2VhcmNoRXZlbnRgIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlYXJjaCBvcGVyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgc2VhcmNoKGs6IEZpbHRlclNlYXJjaEV2ZW50KTogdm9pZHtcbiAgICB0aGlzLm9uU2VhcmNoLmVtaXQoayk7XG4gICAgXG4gICAgdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25Hb1RvRmlyc3RQYWdlKCk7XG4gICAgdGhpcy5ncmlkQXBpLnB1cmdlSW5maW5pdGVDYWNoZSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtNCBwLTQgZmxleC1zaHJpbmstMCBmbGV4LXdyYXBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICA8aDMgY2xhc3M9XCJtLTBcIj57eyBoZWFkZXIgfX08L2gzPlxuXG4gICAgICAgIDxpb24tYnV0dG9uIHJvdXRlckxpbms9XCJ7eyBjb25maWcuYmFzZVVybCB9fWNyZWF0ZVwiICpuZ0lmPVwiY29uZmlnLnBlcm1pc3Npb25zLmNhbkNyZWF0ZVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJhZGRcIiBzbG90PVwic3RhcnRcIiAvPlxuICAgICAgICAgICAgQ3JlYXRlXG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNocmluay0wIGZsZXgtZ3Jvdy0xXCIgKm5nSWY9XCJjb25maWcuZmlsdGVyQ29uZmlnXCI+XG4gICAgICAgIDx1cC1maWx0ZXIgcGxhY2Vob2xkZXI9XCJUeXBlIHRvIHNlYXJjaFwiIGlkPVwiZmlsdGVyLXt7IGlkIH19XCIgW2NvbmZpZ109XCJjb25maWcuZmlsdGVyQ29uZmlnXCIgKG9uU2VhcmNoKT1cInNlYXJjaCgkZXZlbnQpXCIgLz5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgcHgtMSBwYi0xXCI+XG4gICAgPHVwLXNuYXBzaG90LWdyaWQgW2NvbmZpZ109XCJjb25maWcuZ3JpZENvbmZpZ1wiIFtpZF09XCJncmlkSWRcIiAob25HcmlkUmVhZHkpPVwic2V0R3JpZEFwaSgkZXZlbnQpXCIgKG9uUm93Q2xpY2spPVwib3BlbkRldGFpbCgkZXZlbnQpXCIgLz5cbjwvZGl2PlxuIl19
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1zbmFwc2hvdC1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2NvbnRhaW5lcnMvbGlzdC1jb250YWluZXIvbGlzdC1zbmFwc2hvdC1jb250YWluZXIvbGlzdC1zbmFwc2hvdC1jb250YWluZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2NvbnRhaW5lcnMvbGlzdC1jb250YWluZXIvbGlzdC1zbmFwc2hvdC1jb250YWluZXIvbGlzdC1zbmFwc2hvdC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBVSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7O0FBbUJ4RCxNQUFNLE9BQU8sOEJBQThCO0lBNkN6QyxZQUMwQixFQUFVLEVBQ2YsTUFBYztRQURULE9BQUUsR0FBRixFQUFFLENBQVE7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBNUJULGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVFuRCxnQkFBVyxHQUFpQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBUS9ELGFBQVEsR0FBb0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU9sRixXQUFNLEdBQXVCLFFBQVMsSUFBSSxDQUFDLEVBQUUsSUFBRyxHQUFJLEVBQUUsQ0FBQztJQU0xRCxDQUFDO0lBV0UsVUFBVSxDQUFDLElBQVM7UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBRSxHQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBUSxHQUFJLElBQUksQ0FBQyxJQUFLLEVBQUUsQ0FBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBVU0sVUFBVSxDQUFDLEVBQWtCO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBU00sTUFBTSxDQUFDLENBQW9CO1FBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRCLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDcEMsQ0FBQzs4R0F6RlUsOEJBQThCLGtCQThDNUIsSUFBSTtrR0E5Q04sOEJBQThCLDJSQzVCM0Msb3lCQWVBLHFGREtJLFdBQVcsOEJBQ1gsWUFBWSxrSUFDWixZQUFZLCtCQUNaLGVBQWUsdUdBQ2Ysb0JBQW9CLDZFQUNwQixxQkFBcUI7OzJGQUdaLDhCQUE4QjtrQkFqQjFDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLDRCQUE0QixRQUdoQzt3QkFDSixLQUFLLEVBQUUsZ0NBQWdDO3FCQUN4QyxXQUNRO3dCQUNQLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixZQUFZO3dCQUNaLGVBQWU7d0JBQ2Ysb0JBQW9CO3dCQUNwQixxQkFBcUI7cUJBQ3RCOzswQkFnREUsU0FBUzsyQkFBQyxJQUFJOzhEQXhDaUIsTUFBTTtzQkFBdkMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBTVMsTUFBTTtzQkFBdkMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT0MsVUFBVTtzQkFBbkMsTUFBTTtnQkFRbUIsV0FBVztzQkFBcEMsTUFBTTtnQkFRbUIsUUFBUTtzQkFBakMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQXR0cmlidXRlLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEdyaWRBcGksIEdyaWRSZWFkeUV2ZW50IH0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2NvcmUnO1xuaW1wb3J0IHsgTGlzdENvbnRhaW5lckNvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvbGlzdC1jb250YWluZXItY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGaWx0ZXJTZWFyY2hFdmVudCB9IGZyb20gJy4uLy4uLy4uL2ZpbHRlci9pbnRlcmZhY2VzL2ZpbHRlci1zZWFyY2gtZXZlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ZpbHRlcic7XG5pbXBvcnQgeyBHcmlkU25hcHNob3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9ncmlkcyc7XG5pbXBvcnQgeyBCdXR0b25Hcm91cENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2J1dHRvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd1cC1saXN0LXNuYXBzaG90LWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LXNuYXBzaG90LWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xpc3Qtc25hcHNob3QtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2QtZmxleCBmbGV4LWNvbHVtbiBoLTEwMCB3LTEwMCdcbiAgfSxcbiAgaW1wb3J0czogW1xuICAgIElvbmljTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUsXG4gICAgRmlsdGVyQ29tcG9uZW50LFxuICAgIEJ1dHRvbkdyb3VwQ29tcG9uZW50LFxuICAgIEdyaWRTbmFwc2hvdENvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpc3RTbmFwc2hvdENvbnRhaW5lckNvbXBvbmVudCB7XG5cbiAgLyoqXG4gICAqIEFuIElucHV0IHZhcmlhYmxlIHRoYXQgdXNlZCB0byBzdHJpbmcgZm9yIGN1c3RvbWl6aW5nIGhlYWRlci5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovIFxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgaGVhZGVyITogc3RyaW5nO1xuICAvKipcbiAgICogQW4gaW5wdXQgdmFyaWFibGUgdGhhdCB1c2VkIHRvIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBjdXN0b21pemluZyBsaXN0IGNvbnRhaW5lciBjb25maWcgcHJvcGVydGllcy4gVGhpc1xuICAgKiBvYmplY3QgZGVmaW5lZCBieSBMaXN0Q29udGFpbmVyQ29uZmlnIGludGVyZmFjZSBhbGxvd3Mgc3BlY2lmeWluZyBiYXNlVXJsLCBncmlkQ29uZmlnLCBmaWx0ZXJDb25maWcgYW5kIHBlcm1pc3Npb24uXG4gICAqIEB0eXBlIHtMaXN0Q29udGFpbmVyQ29uZmlnfVxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGNvbmZpZyE6IExpc3RDb250YWluZXJDb25maWc7XG4gIC8qKlxuICAgKiBUaGUgYG9uUm93Q2xpY2tgIEV2ZW50RW1pdHRlciBpcyB1c2VkIHRvIG5vdGlmeSBwYXJlbnQgY29tcG9uZW50cyBvciBsaXN0ZW5lcnNcbiAgICogd2hlbiBhIHJvdyBpcyBjbGlja2VkIHdpdGhpbiB0aGUgY3VycmVudCBjb21wb25lbnQuIEl0IGVtaXRzIGFuIGV2ZW50IGNvbnRhaW5pbmdcbiAgICogaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgY2xpY2tlZCByb3cuXG4gICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8YW55Pn1cbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgb25Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8qKlxuICAgKiBUaGUgYG9uR3JpZFJlYWR5YCBFdmVudEVtaXR0ZXIgaXMgdXNlZCB0byBpbmZvcm0gcGFyZW50IGNvbXBvbmVudHMgb3IgbGlzdGVuZXJzXG4gICAqIHdoZW4gdGhlIGdyaWQgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBvbmVudCBpcyByZWFkeSBmb3IgaW50ZXJhY3Rpb24uIEl0IGVtaXRzIGFuXG4gICAqIGV2ZW50IG9mIHR5cGUgYEdyaWRSZWFkeUV2ZW50YCwgd2hpY2ggbWF5IGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdyaWQnc1xuICAgKiByZWFkaW5lc3MgYW5kIGNhcGFiaWxpdGllcy4gIFxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPEdyaWRSZWFkeUV2ZW50Pn0gICAgXG4gICAqL1xuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IG9uR3JpZFJlYWR5OiBFdmVudEVtaXR0ZXI8R3JpZFJlYWR5RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKipcbiAgICogVGhlIGBvblNlYXJjaGAgRXZlbnRFbWl0dGVyIGlzIHVzZWQgdG8gaW5mb3JtIHBhcmVudCBjb21wb25lbnRzIG9yIGxpc3RlbmVyc1xuICAgKiB3aGVuIGEgc2VhcmNoIGV2ZW50IGlzIHRyaWdnZXJlZCB3aXRoaW4gdGhlIGN1cnJlbnQgY29tcG9uZW50LiBJdCBlbWl0cyBhblxuICAgKiBldmVudCBvZiB0eXBlIGBGaWx0ZXJTZWFyY2hFdmVudGAsIHdoaWNoIG1heSBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZVxuICAgKiBzZWFyY2ggcXVlcnkgYW5kIGFkZGl0aW9uYWwgZGV0YWlscyByZWxhdGVkIHRvIHRoZSBzZWFyY2ggb3BlcmF0aW9uLlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPEZpbHRlclNlYXJjaEV2ZW50Pn1cbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgb25TZWFyY2g6IEV2ZW50RW1pdHRlcjxGaWx0ZXJTZWFyY2hFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8qKlxuICAgKiBUaGUgYGdyaWRJZGAgcHJvcGVydHkgaXMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgYSBncmlkIGVsZW1lbnQuIEl0IGlzXG4gICAqIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJhc2VkIG9uIHRoZSBjb21wb25lbnQncyBgaWRgIHByb3BlcnR5LiBJZiB0aGUgYGlkYFxuICAgKiBwcm9wZXJ0eSBpcyBub3Qgc2V0LCBhIGRlZmF1bHQgdmFsdWUgb2YgJ3AnIGlzIHVzZWQuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBwdWJsaWMgZ3JpZElkOiBgZ3JpZC0keyBzdHJpbmcgfWAgPSBgZ3JpZC0keyB0aGlzLmlkPz8gJ3AnIH1gO1xuICBwcm90ZWN0ZWQgZ3JpZEFwaSE6IEdyaWRBcGk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEF0dHJpYnV0ZSgnaWQnKSBwdWJsaWMgaWQ6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXJcbiAgKSB7IH1cbiAgXG4gIC8qKlxuICAgKiBUaGUgYG9wZW5EZXRhaWxgIG1ldGhvZCBpcyB1c2VkIHRvIHRyaWdnZXIgYWN0aW9ucyB3aGVuIGEgdXNlciByZXF1ZXN0cyB0byBvcGVuXG4gICAqIHRoZSBkZXRhaWwgdmlldyBmb3IgYSBzcGVjaWZpYyBkYXRhIGl0ZW0uIEl0IGVtaXRzIGEgYGRhdGFgIGV2ZW50IHVzaW5nIHRoZVxuICAgKiBgb25Sb3dDbGlja2AgRXZlbnRFbWl0dGVyLCBwcm92aWRpbmcgZXh0ZXJuYWwgY29tcG9uZW50cyBvciBsaXN0ZW5lcnMgd2l0aFxuICAgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpY2tlZCBkYXRhLiBBZGRpdGlvbmFsbHksIGl0IG5hdmlnYXRlcyB0byB0aGUgZGV0YWlsXG4gICAqIHJvdXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0YSBpdGVtIHVzaW5nIHRoZSBBbmd1bGFyIFJvdXRlci5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgaXRlbSBmb3Igd2hpY2ggdGhlIGRldGFpbCB2aWV3IGlzIHRvIGJlIG9wZW5lZC5cbiAgICovXG4gIHB1YmxpYyBvcGVuRGV0YWlsKGRhdGE6IGFueSk6IHZvaWR7IFxuICAgIHRoaXMub25Sb3dDbGljay5lbWl0KGRhdGEpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsgYCR7IHRoaXMuY29uZmlnLmJhc2VVcmwgfSR7IGRhdGEuZ3VpZCB9YCBdLCB7IHByZXNlcnZlRnJhZ21lbnQ6IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGBzZXRHcmlkQXBpYCBtZXRob2QgaXMgdXNlZCB0byBzZXQgdGhlIGdyaWQgQVBJIHdoZW4gdGhlIGdyaWQgaXMgcmVhZHksIHR5cGljYWxseVxuICAgKiBhZnRlciB0aGUgYGdyaWRSZWFkeWAgZXZlbnQgaXMgZmlyZWQuIEl0IGFzc2lnbnMgdGhlIGdyaWQgQVBJIHRvIHRoZSBjb21wb25lbnQnc1xuICAgKiBgZ3JpZEFwaWAgcHJvcGVydHkgYW5kIGVtaXRzIHRoZSBgb25HcmlkUmVhZHlgIGV2ZW50LCBwcm92aWRpbmcgZXh0ZXJuYWwgY29tcG9uZW50c1xuICAgKiBvciBsaXN0ZW5lcnMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ3JpZCdzIHJlYWRpbmVzcy5cbiAgICogXG4gICAqIEBwYXJhbSB7R3JpZFJlYWR5RXZlbnR9IGV2IC0gVGhlIGBHcmlkUmVhZHlFdmVudGAgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ3JpZCdzIHJlYWRpbmVzcy5cbiAgICovXG4gIHB1YmxpYyBzZXRHcmlkQXBpKGV2OiBHcmlkUmVhZHlFdmVudCk6IHZvaWR7IFxuICAgIHRoaXMuZ3JpZEFwaSA9IGV2LmFwaTsgXG4gICAgdGhpcy5vbkdyaWRSZWFkeS5lbWl0KGV2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYHNlYXJjaGAgbWV0aG9kIGlzIHVzZWQgdG8gdHJpZ2dlciBhIHNlYXJjaCBvcGVyYXRpb24gYmFzZWQgb24gdGhlIHByb3ZpZGVkXG4gICAqIGBGaWx0ZXJTZWFyY2hFdmVudGAuIEl0IGVtaXRzIHRoZSBgb25TZWFyY2hgIGV2ZW50LCBwcm92aWRpbmcgZXh0ZXJuYWwgY29tcG9uZW50c1xuICAgKiBvciBsaXN0ZW5lcnMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VhcmNoIHF1ZXJ5LiBBZGRpdGlvbmFsbHksIGl0IHJlZnJlc2hlc1xuICAgKiB0aGUgZ3JpZCBjYWNoZSB1c2luZyB0aGUgYHJlZnJlc2hJbmZpbml0ZUNhY2hlYCBtZXRob2Qgb2YgdGhlIGdyaWQgQVBJLlxuICAgKiBAcGFyYW0ge0ZpbHRlclNlYXJjaEV2ZW50fSBrIC0gVGhlIGBGaWx0ZXJTZWFyY2hFdmVudGAgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VhcmNoIG9wZXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzZWFyY2goazogRmlsdGVyU2VhcmNoRXZlbnQpOiB2b2lke1xuICAgIHRoaXMub25TZWFyY2guZW1pdChrKTtcbiAgICBcbiAgICB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdvVG9GaXJzdFBhZ2UoKTtcbiAgICB0aGlzLmdyaWRBcGkucHVyZ2VJbmZpbml0ZUNhY2hlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC00IHAtNCBmbGV4LXNocmluay0wIGZsZXgtd3JhcFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cIm0tMFwiPnt7IGhlYWRlciB9fTwvaDM+XG5cbiAgICAgICAgPHVwLWJ0bi1ncm91cCAqbmdJZj1cImNvbmZpZy5idXR0b25zICYmIGNvbmZpZy5idXR0b25zLmxlbmd0aCA+IDBcIiBpZD1cImJ0bi1saXN0LXNuYXBzaG90LWNvbnRhaW5lclwiIFtjb25maWddPVwiY29uZmlnLmJ1dHRvbnNcIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtc2hyaW5rLTAgZmxleC1ncm93LTFcIiAqbmdJZj1cImNvbmZpZy5maWx0ZXJDb25maWdcIj5cbiAgICAgICAgPHVwLWZpbHRlciBwbGFjZWhvbGRlcj1cIlR5cGUgdG8gc2VhcmNoXCIgaWQ9XCJmaWx0ZXIte3sgaWQgfX1cIiBbY29uZmlnXT1cImNvbmZpZy5maWx0ZXJDb25maWdcIiAob25TZWFyY2gpPVwic2VhcmNoKCRldmVudClcIiAvPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBweC0xIHBiLTFcIj5cbiAgICA8dXAtc25hcHNob3QtZ3JpZCBbY29uZmlnXT1cImNvbmZpZy5ncmlkQ29uZmlnXCIgW2lkXT1cImdyaWRJZFwiIChvbkdyaWRSZWFkeSk9XCJzZXRHcmlkQXBpKCRldmVudClcIiAob25Sb3dDbGljayk9XCJvcGVuRGV0YWlsKCRldmVudClcIiAvPlxuPC9kaXY+XG4iXX0=
@@ -21,10 +21,10 @@ export class ModalContainerComponent {
21
21
  close() {
22
22
  this.modalCtrl.dismiss();
23
23
  }
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: ModalContainerComponent, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Component }); }
25
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: ModalContainerComponent, isStandalone: true, selector: "up-modal-container", inputs: { header: "header" }, host: { listeners: { "window:popstate": "popState($event)" } }, ngImport: i0, template: "<ion-header class=\"ion-no-border\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n\n <ion-title class=\"p-0 fs-5\">{{ header }}</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<div class=\"p-4\">\n <ng-content />\n</div>\n", styles: ["ion-toolbar{color:#616161}ion-header{border-bottom:1px solid #e0e0e0}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.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: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ModalContainerComponent, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Component }); }
25
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: ModalContainerComponent, isStandalone: true, selector: "up-modal-container", inputs: { header: "header" }, host: { listeners: { "window:popstate": "popState($event)" } }, ngImport: i0, template: "<ion-header class=\"ion-no-border\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n\n <ion-title class=\"p-0 fs-5\">{{ header }}</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<div class=\"p-4\">\n <ng-content />\n</div>\n", styles: ["ion-toolbar{color:#616161}ion-header{border-bottom:1px solid #e0e0e0}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.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: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26
26
  }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: ModalContainerComponent, decorators: [{
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ModalContainerComponent, decorators: [{
28
28
  type: Component,
29
29
  args: [{ standalone: true, selector: 'up-modal-container', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
30
30
  IonicModule
@@ -89,10 +89,10 @@ export class FilterComponent {
89
89
  this.activeFilter.push({ label: `${key}:${val}`, key, value: val });
90
90
  }
91
91
  }
92
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: FilterComponent, deps: [{ token: 'placeholder', attribute: true }, { token: i0.ChangeDetectorRef }, { token: i1.PopoverController }], target: i0.ɵɵFactoryTarget.Component }); }
93
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: FilterComponent, isStandalone: true, selector: "up-filter", inputs: { id: "id", config: "config" }, outputs: { onSearch: "onSearch" }, host: { classAttribute: "d-block position-relative" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], ngImport: i0, template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n <div *ngIf=\"activeFilter.length > 0\" class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\" *ngFor=\"let item of activeFilter; index as i\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n </div>\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n<ng-container *ngIf=\"config.mode === 'advanced'\">\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n\n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n <ng-container *ngFor=\"let c of config.fields\">\n <ng-container [ngSwitch]=\"c.type\">\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" *ngSwitchCase=\"'number'\" />\n \n <div class=\"my-4\" *ngSwitchCase=\"'checkbox'\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n \n <div class=\"d-flex gap-3 my-4\" *ngSwitchCase=\"'date-range'\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n \n <up-select class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [items]=\"c.options!\" *ngSwitchCase=\"'select'\" />\n <up-searchable-select class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [queryFunc]=\"c.getOptions!\" [initialItems]=\"c.options!\" *ngSwitchCase=\"'searchable-select'\" />\n \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" *ngSwitchDefault />\n </ng-container>\n </ng-container>\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n</ng-container>\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:47%}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.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: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: FormDateComponent, selector: "up-date", inputs: ["label", "required", "disabled", "presentation"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormSelectComponent, selector: "up-select", inputs: ["items", "clearable", "label", "multiple", "required", "addTag", "disabled", "searchable", "bindLabel", "bindValue"] }, { kind: "component", type: FormSearchableSelectComponent, selector: "up-searchable-select", inputs: ["queryFunc", "clearable", "label", "initialItems", "required", "addTag", "disabled", "multiple", "bindLabel", "bindValue"], outputs: ["onChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
92
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: FilterComponent, deps: [{ token: 'placeholder', attribute: true }, { token: i0.ChangeDetectorRef }, { token: i1.PopoverController }], target: i0.ɵɵFactoryTarget.Component }); }
93
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: FilterComponent, isStandalone: true, selector: "up-filter", inputs: { id: "id", config: "config" }, outputs: { onSearch: "onSearch" }, host: { classAttribute: "d-block position-relative" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], ngImport: i0, template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n <div *ngIf=\"activeFilter.length > 0\" class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\" *ngFor=\"let item of activeFilter; index as i\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n </div>\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n<ng-container *ngIf=\"config.mode === 'advanced'\">\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n\n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n <ng-container *ngFor=\"let c of config.fields\">\n <ng-container [ngSwitch]=\"c.type\">\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" *ngSwitchCase=\"'number'\" />\n \n <div class=\"my-4\" *ngSwitchCase=\"'checkbox'\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n \n <div class=\"d-flex gap-3 my-4\" *ngSwitchCase=\"'date-range'\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n \n <up-select class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [items]=\"c.options!\" *ngSwitchCase=\"'select'\" />\n <up-searchable-select class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [queryFunc]=\"c.getOptions!\" [initialItems]=\"c.options!\" *ngSwitchCase=\"'searchable-select'\" />\n \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" *ngSwitchDefault />\n </ng-container>\n </ng-container>\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n</ng-container>\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:47%}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.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: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: FormDateComponent, selector: "up-date", inputs: ["label", "required", "disabled", "presentation"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormSelectComponent, selector: "up-select", inputs: ["items", "clearable", "label", "multiple", "required", "addTag", "disabled", "searchable", "bindLabel", "bindValue"] }, { kind: "component", type: FormSearchableSelectComponent, selector: "up-searchable-select", inputs: ["queryFunc", "clearable", "label", "initialItems", "required", "addTag", "disabled", "multiple", "bindLabel", "bindValue"], outputs: ["onChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
94
94
  }
95
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: FilterComponent, decorators: [{
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: FilterComponent, decorators: [{
96
96
  type: Component,
97
97
  args: [{ standalone: true, selector: 'up-filter', changeDetection: ChangeDetectionStrategy.OnPush, host: {
98
98
  class: 'd-block position-relative'
@@ -0,0 +1,153 @@
1
+ import { Attribute, ChangeDetectionStrategy, Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { Subject, catchError, concat, debounceTime, distinctUntilChanged, map, of, switchMap, tap } from 'rxjs';
5
+ import { NgSelectModule } from '@ng-select/ng-select';
6
+ import { getFormErrorMessage } from '../../../utils';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../../services";
9
+ import * as i2 from "@angular/common";
10
+ import * as i3 from "@angular/forms";
11
+ import * as i4 from "@ng-select/ng-select";
12
+ export class FormCurrencyInputComponent {
13
+ constructor(numberPlaceholder, ch, currencyService) {
14
+ this.numberPlaceholder = numberPlaceholder;
15
+ this.ch = ch;
16
+ this.currencyService = currencyService;
17
+ this.clearable = true;
18
+ this.isInputNumber = false;
19
+ this.initialItems = [];
20
+ this.numberValue = null;
21
+ this.isNumberDisabled = false;
22
+ this.required = false;
23
+ this.disabled = false;
24
+ this.bindLabel = 'label';
25
+ this.bindValue = 'value';
26
+ this.onChange = new EventEmitter();
27
+ this.typeahead = new Subject();
28
+ this.query$ = this.typeahead.pipe(distinctUntilChanged(), debounceTime(300), tap(() => this.isLoading = true), switchMap((k) => this.queryFunc(k).pipe(map((result) => result.length === 0 ? this.initialItems : result), catchError(() => of(this.initialItems)))), tap(() => this.isLoading = false));
29
+ this.items$ = this.query$;
30
+ this.isLoading = false;
31
+ this.isTouched = false;
32
+ this.value = null;
33
+ this.decimalLimiter = 0;
34
+ this.changed = (_val) => { };
35
+ this.onTouched = () => { };
36
+ }
37
+ ngOnChanges(changes) {
38
+ if (changes['initialItems']) {
39
+ this.items$ = concat(of(this.initialItems), this.query$);
40
+ this.decimalLimiter = this.initialItems[0]?.magnifyValue === 1 ? 0 : Math.floor(Math.log10(this.initialItems[0]?.magnifyValue ?? 1));
41
+ this.numberValue = this.numberValue / this.initialItems[0]?.magnifyValue;
42
+ }
43
+ if (this.isInputNumber)
44
+ this.bindLabel = 'value';
45
+ }
46
+ registerOnChange(fn) { this.changed = fn; }
47
+ registerOnTouched(fn) { this.onTouched = fn; }
48
+ writeValue(val) {
49
+ this.value = val;
50
+ this.ch.markForCheck();
51
+ }
52
+ setDisabledState(d) {
53
+ this.disabled = d;
54
+ this.ch.markForCheck();
55
+ }
56
+ validate(control) {
57
+ this.formControl = control;
58
+ return null;
59
+ }
60
+ change(e) {
61
+ if (this.isInputNumber)
62
+ this.numberValue = null;
63
+ this.onChange.emit({ ccy: e, number: this.numberValue });
64
+ this.initialItems = e;
65
+ if (!this.isTouched) {
66
+ this.onTouched();
67
+ this.isTouched = true;
68
+ }
69
+ if (!this.disabled) {
70
+ if (!e)
71
+ this.value = null;
72
+ else
73
+ this.value = e[this.bindValue];
74
+ this.changed(this.value);
75
+ this.errorMsg = getFormErrorMessage(this.formControl.errors, 'Currency');
76
+ }
77
+ if (e?.magnifyValue === 1)
78
+ this.decimalLimiter = 0;
79
+ else
80
+ this.decimalLimiter = Math.floor(Math.log10(e?.magnifyValue));
81
+ }
82
+ numberInput({ value }) {
83
+ this.numberValue = value;
84
+ this.onChange.emit({ ccy: this.initialItems, number: value });
85
+ }
86
+ limitDecimal({ charCode, preventDefault, target: { value } }) {
87
+ const reg = this.decimalLimiter > 0 ? new RegExp(`^\\d*(\\.\\d{0,${this.decimalLimiter}})?$`) : /^\d+$/;
88
+ if (!reg.test(value + String.fromCharCode(charCode)))
89
+ preventDefault();
90
+ }
91
+ queryFunc(keyword) {
92
+ return this.currencyService.query(keyword).pipe(map(({ data: { webConfigMsCurrency: { data } } }) => data.map(({ code, name, magnifyValue }) => ({ label: `[${code}] ${name}`, value: code, magnifyValue }))));
93
+ }
94
+ ;
95
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: FormCurrencyInputComponent, deps: [{ token: 'numberPlaceholder', attribute: true }, { token: i0.ChangeDetectorRef }, { token: i1.CurrencyService }], target: i0.ɵɵFactoryTarget.Component }); }
96
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: FormCurrencyInputComponent, isStandalone: true, selector: "up-currency-input", inputs: { clearable: "clearable", isInputNumber: "isInputNumber", initialItems: "initialItems", numberValue: "numberValue", isNumberDisabled: "isNumberDisabled", required: "required", disabled: "disabled", bindLabel: "bindLabel", bindValue: "bindValue" }, outputs: { onChange: "onChange" }, host: { classAttribute: "d-block" }, providers: [
97
+ {
98
+ multi: true,
99
+ provide: NG_VALUE_ACCESSOR,
100
+ useExisting: FormCurrencyInputComponent
101
+ },
102
+ {
103
+ multi: true,
104
+ provide: NG_VALIDATORS,
105
+ useExisting: FormCurrencyInputComponent
106
+ }
107
+ ], usesOnChanges: true, ngImport: i0, template: "<label class=\"form-label\" [class.required]=\"required\">Currency</label>\n\n<ng-template #selectForm>\n <ng-select \n class=\"flex-shrink-0\"\n [class.number]=\"isInputNumber\"\n appendTo=\"body\"\n typeToSearchText=\"Please enter 3 or more characters\"\n placeholder=\"Currency\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [minTermLength]=\"3\"\n [virtualScroll]=\"true\"\n [editableSearchTerm]=\"true\"\n [ngModel]=\"value\"\n [readonly]=\"disabled\" \n [loading]=\"isLoading\"\n [clearable]=\"clearable\"\n [typeahead]=\"typeahead\"\n [items]=\"items$ | async\"\n (change)=\"change($event);\"\n >\n <ng-template ng-option-tmp let-i=\"item\">\n <span>{{ isInputNumber? i.value : i.label }}</span>\n </ng-template>\n </ng-select>\n</ng-template>\n\n<ng-template #inputNumber>\n <div class=\"d-flex justify-content-between gap-1 align-items-center\">\n <ng-container *ngTemplateOutlet=\"selectForm\" />\n\n <input type=\"number\" [placeholder]=\"numberPlaceholder\" class=\"form-control flex-grow-1\" [disabled]=\"isNumberDisabled\" [value]=\"numberValue\" (keypress)=\"limitDecimal($event)\" (input)=\"numberInput($event.target)\">\n </div>\n</ng-template>\n\n<ng-container *ngIf=\"!isInputNumber else inputNumber\">\n <ng-container *ngTemplateOutlet=\"selectForm\" />\n</ng-container>\n\n<label *ngIf=\"errorMsg\" class=\"is-invalid\">{{ errorMsg }}</label>\n", styles: ["ng-select.number{min-width:105px;max-width:105px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i4.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i4.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
108
+ }
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: FormCurrencyInputComponent, decorators: [{
110
+ type: Component,
111
+ args: [{ standalone: true, selector: 'up-currency-input', changeDetection: ChangeDetectionStrategy.OnPush, host: {
112
+ class: 'd-block'
113
+ }, imports: [
114
+ CommonModule,
115
+ FormsModule,
116
+ NgSelectModule
117
+ ], providers: [
118
+ {
119
+ multi: true,
120
+ provide: NG_VALUE_ACCESSOR,
121
+ useExisting: FormCurrencyInputComponent
122
+ },
123
+ {
124
+ multi: true,
125
+ provide: NG_VALIDATORS,
126
+ useExisting: FormCurrencyInputComponent
127
+ }
128
+ ], template: "<label class=\"form-label\" [class.required]=\"required\">Currency</label>\n\n<ng-template #selectForm>\n <ng-select \n class=\"flex-shrink-0\"\n [class.number]=\"isInputNumber\"\n appendTo=\"body\"\n typeToSearchText=\"Please enter 3 or more characters\"\n placeholder=\"Currency\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [minTermLength]=\"3\"\n [virtualScroll]=\"true\"\n [editableSearchTerm]=\"true\"\n [ngModel]=\"value\"\n [readonly]=\"disabled\" \n [loading]=\"isLoading\"\n [clearable]=\"clearable\"\n [typeahead]=\"typeahead\"\n [items]=\"items$ | async\"\n (change)=\"change($event);\"\n >\n <ng-template ng-option-tmp let-i=\"item\">\n <span>{{ isInputNumber? i.value : i.label }}</span>\n </ng-template>\n </ng-select>\n</ng-template>\n\n<ng-template #inputNumber>\n <div class=\"d-flex justify-content-between gap-1 align-items-center\">\n <ng-container *ngTemplateOutlet=\"selectForm\" />\n\n <input type=\"number\" [placeholder]=\"numberPlaceholder\" class=\"form-control flex-grow-1\" [disabled]=\"isNumberDisabled\" [value]=\"numberValue\" (keypress)=\"limitDecimal($event)\" (input)=\"numberInput($event.target)\">\n </div>\n</ng-template>\n\n<ng-container *ngIf=\"!isInputNumber else inputNumber\">\n <ng-container *ngTemplateOutlet=\"selectForm\" />\n</ng-container>\n\n<label *ngIf=\"errorMsg\" class=\"is-invalid\">{{ errorMsg }}</label>\n", styles: ["ng-select.number{min-width:105px;max-width:105px}\n"] }]
129
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
130
+ type: Attribute,
131
+ args: ['numberPlaceholder']
132
+ }] }, { type: i0.ChangeDetectorRef }, { type: i1.CurrencyService }], propDecorators: { clearable: [{
133
+ type: Input
134
+ }], isInputNumber: [{
135
+ type: Input
136
+ }], initialItems: [{
137
+ type: Input
138
+ }], numberValue: [{
139
+ type: Input
140
+ }], isNumberDisabled: [{
141
+ type: Input
142
+ }], required: [{
143
+ type: Input
144
+ }], disabled: [{
145
+ type: Input
146
+ }], bindLabel: [{
147
+ type: Input
148
+ }], bindValue: [{
149
+ type: Input
150
+ }], onChange: [{
151
+ type: Output
152
+ }] } });
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jdXJyZW5jeS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvY3VycmVuY3ktaW5wdXQvZm9ybS1jdXJyZW5jeS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvY3VycmVuY3ktaW5wdXQvZm9ybS1jdXJyZW5jeS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hKLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXlDLFdBQVcsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQStCLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkosT0FBTyxFQUFjLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUE4QnJELE1BQU0sT0FBTywwQkFBMEI7SUF1SnJDLFlBQ3lDLGlCQUF5QixFQUM3QyxFQUFxQixFQUNyQixlQUFnQztRQUZaLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUTtRQUM3QyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixv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QkFPVSxRQUFRO3NCQUF2QixLQUFLO2dCQU9VLFNBQVM7c0JBQXhCLEtBQUs7Z0JBT1UsU0FBUztzQkFBeEIsS0FBSztnQkFNVyxRQUFRO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGNhdGNoRXJyb3IsIGNvbmNhdCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBvZiwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5nU2VsZWN0TW9kdWxlIH0gZnJvbSAnQG5nLXNlbGVjdC9uZy1zZWxlY3QnO1xuaW1wb3J0IHsgZ2V0Rm9ybUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEN1cnJlbmN5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAndXAtY3VycmVuY3ktaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1jdXJyZW5jeS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tY3VycmVuY3ktaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHsgXG4gICAgY2xhc3M6ICdkLWJsb2NrJyBcbiAgfSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBOZ1NlbGVjdE1vZHVsZVxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IEZvcm1DdXJyZW5jeUlucHV0Q29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogRm9ybUN1cnJlbmN5SW5wdXRDb21wb25lbnRcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRm9ybUN1cnJlbmN5SW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkNoYW5nZXMge1xuICBcbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBzZWxlY3QgaW5wdXQgaXMgY2xlYXJhYmxlLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQge3RydWV9XG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgY2xlYXJhYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogSW5wdXQgdmFyaWFibGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG51bWJlciBpbnB1dCBmb3JtIGlzIGhpZGUgb3Igc2hvdy5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHtmYWxzZX1cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBpc0lucHV0TnVtYmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIGZvciB0aGUgaW5pdGlhbCBpdGVtcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHNlbGVjdCBpbnB1dC5cbiAgICogQHR5cGUge3sgbGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbWFnbmlmeVZhbHVlOiBudW1iZXIgfVtdfVxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGluaXRpYWxJdGVtczogeyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBtYWduaWZ5VmFsdWU6IG51bWJlciB9W10gPSBbXTtcblxuICAvKipcbiAgICogSW5wdXQgdmFyaWFibGUgdG8gc2V0IHRoZSB2YWx1ZSBvZiBpbnB1dCBudW1iZXIgZmllbGQuXG4gICAqIEB0eXBlIHtudW1iZXIgfCBudWxsfVxuICAgKiBAZGVmYXVsdCB7bnVsbH1cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBudW1iZXJWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBudW1iZXIgaW5wdXQgaXMgZGlzYWJsZWQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB7ZmFsc2V9XG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgaXNOdW1iZXJEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgc2VsZWN0IGlucHV0IGlzIHJlcXVpcmVkLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQge2ZhbHNlfVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBzZWxlY3QgaW5wdXQgaXMgZGlzYWJsZWQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB7ZmFsc2V9XG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogSW5wdXQgdmFyaWFibGUgc3BlY2lmeWluZyB0aGUgcHJvcGVydHkgdG8gYmluZCBhcyB0aGUgbGFiZWwgZm9yIGl0ZW1zIGluIHRoZSBzZWxlY3QgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IHsnbGFiZWwnfVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGJpbmRMYWJlbDogc3RyaW5nID0gJ2xhYmVsJztcblxuICAvKipcbiAgICogSW5wdXQgdmFyaWFibGUgc3BlY2lmeWluZyB0aGUgcHJvcGVydHkgdG8gYmluZCBhcyB0aGUgdmFsdWUgZm9yIGl0ZW1zIGluIHRoZSBzZWxlY3QgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IHsndmFsdWUnfVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGJpbmRWYWx1ZTogc3RyaW5nID0gJ3ZhbHVlJztcblxuICAvKipcbiAgICogT3V0cHV0IHZhcmlhYmxlIHRvIGVtaXQgY2hhbmdlcyB3aGVuIHRoZSBzZWxlY3QgaW5wdXQgdmFsdWUgY2hhbmdlcy5cbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxhbnk+fVxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPHsgY2N5OiB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG1hZ25pZnlWYWx1ZTogbnVtYmVyIH0gfCBhbnksIG51bWJlcjogbnVtYmVyIHwgbnVsbCB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjY3k6IHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbWFnbmlmeVZhbHVlOiBudW1iZXIgfSB8IGFueSwgbnVtYmVyOiBudW1iZXIgfCBudWxsIH0+KCk7XG4gIFxuICAvKipcbiAgICogU3ViamVjdCBmb3IgaGFuZGxpbmcgdHlwZWFoZWFkIGV2ZW50cyB0byB0cmlnZ2VyIGl0ZW0gcXVlcmllcyBiYXNlZCBvbiB0aGUgc2VhcmNoIGtleXdvcmQuXG4gICAqIEB0eXBlIHtTdWJqZWN0PHN0cmluZz59XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdHlwZWFoZWFkOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgZm9yIGhhbmRsaW5nIGl0ZW0gcXVlcmllcyBiYXNlZCBvbiB0aGUgc2VhcmNoIGtleXdvcmQuXG4gICAqIEB0eXBlIHtPYnNlcnZhYmxlPGFueVtdPn1cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyeSQ6IE9ic2VydmFibGU8YW55W10+ID0gdGhpcy50eXBlYWhlYWQucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgIHRhcCgoKSA9PiB0aGlzLmlzTG9hZGluZyA9IHRydWUpLFxuICAgIHN3aXRjaE1hcCgoazogc3RyaW5nKSA9PiB0aGlzLnF1ZXJ5RnVuYyhrKS5waXBlKFxuICAgICAgbWFwKChyZXN1bHQ6IGFueVtdKSA9PiByZXN1bHQubGVuZ3RoID09PSAwPyB0aGlzLmluaXRpYWxJdGVtcyA6IHJlc3VsdCksXG4gICAgICBjYXRjaEVycm9yKCgpID0+IG9mKHRoaXMuaW5pdGlhbEl0ZW1zKSlcbiAgICApKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5pc0xvYWRpbmcgPSBmYWxzZSlcbiAgKTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBmb3IgZGlzcGxheWluZyBpdGVtcyBpbiB0aGUgc2VsZWN0IGlucHV0LlxuICAgKiBAdHlwZSB7T2JzZXJ2YWJsZTxhbnlbXT59XG4gICAqL1xuICBwdWJsaWMgaXRlbXMkOiBPYnNlcnZhYmxlPGFueVtdPiA9IHRoaXMucXVlcnkkO1xuXG4gIC8qKlxuICAgKiBCb29sZWFuIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzZWxlY3QgaW5wdXQgaXMgbG9hZGluZy5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHtmYWxzZX1cbiAgICovXG4gIHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQm9vbGVhbiBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgc2VsZWN0IGlucHV0IGhhcyBiZWVuIHRvdWNoZWQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCB7ZmFsc2V9XG4gICAqL1xuICBwdWJsaWMgaXNUb3VjaGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgc2VsZWN0IGlucHV0LlxuICAgKiBAdHlwZSB7YW55IHwgbnVsbH1cbiAgICogQGRlZmF1bHQge251bGx9XG4gICAqL1xuICBwdWJsaWMgdmFsdWU6IGFueSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VsZWN0IGlucHV0LlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCB7dW5kZWZpbmVkfVxuICAgKi9cbiAgcHVibGljIGVycm9yTXNnITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VsZWN0IGlucHV0LlxuICAgKiBAdHlwZSB7QWJzdHJhY3RDb250cm9sfVxuICAgKi9cbiAgcHJvdGVjdGVkIGZvcm1Db250cm9sITogQWJzdHJhY3RDb250cm9sO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1heGltdW0gZGlnaXRzIGFsbG93ZWQgYmVoaW5kIHRoZSBjb21tYS5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQGRlZmF1bHQgezB9XG4gICAqL1xuICBwcm90ZWN0ZWQgZGVjaW1hbExpbWl0ZXI6IG51bWJlciA9IDA7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB2YWx1ZSBjaGFuZ2VzIGluIHRoZSBzZWxlY3QgaW5wdXQuXG4gICAqIEB0eXBlIHsoX3ZhbDogYW55KSA9PiB2b2lkfVxuICAgKi9cbiAgcHJvdGVjdGVkIGNoYW5nZWQ6IChfdmFsOiBhbnkpID0+IHZvaWQgPSAoX3ZhbDogYW55KSA9PiB7fTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHRvdWNoIGV2ZW50cyBpbiB0aGUgc2VsZWN0IGlucHV0LlxuICAgKiBAdHlwZSB7KCkgPT4gdm9pZH1cbiAgICovXG4gIHByb3RlY3RlZCBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAQXR0cmlidXRlKCdudW1iZXJQbGFjZWhvbGRlcicpIHB1YmxpYyBudW1iZXJQbGFjZWhvbGRlcjogc3RyaW5nLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBjaDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGN1cnJlbmN5U2VydmljZTogQ3VycmVuY3lTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogTGlmZWN5Y2xlIGhvb2sgY2FsbGVkIHdoZW4gY2hhbmdlcyBvY2N1ciB0byBpbnB1dCBwcm9wZXJ0aWVzLlxuICAgKiBVcGRhdGVzIHRoZSBpdGVtcyQgb2JzZXJ2YWJsZSB3aGVuIHRoZSBpbml0aWFsSXRlbXMgaW5wdXQgY2hhbmdlcy5cbiAgICogVXBkYXRlcyB0aGUgZGVjaW1hbExpbWl0ZXIgdGhhdCBpcyB0aGUgbWF4aW11bSBkaWdpdHMgYmVoaW5kIGNvbW1hLlxuICAgKiBDYWxjdWxhdGUgdGhlIHZhbHVlIG9mIGlucHV0IG51bWJlciwgdGhpcyBpcyB0byBjYWxjdWxhdGUgdGhlIGFjdHVhbCB2YWx1ZSBkaXZpZGVkIGJ5IG1hZ25pZnlWYWx1ZS5cbiAgICogQHBhcmFtIHtTaW1wbGVDaGFuZ2VzfSBjaGFuZ2VzIC0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNoYW5nZWQgcHJvcGVydGllcy5cbiAgICovXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZHtcbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbEl0ZW1zJ10pIHtcbiAgICAgIHRoaXMuaXRlbXMkID0gY29uY2F0KG9mKHRoaXMuaW5pdGlhbEl0ZW1zKSwgdGhpcy5xdWVyeSQpO1xuICAgICAgdGhpcy5kZWNpbWFsTGltaXRlciA9IHRoaXMuaW5pdGlhbEl0ZW1zWzBdPy5tYWduaWZ5VmFsdWUgPT09IDE/IDAgOiBNYXRoLmZsb29yKE1hdGgubG9nMTAodGhpcy5pbml0aWFsSXRlbXNbMF0/Lm1hZ25pZnlWYWx1ZT8/IDEpKTtcbiAgICAgIHRoaXMubnVtYmVyVmFsdWUgPSA8bnVtYmVyPiB0aGlzLm51bWJlclZhbHVlIC8gdGhpcy5pbml0aWFsSXRlbXNbMF0/Lm1hZ25pZnlWYWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0lucHV0TnVtYmVyKSB0aGlzLmJpbmRMYWJlbCA9ICd2YWx1ZSc7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2VsZWN0IGlucHV0IHZhbHVlIGNoYW5nZXMuXG4gICAqIEBwYXJhbSB7KF92YWw6IGFueSkgPT4gdm9pZH0gZm4gLSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgdmFsdWUgY2hhbmdlcy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkeyB0aGlzLmNoYW5nZWQgPSBmbjsgfVxuICBcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzZWxlY3QgaW5wdXQgaXMgdG91Y2hlZC5cbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBmbiAtIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0b3VjaCBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWR7IHRoaXMub25Ub3VjaGVkID0gZm47IH0gXG4gIFxuICAvKipcbiAgICogV3JpdGVzIGEgbmV3IHZhbHVlIHRvIHRoZSBzZWxlY3QgaW5wdXQuXG4gICAqIEBwYXJhbSB7Kn0gdmFsIC0gVGhlIG5ldyB2YWx1ZSB0byBiZSBzZXQuXG4gICAqL1xuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWw6IGFueSk6IHZvaWR7XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICB0aGlzLmNoLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIFxuICAgLyoqXG4gICAqIFNldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBzZWxlY3QgaW5wdXQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZCAtIFRoZSBuZXcgZGlzYWJsZWQgc3RhdGUuXG4gICAqL1xuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZT8oZDogYm9vbGVhbik6IHZvaWR7IFxuICAgIHRoaXMuZGlzYWJsZWQgPSBkOyBcbiAgICB0aGlzLmNoLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgc2VsZWN0IGlucHV0LlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0Q29udHJvbH0gY29udHJvbCAtIFRoZSBhYnN0cmFjdCBjb250cm9sIHJlcHJlc2VudGluZyB0aGUgc2VsZWN0IGlucHV0LlxuICAgKiBAcmV0dXJucyB7KFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKX0gLSBWYWxpZGF0aW9uIGVycm9ycyBpZiBhbnksIG90aGVyd2lzZSBudWxsLlxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxseyAgICBcbiAgICB0aGlzLmZvcm1Db250cm9sID0gY29udHJvbDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEV2ZW50IGhhbmRsZXIgZm9yIGNoYW5nZXMgaW4gdGhlIHNlbGVjdCBpbnB1dC5cbiAgICogU2V0IHRoZSBudW1iZXIgYXMgbnVsbCBpZiBjdXJyZW5jeSBjaGFuZ2VkIHRvIHByZXZlbnQgbWlzbWF0Y2ggYmV0d2VlbiBzZWxlY3RlZCBjdXJyZW5jeSBhbmQgdGhlIG51bWJlciBjb21tYSBhbGxvd2VkIGxpbWl0LlxuICAgKiBFbWl0cyB0aGUgb25DaGFuZ2UgZXZlbnQsIHVwZGF0ZXMgdGhlIGluaXRpYWxJdGVtcywgYW5kIGhhbmRsZXMgdmFsaWRhdGlvbiBiYXNlZCBvbiBmb3JtIGNvbnRyb2wgZXJyb3JzIGFuZCBsYWJlbC5cbiAgICogU2V0IHRoZSBkZWNpbWFsTGltaXRlciBiYXNlZCBvbiBzZWxlY3RlZCBtYWduaWZ5VmFsdWVcbiAgICogQHBhcmFtIHthbnl9IGUgLSBUaGUgZXZlbnQgY29udGFpbmluZyB0aGUgbmV3IHNlbGVjdCBpbnB1dCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBjaGFuZ2UoZT86IGFueSk6IHZvaWR7XG4gICAgaWYgKHRoaXMuaXNJbnB1dE51bWJlcikgdGhpcy5udW1iZXJWYWx1ZSA9IG51bGw7XG4gICAgXG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHsgY2N5OiBlLCBudW1iZXI6IHRoaXMubnVtYmVyVmFsdWUgfSk7XG4gICAgdGhpcy5pbml0aWFsSXRlbXMgPSBlO1xuXG4gICAgaWYgKCF0aGlzLmlzVG91Y2hlZCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICBpZiAoIWUpIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgZWxzZSB0aGlzLnZhbHVlID0gZVt0aGlzLmJpbmRWYWx1ZV07XG5cbiAgICAgIHRoaXMuY2hhbmdlZCh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuZXJyb3JNc2cgPSBnZXRGb3JtRXJyb3JNZXNzYWdlKHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzLCAnQ3VycmVuY3knKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGU/Lm1hZ25pZnlWYWx1ZSA9PT0gMSkgdGhpcy5kZWNpbWFsTGltaXRlciA9IDA7XG4gICAgZWxzZSB0aGlzLmRlY2ltYWxMaW1pdGVyID0gTWF0aC5mbG9vcihNYXRoLmxvZzEwKGU/Lm1hZ25pZnlWYWx1ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJlZCBvbiBmb3JtIG51bWJlciBpbnB1dC5cbiAgICogU2V0IHRoZSBudW1iZXJWYWx1ZSB3aXRoIGN1cnJlbnQgdmFsdWUuXG4gICAqIEVtaXQgdGhlIHNlbGVjdGVkIGN1cnJlbmN5IGFuZCB0aGUgbnVtYmVyIHZhbHVlIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICAgKiBAcGFyYW0ge2FueX0gLSBDb250YWluIGB2YWx1ZWAgdGhlIHZhbHVlIG9mIGlucHV0ZWQgbnVtYmVyLlxuICAgKi9cbiAgcHVibGljIG51bWJlcklucHV0KHsgdmFsdWUgfTogYW55KTogdm9pZHtcbiAgICB0aGlzLm51bWJlclZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHsgY2N5OiB0aGlzLmluaXRpYWxJdGVtcywgbnVtYmVyOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgb24gZm9ybSBudW1iZXIga2V5cHJlc3MuXG4gICAqIENvbnRyb2xsaW5nIGlucHV0IGluIGEgbnVtYmVyIGZpZWxkLCByZXN0cmljdGluZyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGFsbG93ZWQuXG4gICAqIEBwYXJhbSB7YW55fSAtIENvbnRhaW5cbiAgICogY2hhckNvZGUgLSB0aGUgY2hhcmFjdGVyIGNvZGUgb2YgdGhlIGtleSBwcmVzc2VkLlxuICAgKiBwcmV2ZW50RGVmYXVsdCAtIHRoZSBmdW5jdGlvbiB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiB0aGUgZXZlbnQuXG4gICAqIHRhcmdldC52YWx1ZSAtIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpbnB1dCBmaWVsZC5cbiAgICovXG4gIHB1YmxpYyBsaW1pdERlY2ltYWwoeyBjaGFyQ29kZSwgcHJldmVudERlZmF1bHQsIHRhcmdldDogeyB2YWx1ZSB9fTogYW55KTogdm9pZHtcbiAgICBjb25zdCByZWcgPSB0aGlzLmRlY2ltYWxMaW1pdGVyID4gMD8gbmV3IFJlZ0V4cChgXlxcXFxkKihcXFxcLlxcXFxkezAsJHsgdGhpcy5kZWNpbWFsTGltaXRlciB9fSk/JGApIDogL15cXGQrJC87XG4gICAgaWYgKCFyZWcudGVzdCh2YWx1ZSArIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpKSkgcHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBhIHF1ZXJ5IG9wZXJhdGlvbiB0byByZXRyaWV2ZSBjdXJyZW5jeSBkYXRhIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBrZXl3b3JkLlxuICAgKiBSZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcXVlcmllZCBjdXJyZW5jeSBkYXRhLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5d29yZCAtIFRoZSBrZXl3b3JkIHVzZWQgZm9yIHF1ZXJ5aW5nIGN1cnJlbmN5IGRhdGEuXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPGFueT59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcXVlcmllZCBjdXJyZW5jeSBkYXRhLlxuICAgKi9cbiAgcHJvdGVjdGVkIHF1ZXJ5RnVuYyhrZXl3b3JkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT57XG4gICAgcmV0dXJuIHRoaXMuY3VycmVuY3lTZXJ2aWNlLnF1ZXJ5KGtleXdvcmQpLnBpcGUoXG4gICAgICBtYXAoKHsgZGF0YTogeyB3ZWJDb25maWdNc0N1cnJlbmN5OiB7IGRhdGEgfX19KSA9PiBkYXRhLm1hcCgoeyBjb2RlLCBuYW1lLCBtYWduaWZ5VmFsdWUgfTogYW55KSA9PiAoeyBsYWJlbDogYFskeyBjb2RlIH1dICR7IG5hbWUgfWAsIHZhbHVlOiBjb2RlLCBtYWduaWZ5VmFsdWUgfSkpKVxuICAgICk7XG4gIH07XG59XG4iLCI8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgW2NsYXNzLnJlcXVpcmVkXT1cInJlcXVpcmVkXCI+Q3VycmVuY3k8L2xhYmVsPlxuXG48bmctdGVtcGxhdGUgI3NlbGVjdEZvcm0+XG4gICAgPG5nLXNlbGVjdCBcbiAgICAgICAgY2xhc3M9XCJmbGV4LXNocmluay0wXCJcbiAgICAgICAgW2NsYXNzLm51bWJlcl09XCJpc0lucHV0TnVtYmVyXCJcbiAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgdHlwZVRvU2VhcmNoVGV4dD1cIlBsZWFzZSBlbnRlciAzIG9yIG1vcmUgY2hhcmFjdGVyc1wiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiQ3VycmVuY3lcIlxuICAgICAgICBbYmluZExhYmVsXT1cImJpbmRMYWJlbFwiXG4gICAgICAgIFtiaW5kVmFsdWVdPVwiYmluZFZhbHVlXCJcbiAgICAgICAgW21pblRlcm1MZW5ndGhdPVwiM1wiXG4gICAgICAgIFt2aXJ0dWFsU2Nyb2xsXT1cInRydWVcIlxuICAgICAgICBbZWRpdGFibGVTZWFyY2hUZXJtXT1cInRydWVcIlxuICAgICAgICBbbmdNb2RlbF09XCJ2YWx1ZVwiXG4gICAgICAgIFtyZWFkb25seV09XCJkaXNhYmxlZFwiIFxuICAgICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdcIlxuICAgICAgICBbY2xlYXJhYmxlXT1cImNsZWFyYWJsZVwiXG4gICAgICAgIFt0eXBlYWhlYWRdPVwidHlwZWFoZWFkXCJcbiAgICAgICAgW2l0ZW1zXT1cIml0ZW1zJCB8IGFzeW5jXCJcbiAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2UoJGV2ZW50KTtcIlxuICAgID5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWk9XCJpdGVtXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyBpc0lucHV0TnVtYmVyPyBpLnZhbHVlIDogaS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLXNlbGVjdD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5wdXROdW1iZXI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMSBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdEZvcm1cIiAvPlxuXG4gICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgW3BsYWNlaG9sZGVyXT1cIm51bWJlclBsYWNlaG9sZGVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZmxleC1ncm93LTFcIiBbZGlzYWJsZWRdPVwiaXNOdW1iZXJEaXNhYmxlZFwiIFt2YWx1ZV09XCJudW1iZXJWYWx1ZVwiIChrZXlwcmVzcyk9XCJsaW1pdERlY2ltYWwoJGV2ZW50KVwiIChpbnB1dCk9XCJudW1iZXJJbnB1dCgkZXZlbnQudGFyZ2V0KVwiPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0lucHV0TnVtYmVyIGVsc2UgaW5wdXROdW1iZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0Rm9ybVwiIC8+XG48L25nLWNvbnRhaW5lcj5cblxuPGxhYmVsICpuZ0lmPVwiZXJyb3JNc2dcIiBjbGFzcz1cImlzLWludmFsaWRcIj57eyBlcnJvck1zZyB9fTwvbGFiZWw+XG4iXX0=
@@ -16,6 +16,7 @@ export class FormDateComponent {
16
16
  this.presentation = 'date';
17
17
  this.isTouched = false;
18
18
  this.value = '';
19
+ this.localValue = '';
19
20
  this.dateFormat = 'dd LLL yyyy';
20
21
  this.onChange = (_val) => { };
21
22
  this.onTouched = () => { };
@@ -28,6 +29,9 @@ export class FormDateComponent {
28
29
  registerOnTouched(fn) { this.onTouched = fn; }
29
30
  writeValue(val) {
30
31
  this.value = val;
32
+ let localTime = new Date(val);
33
+ localTime = new Date(localTime.getTime() - (localTime.getTimezoneOffset() * 60000));
34
+ this.localValue = localTime.toISOString();
31
35
  this.ch.markForCheck();
32
36
  }
33
37
  setDisabledState(d) {
@@ -44,14 +48,14 @@ export class FormDateComponent {
44
48
  this.isTouched = true;
45
49
  }
46
50
  if (!this.disabled) {
47
- this.value = value;
51
+ this.value = this.localValue = value;
48
52
  this.ch.markForCheck();
49
53
  this.onChange(this.value);
50
54
  this.errorMsg = getFormErrorMessage(this.formControl.errors, this.label);
51
55
  }
52
56
  }
53
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: FormDateComponent, deps: [{ token: 'name', attribute: true }, { token: 'placeholder', attribute: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
54
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: FormDateComponent, isStandalone: true, selector: "up-date", inputs: { label: "label", required: "required", disabled: "disabled", presentation: "presentation" }, host: { classAttribute: "d-block position-relative" }, providers: [
57
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: FormDateComponent, deps: [{ token: 'name', attribute: true }, { token: 'placeholder', attribute: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
58
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: FormDateComponent, isStandalone: true, selector: "up-date", inputs: { label: "label", required: "required", disabled: "disabled", presentation: "presentation" }, host: { classAttribute: "d-block position-relative" }, providers: [
55
59
  {
56
60
  multi: true,
57
61
  provide: NG_VALUE_ACCESSOR,
@@ -62,9 +66,9 @@ export class FormDateComponent {
62
66
  provide: NG_VALIDATORS,
63
67
  useExisting: FormDateComponent
64
68
  }
65
- ], ngImport: i0, template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input readonly type=\"text\" id=\"{{ name }}-date\" placeholder=\"{{ placeholder }}\" class=\"form-control cursor-pointer\" [disabled]=\"disabled\" [required]=\"required\" [value]=\"value | date:dateFormat \">\n<ion-icon name=\"calendar\" class=\"position-absolute fs-4 cursor-pointer\" />\n\n<ion-modal trigger=\"{{ name }}-date\">\n <ng-template>\n <ion-datetime mode=\"md\" [presentation]=\"presentation\" value=\"{{ value }}\" [showDefaultButtons]=\"true\" (ionChange)=\"changeDate($event)\" />\n </ng-template>\n</ion-modal>\n<label *ngIf=\"errorMsg\" class=\"is-invalid\">{{ errorMsg }}</label>\n", styles: ["ion-datetime{--background: white}ion-modal{--width: 290px;--height: auto}ion-icon{top:32px;right:16px;color:#616161}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonDatetime, selector: "ion-datetime", inputs: ["cancelText", "clearText", "color", "dayValues", "disabled", "doneText", "firstDayOfWeek", "highlightedDates", "hourCycle", "hourValues", "isDateEnabled", "locale", "max", "min", "minuteValues", "mode", "monthValues", "multiple", "name", "preferWheel", "presentation", "readonly", "showClearButton", "showDefaultButtons", "showDefaultTimeLabel", "showDefaultTitle", "size", "titleSelectedDatesFormatter", "value", "yearValues"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonModal, selector: "ion-modal" }, { kind: "directive", type: i1.SelectValueAccessor, selector: "ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
69
+ ], ngImport: i0, template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input readonly type=\"text\" id=\"{{ name }}-date\" placeholder=\"{{ placeholder }}\" class=\"form-control cursor-pointer\" [disabled]=\"disabled\" [required]=\"required\" [value]=\"value | date:dateFormat \">\n<ion-icon name=\"calendar\" class=\"position-absolute fs-4 cursor-pointer\" />\n\n<ion-modal trigger=\"{{ name }}-date\">\n <ng-template>\n <ion-datetime mode=\"md\" hourCycle=\"h23\" [presentation]=\"presentation\" value=\"{{ localValue }}\" [showDefaultButtons]=\"true\" (ionChange)=\"changeDate($event)\" />\n </ng-template>\n</ion-modal>\n<label *ngIf=\"errorMsg\" class=\"is-invalid\">{{ errorMsg }}</label>\n", styles: ["ion-datetime{--background: white}ion-modal{--width: 290px;--height: auto}ion-icon{top:32px;right:16px;color:#616161}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonDatetime, selector: "ion-datetime", inputs: ["cancelText", "clearText", "color", "dayValues", "disabled", "doneText", "firstDayOfWeek", "formatOptions", "highlightedDates", "hourCycle", "hourValues", "isDateEnabled", "locale", "max", "min", "minuteValues", "mode", "monthValues", "multiple", "name", "preferWheel", "presentation", "readonly", "showClearButton", "showDefaultButtons", "showDefaultTimeLabel", "showDefaultTitle", "size", "titleSelectedDatesFormatter", "value", "yearValues"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonModal, selector: "ion-modal" }, { kind: "directive", type: i1.SelectValueAccessor, selector: "ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
66
70
  }
67
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: FormDateComponent, decorators: [{
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: FormDateComponent, decorators: [{
68
72
  type: Component,
69
73
  args: [{ standalone: true, selector: 'up-date', changeDetection: ChangeDetectionStrategy.OnPush, host: {
70
74
  class: 'd-block position-relative'
@@ -82,7 +86,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
82
86
  provide: NG_VALIDATORS,
83
87
  useExisting: FormDateComponent
84
88
  }
85
- ], template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input readonly type=\"text\" id=\"{{ name }}-date\" placeholder=\"{{ placeholder }}\" class=\"form-control cursor-pointer\" [disabled]=\"disabled\" [required]=\"required\" [value]=\"value | date:dateFormat \">\n<ion-icon name=\"calendar\" class=\"position-absolute fs-4 cursor-pointer\" />\n\n<ion-modal trigger=\"{{ name }}-date\">\n <ng-template>\n <ion-datetime mode=\"md\" [presentation]=\"presentation\" value=\"{{ value }}\" [showDefaultButtons]=\"true\" (ionChange)=\"changeDate($event)\" />\n </ng-template>\n</ion-modal>\n<label *ngIf=\"errorMsg\" class=\"is-invalid\">{{ errorMsg }}</label>\n", styles: ["ion-datetime{--background: white}ion-modal{--width: 290px;--height: auto}ion-icon{top:32px;right:16px;color:#616161}\n"] }]
89
+ ], template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input readonly type=\"text\" id=\"{{ name }}-date\" placeholder=\"{{ placeholder }}\" class=\"form-control cursor-pointer\" [disabled]=\"disabled\" [required]=\"required\" [value]=\"value | date:dateFormat \">\n<ion-icon name=\"calendar\" class=\"position-absolute fs-4 cursor-pointer\" />\n\n<ion-modal trigger=\"{{ name }}-date\">\n <ng-template>\n <ion-datetime mode=\"md\" hourCycle=\"h23\" [presentation]=\"presentation\" value=\"{{ localValue }}\" [showDefaultButtons]=\"true\" (ionChange)=\"changeDate($event)\" />\n </ng-template>\n</ion-modal>\n<label *ngIf=\"errorMsg\" class=\"is-invalid\">{{ errorMsg }}</label>\n", styles: ["ion-datetime{--background: white}ion-modal{--width: 290px;--height: auto}ion-icon{top:32px;right:16px;color:#616161}\n"] }]
86
90
  }], ctorParameters: () => [{ type: undefined, decorators: [{
87
91
  type: Attribute,
88
92
  args: ['name']
@@ -98,4 +102,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
98
102
  }], presentation: [{
99
103
  type: Input
100
104
  }] } });
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9kYXRlL2Zvcm0tZGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvZGF0ZS9mb3JtLWRhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF5QyxhQUFhLEVBQUUsaUJBQWlCLEVBQStCLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEksT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBNEJyRCxNQUFNLE9BQU8saUJBQWlCO0lBMkU1QixZQUM0QixJQUFZLEVBQ0wsV0FBbUIsRUFDakMsRUFBcUI7UUFGZCxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ0wsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDakMsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFqRTFCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFPMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQU8xQixpQkFBWSxHQUF5QixNQUFNLENBQUM7UUFPckQsY0FBUyxHQUFZLEtBQUssQ0FBQztRQU8zQixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBT25CLGVBQVUsR0FBVyxhQUFhLENBQUM7UUFtQmhDLGFBQVEsR0FBd0IsQ0FBQyxJQUFTLEVBQUUsRUFB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QXR0cmlidXRlLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IGdldEZvcm1FcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3VwLWRhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1kYXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1kYXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdkLWJsb2NrIHBvc2l0aW9uLXJlbGF0aXZlJ1xuICB9LFxuICBpbXBvcnRzOiBbXG4gICAgSW9uaWNNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogRm9ybURhdGVDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBGb3JtRGF0ZUNvbXBvbmVudFxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdCB7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIGZvciB0aGUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIGlucHV0LlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZGF0ZSBpbnB1dCBpcyByZXF1aXJlZC5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogSW5wdXQgdmFyaWFibGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRhdGUgaW5wdXQgaXMgZGlzYWJsZWQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBkYXRlIHBpY2tlciBpcyBkYXRlIG9ubHkgb3IgZGF0ZSBhbmQgdGltZS5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2RhdGUnXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgcHJlc2VudGF0aW9uOiAnZGF0ZScgfCAnZGF0ZS10aW1lJyA9ICdkYXRlJztcblxuICAvKipcbiAgICogQm9vbGVhbiBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgZGF0ZSBpbnB1dCBoYXMgYmVlbiB0b3VjaGVkLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHB1YmxpYyBpc1RvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBkYXRlIGlucHV0LlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgcHVibGljIHZhbHVlOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogVGhlIGZvcm1hdCBvZiBkYXRlLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnZGQgTExMIHl5eXknXG4gICAqL1xuICBwdWJsaWMgZGF0ZUZvcm1hdDogc3RyaW5nID0gJ2RkIExMTCB5eXl5JztcblxuICAvKipcbiAgICogRXJyb3IgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcHVibGljIGVycm9yTXNnITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBpbnB1dC5cbiAgICogQHR5cGUge0Fic3RyYWN0Q29udHJvbH1cbiAgICovXG4gIHByb3RlY3RlZCBmb3JtQ29udHJvbCE6IEFic3RyYWN0Q29udHJvbDtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHZhbHVlIGNoYW5nZXMgaW4gdGhlIGRhdGUgaW5wdXQuXG4gICAqIEB0eXBlIHsoX3ZhbDogYW55KSA9PiB2b2lkfVxuICAgKi9cbiAgcHJvdGVjdGVkIG9uQ2hhbmdlOiAoX3ZhbDogYW55KSA9PiB2b2lkID0gKF92YWw6IGFueSkgPT4ge307XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB0b3VjaCBldmVudHMgaW4gdGhlIGRhdGUgaW5wdXQuXG4gICAqIEB0eXBlIHsoKSA9PiB2b2lkfVxuICAgKi9cbiAgcHJvdGVjdGVkIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBBdHRyaWJ1dGUoJ25hbWUnKSBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIEBBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJykgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgLyoqXG4gICAqIExpZmVjeWNsZSBob29rIGNhbGxlZCBhIG1vbWVudCBiZWZvcmUgdGhlIGNvbXBvbmVudCBpcyBjcmVhdGVkLlxuICAgKiBDaGVjayBpZiB0aGUgcHJlc2VudGF0aW9uIGlzICdkYXRlLXRpbWUnIHRoZW4gdGhlIGRhdGUgZm9ybWF0IHNob3VsZCBiZSBjaGFuZ2VkIHRvIGRkIExMTCB5eXl5IEhIOm1tLlxuICAgKi9cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWR7XG4gICAgaWYgKHRoaXMucHJlc2VudGF0aW9uID09PSAnZGF0ZS10aW1lJykgdGhpcy5kYXRlRm9ybWF0ID0gYCR7IHRoaXMuZGF0ZUZvcm1hdCB9IEhIOm1tYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZGF0ZSBpbnB1dCB2YWx1ZSBjaGFuZ2VzLlxuICAgKiBAcGFyYW0geyhfdmFsOiBhbnkpID0+IHZvaWR9IGZuIC0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHZhbHVlIGNoYW5nZXMuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBkYXRlIGlucHV0IGlzIHRvdWNoZWQuXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gZm4gLSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgdG91Y2ggZXZlbnRzLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkeyB0aGlzLm9uVG91Y2hlZCA9IGZuOyB9XG5cbiAgLyoqXG4gICAqIFdyaXRlcyBhIG5ldyB2YWx1ZSB0byB0aGUgZGF0ZSBpbnB1dC5cbiAgICogQHBhcmFtIHsqfSB2YWwgLSBUaGUgbmV3IHZhbHVlIHRvIGJlIHNldC5cbiAgICovXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbDogYW55KTogdm9pZHsgXG4gICAgdGhpcy52YWx1ZSA9IHZhbDsgXG4gICAgdGhpcy5jaC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgZGF0ZSBpbnB1dC5cbiAgICogQHBhcmFtIHtib29sZWFufSBkIC0gV2hldGhlciB0aGUgZGF0ZSBpbnB1dCBzaG91bGQgYmUgZGlzYWJsZWQgb3Igbm90LlxuICAgKi9cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGU/KGQ6IGJvb2xlYW4pOiB2b2lkeyBcbiAgICB0aGlzLmRpc2FibGVkID0gZDsgXG4gICAgdGhpcy5jaC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGRhdGUgaW5wdXQuXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RDb250cm9sfSBjb250cm9sIC0gVGhlIGFic3RyYWN0IGNvbnRyb2wgcmVwcmVzZW50aW5nIHRoZSBkYXRlIGlucHV0LlxuICAgKiBAcmV0dXJucyB7KFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKX0gLSBWYWxpZGF0aW9uIGVycm9ycyBpZiBhbnksIG90aGVyd2lzZSBudWxsLlxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxse1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBjb250cm9sO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGhhbmRsZXIgZm9yIGRhdGUgY2hhbmdlcyBpbiB0aGUgZGF0ZSBpbnB1dC5cbiAgICogSWYgbm90IHRvdWNoZWQsIG1hcmtzIHRoZSBpbnB1dCBhcyB0b3VjaGVkLlxuICAgKiBJZiBub3QgZGlzYWJsZWQsIHVwZGF0ZXMgdGhlIHZhbHVlLCB0cmlnZ2VycyBjaGFuZ2UgZGV0ZWN0aW9uLCBhbmQgZW1pdHMgdGhlIGNoYW5nZSBldmVudC5cbiAgICogVXBkYXRlcyB0aGUgZXJyb3IgbWVzc2FnZSBiYXNlZCBvbiBmb3JtIGNvbnRyb2wgZXJyb3JzIGFuZCBsYWJlbC5cbiAgICogQHBhcmFtIHthbnl9IHBhcmFtMCAtIEV2ZW50IGRldGFpbCBjb250YWluaW5nIHRoZSBuZXcgZGF0ZSB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBjaGFuZ2VEYXRlKHsgZGV0YWlsOiB7IHZhbHVlIH19OiBhbnkpOiB2b2lke1xuICAgIGlmICghdGhpcy5pc1RvdWNoZWQpIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLmNoLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5lcnJvck1zZyA9IGdldEZvcm1FcnJvck1lc3NhZ2UodGhpcy5mb3JtQ29udHJvbC5lcnJvcnMsIHRoaXMubGFiZWwpO1xuICAgIH1cbiAgfVxufVxuIiwiPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ljb25dXCIgLz5cbiAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbjwvbGFiZWw+XG5cbjxpbnB1dCByZWFkb25seSB0eXBlPVwidGV4dFwiIGlkPVwie3sgbmFtZSB9fS1kYXRlXCIgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlciB9fVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1cnNvci1wb2ludGVyXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCIgW3ZhbHVlXT1cInZhbHVlIHwgZGF0ZTpkYXRlRm9ybWF0IFwiPlxuPGlvbi1pY29uIG5hbWU9XCJjYWxlbmRhclwiIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgZnMtNCBjdXJzb3ItcG9pbnRlclwiIC8+XG5cbjxpb24tbW9kYWwgdHJpZ2dlcj1cInt7IG5hbWUgfX0tZGF0ZVwiPlxuICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgPGlvbi1kYXRldGltZSBtb2RlPVwibWRcIiBbcHJlc2VudGF0aW9uXT1cInByZXNlbnRhdGlvblwiIHZhbHVlPVwie3sgdmFsdWUgfX1cIiBbc2hvd0RlZmF1bHRCdXR0b25zXT1cInRydWVcIiAoaW9uQ2hhbmdlKT1cImNoYW5nZURhdGUoJGV2ZW50KVwiIC8+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuPGxhYmVsICpuZ0lmPVwiZXJyb3JNc2dcIiBjbGFzcz1cImlzLWludmFsaWRcIj57eyBlcnJvck1zZyB9fTwvbGFiZWw+XG4iXX0=
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9kYXRlL2Zvcm0tZGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvZGF0ZS9mb3JtLWRhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF5QyxhQUFhLEVBQUUsaUJBQWlCLEVBQStCLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEksT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBNEJyRCxNQUFNLE9BQU8saUJBQWlCO0lBa0Y1QixZQUM0QixJQUFZLEVBQ0wsV0FBbUIsRUFDakMsRUFBcUI7UUFGZCxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ0wsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDakMsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUF4RTFCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFPMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQU8xQixpQkFBWSxHQUF5QixNQUFNLENBQUM7UUFPckQsY0FBUyxHQUFZLEtBQUssQ0FBQztRQU8zQixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBT25CLGVBQVUsR0FBVSxFQUFFLENBQUM7UUFPdkIsZUFBVSxHQUFXLGFBQWEsQ0FBQztRQW1CaEMsYUFB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QkFDL0I7d0JBQ0Q7NEJBQ0UsS0FBSyxFQUFFLElBQUk7NEJBQ1gsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsbUJBQW1CO3lCQUMvQjtxQkFDRjs7MEJBcUZFLFNBQVM7MkJBQUMsTUFBTTs7MEJBQ2hCLFNBQVM7MkJBQUMsYUFBYTt5RUE5RVYsS0FBSztzQkFBcEIsS0FBSztnQkFPVSxRQUFRO3NCQUF2QixLQUFLO2dCQU9VLFFBQVE7c0JBQXZCLEtBQUs7Z0JBT1UsWUFBWTtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0dHJpYnV0ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uaWNNb2R1bGUgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBnZXRGb3JtRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd1cC1kYXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tZGF0ZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZC1ibG9jayBwb3NpdGlvbi1yZWxhdGl2ZSdcbiAgfSxcbiAgaW1wb3J0czogW1xuICAgIElvbmljTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZVxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IEZvcm1EYXRlQ29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogRm9ybURhdGVDb21wb25lbnRcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRm9ybURhdGVDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSBmb3IgdGhlIGxhYmVsIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBpbnB1dC5cbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBsYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogSW5wdXQgdmFyaWFibGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRhdGUgaW5wdXQgaXMgcmVxdWlyZWQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBkYXRlIGlucHV0IGlzIGRpc2FibGVkLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZGF0ZSBwaWNrZXIgaXMgZGF0ZSBvbmx5IG9yIGRhdGUgYW5kIHRpbWUuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdkYXRlJ1xuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHByZXNlbnRhdGlvbjogJ2RhdGUnIHwgJ2RhdGUtdGltZScgPSAnZGF0ZSc7XG5cbiAgLyoqXG4gICAqIEJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRhdGUgaW5wdXQgaGFzIGJlZW4gdG91Y2hlZC5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwdWJsaWMgaXNUb3VjaGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgZGF0ZSBpbnB1dC5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIHB1YmxpYyB2YWx1ZTogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgbG9jYWxpemF0aW9uIGRhdGUuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBwdWJsaWMgbG9jYWxWYWx1ZTogc3RyaW5nPSAnJztcblxuICAvKipcbiAgICogVGhlIGZvcm1hdCBvZiBkYXRlLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnZGQgTExMIHl5eXknXG4gICAqL1xuICBwdWJsaWMgZGF0ZUZvcm1hdDogc3RyaW5nID0gJ2RkIExMTCB5eXl5JztcblxuICAvKipcbiAgICogRXJyb3IgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGUgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcHVibGljIGVycm9yTXNnITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBpbnB1dC5cbiAgICogQHR5cGUge0Fic3RyYWN0Q29udHJvbH1cbiAgICovXG4gIHByb3RlY3RlZCBmb3JtQ29udHJvbCE6IEFic3RyYWN0Q29udHJvbDtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHZhbHVlIGNoYW5nZXMgaW4gdGhlIGRhdGUgaW5wdXQuXG4gICAqIEB0eXBlIHsoX3ZhbDogYW55KSA9PiB2b2lkfVxuICAgKi9cbiAgcHJvdGVjdGVkIG9uQ2hhbmdlOiAoX3ZhbDogYW55KSA9PiB2b2lkID0gKF92YWw6IGFueSkgPT4ge307XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB0b3VjaCBldmVudHMgaW4gdGhlIGRhdGUgaW5wdXQuXG4gICAqIEB0eXBlIHsoKSA9PiB2b2lkfVxuICAgKi9cbiAgcHJvdGVjdGVkIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBBdHRyaWJ1dGUoJ25hbWUnKSBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIEBBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJykgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgLyoqXG4gICAqIExpZmVjeWNsZSBob29rIGNhbGxlZCBhIG1vbWVudCBiZWZvcmUgdGhlIGNvbXBvbmVudCBpcyBjcmVhdGVkLlxuICAgKiBDaGVjayBpZiB0aGUgcHJlc2VudGF0aW9uIGlzICdkYXRlLXRpbWUnIHRoZW4gdGhlIGRhdGUgZm9ybWF0IHNob3VsZCBiZSBjaGFuZ2VkIHRvIGRkIExMTCB5eXl5IEhIOm1tLlxuICAgKi9cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWR7XG4gICAgaWYgKHRoaXMucHJlc2VudGF0aW9uID09PSAnZGF0ZS10aW1lJykgdGhpcy5kYXRlRm9ybWF0ID0gYCR7IHRoaXMuZGF0ZUZvcm1hdCB9IEhIOm1tYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZGF0ZSBpbnB1dCB2YWx1ZSBjaGFuZ2VzLlxuICAgKiBAcGFyYW0geyhfdmFsOiBhbnkpID0+IHZvaWR9IGZuIC0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHZhbHVlIGNoYW5nZXMuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBkYXRlIGlucHV0IGlzIHRvdWNoZWQuXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gZm4gLSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgdG91Y2ggZXZlbnRzLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkeyB0aGlzLm9uVG91Y2hlZCA9IGZuOyB9XG5cbiAgLyoqXG4gICAqIFdyaXRlcyBhIG5ldyB2YWx1ZSB0byB0aGUgZGF0ZSBpbnB1dC5cbiAgICogQ2FsY3VsYXRlIGFuZCB3cml0ZXMgdGhlIGxvY2FsIHZhbHVlIGZvciBpb25pYyBkYXRldGltZSBwaWNrZXIuXG4gICAqIEBwYXJhbSB7Kn0gdmFsIC0gVGhlIG5ldyB2YWx1ZSB0byBiZSBzZXQuXG4gICAqL1xuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWw6IGFueSk6IHZvaWR7IFxuICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgXG4gICAgbGV0IGxvY2FsVGltZSA9IG5ldyBEYXRlKHZhbCk7XG5cbiAgICBsb2NhbFRpbWUgPSBuZXcgRGF0ZShsb2NhbFRpbWUuZ2V0VGltZSgpIC0gKGxvY2FsVGltZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApKTtcbiAgICB0aGlzLmxvY2FsVmFsdWUgPSBsb2NhbFRpbWUudG9JU09TdHJpbmcoKTtcblxuICAgIHRoaXMuY2gubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGRhdGUgaW5wdXQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZCAtIFdoZXRoZXIgdGhlIGRhdGUgaW5wdXQgc2hvdWxkIGJlIGRpc2FibGVkIG9yIG5vdC5cbiAgICovXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlPyhkOiBib29sZWFuKTogdm9pZHsgXG4gICAgdGhpcy5kaXNhYmxlZCA9IGQ7IFxuICAgIHRoaXMuY2gubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBkYXRlIGlucHV0LlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0Q29udHJvbH0gY29udHJvbCAtIFRoZSBhYnN0cmFjdCBjb250cm9sIHJlcHJlc2VudGluZyB0aGUgZGF0ZSBpbnB1dC5cbiAgICogQHJldHVybnMgeyhWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCl9IC0gVmFsaWRhdGlvbiBlcnJvcnMgaWYgYW55LCBvdGhlcndpc2UgbnVsbC5cbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbHtcbiAgICB0aGlzLmZvcm1Db250cm9sID0gY29udHJvbDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBoYW5kbGVyIGZvciBkYXRlIGNoYW5nZXMgaW4gdGhlIGRhdGUgaW5wdXQuXG4gICAqIElmIG5vdCB0b3VjaGVkLCBtYXJrcyB0aGUgaW5wdXQgYXMgdG91Y2hlZC5cbiAgICogSWYgbm90IGRpc2FibGVkLCB1cGRhdGVzIHRoZSB2YWx1ZSwgdHJpZ2dlcnMgY2hhbmdlIGRldGVjdGlvbiwgYW5kIGVtaXRzIHRoZSBjaGFuZ2UgZXZlbnQuXG4gICAqIFVwZGF0ZXMgdGhlIGVycm9yIG1lc3NhZ2UgYmFzZWQgb24gZm9ybSBjb250cm9sIGVycm9ycyBhbmQgbGFiZWwuXG4gICAqIEBwYXJhbSB7YW55fSBwYXJhbTAgLSBFdmVudCBkZXRhaWwgY29udGFpbmluZyB0aGUgbmV3IGRhdGUgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlRGF0ZSh7IGRldGFpbDogeyB2YWx1ZSB9fTogYW55KTogdm9pZHtcbiAgICBpZiAoIXRoaXMuaXNUb3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubG9jYWxWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5jaC5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuZXJyb3JNc2cgPSBnZXRGb3JtRXJyb3JNZXNzYWdlKHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzLCB0aGlzLmxhYmVsKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpY29uXVwiIC8+XG4gICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG48L2xhYmVsPlxuXG48aW5wdXQgcmVhZG9ubHkgdHlwZT1cInRleHRcIiBpZD1cInt7IG5hbWUgfX0tZGF0ZVwiIHBsYWNlaG9sZGVyPVwie3sgcGxhY2Vob2xkZXIgfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXJzb3ItcG9pbnRlclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFt2YWx1ZV09XCJ2YWx1ZSB8IGRhdGU6ZGF0ZUZvcm1hdCBcIj5cbjxpb24taWNvbiBuYW1lPVwiY2FsZW5kYXJcIiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGZzLTQgY3Vyc29yLXBvaW50ZXJcIiAvPlxuXG48aW9uLW1vZGFsIHRyaWdnZXI9XCJ7eyBuYW1lIH19LWRhdGVcIj5cbiAgICA8bmctdGVtcGxhdGU+XG4gICAgICAgIDxpb24tZGF0ZXRpbWUgbW9kZT1cIm1kXCIgaG91ckN5Y2xlPVwiaDIzXCIgW3ByZXNlbnRhdGlvbl09XCJwcmVzZW50YXRpb25cIiB2YWx1ZT1cInt7IGxvY2FsVmFsdWUgfX1cIiBbc2hvd0RlZmF1bHRCdXR0b25zXT1cInRydWVcIiAoaW9uQ2hhbmdlKT1cImNoYW5nZURhdGUoJGV2ZW50KVwiIC8+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuPGxhYmVsICpuZ0lmPVwiZXJyb3JNc2dcIiBjbGFzcz1cImlzLWludmFsaWRcIj57eyBlcnJvck1zZyB9fTwvbGFiZWw+XG4iXX0=
@@ -25,10 +25,10 @@ export class DragNDropDirective {
25
25
  if (files.length > 0)
26
26
  this.fileDropped.emit(files);
27
27
  }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: DragNDropDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
29
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: DragNDropDirective, isStandalone: true, selector: "[upDragNDrop]", outputs: { fileDropped: "fileDropped" }, host: { listeners: { "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" } }, ngImport: i0 }); }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DragNDropDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
29
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.3", type: DragNDropDirective, isStandalone: true, selector: "[upDragNDrop]", outputs: { fileDropped: "fileDropped" }, host: { listeners: { "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" } }, ngImport: i0 }); }
30
30
  }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: DragNDropDirective, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DragNDropDirective, decorators: [{
32
32
  type: Directive,
33
33
  args: [{
34
34
  standalone: true,
@@ -33,8 +33,8 @@ export class FormImagePickerComponent {
33
33
  this.onChange.emit(files[0]);
34
34
  }
35
35
  }
36
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: FormImagePickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
37
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: FormImagePickerComponent, isStandalone: true, selector: "up-image-picker", inputs: { ratio: "ratio", label: "label", required: "required" }, outputs: { onChange: "onChange" }, host: { classAttribute: "d-block" }, providers: [
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: FormImagePickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
37
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: FormImagePickerComponent, isStandalone: true, selector: "up-image-picker", inputs: { ratio: "ratio", label: "label", required: "required" }, outputs: { onChange: "onChange" }, host: { classAttribute: "d-block" }, providers: [
38
38
  {
39
39
  multi: true,
40
40
  provide: NG_VALUE_ACCESSOR,
@@ -42,7 +42,7 @@ export class FormImagePickerComponent {
42
42
  },
43
43
  ], ngImport: i0, template: "<div class=\"flex-shrink-0 mb-4\">\n <label class=\"mb-2 d-flex align-items-center form-label\">\n <span class=\"text-danger me-2\" *ngIf=\"required\">&ast;</span>\n \n <ng-content select=\"[icon]\"/>\n <span>{{ label }}</span>\n </label>\n \n <div class=\"img-container position-relative border rounded\" [ngStyle]=\"{ 'aspect-ratio': ratio }\" upDragNDrop (fileDropped)=\"selectPhoto($event)\"> \n <img *ngIf=\"imgSrc\" alt=\"{{ label }}\" class=\"rounded\" width=\"100%\" height=\"100%\" src=\"{{ imgSrc }}\" />\n \n <div class=\"upload-icon rounded position-absolute text-white align-items-center justify-content-center px-3 py-2 w-100\" [ngStyle]=\"{ 'aspect-ratio': ratio }\" (click)=\"file.click();\">\n <ion-icon class=\"upload-icon\" name=\"cloud-upload\" title=\"Drop file or click to browse\" *ngIf=\"!imgSrc; else deleteIcon\" />\n \n <ng-template #deleteIcon>\n <div class=\"position-absolute display-flex justify-content-center rounded p-1 d-btn\">\n <ion-icon name=\"trash\" class=\"text-red-600\" title=\"Clear Image\" (click)=\"clear($event)\" />\n </div>\n </ng-template>\n </div>\n \n <input type=\"file\" hidden accept=\"image/png, image/jpeg, image/jpg\" multiple=\"false\" (change)=\"selectPhoto($event)\" #file />\n </div>\n</div>\n", styles: ["ion-icon{font-size:24px}.img-container{width:250px;border-style:dashed!important}.img-container:hover .upload-icon{display:flex}.img-container:not(:has(img)):before{content:\"Choose file or Drag here.\";top:50%;left:50%;font-size:12px;position:absolute;color:gray;text-align:center;transform:translate(-50%,-50%)}.upload-icon:not(ion-icon){background:#00000050}.upload-icon{top:0;left:0;display:none;cursor:pointer}.d-btn{right:10px;bottom:10px;width:32px;height:32px;background-color:#fee2e2}.d-btn ion-icon{color:#dc2626}.dragging{border:2px dashed #ED6B26!important}.dragging:not(:has(img)):before{content:\"Drop\";font-size:32px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: DragNDropDirective, selector: "[upDragNDrop]", outputs: ["fileDropped"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
44
44
  }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: FormImagePickerComponent, decorators: [{
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: FormImagePickerComponent, decorators: [{
46
46
  type: Component,
47
47
  args: [{ standalone: true, selector: 'up-image-picker', changeDetection: ChangeDetectionStrategy.OnPush, host: {
48
48
  class: 'd-block'