@ohioepa/oepa-ui-lib 2.0.11 → 2.0.13

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 (24) hide show
  1. package/esm2022/lib/account-search-modal/account-search-modal.component.mjs +1 -1
  2. package/esm2022/lib/action-btn/action-btn.component.mjs +14 -4
  3. package/esm2022/lib/action-btn-modal/action-btn-modal.component.mjs +1 -1
  4. package/esm2022/lib/confirmation-modal/confirmation-modal.component.mjs +1 -1
  5. package/esm2022/lib/entity/organization-create-modal/organization-create-modal.component.mjs +1 -1
  6. package/esm2022/lib/entity/organization-search-modal/organization-search-modal.component.mjs +1 -1
  7. package/esm2022/lib/entity/person-create-modal/person-create-modal.component.mjs +1 -1
  8. package/esm2022/lib/entity/person-search-modal/person-search-modal.component.mjs +1 -1
  9. package/esm2022/lib/entity/place-search-modal/place-search-modal.component.mjs +1 -1
  10. package/esm2022/lib/notes-modal/notes-modal.component.mjs +1 -1
  11. package/esm2022/lib/shopping-cart/shopping-cart-view/shopping-cart-view.component.mjs +1 -1
  12. package/esm2022/lib/start-end-timepicker/start-end-timepicker.component.mjs +31 -13
  13. package/esm2022/lib/table/table-data-cell/table-data-cell.component.mjs +1 -1
  14. package/esm2022/lib/table/table.component.mjs +14 -4
  15. package/esm2022/lib/timepicker/timepicker.component.mjs +28 -10
  16. package/fesm2022/ohioepa-oepa-ui-lib.mjs +96 -38
  17. package/fesm2022/ohioepa-oepa-ui-lib.mjs.map +1 -1
  18. package/lib/action-btn/action-btn.component.d.ts +5 -1
  19. package/lib/start-end-timepicker/start-end-timepicker.component.d.ts +3 -1
  20. package/lib/table/table.component.d.ts +6 -1
  21. package/lib/timepicker/timepicker.component.d.ts +3 -1
  22. package/ohioepa-oepa-ui-lib-2.0.13.tgz +0 -0
  23. package/package.json +1 -1
  24. package/ohioepa-oepa-ui-lib-2.0.11.tgz +0 -0
@@ -148,7 +148,7 @@ export class NotesModalComponent {
148
148
  this.bsModalRef.hide();
149
149
  }
150
150
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NotesModalComponent, deps: [{ token: i1.FormBuilder }, { token: i2.BsModalRef }, { token: i2.BsModalService }, { token: i3.OepaMappingService }], target: i0.ɵɵFactoryTarget.Component });
151
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NotesModalComponent, selector: "oepa-notes-modal", inputs: { loginName: "loginName", deleteAnyNoteAllowed: "deleteAnyNoteAllowed", deleteOwnNoteAllowed: "deleteOwnNoteAllowed", createNoteAllowed: "createNoteAllowed", external: "external", errorMessage: "errorMessage", notes: "notes", defaultNoteType: "defaultNoteType" }, outputs: { onAddNote: "onAddNote", onDeleteNote: "onDeleteNote" }, ngImport: i0, template: "<div class=\"modal-header\">\n\t<h1 class=\"modal-title\" id=\"modalTitle\">Notes</h1>\n</div>\n\n<div class=\"modal-body\">\n\t\n <div *ngIf=\"errorMessage\">\n\t\t<div class=\"alert alert-danger\" role=\"alert\">{{ errorMessage }}</div>\n </div>\n\n <div *ngIf=\"data.length === 0\" class=\"alert alert-info text-center\"><em>There are no notes defined.</em></div>\n\n <oepa-table [config]=\"tblConfig\" [data]=\"data\" [header]=\"header\" (actionClicked)=\"noteActionClicked($event)\"></oepa-table>\n\n \t\n\t<form *ngIf=\"createNoteAllowed\" class=\"form-horizontal\">\n \n <hr>\n\t\n <div [formGroup]=\"newNoteForm\" class=\"form-group\">\n\n <div class=\"row\">\n <label class=\"col-sm-2 control-label\">Type:</label>\n <div class=\"col-sm-10\">\n <span class=\"form-control\" id=\"NoteTypeText\">{{newNoteType.name}}</span>\n </div>\n </div>\n\n <div class=\"row\">\n <label class=\"col-sm-12 control-label\"></label> \n </div>\n\n <div class=\"row\">\n <label class=\"col-sm-2 control-label\" for=\"NoteInput\">Note:</label>\n <div class=\"col-sm-10\">\n <input class=\"form-control\" type=\"input\" formControlName=\"newNoteText\" id=\"NoteInput\" maxlength=\"2000\"/>\n </div>\n </div>\n\n <div class=\"row\">\n <label class=\"col-sm-12 control-label\"></label> \n </div>\n\n <div class=\"row\">\n <label class=\"col-sm-2 control-label\"></label>\n <div class=\"col-sm-10\">\n <span *ngIf=\"isCreating\"><span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n <button *ngIf=\"!isCreating\" class=\"btn btn-primary mr-1\" id=\"AddNoteBtn\" (click)=\"createNote()\" [disabled]=\"newNoteForm.invalid\" aria-label=\"Add Note\">\n <span>Add Note</span>\n </button>\n </div>\n </div>\n\n\n </div> \n </form> <!-- form -->\n \n</div>\n\t\n<div class=\"modal-footer\">\n\t<button class=\"btn btn-primary mr-1\" id=\"DoneBtn\" (click)=\"done()\" aria-label=\"Done\">Done</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.TableComponent, selector: "oepa-table", inputs: ["tableId", "config", "complexHeader", "header", "customBtnLabel", "customBtnVisible", "customBtnEnabled", "data", "totalRow"], outputs: ["cellClicked", "actionClicked", "rowSelected", "customBtnClicked"] }] });
151
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NotesModalComponent, selector: "oepa-notes-modal", inputs: { loginName: "loginName", deleteAnyNoteAllowed: "deleteAnyNoteAllowed", deleteOwnNoteAllowed: "deleteOwnNoteAllowed", createNoteAllowed: "createNoteAllowed", external: "external", errorMessage: "errorMessage", notes: "notes", defaultNoteType: "defaultNoteType" }, outputs: { onAddNote: "onAddNote", onDeleteNote: "onDeleteNote" }, ngImport: i0, template: "<div class=\"modal-header\">\n\t<h1 class=\"modal-title\" id=\"modalTitle\">Notes</h1>\n</div>\n\n<div class=\"modal-body\">\n\t\n <div *ngIf=\"errorMessage\">\n\t\t<div class=\"alert alert-danger\" role=\"alert\">{{ errorMessage }}</div>\n </div>\n\n <div *ngIf=\"data.length === 0\" class=\"alert alert-info text-center\"><em>There are no notes defined.</em></div>\n\n <oepa-table [config]=\"tblConfig\" [data]=\"data\" [header]=\"header\" (actionClicked)=\"noteActionClicked($event)\"></oepa-table>\n\n \t\n\t<form *ngIf=\"createNoteAllowed\" class=\"form-horizontal\">\n \n <hr>\n\t\n <div [formGroup]=\"newNoteForm\" class=\"form-group\">\n\n <div class=\"row\">\n <label class=\"col-sm-2 control-label\">Type:</label>\n <div class=\"col-sm-10\">\n <span class=\"form-control\" id=\"NoteTypeText\">{{newNoteType.name}}</span>\n </div>\n </div>\n\n <div class=\"row\">\n <label class=\"col-sm-12 control-label\"></label> \n </div>\n\n <div class=\"row\">\n <label class=\"col-sm-2 control-label\" for=\"NoteInput\">Note:</label>\n <div class=\"col-sm-10\">\n <input class=\"form-control\" type=\"input\" formControlName=\"newNoteText\" id=\"NoteInput\" maxlength=\"2000\"/>\n </div>\n </div>\n\n <div class=\"row\">\n <label class=\"col-sm-12 control-label\"></label> \n </div>\n\n <div class=\"row\">\n <label class=\"col-sm-2 control-label\"></label>\n <div class=\"col-sm-10\">\n <span *ngIf=\"isCreating\"><span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n <button *ngIf=\"!isCreating\" class=\"btn btn-primary mr-1\" id=\"AddNoteBtn\" (click)=\"createNote()\" [disabled]=\"newNoteForm.invalid\" aria-label=\"Add Note\">\n <span>Add Note</span>\n </button>\n </div>\n </div>\n\n\n </div> \n </form> <!-- form -->\n \n</div>\n\t\n<div class=\"modal-footer\">\n\t<button class=\"btn btn-primary mr-1\" id=\"DoneBtn\" (click)=\"done()\" aria-label=\"Done\">Done</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.TableComponent, selector: "oepa-table", inputs: ["tableId", "config", "complexHeader", "header", "customBtnLabel", "customBtnVisible", "customBtnEnabled", "data", "totalRow"], outputs: ["actionDropdownOpenChange", "cellClicked", "actionClicked", "rowSelected", "customBtnClicked"] }] });
152
152
  }
153
153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NotesModalComponent, decorators: [{
154
154
  type: Component,
@@ -182,7 +182,7 @@ export class ShoppingCartViewComponent {
182
182
  }
183
183
  }
184
184
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ShoppingCartViewComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.BsModalService }, { token: i3.ShoppingCartService }], target: i0.ɵɵFactoryTarget.Component });
185
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ShoppingCartViewComponent, selector: "oepa-shopping-cart-view", ngImport: i0, template: "<div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\" col-sm-12\">\n <h2><b>{{title}}</b></h2>\n </div>\n <div *ngIf=\"loading || empty\" class=\"col-sm-12 text-center\">\n <div class=\" alert alert-info \">\n <h3><em>{{ loading ? 'Loading...' : 'Cart is empty' }}</em></h3>\n <img *ngIf=\"loading\" class=\"oepa-icon\" src=\"{{imageRoot}}/blue-load.gif\" />\n </div>\n </div>\n <div *ngIf=\"!loading && !empty\" class=\"col-sm-12\">\n <oepa-table [config]=\"tblConfig\" [data]=\"tblData\" [header]=\"tblHeader\" tableId=\"ShoppingCartTable\" (cellClicked)=\"onCellClick($event)\"></oepa-table>\n </div>\n <div *ngIf=\"errorMessage\" class=\"col-sm-12\">\n <div class=\"alert alert-danger\">{{errorMessage}}</div>\n </div>\n <div *ngIf=\"!checkOutInProgress\" class=\"col-12 text-center\">\n <button class=\"btn btn-primary mr-2\" id=\"returnToPageButton\" (click)=\"goBack()\" [attr.aria-label]=\"returnLabel\">\n {{returnLabel}}</button>\n <button *ngIf=\"!empty\" class=\"btn btn-primary mr-2\" id=\"checkoutBtn\" (click)=\"onCheckout()\" aria-label=\"Checkout\">\n Checkout</button>\n </div>\n <div *ngIf=\"checkOutInProgress\" class=\"col-12 text-center\">\n <div class=\"alert alert-info\">\n <span class=\"spinner-border text-primary\" role=\"status\"></span>\n Checking out...\n </div>\n </div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.TableComponent, selector: "oepa-table", inputs: ["tableId", "config", "complexHeader", "header", "customBtnLabel", "customBtnVisible", "customBtnEnabled", "data", "totalRow"], outputs: ["cellClicked", "actionClicked", "rowSelected", "customBtnClicked"] }] });
185
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ShoppingCartViewComponent, selector: "oepa-shopping-cart-view", ngImport: i0, template: "<div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\" col-sm-12\">\n <h2><b>{{title}}</b></h2>\n </div>\n <div *ngIf=\"loading || empty\" class=\"col-sm-12 text-center\">\n <div class=\" alert alert-info \">\n <h3><em>{{ loading ? 'Loading...' : 'Cart is empty' }}</em></h3>\n <img *ngIf=\"loading\" class=\"oepa-icon\" src=\"{{imageRoot}}/blue-load.gif\" />\n </div>\n </div>\n <div *ngIf=\"!loading && !empty\" class=\"col-sm-12\">\n <oepa-table [config]=\"tblConfig\" [data]=\"tblData\" [header]=\"tblHeader\" tableId=\"ShoppingCartTable\" (cellClicked)=\"onCellClick($event)\"></oepa-table>\n </div>\n <div *ngIf=\"errorMessage\" class=\"col-sm-12\">\n <div class=\"alert alert-danger\">{{errorMessage}}</div>\n </div>\n <div *ngIf=\"!checkOutInProgress\" class=\"col-12 text-center\">\n <button class=\"btn btn-primary mr-2\" id=\"returnToPageButton\" (click)=\"goBack()\" [attr.aria-label]=\"returnLabel\">\n {{returnLabel}}</button>\n <button *ngIf=\"!empty\" class=\"btn btn-primary mr-2\" id=\"checkoutBtn\" (click)=\"onCheckout()\" aria-label=\"Checkout\">\n Checkout</button>\n </div>\n <div *ngIf=\"checkOutInProgress\" class=\"col-12 text-center\">\n <div class=\"alert alert-info\">\n <span class=\"spinner-border text-primary\" role=\"status\"></span>\n Checking out...\n </div>\n </div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.TableComponent, selector: "oepa-table", inputs: ["tableId", "config", "complexHeader", "header", "customBtnLabel", "customBtnVisible", "customBtnEnabled", "data", "totalRow"], outputs: ["actionDropdownOpenChange", "cellClicked", "actionClicked", "rowSelected", "customBtnClicked"] }] });
186
186
  }
187
187
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ShoppingCartViewComponent, decorators: [{
188
188
  type: Component,
@@ -3,7 +3,6 @@ import * as i0 from "@angular/core";
3
3
  import * as i1 from "@angular/forms";
4
4
  import * as i2 from "@ohioepa/oepa-common-lib";
5
5
  import * as i3 from "@angular/common";
6
- import * as i4 from "ngx-bootstrap/timepicker";
7
6
  export class StartEndTimepickerComponent {
8
7
  fb;
9
8
  idService;
@@ -17,17 +16,17 @@ export class StartEndTimepickerComponent {
17
16
  isDisabled = false;
18
17
  defaultTimeRange = {};
19
18
  offsetHours = 0;
20
- form;
19
+ group;
21
20
  validStart = true;
22
21
  validEnd = true;
23
22
  constructor(fb, idService) {
24
23
  this.fb = fb;
25
24
  this.idService = idService;
26
- this.form = this.fb.group({
25
+ this.group = this.fb.group({
27
26
  start: null,
28
27
  end: null
29
28
  });
30
- this.form.get("start")?.valueChanges.subscribe(time => {
29
+ this.group.get("start")?.valueChanges.subscribe(time => {
31
30
  if (this.validStart) {
32
31
  let tmpTime = new Date(time);
33
32
  tmpTime.setHours(time.getHours() - this.offsetHours);
@@ -42,7 +41,7 @@ export class StartEndTimepickerComponent {
42
41
  }
43
42
  this.timeRangeInfoChange.emit(this.timeRangeInfo);
44
43
  });
45
- this.form.get("end")?.valueChanges.subscribe(time => {
44
+ this.group.get("end")?.valueChanges.subscribe(time => {
46
45
  if (this.validEnd) {
47
46
  let tmpTime = new Date(time);
48
47
  tmpTime.setHours(time.getHours() - this.offsetHours);
@@ -65,10 +64,10 @@ export class StartEndTimepickerComponent {
65
64
  this.validEnd = event;
66
65
  }
67
66
  ngOnInit() {
68
- if (this.form) {
69
- this.startComponentId = this.idService.getComponentId(this.form);
67
+ if (this.group) {
68
+ this.startComponentId = this.idService.getComponentId(this.group);
70
69
  this.startComponentId += (this.startComponentId.length > 0 ? '_' : '') + ('StartTime');
71
- this.endComponentId = this.idService.getComponentId(this.form);
70
+ this.endComponentId = this.idService.getComponentId(this.group);
72
71
  this.endComponentId += (this.endComponentId.length > 0 ? '_' : '') + ('EndTime');
73
72
  }
74
73
  else {
@@ -85,12 +84,12 @@ export class StartEndTimepickerComponent {
85
84
  this.timeRangeInfo.endSecond = this.defaultTimeRange.endSecond;
86
85
  }
87
86
  if (this.timeRangeInfo.startHour) {
88
- this.form.patchValue({
87
+ this.group.patchValue({
89
88
  start: this.setTime(this.timeRangeInfo.startHour, this.timeRangeInfo.startMinute || 0),
90
89
  });
91
90
  }
92
91
  if (this.timeRangeInfo.endHour) {
93
- this.form.patchValue({
92
+ this.group.patchValue({
94
93
  end: this.setTime(this.timeRangeInfo.endHour, this.timeRangeInfo.endMinute || 0),
95
94
  });
96
95
  }
@@ -102,12 +101,31 @@ export class StartEndTimepickerComponent {
102
101
  date.setSeconds(0);
103
102
  return date;
104
103
  }
104
+ onTimeChange(event, field) {
105
+ const value = event.target.value; // "HH:mm"
106
+ if (!value) {
107
+ this.group.get(field)?.setValue(null);
108
+ return;
109
+ }
110
+ const [hours, minutes] = value.split(':').map(Number);
111
+ const date = new Date(this.group.get(field)?.value || new Date());
112
+ date.setHours(hours, minutes, 0, 0);
113
+ this.group.get(field)?.setValue(date, { emitEvent: true });
114
+ }
115
+ toTimeString(value) {
116
+ if (!value)
117
+ return '';
118
+ const d = new Date(value);
119
+ const hh = d.getHours().toString().padStart(2, '0');
120
+ const mm = d.getMinutes().toString().padStart(2, '0');
121
+ return `${hh}:${mm}`;
122
+ }
105
123
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StartEndTimepickerComponent, deps: [{ token: i1.FormBuilder }, { token: i2.OepaComponentIdService }], target: i0.ɵɵFactoryTarget.Component });
106
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StartEndTimepickerComponent, selector: "oepa-start-end-timepicker", inputs: { timeRangeInfo: "timeRangeInfo", showValidation: "showValidation", isRequired: "isRequired", isReadOnly: "isReadOnly", isDisabled: "isDisabled", defaultTimeRange: "defaultTimeRange" }, outputs: { timeRangeInfoChange: "timeRangeInfoChange" }, ngImport: i0, template: "<div [formGroup]=\"form\">\n <div class=\"form-group row\">\n <div class=\"col-sm-6\">\n <div class=\"col-md-12 form-group\" [ngClass]=\"{'is-invalid':showValidation && isRequired && !validStart}\">\n <div class=\"input-group\">\n <timepicker formControlName=\"start\" [readonlyInput]=\"isReadOnly\" [id]=\"startComponentId+'_StartTime'\" [disabled]=\"isDisabled\" (isValid)=\"isValidStart($event)\"></timepicker>\n </div>\n <small class=\"help-block\" *ngIf=\"showValidation && isRequired && !validStart\">Time is invalid</small>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <div class=\"col-md-12 form-group\" [ngClass]=\"{'is-invalid':showValidation && isRequired && !validEnd}\">\n <div class=\"input-group\">\n <timepicker formControlName=\"end\" [readonlyInput]=\"isReadOnly\" [id]=\"endComponentId+'_EndTime'\" [disabled]=\"isDisabled\" (isValid)=\"isValidEnd($event)\"></timepicker>\n </div>\n <small class=\"help-block\" *ngIf=\"showValidation && isRequired && !validEnd\">Time is invalid</small>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.TimepickerComponent, selector: "timepicker", inputs: ["hourStep", "minuteStep", "secondsStep", "readonlyInput", "disabled", "mousewheel", "arrowkeys", "showSpinners", "showMeridian", "showMinutes", "showSeconds", "meridians", "min", "max", "hoursPlaceholder", "minutesPlaceholder", "secondsPlaceholder"], outputs: ["isValid", "meridianChange"] }] });
124
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StartEndTimepickerComponent, selector: "oepa-start-end-timepicker", inputs: { timeRangeInfo: "timeRangeInfo", showValidation: "showValidation", isRequired: "isRequired", isReadOnly: "isReadOnly", isDisabled: "isDisabled", defaultTimeRange: "defaultTimeRange" }, outputs: { timeRangeInfoChange: "timeRangeInfoChange" }, ngImport: i0, template: "<div [formGroup]=\"group\">\n <div class=\"form-group row\">\n <div class=\"col-sm-6\">\n <div class=\"col-md-12 form-group\" [ngClass]=\"{'is-invalid':showValidation && isRequired && !validStart}\">\n <div class=\"input-group\">\n <!-- <timepicker formControlName=\"start\" [readonlyInput]=\"isReadOnly\" [id]=\"startComponentId+'_StartTime'\" [disabled]=\"isDisabled\" (isValid)=\"isValidStart($event)\"></timepicker> -->\n <input\n type=\"time\"\n class=\"form-control\"\n [value]=\"toTimeString(group.get('start')?.value)\"\n (change)=\"onTimeChange($event, 'start')\"\n [readonly]=\"isReadOnly\"\n aria-label=\"Start time input\"\n />\n </div>\n <small class=\"help-block\" *ngIf=\"showValidation && isRequired && !validStart\">Time is invalid</small>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <div class=\"col-md-12 form-group\" [ngClass]=\"{'is-invalid':showValidation && isRequired && !validEnd}\">\n <div class=\"input-group\">\n <!-- <timepicker formControlName=\"end\" [readonlyInput]=\"isReadOnly\" [id]=\"endComponentId+'_EndTime'\" [disabled]=\"isDisabled\" (isValid)=\"isValidEnd($event)\"></timepicker> -->\n <input\n type=\"time\"\n class=\"form-control\"\n [value]=\"toTimeString(group.get('end')?.value)\"\n (change)=\"onTimeChange($event, 'end')\"\n [readonly]=\"isReadOnly\"\n aria-label=\"End time input\"\n />\n </div>\n <small class=\"help-block\" *ngIf=\"showValidation && isRequired && !validEnd\">Time is invalid</small>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
107
125
  }
108
126
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StartEndTimepickerComponent, decorators: [{
109
127
  type: Component,
110
- args: [{ selector: 'oepa-start-end-timepicker', template: "<div [formGroup]=\"form\">\n <div class=\"form-group row\">\n <div class=\"col-sm-6\">\n <div class=\"col-md-12 form-group\" [ngClass]=\"{'is-invalid':showValidation && isRequired && !validStart}\">\n <div class=\"input-group\">\n <timepicker formControlName=\"start\" [readonlyInput]=\"isReadOnly\" [id]=\"startComponentId+'_StartTime'\" [disabled]=\"isDisabled\" (isValid)=\"isValidStart($event)\"></timepicker>\n </div>\n <small class=\"help-block\" *ngIf=\"showValidation && isRequired && !validStart\">Time is invalid</small>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <div class=\"col-md-12 form-group\" [ngClass]=\"{'is-invalid':showValidation && isRequired && !validEnd}\">\n <div class=\"input-group\">\n <timepicker formControlName=\"end\" [readonlyInput]=\"isReadOnly\" [id]=\"endComponentId+'_EndTime'\" [disabled]=\"isDisabled\" (isValid)=\"isValidEnd($event)\"></timepicker>\n </div>\n <small class=\"help-block\" *ngIf=\"showValidation && isRequired && !validEnd\">Time is invalid</small>\n </div>\n </div>\n </div>\n</div>\n" }]
128
+ args: [{ selector: 'oepa-start-end-timepicker', template: "<div [formGroup]=\"group\">\n <div class=\"form-group row\">\n <div class=\"col-sm-6\">\n <div class=\"col-md-12 form-group\" [ngClass]=\"{'is-invalid':showValidation && isRequired && !validStart}\">\n <div class=\"input-group\">\n <!-- <timepicker formControlName=\"start\" [readonlyInput]=\"isReadOnly\" [id]=\"startComponentId+'_StartTime'\" [disabled]=\"isDisabled\" (isValid)=\"isValidStart($event)\"></timepicker> -->\n <input\n type=\"time\"\n class=\"form-control\"\n [value]=\"toTimeString(group.get('start')?.value)\"\n (change)=\"onTimeChange($event, 'start')\"\n [readonly]=\"isReadOnly\"\n aria-label=\"Start time input\"\n />\n </div>\n <small class=\"help-block\" *ngIf=\"showValidation && isRequired && !validStart\">Time is invalid</small>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <div class=\"col-md-12 form-group\" [ngClass]=\"{'is-invalid':showValidation && isRequired && !validEnd}\">\n <div class=\"input-group\">\n <!-- <timepicker formControlName=\"end\" [readonlyInput]=\"isReadOnly\" [id]=\"endComponentId+'_EndTime'\" [disabled]=\"isDisabled\" (isValid)=\"isValidEnd($event)\"></timepicker> -->\n <input\n type=\"time\"\n class=\"form-control\"\n [value]=\"toTimeString(group.get('end')?.value)\"\n (change)=\"onTimeChange($event, 'end')\"\n [readonly]=\"isReadOnly\"\n aria-label=\"End time input\"\n />\n </div>\n <small class=\"help-block\" *ngIf=\"showValidation && isRequired && !validEnd\">Time is invalid</small>\n </div>\n </div>\n </div>\n</div>\n" }]
111
129
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.OepaComponentIdService }], propDecorators: { timeRangeInfo: [{
112
130
  type: Input
113
131
  }], timeRangeInfoChange: [{
@@ -123,4 +141,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
123
141
  }], defaultTimeRange: [{
124
142
  type: Input
125
143
  }] } });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtZW5kLXRpbWVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi9zdGFydC1lbmQtdGltZXBpY2tlci9zdGFydC1lbmQtdGltZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL3N0YXJ0LWVuZC10aW1lcGlja2VyL3N0YXJ0LWVuZC10aW1lcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQVUvRSxNQUFNLE9BQU8sMkJBQTJCO0lBbUI1QjtJQUNBO0lBbkJILGdCQUFnQixHQUFHLHlCQUF5QixDQUFDO0lBQzdDLGNBQWMsR0FBRyx5QkFBeUIsQ0FBQztJQUV6QyxhQUFhLEdBQWMsRUFBRSxDQUFDO0lBQzdCLG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7SUFFckQsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixnQkFBZ0IsR0FBYyxFQUFFLENBQUM7SUFFbEMsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNqQixJQUFJLENBQVk7SUFDdkIsVUFBVSxHQUFHLElBQUksQ0FBQztJQUNsQixRQUFRLEdBQUcsSUFBSSxDQUFDO0lBRWhCLFlBQ1UsRUFBZSxFQUNmLFNBQWlDO1FBRGpDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixjQUFTLEdBQVQsU0FBUyxDQUF3QjtRQUV6QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxD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VUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9lcGFDb21wb25lbnRJZFNlcnZpY2UgfSBmcm9tICdAb2hpb2VwYS9vZXBhLWNvbW1vbi1saWInO1xuaW1wb3J0IHsgVGltZVJhbmdlIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1lYml6LWxpYic7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZXBhLXN0YXJ0LWVuZC10aW1lcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0YXJ0LWVuZC10aW1lcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3RhcnQtZW5kLXRpbWVwaWNrZXIuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFN0YXJ0RW5kVGltZXBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBzdGFydENvbXBvbmVudElkID0gJ09lcGFUaW1lcGlja2VyQ29tcG9uZW50JztcbiAgcHVibGljIGVuZENvbXBvbmVudElkID0gJ09lcGFUaW1lcGlja2VyQ29tcG9uZW50JztcblxuICBASW5wdXQoKSB0aW1lUmFuZ2VJbmZvOiBUaW1lUmFuZ2UgPSB7fTtcbiAgQE91dHB1dCgpIHRpbWVSYW5nZUluZm9DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRpbWVSYW5nZT4oKTtcblxuICBASW5wdXQoKSBzaG93VmFsaWRhdGlvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc1JlcXVpcmVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzUmVhZE9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgaXNEaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBkZWZhdWx0VGltZVJhbmdlOiBUaW1lUmFuZ2UgPSB7fTtcblxuICBwcml2YXRlIG9mZnNldEhvdXJzID0gMDtcbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcbiAgdmFsaWRTdGFydCA9IHRydWU7XG4gIHZhbGlkRW5kID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGlkU2VydmljZTogT2VwYUNvbXBvbmVudElkU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBzdGFydDogbnVsbCxcbiAgICAgIGVuZDogbnVsbFxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuZm9ybS5nZXQoXCJzdGFydFwiKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh0aW1lID0+IHtcbiAgICAgIGlmKHRoaXMudmFsaWRTdGFydCkge1xuICAgICAgICBsZXQgdG1wVGltZTogRGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuICAgICAgICB0bXBUaW1lLnNldEhvdXJzKHRpbWUuZ2V0SG91cnMoKSAtIHRoaXMub2Zmc2V0SG91cnMpO1xuICAgICAgICB0aGlzLnRpbWVSYW5nZUluZm8uc3RhcnRIb3VyID0gdG1wVGltZS5nZXRIb3VycygpO1xuICAgICAgICB0aGlzLnRpbWVSYW5nZUluZm8uc3RhcnRNaW51dGUgPSB0bXBUaW1lLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgdGhpcy50aW1lUmFuZ2VJbmZvLnN0YXJ0U2Vjb25kID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGltZVJhbmdlSW5mby5zdGFydEhvdXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMudGltZVJhbmdlSW5mby5zdGFydE1pbnV0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy50aW1lUmFuZ2VJbmZvLnN0YXJ0U2Vjb25kID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhpcy50aW1lUmFuZ2VJbmZvQ2hhbmdlLmVtaXQodGhpcy50aW1lUmFuZ2VJbmZvKTtcbiAgICB9KTtcbiAgICB0aGlzLmZvcm0uZ2V0KFwiZW5kXCIpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHRpbWUgPT4ge1xuICAgICAgaWYodGhpcy52YWxpZEVuZCkge1xuICAgICAgICBsZXQgdG1wVGltZTogRGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuICAgICAgICB0bXBUaW1lLnNldEhvdXJzKHRpbWUuZ2V0SG91cnMoKSAtIHRoaXMub2Zmc2V0SG91cnMpO1xuICAgICAgICB0aGlzLnRpbWVSYW5nZUluZm8uZW5kSG91ciA9IHRtcFRpbWUuZ2V0SG91cnMoKTtcbiAgICAgICAgdGhpcy50aW1lUmFuZ2VJbmZvLmVuZE1pbnV0ZSA9IHRtcFRpbWUuZ2V0TWludXRlcygpO1xuICAgICAgICB0aGlzLnRpbWVSYW5nZUluZm8uZW5kU2Vjb25kID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGltZVJhbmdlSW5mby5lbmRIb3VyID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRpbWVSYW5nZUluZm8uZW5kTWludXRlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRpbWVSYW5nZUluZm8uZW5kU2Vjb25kID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhpcy50aW1lUmFuZ2VJbmZvQ2hhbmdlLmVtaXQodGhpcy50aW1lUmFuZ2VJbmZvKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzVmFsaWRTdGFydChldmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudmFsaWRTdGFydCA9IGV2ZW50O1xuICB9XG4gIGlzVmFsaWRFbmQoZXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkRW5kID0gZXZlbnQ7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICB0aGlzLnN0YXJ0Q29tcG9uZW50SWQgPSB0aGlzLmlkU2VydmljZS5nZXRDb21wb25lbnRJZCh0aGlzLmZvcm0pO1xuICAgICAgdGhpcy5zdGFydENvbXBvbmVudElkICs9ICh0aGlzLnN0YXJ0Q29tcG9uZW50SWQubGVuZ3RoID4gMCA/ICdfJyA6ICcnKSArICgnU3RhcnRUaW1lJyk7XG4gICAgICB0aGlzLmVuZENvbXBvbmVudElkID0gdGhpcy5pZFNlcnZpY2UuZ2V0Q29tcG9uZW50SWQodGhpcy5mb3JtKTtcbiAgICAgIHRoaXMuZW5kQ29tcG9uZW50SWQgKz0gKHRoaXMuZW5kQ29tcG9uZW50SWQubGVuZ3RoID4gMCA/ICdfJyA6ICcnKSArICgnRW5kVGltZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnT09QUyBObyBkYXRlcGlja2VyRm9ybSB5ZXQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudGltZVJhbmdlSW5mby5zdGFydEhvdXIgJiYgdGhpcy5kZWZhdWx0VGltZVJhbmdlICYmIHRoaXMuZGVmYXVsdFRpbWVSYW5nZS5zdGFydEhvdXIpIHtcbiAgICAgIHRoaXMudGltZVJhbmdlSW5mby5zdGFydEhvdXIgPSB0aGlzLmRlZmF1bHRUaW1lUmFuZ2Uuc3RhcnRIb3VyO1xuICAgICAgdGhpcy50aW1lUmFuZ2VJbmZvLnN0YXJ0TWludXRlID0gdGhpcy5kZWZhdWx0VGltZVJhbmdlLnN0YXJ0TWludXRlO1xuICAgICAgdGhpcy50aW1lUmFuZ2VJbmZvLnN0YXJ0U2Vjb25kID0gdGhpcy5kZWZhdWx0VGltZVJhbmdlLnN0YXJ0U2Vjb25kO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudGltZVJhbmdlSW5mby5lbmRIb3VyICYmIHRoaXMuZGVmYXVsdFRpbWVSYW5nZSAmJiB0aGlzLmRlZmF1bHRUaW1lUmFuZ2UuZW5kSG91cikge1xuICAgICAgdGhpcy50aW1lUmFuZ2VJbmZvLmVuZEhvdXIgPSB0aGlzLmRlZmF1bHRUaW1lUmFuZ2UuZW5kSG91cjtcbiAgICAgIHRoaXMudGltZVJhbmdlSW5mby5lbmRNaW51dGUgPSB0aGlzLmRlZmF1bHRUaW1lUmFuZ2UuZW5kTWludXRlO1xuICAgICAgdGhpcy50aW1lUmFuZ2VJbmZvLmVuZFNlY29uZCA9IHRoaXMuZGVmYXVsdFRpbWVSYW5nZS5lbmRTZWNvbmQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGltZVJhbmdlSW5mby5zdGFydEhvdXIpIHtcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgc3RhcnQ6IHRoaXMuc2V0VGltZSh0aGlzLnRpbWVSYW5nZUluZm8uc3RhcnRIb3VyLCB0aGlzLnRpbWVSYW5nZUluZm8uc3RhcnRNaW51dGUgfHwgMCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGltZVJhbmdlSW5mby5lbmRIb3VyKSB7XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIGVuZDogdGhpcy5zZXRUaW1lKHRoaXMudGltZVJhbmdlSW5mby5lbmRIb3VyLCB0aGlzLnRpbWVSYW5nZUluZm8uZW5kTWludXRlIHx8IDApLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0VGltZShob3VyOiBudW1iZXIsIG1pbnV0ZTogbnVtYmVyKTogRGF0ZSB7XG4gICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGRhdGUuc2V0SG91cnMoaG91cik7XG4gICAgZGF0ZS5zZXRNaW51dGVzKG1pbnV0ZSk7XG4gICAgZGF0ZS5zZXRTZWNvbmRzKDApO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbn1cbiIsIjxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBmb3JtLWdyb3VwXCIgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzpzaG93VmFsaWRhdGlvbiAmJiBpc1JlcXVpcmVkICYmICF2YWxpZFN0YXJ0fVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICA8dGltZXBpY2tlciBmb3JtQ29udHJvbE5hbWU9XCJzdGFydFwiIFtyZWFkb25seUlucHV0XT1cImlzUmVhZE9ubHlcIiBbaWRdPVwic3RhcnRDb21wb25lbnRJZCsnX1N0YXJ0VGltZSdcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIChpc1ZhbGlkKT1cImlzVmFsaWRTdGFydCgkZXZlbnQpXCI+PC90aW1lcGlja2VyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNtYWxsIGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwic2hvd1ZhbGlkYXRpb24gJiYgaXNSZXF1aXJlZCAmJiAhdmFsaWRTdGFydFwiPlRpbWUgaXMgaW52YWxpZDwvc21hbGw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgZm9ybS1ncm91cFwiIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6c2hvd1ZhbGlkYXRpb24gJiYgaXNSZXF1aXJlZCAmJiAhdmFsaWRFbmR9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgIDx0aW1lcGlja2VyIGZvcm1Db250cm9sTmFtZT1cImVuZFwiIFtyZWFkb25seUlucHV0XT1cImlzUmVhZE9ubHlcIiBbaWRdPVwiZW5kQ29tcG9uZW50SWQrJ19FbmRUaW1lJ1wiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgKGlzVmFsaWQpPVwiaXNWYWxpZEVuZCgkZXZlbnQpXCI+PC90aW1lcGlja2VyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNtYWxsIGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwic2hvd1ZhbGlkYXRpb24gJiYgaXNSZXF1aXJlZCAmJiAhdmFsaWRFbmRcIj5UaW1lIGlzIGludmFsaWQ8L3NtYWxsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtZW5kLXRpbWVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi9zdGFydC1lbmQtdGltZXBpY2tlci9zdGFydC1lbmQtdGltZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL3N0YXJ0LWVuZC10aW1lcGlja2VyL3N0YXJ0LWVuZC10aW1lcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBVS9FLE1BQU0sT0FBTywyQkFBMkI7SUFrQjVCO0lBQ0E7SUFsQkgsZ0JBQWdCLEdBQUcseUJBQXlCLENBQUM7SUFDN0MsY0FBYyxHQUFHLHlCQUF5QixDQUFDO0lBRXpDLGFBQWEsR0FBYyxFQUFFLENBQUM7SUFDN0IsbUJBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztJQUNyRCxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLGdCQUFnQixHQUFjLEVBQUUsQ0FBQztJQUVsQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLEtBQUssQ0FBWTtJQUN4QixVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFFaEIsWUFDVSxFQUFlLEVBQ2YsU0FBaUM7UUFEakMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGNBQVMsR0FBVCxTQUFTLENBQXdCO1FBRXpDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENB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SztnQkFDSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0UsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPZXBhQ29tcG9uZW50SWRTZXJ2aWNlIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1jb21tb24tbGliJztcbmltcG9ydCB7IFRpbWVSYW5nZSB9IGZyb20gJ0BvaGlvZXBhL29lcGEtZWJpei1saWInO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1zdGFydC1lbmQtdGltZXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGFydC1lbmQtdGltZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0YXJ0LWVuZC10aW1lcGlja2VyLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTdGFydEVuZFRpbWVwaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgc3RhcnRDb21wb25lbnRJZCA9ICdPZXBhVGltZXBpY2tlckNvbXBvbmVudCc7XG4gIHB1YmxpYyBlbmRDb21wb25lbnRJZCA9ICdPZXBhVGltZXBpY2tlckNvbXBvbmVudCc7XG4gIFxuICBASW5wdXQoKSB0aW1lUmFuZ2VJbmZvOiBUaW1lUmFuZ2UgPSB7fTtcbiAgQE91dHB1dCgpIHRpbWVSYW5nZUluZm9DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRpbWVSYW5nZT4oKTtcbiAgQElucHV0KCkgc2hvd1ZhbGlkYXRpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNSZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBpc1JlYWRPbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgZGVmYXVsdFRpbWVSYW5nZTogVGltZVJhbmdlID0ge307XG5cbiAgcHJpdmF0ZSBvZmZzZXRIb3VycyA9IDA7XG4gIHB1YmxpYyBncm91cDogRm9ybUdyb3VwO1xuICB2YWxpZFN0YXJ0ID0gdHJ1ZTtcbiAgdmFsaWRFbmQgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgaWRTZXJ2aWNlOiBPZXBhQ29tcG9uZW50SWRTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLmdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBzdGFydDogbnVsbCxcbiAgICAgIGVuZDogbnVsbFxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuZ3JvdXAuZ2V0KFwic3RhcnRcIik/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodGltZSA9PiB7XG4gICAgICBpZih0aGlzLnZhbGlkU3RhcnQpIHtcbiAgICAgICAgbGV0IHRtcFRpbWU6IERhdGUgPSBuZXcgRGF0ZSh0aW1lKTtcbiAgICAgICAgdG1wVGltZS5zZXRIb3Vycyh0aW1lLmdldEhvdXJzKCkgLSB0aGlzLm9mZnNldEhvdXJzKTtcbiAgICAgICAgdGhpcy50aW1lUmFuZ2VJbmZvLnN0YXJ0SG91ciA9IHRtcFRpbWUuZ2V0SG91cnMoKTtcbiAgICAgICAgdGhpcy50aW1lUmFuZ2VJbmZvLnN0YXJ0TWludXRlID0gdG1wVGltZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIHRoaXMudGltZVJhbmdlSW5mby5zdGFydFNlY29uZCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRpbWVSYW5nZUluZm8uc3RhcnRIb3VyID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRpbWVSYW5nZUluZm8uc3RhcnRNaW51dGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMudGltZVJhbmdlSW5mby5zdGFydFNlY29uZCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHRoaXMudGltZVJhbmdlSW5mb0NoYW5nZS5lbWl0KHRoaXMudGltZVJhbmdlSW5mbyk7XG4gICAgfSk7XG4gICAgdGhpcy5ncm91cC5nZXQoXCJlbmRcIik/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodGltZSA9PiB7XG4gICAgICBpZih0aGlzLnZhbGlkRW5kKSB7XG4gICAgICAgIGxldCB0bXBUaW1lOiBEYXRlID0gbmV3IERhdGUodGltZSk7XG4gICAgICAgIHRtcFRpbWUuc2V0SG91cnModGltZS5nZXRIb3VycygpIC0gdGhpcy5vZmZzZXRIb3Vycyk7XG4gICAgICAgIHRoaXMudGltZVJhbmdlSW5mby5lbmRIb3VyID0gdG1wVGltZS5nZXRIb3VycygpO1xuICAgICAgICB0aGlzLnRpbWVSYW5nZUluZm8uZW5kTWludXRlID0gdG1wVGltZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIHRoaXMudGltZVJhbmdlSW5mby5lbmRTZWNvbmQgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50aW1lUmFuZ2VJbmZvLmVuZEhvdXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMudGltZVJhbmdlSW5mby5lbmRNaW51dGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMudGltZVJhbmdlSW5mby5lbmRTZWNvbmQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB0aGlzLnRpbWVSYW5nZUluZm9DaGFuZ2UuZW1pdCh0aGlzLnRpbWVSYW5nZUluZm8pO1xuICAgIH0pO1xuICB9XG5cbiAgaXNWYWxpZFN0YXJ0KGV2ZW50OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZFN0YXJ0ID0gZXZlbnQ7XG4gIH1cbiAgaXNWYWxpZEVuZChldmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudmFsaWRFbmQgPSBldmVudDtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICB0aGlzLnN0YXJ0Q29tcG9uZW50SWQgPSB0aGlzLmlkU2VydmljZS5nZXRDb21wb25lbnRJZCh0aGlzLmdyb3VwKTtcbiAgICAgIHRoaXMuc3RhcnRDb21wb25lbnRJZCArPSAodGhpcy5zdGFydENvbXBvbmVudElkLmxlbmd0aCA+IDAgPyAnXycgOiAnJykgKyAoJ1N0YXJ0VGltZScpO1xuICAgICAgdGhpcy5lbmRDb21wb25lbnRJZCA9IHRoaXMuaWRTZXJ2aWNlLmdldENvbXBvbmVudElkKHRoaXMuZ3JvdXApO1xuICAgICAgdGhpcy5lbmRDb21wb25lbnRJZCArPSAodGhpcy5lbmRDb21wb25lbnRJZC5sZW5ndGggPiAwID8gJ18nIDogJycpICsgKCdFbmRUaW1lJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdPT1BTIE5vIGRhdGVwaWNrZXJGb3JtIHlldCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50aW1lUmFuZ2VJbmZvLnN0YXJ0SG91ciAmJiB0aGlzLmRlZmF1bHRUaW1lUmFuZ2UgJiYgdGhpcy5kZWZhdWx0VGltZVJhbmdlLnN0YXJ0SG91cikge1xuICAgICAgdGhpcy50aW1lUmFuZ2VJbmZvLnN0YXJ0SG91ciA9IHRoaXMuZGVmYXVsdFRpbWVSYW5nZS5zdGFydEhvdXI7XG4gICAgICB0aGlzLnRpbWVSYW5nZUluZm8uc3RhcnRNaW51dGUgPSB0aGlzLmRlZmF1bHRUaW1lUmFuZ2Uuc3RhcnRNaW51dGU7XG4gICAgICB0aGlzLnRpbWVSYW5nZUluZm8uc3RhcnRTZWNvbmQgPSB0aGlzLmRlZmF1bHRUaW1lUmFuZ2Uuc3RhcnRTZWNvbmQ7XG4gICAgfVxuICAgIGlmICghdGhpcy50aW1lUmFuZ2VJbmZvLmVuZEhvdXIgJiYgdGhpcy5kZWZhdWx0VGltZVJhbmdlICYmIHRoaXMuZGVmYXVsdFRpbWVSYW5nZS5lbmRIb3VyKSB7XG4gICAgICB0aGlzLnRpbWVSYW5nZUluZm8uZW5kSG91ciA9IHRoaXMuZGVmYXVsdFRpbWVSYW5nZS5lbmRIb3VyO1xuICAgICAgdGhpcy50aW1lUmFuZ2VJbmZvLmVuZE1pbnV0ZSA9IHRoaXMuZGVmYXVsdFRpbWVSYW5nZS5lbmRNaW51dGU7XG4gICAgICB0aGlzLnRpbWVSYW5nZUluZm8uZW5kU2Vjb25kID0gdGhpcy5kZWZhdWx0VGltZVJhbmdlLmVuZFNlY29uZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50aW1lUmFuZ2VJbmZvLnN0YXJ0SG91cikge1xuICAgICAgdGhpcy5ncm91cC5wYXRjaFZhbHVlKHtcbiAgICAgICAgc3RhcnQ6IHRoaXMuc2V0VGltZSh0aGlzLnRpbWVSYW5nZUluZm8uc3RhcnRIb3VyLCB0aGlzLnRpbWVSYW5nZUluZm8uc3RhcnRNaW51dGUgfHwgMCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGltZVJhbmdlSW5mby5lbmRIb3VyKSB7XG4gICAgICB0aGlzLmdyb3VwLnBhdGNoVmFsdWUoe1xuICAgICAgICBlbmQ6IHRoaXMuc2V0VGltZSh0aGlzLnRpbWVSYW5nZUluZm8uZW5kSG91ciwgdGhpcy50aW1lUmFuZ2VJbmZvLmVuZE1pbnV0ZSB8fCAwKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldFRpbWUoaG91cjogbnVtYmVyLCBtaW51dGU6IG51bWJlcik6IERhdGUge1xuICAgIGxldCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBkYXRlLnNldEhvdXJzKGhvdXIpO1xuICAgIGRhdGUuc2V0TWludXRlcyhtaW51dGUpO1xuICAgIGRhdGUuc2V0U2Vjb25kcygwKTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIG9uVGltZUNoYW5nZShldmVudDogYW55LCBmaWVsZDogc3RyaW5nKSB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7IC8vIFwiSEg6bW1cIlxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMuZ3JvdXAuZ2V0KGZpZWxkKT8uc2V0VmFsdWUobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHZhbHVlLnNwbGl0KCc6JykubWFwKE51bWJlcik7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRoaXMuZ3JvdXAuZ2V0KGZpZWxkKT8udmFsdWUgfHwgbmV3IERhdGUoKSk7XG4gICAgZGF0ZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgMCwgMCk7XG4gICAgdGhpcy5ncm91cC5nZXQoZmllbGQpPy5zZXRWYWx1ZShkYXRlLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgfVxuXG4gIHRvVGltZVN0cmluZyh2YWx1ZTogRGF0ZSB8IG51bGwpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcblxuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgY29uc3QgaGggPSBkLmdldEhvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IG1tID0gZC5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuXG4gICAgcmV0dXJuIGAke2hofToke21tfWA7XG4gIH1cblxufVxuIiwiPGRpdiBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBmb3JtLWdyb3VwXCIgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzpzaG93VmFsaWRhdGlvbiAmJiBpc1JlcXVpcmVkICYmICF2YWxpZFN0YXJ0fVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICA8IS0tIDx0aW1lcGlja2VyIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0XCIgW3JlYWRvbmx5SW5wdXRdPVwiaXNSZWFkT25seVwiIFtpZF09XCJzdGFydENvbXBvbmVudElkKydfU3RhcnRUaW1lJ1wiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgKGlzVmFsaWQpPVwiaXNWYWxpZFN0YXJ0KCRldmVudClcIj48L3RpbWVwaWNrZXI+IC0tPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRpbWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInRvVGltZVN0cmluZyhncm91cC5nZXQoJ3N0YXJ0Jyk/LnZhbHVlKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uVGltZUNoYW5nZSgkZXZlbnQsICdzdGFydCcpXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJpc1JlYWRPbmx5XCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTdGFydCB0aW1lIGlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNtYWxsIGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwic2hvd1ZhbGlkYXRpb24gJiYgaXNSZXF1aXJlZCAmJiAhdmFsaWRTdGFydFwiPlRpbWUgaXMgaW52YWxpZDwvc21hbGw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgZm9ybS1ncm91cFwiIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6c2hvd1ZhbGlkYXRpb24gJiYgaXNSZXF1aXJlZCAmJiAhdmFsaWRFbmR9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgIDwhLS0gPHRpbWVwaWNrZXIgZm9ybUNvbnRyb2xOYW1lPVwiZW5kXCIgW3JlYWRvbmx5SW5wdXRdPVwiaXNSZWFkT25seVwiIFtpZF09XCJlbmRDb21wb25lbnRJZCsnX0VuZFRpbWUnXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiAoaXNWYWxpZCk9XCJpc1ZhbGlkRW5kKCRldmVudClcIj48L3RpbWVwaWNrZXI+IC0tPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRpbWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInRvVGltZVN0cmluZyhncm91cC5nZXQoJ2VuZCcpPy52YWx1ZSlcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRpbWVDaGFuZ2UoJGV2ZW50LCAnZW5kJylcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzUmVhZE9ubHlcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkVuZCB0aW1lIGlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNtYWxsIGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwic2hvd1ZhbGlkYXRpb24gJiYgaXNSZXF1aXJlZCAmJiAhdmFsaWRFbmRcIj5UaW1lIGlzIGludmFsaWQ8L3NtYWxsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -33,7 +33,7 @@ export class TableDataCellComponent {
33
33
  this.onActionClick.emit(event);
34
34
  }
35
35
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableDataCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
36
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TableDataCellComponent, selector: "oepa-table-data-cell", inputs: { col: "col", row: "row", i: "i", r: "r", tableId: "tableId" }, outputs: { onCellClick: "onCellClick", onToggleRowSelection: "onToggleRowSelection", onSingleRowSelection: "onSingleRowSelection", onActionClick: "onActionClick" }, ngImport: i0, template: "<!-- Data Cell -->\n <div *ngIf=\"!col.actionColumn && !col.selectColumn && !col.singleSelectColumn && !col.inputColumn\">\n <!-- Template for popover 1 -->\n <ng-template #popoverTemplate>\n <div *ngIf=\"row.popover\">\n <cml-template [templateInfo]=\"row.popover.content\"></cml-template>\n </div>\n </ng-template>\n <!-- Popover 1 icon (if specified) -->\n <span *ngIf=\"row.popover && i === (row.popoverColumnIndex || 0) && row.popover\" tabindex=\"0\"\n [popoverTitle]=\"row.popover.title\" [popover]=\"popoverTemplate\"\n [containerClass]=\"row.popover.containerClass\" placement=\"right\"\n [triggers]=\"row.popover.trigger || 'mouseenter:mouseleave'\">\n <i [ngClass]=\"row.popover.className\" [id]=\"tableId+'_PopoverLink_'+r\"></i>\n </span>\n \n <!-- Template for popover 2 -->\n <ng-template #popover2Template>\n <div *ngIf=\"row.popover2\">\n <cml-template [templateInfo]=\"row.popover2.content\"></cml-template>\n </div>\n </ng-template>\n <!-- Popover 2 icon (if specified) -->\n <span *ngIf=\"i === (row.popover2ColumnIndex || 0) && row.popover2\" tabindex=\"0\"\n [popoverTitle]=\"row.popover2.title\" [popover]=\"popover2Template\"\n [containerClass]=\"row.popover2.containerClass\" placement=\"right\"\n [triggers]=\"row.popover2.trigger || 'mouseenter:mouseleave'\">\n <i [ngClass]=\"row.popover2.className\" [id]=\"tableId+'_Popover2Link_'+r\"></i>\n </span>\n \n <!-- Template for popover 3 -->\n <ng-template #popover3Template>\n <div *ngIf=\"row.popover3\">\n <cml-template [templateInfo]=\"row.popover3.content\"></cml-template>\n </div>\n </ng-template>\n <!-- Popover 3 icon (if specified) -->\n <span *ngIf=\"i === (row.popover3ColumnIndex || 0) && row.popover3\" tabindex=\"0\"\n [popoverTitle]=\"row.popover3.title\" [popover]=\"popover3Template\"\n [containerClass]=\"row.popover3.containerClass\" placement=\"right\"\n [triggers]=\"row.popover3.trigger || 'mouseenter:mouseleave'\">\n <i [ngClass]=\"row.popover3.className\" [id]=\"tableId+'_Popover3Link_'+r\"></i>\n </span>\n \n \n <!-- <div *ngIf=\"row|cellInnerHTML:col\" [innerHTML]=\"row|cellInnerHTML:col\"></div>\n <span *ngIf=\"!(row|cellInnerHTML:col)\">{{row|cellValue:col}}</span> -->\n \n <!-- If col is hyperlink, display data as a hyperlink -->\n <a *ngIf=\"col.hyperlink && !(row|cellNotSelectable:col)\" href=\"javascript:void(0);\"\n (click)=\"cellClick(row, col.id)\" [id]=\"tableId+'_CellClick_'+r+'_'+i\"\n [attr.aria-label]=\"col.title || 'Link'\">\n <span *ngIf=\"!(row|cellInnerHTML:col)\">\n <i [ngClass]=\"row|cellIconClassname:col\"></i>\n <span *ngIf=\"row|cellImgSrc:col\"><img [src]=\"row|cellImgSrc:col\" alt=\"\" /></span>\n {{row|cellValue:col}}\n </span>\n <div *ngIf=\"row|cellInnerHTML:col\" [innerHTML]=\"row|cellInnerHTML:col\"></div>\n </a>\n <!-- If col is NOT hyperlink, just display data -->\n <span *ngIf=\"!col.hyperlink || (row|cellNotSelectable:col)\">\n <span *ngIf=\"!(row|cellInnerHTML:col)\">\n <i ngClass=\"{{row|cellIconClassname:col || ''}}\"></i>\n <span *ngIf=\"row|cellImgSrc:col\"><img [src]=\"row|cellImgSrc:col\" alt=\"\" /></span>\n {{row|cellValue:col}}\n </span>\n <div *ngIf=\"row|cellInnerHTML:col\" [innerHTML]=\"row|cellInnerHTML:col\"></div>\n </span>\n </div>\n <!-- Input Cell -->\n <div *ngIf=\"col.inputColumn\">\n <cml-template [templateInfo]=\"row|cellInputComponent:col\"></cml-template>\n </div>\n <!-- Select Cell -->\n <div *ngIf=\"col.selectColumn\" class=\"text-center\">\n <input [id]=\"tableId+'_'+r\" type=\"checkbox\" [disabled]=\"!row.selectable\" [checked]=\"row.selected\"\n (change)=\"toggleRowSelection(row)\" [attr.aria-label]=\"'Select row ' + (r+1)\">\n </div>\n <!-- Single Select Cell -->\n <div *ngIf=\"col.singleSelectColumn\" class=\"text-center\">\n <input [id]=\"tableId+'_singleSelect_'+r\" type=\"radio\" [disabled]=\"!row.selectable\"\n [checked]=\"row.selected\" (change)=\"singleRowSelection(row)\" [attr.aria-label]=\"'Select row ' + (r+1)\">\n </div>\n <!-- Action Button Cell -->\n <div *ngIf=\"col.actionColumn && row.actions\">\n <oepa-action-btn [actions]=\"row.actions\" [data]=\"row.dataSource\" (actionClicked)=\"actionClick($event)\"\n [btnId]=\"tableId+'_'+r\"></oepa-action-btn>\n </div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i3.OepaTemplateComponent, selector: "cml-template", inputs: ["templateInfo"] }, { kind: "component", type: i4.ActionBtnComponent, selector: "oepa-action-btn", inputs: ["label", "btnId", "data", "actions", "normalSize", "dropup"], outputs: ["actionClicked"] }, { kind: "pipe", type: i5.OepaTableCellInnerHtmlPipe, name: "cellInnerHTML" }, { kind: "pipe", type: i6.OepaTableCellValuePipe, name: "cellValue" }, { kind: "pipe", type: i7.OepaTableCellIconClassnamePipe, name: "cellIconClassname" }, { kind: "pipe", type: i8.OepaTableCellImgSrcPipe, name: "cellImgSrc" }, { kind: "pipe", type: i9.OepaTableCellNotSelectablePipe, name: "cellNotSelectable" }, { kind: "pipe", type: i10.OepaTableCellInputComponentPipe, name: "cellInputComponent" }] });
36
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TableDataCellComponent, selector: "oepa-table-data-cell", inputs: { col: "col", row: "row", i: "i", r: "r", tableId: "tableId" }, outputs: { onCellClick: "onCellClick", onToggleRowSelection: "onToggleRowSelection", onSingleRowSelection: "onSingleRowSelection", onActionClick: "onActionClick" }, ngImport: i0, template: "<!-- Data Cell -->\n <div *ngIf=\"!col.actionColumn && !col.selectColumn && !col.singleSelectColumn && !col.inputColumn\">\n <!-- Template for popover 1 -->\n <ng-template #popoverTemplate>\n <div *ngIf=\"row.popover\">\n <cml-template [templateInfo]=\"row.popover.content\"></cml-template>\n </div>\n </ng-template>\n <!-- Popover 1 icon (if specified) -->\n <span *ngIf=\"row.popover && i === (row.popoverColumnIndex || 0) && row.popover\" tabindex=\"0\"\n [popoverTitle]=\"row.popover.title\" [popover]=\"popoverTemplate\"\n [containerClass]=\"row.popover.containerClass\" placement=\"right\"\n [triggers]=\"row.popover.trigger || 'mouseenter:mouseleave'\">\n <i [ngClass]=\"row.popover.className\" [id]=\"tableId+'_PopoverLink_'+r\"></i>\n </span>\n \n <!-- Template for popover 2 -->\n <ng-template #popover2Template>\n <div *ngIf=\"row.popover2\">\n <cml-template [templateInfo]=\"row.popover2.content\"></cml-template>\n </div>\n </ng-template>\n <!-- Popover 2 icon (if specified) -->\n <span *ngIf=\"i === (row.popover2ColumnIndex || 0) && row.popover2\" tabindex=\"0\"\n [popoverTitle]=\"row.popover2.title\" [popover]=\"popover2Template\"\n [containerClass]=\"row.popover2.containerClass\" placement=\"right\"\n [triggers]=\"row.popover2.trigger || 'mouseenter:mouseleave'\">\n <i [ngClass]=\"row.popover2.className\" [id]=\"tableId+'_Popover2Link_'+r\"></i>\n </span>\n \n <!-- Template for popover 3 -->\n <ng-template #popover3Template>\n <div *ngIf=\"row.popover3\">\n <cml-template [templateInfo]=\"row.popover3.content\"></cml-template>\n </div>\n </ng-template>\n <!-- Popover 3 icon (if specified) -->\n <span *ngIf=\"i === (row.popover3ColumnIndex || 0) && row.popover3\" tabindex=\"0\"\n [popoverTitle]=\"row.popover3.title\" [popover]=\"popover3Template\"\n [containerClass]=\"row.popover3.containerClass\" placement=\"right\"\n [triggers]=\"row.popover3.trigger || 'mouseenter:mouseleave'\">\n <i [ngClass]=\"row.popover3.className\" [id]=\"tableId+'_Popover3Link_'+r\"></i>\n </span>\n \n \n <!-- <div *ngIf=\"row|cellInnerHTML:col\" [innerHTML]=\"row|cellInnerHTML:col\"></div>\n <span *ngIf=\"!(row|cellInnerHTML:col)\">{{row|cellValue:col}}</span> -->\n \n <!-- If col is hyperlink, display data as a hyperlink -->\n <a *ngIf=\"col.hyperlink && !(row|cellNotSelectable:col)\" href=\"javascript:void(0);\"\n (click)=\"cellClick(row, col.id)\" [id]=\"tableId+'_CellClick_'+r+'_'+i\"\n [attr.aria-label]=\"col.title || 'Link'\">\n <span *ngIf=\"!(row|cellInnerHTML:col)\">\n <i [ngClass]=\"row|cellIconClassname:col\"></i>\n <span *ngIf=\"row|cellImgSrc:col\"><img [src]=\"row|cellImgSrc:col\" alt=\"\" /></span>\n {{row|cellValue:col}}\n </span>\n <div *ngIf=\"row|cellInnerHTML:col\" [innerHTML]=\"row|cellInnerHTML:col\"></div>\n </a>\n <!-- If col is NOT hyperlink, just display data -->\n <span *ngIf=\"!col.hyperlink || (row|cellNotSelectable:col)\">\n <span *ngIf=\"!(row|cellInnerHTML:col)\">\n <i ngClass=\"{{row|cellIconClassname:col || ''}}\"></i>\n <span *ngIf=\"row|cellImgSrc:col\"><img [src]=\"row|cellImgSrc:col\" alt=\"\" /></span>\n {{row|cellValue:col}}\n </span>\n <div *ngIf=\"row|cellInnerHTML:col\" [innerHTML]=\"row|cellInnerHTML:col\"></div>\n </span>\n </div>\n <!-- Input Cell -->\n <div *ngIf=\"col.inputColumn\">\n <cml-template [templateInfo]=\"row|cellInputComponent:col\"></cml-template>\n </div>\n <!-- Select Cell -->\n <div *ngIf=\"col.selectColumn\" class=\"text-center\">\n <input [id]=\"tableId+'_'+r\" type=\"checkbox\" [disabled]=\"!row.selectable\" [checked]=\"row.selected\"\n (change)=\"toggleRowSelection(row)\" [attr.aria-label]=\"'Select row ' + (r+1)\">\n </div>\n <!-- Single Select Cell -->\n <div *ngIf=\"col.singleSelectColumn\" class=\"text-center\">\n <input [id]=\"tableId+'_singleSelect_'+r\" type=\"radio\" [disabled]=\"!row.selectable\"\n [checked]=\"row.selected\" (change)=\"singleRowSelection(row)\" [attr.aria-label]=\"'Select row ' + (r+1)\">\n </div>\n <!-- Action Button Cell -->\n <div *ngIf=\"col.actionColumn && row.actions\">\n <oepa-action-btn [actions]=\"row.actions\" [data]=\"row.dataSource\" (actionClicked)=\"actionClick($event)\"\n [btnId]=\"tableId+'_'+r\"></oepa-action-btn>\n </div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i3.OepaTemplateComponent, selector: "cml-template", inputs: ["templateInfo"] }, { kind: "component", type: i4.ActionBtnComponent, selector: "oepa-action-btn", inputs: ["label", "btnId", "data", "actions", "normalSize", "dropup"], outputs: ["dropdownOpenChange", "actionClicked"] }, { kind: "pipe", type: i5.OepaTableCellInnerHtmlPipe, name: "cellInnerHTML" }, { kind: "pipe", type: i6.OepaTableCellValuePipe, name: "cellValue" }, { kind: "pipe", type: i7.OepaTableCellIconClassnamePipe, name: "cellIconClassname" }, { kind: "pipe", type: i8.OepaTableCellImgSrcPipe, name: "cellImgSrc" }, { kind: "pipe", type: i9.OepaTableCellNotSelectablePipe, name: "cellNotSelectable" }, { kind: "pipe", type: i10.OepaTableCellInputComponentPipe, name: "cellInputComponent" }] });
37
37
  }
38
38
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableDataCellComponent, decorators: [{
39
39
  type: Component,