@resolveio/client-lib-core 1.1.33 → 1.1.34

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 (124) hide show
  1. package/esm2020/lib/account-manager.service.mjs +3 -3
  2. package/esm2020/lib/auth/auth-guard.service.mjs +3 -3
  3. package/esm2020/lib/auth/auth-permissions.service.mjs +3 -3
  4. package/esm2020/lib/auth/auth.service.mjs +3 -3
  5. package/esm2020/lib/auth/auth365.component.mjs +3 -3
  6. package/esm2020/lib/auth/can-deactivate-guard.service.mjs +3 -3
  7. package/esm2020/lib/auth/enroll.component.mjs +3 -3
  8. package/esm2020/lib/auth/forgot-password.component.mjs +3 -3
  9. package/esm2020/lib/core.component.mjs +3 -3
  10. package/esm2020/lib/core.module.mjs +4 -4
  11. package/esm2020/lib/core.service.mjs +3 -3
  12. package/esm2020/lib/directive/focus.mjs +3 -3
  13. package/esm2020/lib/directive/scroll.mjs +3 -3
  14. package/esm2020/lib/home/home.component.mjs +3 -3
  15. package/esm2020/lib/logger/logger.component.mjs +3 -3
  16. package/esm2020/lib/offline-manager.service.mjs +3 -3
  17. package/esm2020/lib/pipes/domsanitizor.pipe.mjs +3 -3
  18. package/esm2020/lib/pipes/filter.pipe.mjs +6 -6
  19. package/esm2020/lib/pipes/json-parse.pipe.mjs +3 -3
  20. package/esm2020/lib/pipes/minus-currency.pipe.mjs +3 -3
  21. package/esm2020/lib/pipes/phone.pipe.mjs +3 -3
  22. package/esm2020/lib/pipes/pipe.module.mjs +4 -4
  23. package/esm2020/lib/pipes/reverse-list.pipe.mjs +3 -3
  24. package/esm2020/lib/pipes/titlecase.pipe.mjs +3 -3
  25. package/esm2020/lib/resolveio-class.mjs +3 -3
  26. package/esm2020/lib/shared/shared.module.mjs +4 -4
  27. package/esm2020/lib/socket-manager.service.mjs +3 -3
  28. package/esm2020/lib/socket.service.mjs +3 -3
  29. package/esm2020/lib/support-ticket/detail/support-ticket-detail.component.mjs +3 -3
  30. package/esm2020/lib/support-ticket/edit/support-ticket-edit.component.mjs +3 -3
  31. package/esm2020/lib/support-ticket/list/support-ticket-list.component.mjs +3 -3
  32. package/esm2020/lib/support-ticket/new/support-ticket-new.component.mjs +3 -3
  33. package/esm2020/lib/support-ticket/support-ticket.component.mjs +3 -3
  34. package/esm2020/lib/support-ticket/support-ticket.module.mjs +4 -4
  35. package/esm2020/lib/support-ticket/support-ticket.service.mjs +3 -3
  36. package/esm2020/lib/token-manager.service.mjs +3 -3
  37. package/esm2020/lib/user-settings/settings/users-settings.component.mjs +3 -3
  38. package/esm2020/lib/user-settings/user-settings.component.mjs +3 -3
  39. package/esm2020/lib/user-settings/user-settings.module.mjs +4 -4
  40. package/esm2020/lib/user-settings/user-settings.service.mjs +3 -3
  41. package/esm2020/lib/util/aws.service.mjs +3 -3
  42. package/esm2020/lib/util/common.helper.mjs +48 -32
  43. package/esm2020/lib/util/validation.service.mjs +3 -3
  44. package/esm2020/lib/util/window-resize.service.mjs +3 -3
  45. package/esm2020/lib/util/window.service.mjs +3 -3
  46. package/esm2020/lib/widgets/alert/alert.service.mjs +3 -3
  47. package/esm2020/lib/widgets/collapse-table/collapse-table.component.mjs +3 -3
  48. package/esm2020/lib/widgets/collapse-table/collapse-table.module.mjs +4 -4
  49. package/esm2020/lib/widgets/data-table/data-table.component.mjs +3 -3
  50. package/esm2020/lib/widgets/data-table/data-table.module.mjs +4 -4
  51. package/esm2020/lib/widgets/date-shortcut/date-shortcut.component.mjs +3 -3
  52. package/esm2020/lib/widgets/date-shortcut/date-shortcut.module.mjs +4 -4
  53. package/esm2020/lib/widgets/dialog/dialog.confirm.content.mjs +3 -3
  54. package/esm2020/lib/widgets/dialog/dialog.error.content.mjs +3 -3
  55. package/esm2020/lib/widgets/dialog/dialog.input.content.mjs +3 -3
  56. package/esm2020/lib/widgets/dialog/dialog.login.content.mjs +3 -3
  57. package/esm2020/lib/widgets/dialog/dialog.notify.content.mjs +3 -3
  58. package/esm2020/lib/widgets/dialog/dialog.register.content.mjs +3 -3
  59. package/esm2020/lib/widgets/dialog/dialog.select-array-objs.content.mjs +3 -3
  60. package/esm2020/lib/widgets/dialog/dialog.select-array.content.mjs +3 -3
  61. package/esm2020/lib/widgets/dialog/dialog.select-data-labels.content.mjs +3 -3
  62. package/esm2020/lib/widgets/dialog/dialog.select-datetime.content.mjs +4 -4
  63. package/esm2020/lib/widgets/dialog/dialog.select-with-buttons-url.content.mjs +3 -3
  64. package/esm2020/lib/widgets/dialog/dialog.service.mjs +3 -3
  65. package/esm2020/lib/widgets/file/file-upload.component.mjs +3 -3
  66. package/esm2020/lib/widgets/file/file-upload.module.mjs +4 -4
  67. package/esm2020/lib/widgets/form-button/form-button.component.mjs +4 -4
  68. package/esm2020/lib/widgets/form-button/form-button.module.mjs +4 -4
  69. package/esm2020/lib/widgets/navbar-main/navbar-main.component.mjs +3 -3
  70. package/esm2020/lib/widgets/navbar-module/navbar-module.component.mjs +3 -3
  71. package/esm2020/lib/widgets/responsive-button-group/responsive-button-group.component.mjs +3 -3
  72. package/esm2020/lib/widgets/responsive-button-group/responsive-button-group.module.mjs +4 -4
  73. package/esm2020/lib/widgets/scheduler/scheduler.component.mjs +3 -3
  74. package/esm2020/lib/widgets/scheduler/scheduler.module.mjs +4 -4
  75. package/esm2020/lib/widgets/sort-table/sort-table-header.component.mjs +3 -3
  76. package/esm2020/lib/widgets/sort-table/sort-table-ngfor.component.mjs +3 -3
  77. package/esm2020/lib/widgets/sort-table/sort-table.directive.mjs +3 -3
  78. package/esm2020/lib/widgets/sort-table/sort-table.module.mjs +4 -4
  79. package/esm2020/lib/widgets/user-role/user-role.component.mjs +3 -3
  80. package/esm2020/lib/widgets/user-role/user-role.module.mjs +4 -4
  81. package/fesm2015/resolveio-client-lib-core.mjs +303 -287
  82. package/fesm2015/resolveio-client-lib-core.mjs.map +1 -1
  83. package/fesm2020/resolveio-client-lib-core.mjs +303 -287
  84. package/fesm2020/resolveio-client-lib-core.mjs.map +1 -1
  85. package/lib/auth/auth365.component.d.ts +1 -1
  86. package/lib/auth/enroll.component.d.ts +1 -1
  87. package/lib/auth/forgot-password.component.d.ts +1 -1
  88. package/lib/core.component.d.ts +1 -1
  89. package/lib/directive/focus.d.ts +1 -1
  90. package/lib/directive/scroll.d.ts +1 -1
  91. package/lib/home/home.component.d.ts +1 -1
  92. package/lib/logger/logger.component.d.ts +1 -1
  93. package/lib/support-ticket/detail/support-ticket-detail.component.d.ts +1 -1
  94. package/lib/support-ticket/edit/support-ticket-edit.component.d.ts +1 -1
  95. package/lib/support-ticket/list/support-ticket-list.component.d.ts +1 -1
  96. package/lib/support-ticket/new/support-ticket-new.component.d.ts +1 -1
  97. package/lib/support-ticket/support-ticket.component.d.ts +1 -1
  98. package/lib/user-settings/settings/users-settings.component.d.ts +1 -1
  99. package/lib/user-settings/user-settings.component.d.ts +1 -1
  100. package/lib/widgets/collapse-table/collapse-table.component.d.ts +1 -1
  101. package/lib/widgets/data-table/data-table.component.d.ts +1 -1
  102. package/lib/widgets/date-shortcut/date-shortcut.component.d.ts +1 -1
  103. package/lib/widgets/dialog/dialog.confirm.content.d.ts +1 -1
  104. package/lib/widgets/dialog/dialog.error.content.d.ts +1 -1
  105. package/lib/widgets/dialog/dialog.input.content.d.ts +1 -1
  106. package/lib/widgets/dialog/dialog.login.content.d.ts +1 -1
  107. package/lib/widgets/dialog/dialog.notify.content.d.ts +1 -1
  108. package/lib/widgets/dialog/dialog.register.content.d.ts +1 -1
  109. package/lib/widgets/dialog/dialog.select-array-objs.content.d.ts +1 -1
  110. package/lib/widgets/dialog/dialog.select-array.content.d.ts +1 -1
  111. package/lib/widgets/dialog/dialog.select-data-labels.content.d.ts +1 -1
  112. package/lib/widgets/dialog/dialog.select-datetime.content.d.ts +1 -1
  113. package/lib/widgets/dialog/dialog.select-with-buttons-url.content.d.ts +1 -1
  114. package/lib/widgets/file/file-upload.component.d.ts +1 -1
  115. package/lib/widgets/form-button/form-button.component.d.ts +1 -1
  116. package/lib/widgets/navbar-main/navbar-main.component.d.ts +1 -1
  117. package/lib/widgets/navbar-module/navbar-module.component.d.ts +1 -1
  118. package/lib/widgets/responsive-button-group/responsive-button-group.component.d.ts +1 -1
  119. package/lib/widgets/scheduler/scheduler.component.d.ts +1 -1
  120. package/lib/widgets/sort-table/sort-table-header.component.d.ts +1 -1
  121. package/lib/widgets/sort-table/sort-table-ngfor.component.d.ts +1 -1
  122. package/lib/widgets/sort-table/sort-table.directive.d.ts +1 -1
  123. package/lib/widgets/user-role/user-role.component.d.ts +1 -1
  124. package/package.json +1 -1
@@ -278,9 +278,9 @@ export class UsersSettingsComponent extends BaseComponent {
278
278
  });
279
279
  }
280
280
  }
281
- UsersSettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: UsersSettingsComponent, deps: [{ token: i1.AuthPermissionService }, { token: i2.UserSettingsService }, { token: i3.ProviderService }, { token: i4.DialogService }], target: i0.ɵɵFactoryTarget.Component });
282
- UsersSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.9", type: UsersSettingsComponent, selector: "ng-component", providers: [ProviderService], usesInheritance: true, ngImport: i0, template: "<style>\n ::ng-deep :root {\n --primary-table-color: #3b3ee3;\n --primary-table-font-color: #ffffff;\n --font-size: 12px;\n --secondary-table-color: #87ceeb;\n --secondary-table-font-color: #000000;\n --tertiary-table-color: #ff4500;\n --tertiary-table-font-color: #000000;\n --warning-color: #ffc107;\n --warning-font-color: #000000;\n --warning-hover-color: #e0a800;\n --warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n --success-color: #28a745;\n --success-font-color: #ffffff;\n --success-hover-color: #218838;\n --success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n --danger-color: #dc3545;\n --danger-font-color: #ffffff;\n --danger-hover-color: #c82333;\n --danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n --info-color: #17a2b8;\n --info-font-color: #ffffff;\n --info-hover-color: #138496;\n --info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n --primary-color: #007bff;\n --primary-font-color: #ffffff;\n --primary-hover-color: #0069d9;\n --primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n --secondary-color: #868e96;\n --secondary-font-color: #ffffff;\n --secondary-hover-color: #5a6268;\n --secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n }\n\n .label-accordion {\n font-weight: bold;\n color: black;\n margin-bottom: 0px;\n }\n\n .fa-plus {\n color: black;\n }\n\n .fa-minus {\n color: black;\n } \n\n .btn-warning {\n color: var(--warning-font-color);\n background-color: var(--warning-color);\n border-color: var(--warning-color);\n }\n .btn-warning:focus, .btn-warning.focus {\n box-shadow: var(--warning-shadow-color);\n }\n .btn-warning:hover {\n color: var(--warning-font-color);\n background-color: var(--warning-hover-color);\n border-color: var(--warning-hover-color);\n }\n\n .btn-success {\n color: var(--success-font-color);\n background-color: var(--success-color);\n border-color: var(--success-color);\n }\n .btn-success:focus, .btn-success.focus {\n box-shadow: var(--success-shadow-color);\n }\n .btn-success:hover {\n color: var(--success-font-color);\n background-color: var(--success-hover-color);\n border-color: var(--success-hover-color);\n }\n\n .btn-danger {\n color: var(--danger-font-color);\n background-color: var(--danger-color);\n border-color: var(--danger-color);\n }\n .btn-danger:focus, .btn-danger.focus {\n box-shadow: var(--danger-shadow-color);\n }\n .btn-danger:hover {\n color: var(--danger-font-color);\n background-color: var(--danger-hover-color);\n border-color: var(--danger-hover-color);\n }\n\n .btn-info {\n color: var(--info-font-color);\n background-color: var(--info-color);\n border-color: var(--info-color);\n }\n .btn-info:focus, .btn-info.focus {\n box-shadow: var(--info-shadow-color);\n }\n .btn-info:hover {\n color: var(--info-font-color);\n background-color: var(--info-hover-color);\n border-color: var(--info-hover-color);\n }\n\n .btn-primary {\n color: var(--primary-font-color);\n background-color: var(--primary-color);\n border-color: var(--primary-color);\n }\n .btn-primary:focus, .btn-primary.focus {\n box-shadow: var(--primary-shadow-color);\n }\n .btn-primary:hover {\n color: var(--primary-font-color);\n background-color: var(--primary-hover-color);\n border-color: var(--primary-hover-color);\n }\n\n .btn-secondary {\n color: var(--secondary-font-color);\n background-color: var(--secondary-color);\n border-color: var(--secondary-color);\n }\n .btn-secondary:focus, .btn-secondary.focus {\n box-shadow: var(--secondary-shadow-color);\n }\n .btn-secondary:hover {\n color: var(--secondary-font-color);\n background-color: var(--secondary-hover-color);\n border-color: var(--secondary-hover-color);\n }\n\n .fa-minus {\n color: black;\n } \n\n :host /deep/ .card .card-body .collapseTable th {\n background-color: var(--primary-table-color);\n color: var(--primary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-sec th {\n background-color: var(--secondary-table-color);\n color: var(--secondary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-tert th {\n background-color: var(--tertiary-table-color);\n color: var(--tertiary-table-font-color);\n font-size: var(--font-size);\n }\n</style>\n\n<div class=\"col-lg-12\">\n <form [formGroup]=\"form\" novalidate (ngSubmit)=\"submitForm(form)\">\n <div class=\"row\">\n <ngb-accordion #acc=\"ngbAccordion\" activeIds=\"miscOptions, tableOptions, buttonOptions\">\n <ngb-panel id=\"miscOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Misc. Options</label>\n <i *ngIf=\"!acc.activeIds.includes('miscOptions')\" class=\"fa fa-plus pull-right\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('miscOptions')\" class=\"fa fa-minus pull-right\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <responsive-button-group>\n <button type=\"button\" class=\"btn btn-success\" (click)=\"reset()\">Reset Default Settings</button>\n </responsive-button-group>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n\t\t\t\t\t\t\t\t<b>Collapsable Menu</b><br>\n\t\t\t\t\t\t\t\t<div class=\"form-check\">\n\t\t\t\t\t\t\t\t\t<label class=\"form-check-label\">\n\t\t\t\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" hidden formControlName=\"collapsable_menu\">\n\t\t\t\t\t\t\t\t\t\t<i *ngIf=\"form.controls.collapsable_menu.value\" class=\"fa fa-check\" style=\"color: green; font-size: 24px;\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t\t<i *ngIf=\"!form.controls.collapsable_menu.value\" class=\"fa fa-times\" style=\"color: red; font-size: 24px;\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t</div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Default Entries Per Page</label>\n <em *ngIf=\"!form.controls.entries_per_page.valid\">- Required</em>\n <select [ngClass]=\"['form-control', form.controls.entries_per_page.valid ? 'is-valid' : 'is-invalid']\" formControlName=\"entries_per_page\">\n <option value=\"25\">25</option>\n <option value=\"50\">50</option>\n <option value=\"100\">100</option>\n <option value=\"250\">250</option>\n </select>\n <div class=\"invalid-feedback\" *ngIf=\"!form.controls.entries_per_page.valid\">Entries per page is required</div>\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Font Size (Recommended 11-14)</label>\n <em *ngIf=\"form.controls.font_size.hasError('required')\">- Required</em>\n <em *ngIf=\"form.controls.font_size.hasError('wholeNumbersGreaterThanZero')\">- Invalid</em>\n <em *ngIf=\"form.controls.font_size.hasError('maxValue')\">- Invalid</em>\n <em *ngIf=\"form.controls.font_size.hasError('minValue')\">- Invalid</em>\n <input [ngClass]=\"['form-control', form.controls.font_size.valid ? 'is-valid' : 'is-invalid']\" type=\"number\" formControlName=\"font_size\" (keyup)=\"changePrimaryFontSize()\">\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('required')\">Font size is required</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('wholeNumbersGreaterThanZero')\">Font size is invalid</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('maxValue')\">Font size can not exceed 18</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('minValue')\">Font size can not be less than 8</div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Starting Page</label>\n <select [ngClass]=\"['form-control', form.controls.opening_route.valid ? 'is-valid' : '']\" formControlName=\"opening_route\">\n <option value=\"/home\">Home</option>\n <option *ngFor=\"let view of views\" [value]=\"view.value\">{{view.display | titleCase}}</option>\n </select>\n </div>\n </div>\n <div class=\"col-lg-6\" *ngIf=\"client === 'Ace Completions'\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Routing Preference</label>\n <select [ngClass]=\"['form-control', form.controls.routing_preference.valid ? 'is-valid' : '']\" formControlName=\"routing_preference\">\n <option value=\"alwaysAsk\">Always Ask</option>\n <option value=\"sameTab\">Same Tab</option>\n <option value=\"newTab\">New Tab</option>\n <option value=\"newWindow\">New Window</option>\n </select>\n </div>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"tableOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Table Options</label>\n <i *ngIf=\"!acc.activeIds.includes('tableOptions')\" class=\"fa fa-plus pull-right\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('tableOptions')\" class=\"fa fa-minus pull-right\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table> \n <thead>\n <tr>\n <th>\n Primary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Primary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"table_color\" (ngModelChange)=\"changePrimaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Primary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"table_font_color\" (ngModelChange)=\"changePrimaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table secondaryColor=\"true\"> \n <thead>\n <tr>\n <th>\n Secondary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Secondary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_table_color\" (ngModelChange)=\"changeSecondaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <br>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Secondary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_table_font_color\" (ngModelChange)=\"changeSecondaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table tertiaryColor=\"true\"> \n <thead>\n <tr>\n <th>\n Tertiary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Tertiary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.tertiary_table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"tertiary_table_color\" (ngModelChange)=\"changeTertiaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Tertiary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.tertiary_table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"tertiary_table_font_color\" (ngModelChange)=\"changeTertiaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"buttonOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Button Options</label>\n <i *ngIf=\"!acc.activeIds.includes('buttonOptions')\" class=\"fa fa-plus pull-right\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('buttonOptions')\" class=\"fa fa-minus pull-right\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-success\">Success</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_color\" (ngModelChange)=\"changeSuccessColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_font_color\" (ngModelChange)=\"changeSuccessFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_hover_color\" (ngModelChange)=\"changeSuccessHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-warning\">Warning</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_color\" (ngModelChange)=\"changeWarningColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_font_color\" (ngModelChange)=\"changeWarningFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_hover_color\" (ngModelChange)=\"changeWarningHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-danger\">Danger</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_color\" (ngModelChange)=\"changeDangerColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_font_color\" (ngModelChange)=\"changeDangerFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_hover_color\" (ngModelChange)=\"changeDangerHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-info\">Info</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_color\" (ngModelChange)=\"changeInfoColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_font_color\" (ngModelChange)=\"changeInfoFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_hover_color\" (ngModelChange)=\"changeInfoHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-primary\">Primary</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_color\" (ngModelChange)=\"changePrimaryButtonColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_font_color\" (ngModelChange)=\"changePrimaryButtonFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_hover_color\" (ngModelChange)=\"changePrimaryHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-secondary\">Secondary</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_color\" (ngModelChange)=\"changeSecondaryButtonColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_font_color\" (ngModelChange)=\"changeSecondaryButtonFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_hover_color\" (ngModelChange)=\"changeSecondaryHoverColor()\">\n </div>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n </ngb-accordion>\n </div>\n <div class=\"row\" style=\"padding-top: 15px;\">\n <form-button [form]=\"form\" [disabled]=\"disableFormButton\"></form-button>\n </div>\n </form>\n</div>", styles: ["\n ::ng-deep :root {\n --primary-table-color: #3b3ee3;\n --primary-table-font-color: #ffffff;\n --font-size: 12px;\n --secondary-table-color: #87ceeb;\n --secondary-table-font-color: #000000;\n --tertiary-table-color: #ff4500;\n --tertiary-table-font-color: #000000;\n --warning-color: #ffc107;\n --warning-font-color: #000000;\n --warning-hover-color: #e0a800;\n --warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n --success-color: #28a745;\n --success-font-color: #ffffff;\n --success-hover-color: #218838;\n --success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n --danger-color: #dc3545;\n --danger-font-color: #ffffff;\n --danger-hover-color: #c82333;\n --danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n --info-color: #17a2b8;\n --info-font-color: #ffffff;\n --info-hover-color: #138496;\n --info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n --primary-color: #007bff;\n --primary-font-color: #ffffff;\n --primary-hover-color: #0069d9;\n --primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n --secondary-color: #868e96;\n --secondary-font-color: #ffffff;\n --secondary-hover-color: #5a6268;\n --secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n }\n\n .label-accordion {\n font-weight: bold;\n color: black;\n margin-bottom: 0px;\n }\n\n .fa-plus {\n color: black;\n }\n\n .fa-minus {\n color: black;\n } \n\n .btn-warning {\n color: var(--warning-font-color);\n background-color: var(--warning-color);\n border-color: var(--warning-color);\n }\n .btn-warning:focus, .btn-warning.focus {\n box-shadow: var(--warning-shadow-color);\n }\n .btn-warning:hover {\n color: var(--warning-font-color);\n background-color: var(--warning-hover-color);\n border-color: var(--warning-hover-color);\n }\n\n .btn-success {\n color: var(--success-font-color);\n background-color: var(--success-color);\n border-color: var(--success-color);\n }\n .btn-success:focus, .btn-success.focus {\n box-shadow: var(--success-shadow-color);\n }\n .btn-success:hover {\n color: var(--success-font-color);\n background-color: var(--success-hover-color);\n border-color: var(--success-hover-color);\n }\n\n .btn-danger {\n color: var(--danger-font-color);\n background-color: var(--danger-color);\n border-color: var(--danger-color);\n }\n .btn-danger:focus, .btn-danger.focus {\n box-shadow: var(--danger-shadow-color);\n }\n .btn-danger:hover {\n color: var(--danger-font-color);\n background-color: var(--danger-hover-color);\n border-color: var(--danger-hover-color);\n }\n\n .btn-info {\n color: var(--info-font-color);\n background-color: var(--info-color);\n border-color: var(--info-color);\n }\n .btn-info:focus, .btn-info.focus {\n box-shadow: var(--info-shadow-color);\n }\n .btn-info:hover {\n color: var(--info-font-color);\n background-color: var(--info-hover-color);\n border-color: var(--info-hover-color);\n }\n\n .btn-primary {\n color: var(--primary-font-color);\n background-color: var(--primary-color);\n border-color: var(--primary-color);\n }\n .btn-primary:focus, .btn-primary.focus {\n box-shadow: var(--primary-shadow-color);\n }\n .btn-primary:hover {\n color: var(--primary-font-color);\n background-color: var(--primary-hover-color);\n border-color: var(--primary-hover-color);\n }\n\n .btn-secondary {\n color: var(--secondary-font-color);\n background-color: var(--secondary-color);\n border-color: var(--secondary-color);\n }\n .btn-secondary:focus, .btn-secondary.focus {\n box-shadow: var(--secondary-shadow-color);\n }\n .btn-secondary:hover {\n color: var(--secondary-font-color);\n background-color: var(--secondary-hover-color);\n border-color: var(--secondary-hover-color);\n }\n\n .fa-minus {\n color: black;\n } \n\n :host /deep/ .card .card-body .collapseTable th {\n background-color: var(--primary-table-color);\n color: var(--primary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-sec th {\n background-color: var(--secondary-table-color);\n color: var(--secondary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-tert th {\n background-color: var(--tertiary-table-color);\n color: var(--tertiary-table-font-color);\n font-size: var(--font-size);\n }\n"], dependencies: [{ kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.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: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.CollapseTableComponent, selector: "collapse-table", inputs: ["collapseSize", "tableFixed", "headerFixed", "secondaryColor", "tertiaryColor"] }, { kind: "component", type: i7.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i7.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { kind: "directive", type: i7.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { kind: "directive", type: i7.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { kind: "component", type: i8.FormButtonComponent, selector: "form-button", inputs: ["form", "disabled", "type"] }, { kind: "component", type: i9.ResponsiveButtonGroupComponent, selector: "responsive-button-group", inputs: ["collapseSize"] }, { kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i11.TitleCaseAndUnderscorePipe, name: "titleCase" }] });
283
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: UsersSettingsComponent, decorators: [{
281
+ UsersSettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: UsersSettingsComponent, deps: [{ token: i1.AuthPermissionService }, { token: i2.UserSettingsService }, { token: i3.ProviderService }, { token: i4.DialogService }], target: i0.ɵɵFactoryTarget.Component });
282
+ UsersSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: UsersSettingsComponent, selector: "ng-component", providers: [ProviderService], usesInheritance: true, ngImport: i0, template: "<style>\n ::ng-deep :root {\n --primary-table-color: #3b3ee3;\n --primary-table-font-color: #ffffff;\n --font-size: 12px;\n --secondary-table-color: #87ceeb;\n --secondary-table-font-color: #000000;\n --tertiary-table-color: #ff4500;\n --tertiary-table-font-color: #000000;\n --warning-color: #ffc107;\n --warning-font-color: #000000;\n --warning-hover-color: #e0a800;\n --warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n --success-color: #28a745;\n --success-font-color: #ffffff;\n --success-hover-color: #218838;\n --success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n --danger-color: #dc3545;\n --danger-font-color: #ffffff;\n --danger-hover-color: #c82333;\n --danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n --info-color: #17a2b8;\n --info-font-color: #ffffff;\n --info-hover-color: #138496;\n --info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n --primary-color: #007bff;\n --primary-font-color: #ffffff;\n --primary-hover-color: #0069d9;\n --primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n --secondary-color: #868e96;\n --secondary-font-color: #ffffff;\n --secondary-hover-color: #5a6268;\n --secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n }\n\n .label-accordion {\n font-weight: bold;\n color: black;\n margin-bottom: 0px;\n }\n\n .fa-plus {\n color: black;\n }\n\n .fa-minus {\n color: black;\n } \n\n .btn-warning {\n color: var(--warning-font-color);\n background-color: var(--warning-color);\n border-color: var(--warning-color);\n }\n .btn-warning:focus, .btn-warning.focus {\n box-shadow: var(--warning-shadow-color);\n }\n .btn-warning:hover {\n color: var(--warning-font-color);\n background-color: var(--warning-hover-color);\n border-color: var(--warning-hover-color);\n }\n\n .btn-success {\n color: var(--success-font-color);\n background-color: var(--success-color);\n border-color: var(--success-color);\n }\n .btn-success:focus, .btn-success.focus {\n box-shadow: var(--success-shadow-color);\n }\n .btn-success:hover {\n color: var(--success-font-color);\n background-color: var(--success-hover-color);\n border-color: var(--success-hover-color);\n }\n\n .btn-danger {\n color: var(--danger-font-color);\n background-color: var(--danger-color);\n border-color: var(--danger-color);\n }\n .btn-danger:focus, .btn-danger.focus {\n box-shadow: var(--danger-shadow-color);\n }\n .btn-danger:hover {\n color: var(--danger-font-color);\n background-color: var(--danger-hover-color);\n border-color: var(--danger-hover-color);\n }\n\n .btn-info {\n color: var(--info-font-color);\n background-color: var(--info-color);\n border-color: var(--info-color);\n }\n .btn-info:focus, .btn-info.focus {\n box-shadow: var(--info-shadow-color);\n }\n .btn-info:hover {\n color: var(--info-font-color);\n background-color: var(--info-hover-color);\n border-color: var(--info-hover-color);\n }\n\n .btn-primary {\n color: var(--primary-font-color);\n background-color: var(--primary-color);\n border-color: var(--primary-color);\n }\n .btn-primary:focus, .btn-primary.focus {\n box-shadow: var(--primary-shadow-color);\n }\n .btn-primary:hover {\n color: var(--primary-font-color);\n background-color: var(--primary-hover-color);\n border-color: var(--primary-hover-color);\n }\n\n .btn-secondary {\n color: var(--secondary-font-color);\n background-color: var(--secondary-color);\n border-color: var(--secondary-color);\n }\n .btn-secondary:focus, .btn-secondary.focus {\n box-shadow: var(--secondary-shadow-color);\n }\n .btn-secondary:hover {\n color: var(--secondary-font-color);\n background-color: var(--secondary-hover-color);\n border-color: var(--secondary-hover-color);\n }\n\n .fa-minus {\n color: black;\n } \n\n :host /deep/ .card .card-body .collapseTable th {\n background-color: var(--primary-table-color);\n color: var(--primary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-sec th {\n background-color: var(--secondary-table-color);\n color: var(--secondary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-tert th {\n background-color: var(--tertiary-table-color);\n color: var(--tertiary-table-font-color);\n font-size: var(--font-size);\n }\n</style>\n\n<div class=\"col-lg-12\">\n <form [formGroup]=\"form\" novalidate (ngSubmit)=\"submitForm(form)\">\n <div class=\"row\">\n <ngb-accordion #acc=\"ngbAccordion\" activeIds=\"miscOptions, tableOptions, buttonOptions\">\n <ngb-panel id=\"miscOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Misc. Options</label>\n <i *ngIf=\"!acc.activeIds.includes('miscOptions')\" class=\"fa fa-plus pull-right\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('miscOptions')\" class=\"fa fa-minus pull-right\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <responsive-button-group>\n <button type=\"button\" class=\"btn btn-success\" (click)=\"reset()\">Reset Default Settings</button>\n </responsive-button-group>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n\t\t\t\t\t\t\t\t<b>Collapsable Menu</b><br>\n\t\t\t\t\t\t\t\t<div class=\"form-check\">\n\t\t\t\t\t\t\t\t\t<label class=\"form-check-label\">\n\t\t\t\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" hidden formControlName=\"collapsable_menu\">\n\t\t\t\t\t\t\t\t\t\t<i *ngIf=\"form.controls.collapsable_menu.value\" class=\"fa fa-check\" style=\"color: green; font-size: 24px;\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t\t<i *ngIf=\"!form.controls.collapsable_menu.value\" class=\"fa fa-times\" style=\"color: red; font-size: 24px;\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t</div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Default Entries Per Page</label>\n <em *ngIf=\"!form.controls.entries_per_page.valid\">- Required</em>\n <select [ngClass]=\"['form-control', form.controls.entries_per_page.valid ? 'is-valid' : 'is-invalid']\" formControlName=\"entries_per_page\">\n <option value=\"25\">25</option>\n <option value=\"50\">50</option>\n <option value=\"100\">100</option>\n <option value=\"250\">250</option>\n </select>\n <div class=\"invalid-feedback\" *ngIf=\"!form.controls.entries_per_page.valid\">Entries per page is required</div>\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Font Size (Recommended 11-14)</label>\n <em *ngIf=\"form.controls.font_size.hasError('required')\">- Required</em>\n <em *ngIf=\"form.controls.font_size.hasError('wholeNumbersGreaterThanZero')\">- Invalid</em>\n <em *ngIf=\"form.controls.font_size.hasError('maxValue')\">- Invalid</em>\n <em *ngIf=\"form.controls.font_size.hasError('minValue')\">- Invalid</em>\n <input [ngClass]=\"['form-control', form.controls.font_size.valid ? 'is-valid' : 'is-invalid']\" type=\"number\" formControlName=\"font_size\" (keyup)=\"changePrimaryFontSize()\">\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('required')\">Font size is required</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('wholeNumbersGreaterThanZero')\">Font size is invalid</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('maxValue')\">Font size can not exceed 18</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('minValue')\">Font size can not be less than 8</div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Starting Page</label>\n <select [ngClass]=\"['form-control', form.controls.opening_route.valid ? 'is-valid' : '']\" formControlName=\"opening_route\">\n <option value=\"/home\">Home</option>\n <option *ngFor=\"let view of views\" [value]=\"view.value\">{{view.display | titleCase}}</option>\n </select>\n </div>\n </div>\n <div class=\"col-lg-6\" *ngIf=\"client === 'Ace Completions'\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Routing Preference</label>\n <select [ngClass]=\"['form-control', form.controls.routing_preference.valid ? 'is-valid' : '']\" formControlName=\"routing_preference\">\n <option value=\"alwaysAsk\">Always Ask</option>\n <option value=\"sameTab\">Same Tab</option>\n <option value=\"newTab\">New Tab</option>\n <option value=\"newWindow\">New Window</option>\n </select>\n </div>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"tableOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Table Options</label>\n <i *ngIf=\"!acc.activeIds.includes('tableOptions')\" class=\"fa fa-plus pull-right\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('tableOptions')\" class=\"fa fa-minus pull-right\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table> \n <thead>\n <tr>\n <th>\n Primary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Primary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"table_color\" (ngModelChange)=\"changePrimaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Primary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"table_font_color\" (ngModelChange)=\"changePrimaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table secondaryColor=\"true\"> \n <thead>\n <tr>\n <th>\n Secondary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Secondary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_table_color\" (ngModelChange)=\"changeSecondaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <br>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Secondary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_table_font_color\" (ngModelChange)=\"changeSecondaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table tertiaryColor=\"true\"> \n <thead>\n <tr>\n <th>\n Tertiary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Tertiary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.tertiary_table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"tertiary_table_color\" (ngModelChange)=\"changeTertiaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Tertiary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.tertiary_table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"tertiary_table_font_color\" (ngModelChange)=\"changeTertiaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"buttonOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Button Options</label>\n <i *ngIf=\"!acc.activeIds.includes('buttonOptions')\" class=\"fa fa-plus pull-right\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('buttonOptions')\" class=\"fa fa-minus pull-right\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-success\">Success</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_color\" (ngModelChange)=\"changeSuccessColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_font_color\" (ngModelChange)=\"changeSuccessFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_hover_color\" (ngModelChange)=\"changeSuccessHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-warning\">Warning</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_color\" (ngModelChange)=\"changeWarningColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_font_color\" (ngModelChange)=\"changeWarningFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_hover_color\" (ngModelChange)=\"changeWarningHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-danger\">Danger</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_color\" (ngModelChange)=\"changeDangerColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_font_color\" (ngModelChange)=\"changeDangerFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_hover_color\" (ngModelChange)=\"changeDangerHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-info\">Info</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_color\" (ngModelChange)=\"changeInfoColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_font_color\" (ngModelChange)=\"changeInfoFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_hover_color\" (ngModelChange)=\"changeInfoHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-primary\">Primary</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_color\" (ngModelChange)=\"changePrimaryButtonColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_font_color\" (ngModelChange)=\"changePrimaryButtonFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_hover_color\" (ngModelChange)=\"changePrimaryHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-secondary\">Secondary</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_color\" (ngModelChange)=\"changeSecondaryButtonColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_font_color\" (ngModelChange)=\"changeSecondaryButtonFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_hover_color\" (ngModelChange)=\"changeSecondaryHoverColor()\">\n </div>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n </ngb-accordion>\n </div>\n <div class=\"row\" style=\"padding-top: 15px;\">\n <form-button [form]=\"form\" [disabled]=\"disableFormButton\"></form-button>\n </div>\n </form>\n</div>", styles: ["\n ::ng-deep :root {\n --primary-table-color: #3b3ee3;\n --primary-table-font-color: #ffffff;\n --font-size: 12px;\n --secondary-table-color: #87ceeb;\n --secondary-table-font-color: #000000;\n --tertiary-table-color: #ff4500;\n --tertiary-table-font-color: #000000;\n --warning-color: #ffc107;\n --warning-font-color: #000000;\n --warning-hover-color: #e0a800;\n --warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n --success-color: #28a745;\n --success-font-color: #ffffff;\n --success-hover-color: #218838;\n --success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n --danger-color: #dc3545;\n --danger-font-color: #ffffff;\n --danger-hover-color: #c82333;\n --danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n --info-color: #17a2b8;\n --info-font-color: #ffffff;\n --info-hover-color: #138496;\n --info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n --primary-color: #007bff;\n --primary-font-color: #ffffff;\n --primary-hover-color: #0069d9;\n --primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n --secondary-color: #868e96;\n --secondary-font-color: #ffffff;\n --secondary-hover-color: #5a6268;\n --secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n }\n\n .label-accordion {\n font-weight: bold;\n color: black;\n margin-bottom: 0px;\n }\n\n .fa-plus {\n color: black;\n }\n\n .fa-minus {\n color: black;\n } \n\n .btn-warning {\n color: var(--warning-font-color);\n background-color: var(--warning-color);\n border-color: var(--warning-color);\n }\n .btn-warning:focus, .btn-warning.focus {\n box-shadow: var(--warning-shadow-color);\n }\n .btn-warning:hover {\n color: var(--warning-font-color);\n background-color: var(--warning-hover-color);\n border-color: var(--warning-hover-color);\n }\n\n .btn-success {\n color: var(--success-font-color);\n background-color: var(--success-color);\n border-color: var(--success-color);\n }\n .btn-success:focus, .btn-success.focus {\n box-shadow: var(--success-shadow-color);\n }\n .btn-success:hover {\n color: var(--success-font-color);\n background-color: var(--success-hover-color);\n border-color: var(--success-hover-color);\n }\n\n .btn-danger {\n color: var(--danger-font-color);\n background-color: var(--danger-color);\n border-color: var(--danger-color);\n }\n .btn-danger:focus, .btn-danger.focus {\n box-shadow: var(--danger-shadow-color);\n }\n .btn-danger:hover {\n color: var(--danger-font-color);\n background-color: var(--danger-hover-color);\n border-color: var(--danger-hover-color);\n }\n\n .btn-info {\n color: var(--info-font-color);\n background-color: var(--info-color);\n border-color: var(--info-color);\n }\n .btn-info:focus, .btn-info.focus {\n box-shadow: var(--info-shadow-color);\n }\n .btn-info:hover {\n color: var(--info-font-color);\n background-color: var(--info-hover-color);\n border-color: var(--info-hover-color);\n }\n\n .btn-primary {\n color: var(--primary-font-color);\n background-color: var(--primary-color);\n border-color: var(--primary-color);\n }\n .btn-primary:focus, .btn-primary.focus {\n box-shadow: var(--primary-shadow-color);\n }\n .btn-primary:hover {\n color: var(--primary-font-color);\n background-color: var(--primary-hover-color);\n border-color: var(--primary-hover-color);\n }\n\n .btn-secondary {\n color: var(--secondary-font-color);\n background-color: var(--secondary-color);\n border-color: var(--secondary-color);\n }\n .btn-secondary:focus, .btn-secondary.focus {\n box-shadow: var(--secondary-shadow-color);\n }\n .btn-secondary:hover {\n color: var(--secondary-font-color);\n background-color: var(--secondary-hover-color);\n border-color: var(--secondary-hover-color);\n }\n\n .fa-minus {\n color: black;\n } \n\n :host /deep/ .card .card-body .collapseTable th {\n background-color: var(--primary-table-color);\n color: var(--primary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-sec th {\n background-color: var(--secondary-table-color);\n color: var(--secondary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-tert th {\n background-color: var(--tertiary-table-color);\n color: var(--tertiary-table-font-color);\n font-size: var(--font-size);\n }\n"], dependencies: [{ kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.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: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.CollapseTableComponent, selector: "collapse-table", inputs: ["collapseSize", "tableFixed", "headerFixed", "secondaryColor", "tertiaryColor"] }, { kind: "component", type: i7.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i7.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { kind: "directive", type: i7.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { kind: "directive", type: i7.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { kind: "component", type: i8.FormButtonComponent, selector: "form-button", inputs: ["form", "disabled", "type"] }, { kind: "component", type: i9.ResponsiveButtonGroupComponent, selector: "responsive-button-group", inputs: ["collapseSize"] }, { kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i11.TitleCaseAndUnderscorePipe, name: "titleCase" }] });
283
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: UsersSettingsComponent, decorators: [{
284
284
  type: Component,
285
285
  args: [{ providers: [ProviderService], template: "<style>\n ::ng-deep :root {\n --primary-table-color: #3b3ee3;\n --primary-table-font-color: #ffffff;\n --font-size: 12px;\n --secondary-table-color: #87ceeb;\n --secondary-table-font-color: #000000;\n --tertiary-table-color: #ff4500;\n --tertiary-table-font-color: #000000;\n --warning-color: #ffc107;\n --warning-font-color: #000000;\n --warning-hover-color: #e0a800;\n --warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n --success-color: #28a745;\n --success-font-color: #ffffff;\n --success-hover-color: #218838;\n --success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n --danger-color: #dc3545;\n --danger-font-color: #ffffff;\n --danger-hover-color: #c82333;\n --danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n --info-color: #17a2b8;\n --info-font-color: #ffffff;\n --info-hover-color: #138496;\n --info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n --primary-color: #007bff;\n --primary-font-color: #ffffff;\n --primary-hover-color: #0069d9;\n --primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n --secondary-color: #868e96;\n --secondary-font-color: #ffffff;\n --secondary-hover-color: #5a6268;\n --secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n }\n\n .label-accordion {\n font-weight: bold;\n color: black;\n margin-bottom: 0px;\n }\n\n .fa-plus {\n color: black;\n }\n\n .fa-minus {\n color: black;\n } \n\n .btn-warning {\n color: var(--warning-font-color);\n background-color: var(--warning-color);\n border-color: var(--warning-color);\n }\n .btn-warning:focus, .btn-warning.focus {\n box-shadow: var(--warning-shadow-color);\n }\n .btn-warning:hover {\n color: var(--warning-font-color);\n background-color: var(--warning-hover-color);\n border-color: var(--warning-hover-color);\n }\n\n .btn-success {\n color: var(--success-font-color);\n background-color: var(--success-color);\n border-color: var(--success-color);\n }\n .btn-success:focus, .btn-success.focus {\n box-shadow: var(--success-shadow-color);\n }\n .btn-success:hover {\n color: var(--success-font-color);\n background-color: var(--success-hover-color);\n border-color: var(--success-hover-color);\n }\n\n .btn-danger {\n color: var(--danger-font-color);\n background-color: var(--danger-color);\n border-color: var(--danger-color);\n }\n .btn-danger:focus, .btn-danger.focus {\n box-shadow: var(--danger-shadow-color);\n }\n .btn-danger:hover {\n color: var(--danger-font-color);\n background-color: var(--danger-hover-color);\n border-color: var(--danger-hover-color);\n }\n\n .btn-info {\n color: var(--info-font-color);\n background-color: var(--info-color);\n border-color: var(--info-color);\n }\n .btn-info:focus, .btn-info.focus {\n box-shadow: var(--info-shadow-color);\n }\n .btn-info:hover {\n color: var(--info-font-color);\n background-color: var(--info-hover-color);\n border-color: var(--info-hover-color);\n }\n\n .btn-primary {\n color: var(--primary-font-color);\n background-color: var(--primary-color);\n border-color: var(--primary-color);\n }\n .btn-primary:focus, .btn-primary.focus {\n box-shadow: var(--primary-shadow-color);\n }\n .btn-primary:hover {\n color: var(--primary-font-color);\n background-color: var(--primary-hover-color);\n border-color: var(--primary-hover-color);\n }\n\n .btn-secondary {\n color: var(--secondary-font-color);\n background-color: var(--secondary-color);\n border-color: var(--secondary-color);\n }\n .btn-secondary:focus, .btn-secondary.focus {\n box-shadow: var(--secondary-shadow-color);\n }\n .btn-secondary:hover {\n color: var(--secondary-font-color);\n background-color: var(--secondary-hover-color);\n border-color: var(--secondary-hover-color);\n }\n\n .fa-minus {\n color: black;\n } \n\n :host /deep/ .card .card-body .collapseTable th {\n background-color: var(--primary-table-color);\n color: var(--primary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-sec th {\n background-color: var(--secondary-table-color);\n color: var(--secondary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-tert th {\n background-color: var(--tertiary-table-color);\n color: var(--tertiary-table-font-color);\n font-size: var(--font-size);\n }\n</style>\n\n<div class=\"col-lg-12\">\n <form [formGroup]=\"form\" novalidate (ngSubmit)=\"submitForm(form)\">\n <div class=\"row\">\n <ngb-accordion #acc=\"ngbAccordion\" activeIds=\"miscOptions, tableOptions, buttonOptions\">\n <ngb-panel id=\"miscOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Misc. Options</label>\n <i *ngIf=\"!acc.activeIds.includes('miscOptions')\" class=\"fa fa-plus pull-right\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('miscOptions')\" class=\"fa fa-minus pull-right\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <responsive-button-group>\n <button type=\"button\" class=\"btn btn-success\" (click)=\"reset()\">Reset Default Settings</button>\n </responsive-button-group>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n\t\t\t\t\t\t\t\t<b>Collapsable Menu</b><br>\n\t\t\t\t\t\t\t\t<div class=\"form-check\">\n\t\t\t\t\t\t\t\t\t<label class=\"form-check-label\">\n\t\t\t\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" hidden formControlName=\"collapsable_menu\">\n\t\t\t\t\t\t\t\t\t\t<i *ngIf=\"form.controls.collapsable_menu.value\" class=\"fa fa-check\" style=\"color: green; font-size: 24px;\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t\t<i *ngIf=\"!form.controls.collapsable_menu.value\" class=\"fa fa-times\" style=\"color: red; font-size: 24px;\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t</div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Default Entries Per Page</label>\n <em *ngIf=\"!form.controls.entries_per_page.valid\">- Required</em>\n <select [ngClass]=\"['form-control', form.controls.entries_per_page.valid ? 'is-valid' : 'is-invalid']\" formControlName=\"entries_per_page\">\n <option value=\"25\">25</option>\n <option value=\"50\">50</option>\n <option value=\"100\">100</option>\n <option value=\"250\">250</option>\n </select>\n <div class=\"invalid-feedback\" *ngIf=\"!form.controls.entries_per_page.valid\">Entries per page is required</div>\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Font Size (Recommended 11-14)</label>\n <em *ngIf=\"form.controls.font_size.hasError('required')\">- Required</em>\n <em *ngIf=\"form.controls.font_size.hasError('wholeNumbersGreaterThanZero')\">- Invalid</em>\n <em *ngIf=\"form.controls.font_size.hasError('maxValue')\">- Invalid</em>\n <em *ngIf=\"form.controls.font_size.hasError('minValue')\">- Invalid</em>\n <input [ngClass]=\"['form-control', form.controls.font_size.valid ? 'is-valid' : 'is-invalid']\" type=\"number\" formControlName=\"font_size\" (keyup)=\"changePrimaryFontSize()\">\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('required')\">Font size is required</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('wholeNumbersGreaterThanZero')\">Font size is invalid</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('maxValue')\">Font size can not exceed 18</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('minValue')\">Font size can not be less than 8</div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Starting Page</label>\n <select [ngClass]=\"['form-control', form.controls.opening_route.valid ? 'is-valid' : '']\" formControlName=\"opening_route\">\n <option value=\"/home\">Home</option>\n <option *ngFor=\"let view of views\" [value]=\"view.value\">{{view.display | titleCase}}</option>\n </select>\n </div>\n </div>\n <div class=\"col-lg-6\" *ngIf=\"client === 'Ace Completions'\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Routing Preference</label>\n <select [ngClass]=\"['form-control', form.controls.routing_preference.valid ? 'is-valid' : '']\" formControlName=\"routing_preference\">\n <option value=\"alwaysAsk\">Always Ask</option>\n <option value=\"sameTab\">Same Tab</option>\n <option value=\"newTab\">New Tab</option>\n <option value=\"newWindow\">New Window</option>\n </select>\n </div>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"tableOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Table Options</label>\n <i *ngIf=\"!acc.activeIds.includes('tableOptions')\" class=\"fa fa-plus pull-right\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('tableOptions')\" class=\"fa fa-minus pull-right\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table> \n <thead>\n <tr>\n <th>\n Primary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Primary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"table_color\" (ngModelChange)=\"changePrimaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Primary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"table_font_color\" (ngModelChange)=\"changePrimaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table secondaryColor=\"true\"> \n <thead>\n <tr>\n <th>\n Secondary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Secondary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_table_color\" (ngModelChange)=\"changeSecondaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <br>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Secondary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_table_font_color\" (ngModelChange)=\"changeSecondaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table tertiaryColor=\"true\"> \n <thead>\n <tr>\n <th>\n Tertiary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Tertiary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.tertiary_table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"tertiary_table_color\" (ngModelChange)=\"changeTertiaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Tertiary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.tertiary_table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"tertiary_table_font_color\" (ngModelChange)=\"changeTertiaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"buttonOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Button Options</label>\n <i *ngIf=\"!acc.activeIds.includes('buttonOptions')\" class=\"fa fa-plus pull-right\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('buttonOptions')\" class=\"fa fa-minus pull-right\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-success\">Success</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_color\" (ngModelChange)=\"changeSuccessColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_font_color\" (ngModelChange)=\"changeSuccessFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_hover_color\" (ngModelChange)=\"changeSuccessHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-warning\">Warning</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_color\" (ngModelChange)=\"changeWarningColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_font_color\" (ngModelChange)=\"changeWarningFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_hover_color\" (ngModelChange)=\"changeWarningHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-danger\">Danger</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_color\" (ngModelChange)=\"changeDangerColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_font_color\" (ngModelChange)=\"changeDangerFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_hover_color\" (ngModelChange)=\"changeDangerHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-info\">Info</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_color\" (ngModelChange)=\"changeInfoColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_font_color\" (ngModelChange)=\"changeInfoFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_hover_color\" (ngModelChange)=\"changeInfoHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-primary\">Primary</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_color\" (ngModelChange)=\"changePrimaryButtonColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_font_color\" (ngModelChange)=\"changePrimaryButtonFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_hover_color\" (ngModelChange)=\"changePrimaryHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-secondary\">Secondary</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_color\" (ngModelChange)=\"changeSecondaryButtonColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_font_color\" (ngModelChange)=\"changeSecondaryButtonFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_hover_color\" (ngModelChange)=\"changeSecondaryHoverColor()\">\n </div>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n </ngb-accordion>\n </div>\n <div class=\"row\" style=\"padding-top: 15px;\">\n <form-button [form]=\"form\" [disabled]=\"disableFormButton\"></form-button>\n </div>\n </form>\n</div>" }]
286
286
  }], ctorParameters: function () { return [{ type: i1.AuthPermissionService }, { type: i2.UserSettingsService }, { type: i3.ProviderService }, { type: i4.DialogService }]; } });
@@ -45,9 +45,9 @@ export class UserSettingsComponent extends BaseComponent {
45
45
  this._services._app.setNavbarModuleData(this.menuData);
46
46
  }
47
47
  }
48
- UserSettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: UserSettingsComponent, deps: [{ token: i1.UserSettingsService }, { token: i2.ProviderService }], target: i0.ɵɵFactoryTarget.Component });
49
- UserSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.9", type: UserSettingsComponent, selector: "ng-component", providers: [ProviderService], usesInheritance: true, ngImport: i0, template: '<router-outlet></router-outlet>', isInline: true, dependencies: [{ kind: "directive", type: i3.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: UserSettingsComponent, decorators: [{
48
+ UserSettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: UserSettingsComponent, deps: [{ token: i1.UserSettingsService }, { token: i2.ProviderService }], target: i0.ɵɵFactoryTarget.Component });
49
+ UserSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: UserSettingsComponent, selector: "ng-component", providers: [ProviderService], usesInheritance: true, ngImport: i0, template: '<router-outlet></router-outlet>', isInline: true, dependencies: [{ kind: "directive", type: i3.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: UserSettingsComponent, decorators: [{
51
51
  type: Component,
52
52
  args: [{
53
53
  providers: [ProviderService],
@@ -10,17 +10,17 @@ import * as i0 from "@angular/core";
10
10
  import * as i1 from "@angular/router";
11
11
  export class UserSettingsModule {
12
12
  }
13
- UserSettingsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: UserSettingsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
- UserSettingsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.9", ngImport: i0, type: UserSettingsModule, declarations: [UserSettingsComponent,
13
+ UserSettingsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: UserSettingsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
+ UserSettingsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: UserSettingsModule, declarations: [UserSettingsComponent,
15
15
  UsersSettingsComponent], imports: [SharedModule, i1.RouterModule, DatatableModule,
16
16
  FileModule] });
17
- UserSettingsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: UserSettingsModule, providers: [
17
+ UserSettingsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: UserSettingsModule, providers: [
18
18
  UserSettingsService
19
19
  ], imports: [SharedModule,
20
20
  UserSettingsRouting,
21
21
  DatatableModule,
22
22
  FileModule] });
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: UserSettingsModule, decorators: [{
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: UserSettingsModule, decorators: [{
24
24
  type: NgModule,
25
25
  args: [{
26
26
  imports: [
@@ -9,9 +9,9 @@ export class UserSettingsService {
9
9
  this.selectedUser.next(id);
10
10
  }
11
11
  }
12
- UserSettingsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: UserSettingsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13
- UserSettingsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: UserSettingsService });
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: UserSettingsService, decorators: [{
12
+ UserSettingsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: UserSettingsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13
+ UserSettingsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: UserSettingsService });
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: UserSettingsService, decorators: [{
15
15
  type: Injectable
16
16
  }], ctorParameters: function () { return []; } });
17
17
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1zZXR0aW5ncy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3VzZXItc2V0dGluZ3MvdXNlci1zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFHdkMsTUFBTSxPQUFPLG1CQUFtQjtJQUkvQjtRQUZBLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFekIsQ0FBQztJQUVoQixlQUFlLENBQUMsRUFBVTtRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDOztnSEFSVyxtQkFBbUI7b0hBQW5CLG1CQUFtQjsyRkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBVc2VyU2V0dGluZ3NTZXJ2aWNlIHtcblxuXHRzZWxlY3RlZFVzZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcwJyk7XG5cblx0Y29uc3RydWN0b3IoKSB7fVxuXG5cdHNldFNlbGVjdGVkVXNlcihpZDogc3RyaW5nKSB7XG5cdFx0dGhpcy5zZWxlY3RlZFVzZXIubmV4dChpZCk7XG5cdH1cbn1cbiJdfQ==
@@ -71,9 +71,9 @@ export class AwsService {
71
71
  });
72
72
  }
73
73
  }
74
- AwsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: AwsService, deps: [{ token: i1.SocketManagerService }], target: i0.ɵɵFactoryTarget.Injectable });
75
- AwsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: AwsService });
76
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: AwsService, decorators: [{
74
+ AwsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AwsService, deps: [{ token: i1.SocketManagerService }], target: i0.ɵɵFactoryTarget.Injectable });
75
+ AwsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AwsService });
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AwsService, decorators: [{
77
77
  type: Injectable
78
78
  }], ctorParameters: function () { return [{ type: i1.SocketManagerService }]; } });
79
79
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvdXRpbC9hd3Muc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFHakUsTUFBTSxPQUFPLFVBQVU7SUFFdEIsWUFBb0IsT0FBNkI7UUFBN0IsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7SUFBRyxDQUFDO0lBRXJELGFBQWEsQ0FBQyxPQUFlLEVBQUUsUUFBZ0I7UUFDOUMscURBQXFEO1FBQ3JELHNGQUFzRjtRQUN0RixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTdDLGtDQUFrQztRQUNsQyxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkUsa0RBQWtEO1FBQ2xELElBQUksRUFBRSxHQUFHLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQztRQUVE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TSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs7dUdBL0VXLFVBQVU7MkdBQVYsVUFBVTsyRkFBVixVQUFVO2tCQUR0QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNvY2tldE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc29ja2V0LW1hbmFnZXIuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBd3NTZXJ2aWNlICB7XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBfc29ja2V0OiBTb2NrZXRNYW5hZ2VyU2VydmljZSkge31cblxuXHRkYXRhVVJJdG9GaWxlKGRhdGFVUkk6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IEZpbGUge1xuXHRcdC8vIGNvbnZlcnQgYmFzZTY0IHRvIHJhdyBiaW5hcnkgZGF0YSBoZWxkIGluIGEgc3RyaW5nXG5cdFx0Ly8gZG9lc24ndCBoYW5kbGUgVVJMRW5jb2RlZCBEYXRhVVJJcyAtIHNlZSBTTyBhbnN3ZXIgIzY4NTAyNzYgZm9yIGNvZGUgdGhhdCBkb2VzIHRoaXNcblx0XHRsZXQgYnl0ZVN0cmluZyA9IGF0b2IoZGF0YVVSSS5zcGxpdCgnLCcpWzFdKTtcblxuXHRcdC8vIHNlcGFyYXRlIG91dCB0aGUgbWltZSBjb21wb25lbnRcblx0XHRsZXQgbWltZVN0cmluZyA9IGRhdGFVUkkuc3BsaXQoJywnKVswXS5zcGxpdCgnOicpWzFdLnNwbGl0KCc7JylbMF07XG5cblx0XHQvLyB3cml0ZSB0aGUgYnl0ZXMgb2YgdGhlIHN0cmluZyB0byBhbiBBcnJheUJ1ZmZlclxuXHRcdGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XG5cdFx0bGV0IGlhID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG5cdFx0fVxuXG5cdFx0Ly8gd3JpdGUgdGhlIEFycmF5QnVmZmVyIHRvIGEgYmxvYiwgYW5kIHlvdSdyZSBkb25lXG5cdFx0bGV0IGJsb2IgPSBuZXcgQmxvYihbYWJdLCB7dHlwZTogbWltZVN0cmluZ30pO1xuXHRcdFxuXHRcdGJsb2JbJ2xhc3RNb2RpZmllZERhdGUnXSA9IG5ldyBEYXRlKCk7XG5cdFx0YmxvYlsnbmFtZSddID0gZmlsZW5hbWU7XG5cblx0XHRyZXR1cm4gPEZpbGU+YmxvYjtcblx0fVxuXG5cdHVwbG9hZEZpbGUoZmlsZTogRmlsZSwgdHlwZTogc3RyaW5nLCBvcmRlcj86IG51bWJlciwgZmlsZW5hbWU/OiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UgKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGlmIChmaWxlLnNpemUpIHtcblx0XHRcdFx0dGhpcy5nZXRCYXNlNjQoZmlsZSkudGhlbihkYXRhID0+IHtcblx0XHRcdFx0XHR0aGlzLl9zb2NrZXQuY2FsbCgndXBsb2FkRmlsZUFuZFNhdmUnLCBmaWxlbmFtZSA/IGZpbGVuYW1lIDogZmlsZS5uYW1lLCBkYXRhLCBmaWxlLnNpemUsIG9yZGVyID8gb3JkZXIgOiAtMSwgdHlwZSwgdHJ1ZSwgKGVyciwgcmVzKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAocmVzKSB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmVzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0cmVqZWN0KCdJbnZhbGlkIEZpbGUnKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGdldEZpbGVXaXRoS2V5KGtleTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pIHtcblx0XHR0aGlzLl9zb2NrZXQuY2FsbCgnZ2V0RmlsZScsIGtleSwgY2FsbGJhY2spO1xuXHR9XG5cblx0Z2V0RmlsZVdpdGhJZChpZDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pIHtcblx0XHR0aGlzLl9zb2NrZXQuY2FsbCgnZmluZE9uZScsICdmaWxlcycsIHtfaWQ6IGlkfSwgKGVyciwgZmlsZSkgPT4ge1xuXHRcdFx0dGhpcy5nZXRGaWxlV2l0aEtleShmaWxlLmtleSwgY2FsbGJhY2spO1xuXHRcdH0pO1xuXHR9XG5cblx0ZGVsZXRlRmlsZShrZXk6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG5cdFx0dGhpcy5fc29ja2V0LmNhbGwoJ2RlbGV0ZUZpbGUnLCBrZXksIGNhbGxiYWNrKTtcblx0fVxuXG5cdGRlbGV0ZUZpbGVXaXRoSWQoaWQ6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG5cdFx0dGhpcy5fc29ja2V0LmNhbGwoJ2ZpbmRPbmUnLCAnZmlsZXMnLCB7X2lkOiBpZH0sIChlcnIsIGZpbGUpID0+IHtcblx0XHRcdHRoaXMuZGVsZXRlRmlsZShmaWxlLmtleSwgY2FsbGJhY2spO1xuXHRcdH0pO1xuXHR9XG5cblx0ZGVsZXRlRmlsZXNXaXRoS2V5cyhrZXlzOiBzdHJpbmdbXSwgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG5cdFx0dGhpcy5fc29ja2V0LmNhbGwoJ2RlbGV0ZUZpbGVzJywga2V5cywgY2FsbGJhY2spO1xuXHR9XG5cblx0Z2V0QmFzZTY0KGZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXHRcdFx0cmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG5cdFx0XHRyZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZSg8c3RyaW5nPnJlYWRlci5yZXN1bHQpO1xuXHRcdFx0cmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
@@ -67,41 +67,57 @@ export function toDataURL(url, callback) {
67
67
  }
68
68
  export function getDeepDiffDetails(obj1, obj2) {
69
69
  let diff = detailedDiff(obj1, obj2);
70
- let newDiff = detailedDiff(obj2, obj1);
71
70
  let diffString = '';
72
- if ((Object.keys(diff['updated']).length)) {
73
- // if (Object.keys(diff['added']).length){
74
- // diffString += '; ';
75
- // }
76
- // if (Object.keys(diff['deleted']).length) {
77
- // diffString += '; ';
78
- // }
79
- for (let i = 0; i < Object.keys(diff['updated']).length; i++) {
80
- if (!Array.isArray(obj1[Object.keys(diff['updated'])[i]])) {
81
- let key = Object.keys(diff['updated'])[i];
82
- let newKey = Object.keys(newDiff['updated'])[i];
83
- if ((key.substr(0, 2) !== 'id')) {
84
- if (diff['updated'][key] && moment.isDate(diff['updated'][key])) {
85
- diffString += 'Updated: \n' + toTitleCase(key.replace(/_/g, ' ')) + ': "' + moment(diff['updated'][key]).format('llll') + '" to "' + moment(newDiff['updated'][newKey]).format('llll') + '"\n';
86
- }
87
- else if (diff['updated'][key] && typeof (diff['updated'][key]) === 'object') {
88
- let objString = '';
89
- for (let j = 0; j < Object.keys(diff['updated'][key]).length; j++) {
90
- let objKey = Object.keys(diff['updated'][key])[j];
91
- let newObjKey = Object.keys(newDiff['updated'][key])[j];
92
- if (j > 0) {
93
- objString += 'll, \n';
94
- }
95
- objString += toTitleCase(objKey.replace(/_/g, ' ')) + ': "' + diff['updated'][key][objKey] + '" to "' + newDiff['updated'][key][newObjKey] + '"' + (j < Object.keys(diff['updated'][key]).length - 1 ? ', ' : '');
96
- }
97
- diffString += 'Updated: \n' + objString + '\n';
98
- }
99
- else {
100
- diffString += 'Updated: \n' + toTitleCase(key.replace(/_/g, ' ')) + ': "' + diff['updated'][key] + '" to "' + newDiff['updated'][newKey] + '"' + (i < Object.keys(diff['updated']).length - 1 ? '\n' : '');
71
+ const formatObjectDiff = (obj1, obj2) => {
72
+ let str = '';
73
+ Object.keys(obj1).forEach(key => {
74
+ if (Array.isArray(obj1[key]) && Array.isArray(obj2[key])) {
75
+ const arrayDiff = obj1[key].map((item, index) => {
76
+ if (typeof item === 'object' && typeof obj2[key][index] === 'object') {
77
+ return `{${formatObjectDiff(item, obj2[key][index])}}`;
101
78
  }
79
+ return `"${item}" to "${obj2[key][index]}"`;
80
+ }).join(', ');
81
+ str += `${toTitleCase(key.replace(/_/g, ' '))}: [${arrayDiff}], `;
82
+ }
83
+ else if (typeof obj1[key] === 'object' && obj1[key] !== null && obj2[key] !== null) {
84
+ str += `${toTitleCase(key.replace(/_/g, ' '))}: {${formatObjectDiff(obj1[key], obj2[key])}}, `;
85
+ }
86
+ else {
87
+ str += `${toTitleCase(key.replace(/_/g, ' '))}: "${obj1[key]}" to "${obj2[key]}", `;
88
+ }
89
+ });
90
+ return str.slice(0, -2);
91
+ };
92
+ const formatDiff = (changeType, items) => {
93
+ let str = `${changeType}:\n`;
94
+ Object.keys(items).forEach(key => {
95
+ str += `${toTitleCase(key.replace(/_/g, ' '))}: "${items[key]}",\n`;
96
+ });
97
+ return str.slice(0, -2) + '\n';
98
+ };
99
+ if (Object.keys(diff.added).length > 0) {
100
+ diffString += formatDiff('Added', diff.added);
101
+ }
102
+ if (Object.keys(diff.deleted).length > 0) {
103
+ diffString += formatDiff('Deleted', diff.deleted);
104
+ }
105
+ if (Object.keys(diff.updated).length > 0) {
106
+ diffString += 'Updated:\n';
107
+ Object.keys(diff.updated).forEach(key => {
108
+ if (key.substr(0, 2) !== 'id') {
109
+ if (moment.isDate(diff.updated[key])) {
110
+ diffString += `${toTitleCase(key.replace(/_/g, ' '))}: "${moment(diff.updated[key]).format('llll')}" to "${moment(obj2[key]).format('llll')}",\n`;
111
+ }
112
+ else if (typeof diff.updated[key] === 'object' && diff.updated[key] !== null && obj2[key] !== null) {
113
+ diffString += `${toTitleCase(key.replace(/_/g, ' '))}: {${formatObjectDiff(diff.updated[key], obj2[key])}},\n`;
114
+ }
115
+ else {
116
+ diffString += `${toTitleCase(key.replace(/_/g, ' '))}: "${diff.updated[key]}" to "${obj2[key]}",\n`;
102
117
  }
103
118
  }
104
- }
119
+ });
120
+ diffString = diffString.slice(0, -2) + '\n';
105
121
  }
106
122
  return diffString;
107
123
  }
@@ -137,4 +153,4 @@ export function mergeDeep(target, ...sources) {
137
153
  }
138
154
  return mergeDeep(target, ...sources);
139
155
  }
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi91dGlsL2NvbW1vbi5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFO0lBQzNCLE9BQU8sTUFBTSxZQUFZLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7QUFDekUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFHO0lBQzlCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLElBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFHO0lBQzlCLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUk7SUFDNUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNqQixPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFO1FBQ3ZCLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0tBQ1o7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNWLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQUc7SUFDM0Is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O1FBQ3BCLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7SUFDRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFL0IsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3pDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFO1lBQ3pCLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNqQixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDckM7Z0JBQ0QsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNwQztpQkFDSTtnQkFDSixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUM5QztTQUNEO0tBQ0Q7SUFFRCxPQUFPLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGV0YWlsZWREaWZmIH0gZnJvbSAnZGVlcC1vYmplY3QtZGlmZic7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmNvbnN0IGlzT2JqZWN0ID0gKG9iamVjdCkgPT4ge1xuXHRyZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgT2JqZWN0ICYmIG9iamVjdC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnT2JqZWN0Jztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1RpdGxlQ2FzZShzdHIpIHtcblx0cmV0dXJuIHN0ci5yZXBsYWNlKC9cXHdcXFMqL2csIGZ1bmN0aW9uKHR4dCl7cmV0dXJuIHR4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHR4dC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKTsgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VwcGVyQ2FzZShzdHIpIHtcblx0cmV0dXJuICgvXltBLVpdKiQvKS50ZXN0KHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWQobnVtLCBzaXplKSB7XG5cdGxldCBzID0gbnVtICsgJyc7XG5cdHdoaWxlIChzLmxlbmd0aCA8IHNpemUpIHtcblx0XHRzID0gJzAnICsgcztcblx0fVxuXHRyZXR1cm4gcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBDb3B5KG9iaikge1xuXHRyZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopLCBkYXRlUmV2aXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRlUmV2aXZlcihrZXksIHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0bGV0IGEgPSAvXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0oPzpcXC5cXGQqKT8pWiQvLmV4ZWModmFsdWUpO1xuXHRcdGlmIChhKSB7XG5cdFx0XHRyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoK2FbMV0sICthWzJdIC0gMSwgK2FbM10sICthWzRdLCArYVs1XSwgK2FbNl0uc3BsaXQoJy4nKVswXSwgK2FbNl0uc3BsaXQoJy4nKVsxXSkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiNjR0b0Jsb2JVUkwoYjY0RGF0YSwgY29udGVudFR5cGUsIHNsaWNlU2l6ZT8pIHtcblx0YjY0RGF0YSA9IGI2NERhdGEucmVwbGFjZSgnZGF0YTphcHBsaWNhdGlvbi9wZGY7YmFzZTY0LCcsICcnKTtcblx0Y29udGVudFR5cGUgPSBjb250ZW50VHlwZSB8fCAnJztcblx0c2xpY2VTaXplID0gc2xpY2VTaXplIHx8IDUxMjtcblxuXHRsZXQgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGI2NERhdGEpO1xuXHRsZXQgYnl0ZUFycmF5cyA9IFtdO1xuXG5cdGZvciAobGV0IG9mZnNldCA9IDA7IG9mZnNldCA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgb2Zmc2V0ICs9IHNsaWNlU2l6ZSkge1xuXHRcdGxldCBzbGljZSA9IGJ5dGVDaGFyYWN0ZXJzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2xpY2VTaXplKTtcblxuXHRcdGxldCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShzbGljZS5sZW5ndGgpO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2xpY2UubGVuZ3RoOyBpKyspIHtcblx0XHRieXRlTnVtYmVyc1tpXSA9IHNsaWNlLmNoYXJDb2RlQXQoaSk7XG5cdFx0fVxuXG5cdFx0bGV0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVOdW1iZXJzKTtcblxuXHRcdGJ5dGVBcnJheXMucHVzaChieXRlQXJyYXkpO1xuXHR9XG5cblx0bGV0IGJsb2IgPSBuZXcgQmxvYihieXRlQXJyYXlzLCB7dHlwZTogY29udGVudFR5cGV9KTtcblx0cmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBibG9iVG9GaWxlKHRoZUJsb2IsIGZpbGVOYW1lKSA6IEZpbGUge1xuICAgIC8vQSBCbG9iKCkgaXMgYWxtb3N0IGEgRmlsZSgpIC0gaXQncyBqdXN0IG1pc3NpbmcgdGhlIHR3byBwcm9wZXJ0aWVzIGJlbG93IHdoaWNoIHdlIHdpbGwgYWRkXG4gICAgdGhlQmxvYi5sYXN0TW9kaWZpZWREYXRlID0gbmV3IERhdGUoKTtcbiAgICB0aGVCbG9iLm5hbWUgPSBmaWxlTmFtZTtcbiAgICByZXR1cm4gKDxGaWxlPnRoZUJsb2IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9EYXRhVVJMKHVybCwgY2FsbGJhY2spIHtcblx0bGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHR4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cdFx0bGV0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cdFx0cmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y2FsbGJhY2socmVhZGVyLnJlc3VsdCk7XG5cdFx0fTtcblx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTCh4aHIucmVzcG9uc2UpO1xuXHR9O1xuXHR4aHIub3BlbignR0VUJywgdXJsKTtcblx0eGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJztcblx0eGhyLnNlbmQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZXBEaWZmRGV0YWlscyhvYmoxOiBPYmplY3QsIG9iajI6IE9iamVjdCkge1xuXHRsZXQgZGlmZiA9IGRldGFpbGVkRGlmZihvYmoxLCBvYmoyKTtcblx0bGV0IG5ld0RpZmYgPSBkZXRhaWxlZERpZmYob2JqMiwgb2JqMSk7XG5cdFxuXHRsZXQgZGlmZlN0cmluZyA9ICcnO1xuXHRcdFxuXHRpZiAoKE9iamVjdC5rZXlzKGRpZmZbJ3VwZGF0ZWQnXSkubGVuZ3RoKSkge1xuXHRcdC8vIGlmIChPYmplY3Qua2V5cyhkaWZmWydhZGRlZCddKS5sZW5ndGgpe1xuXHRcdC8vIFx0ZGlmZlN0cmluZyArPSAnOyAnO1xuXHRcdC8vIH1cblx0XHRcblx0XHQvLyBpZiAoT2JqZWN0LmtleXMoZGlmZlsnZGVsZXRlZCddKS5sZW5ndGgpIHtcblx0XHQvLyBcdGRpZmZTdHJpbmcgKz0gJzsgJztcblx0XHQvLyB9XG5cdFx0XHRcdFx0XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBPYmplY3Qua2V5cyhkaWZmWyd1cGRhdGVkJ10pLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkob2JqMVtPYmplY3Qua2V5cyhkaWZmWyd1cGRhdGVkJ10pW2ldXSkpIHtcblx0XHRcdFx0bGV0IGtleSA9IE9iamVjdC5rZXlzKGRpZmZbJ3VwZGF0ZWQnXSlbaV07XG5cdFx0XHRcdGxldCBuZXdLZXkgPSBPYmplY3Qua2V5cyhuZXdEaWZmWyd1cGRhdGVkJ10pW2ldO1xuXG5cdFx0XHRcdGlmICgoa2V5LnN1YnN0cigwLCAyKSAhPT0gJ2lkJykpe1xuXHRcdFx0XHRcdGlmIChkaWZmWyd1cGRhdGVkJ11ba2V5XSAmJiBtb21lbnQuaXNEYXRlKGRpZmZbJ3VwZGF0ZWQnXVtrZXldKSkge1xuXHRcdFx0XHRcdFx0ZGlmZlN0cmluZyArPSAnVXBkYXRlZDogXFxuJyArIHRvVGl0bGVDYXNlKGtleS5yZXBsYWNlKC9fL2csICcgJykpICsgJzogXCInICsgbW9tZW50KGRpZmZbJ3VwZGF0ZWQnXVtrZXldKS5mb3JtYXQoJ2xsbGwnKSArICdcIiB0byBcIicgKyBtb21lbnQobmV3RGlmZlsndXBkYXRlZCddW25ld0tleV0pLmZvcm1hdCgnbGxsbCcpICsgJ1wiXFxuJztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSBpZiAoZGlmZlsndXBkYXRlZCddW2tleV0gJiYgdHlwZW9mKGRpZmZbJ3VwZGF0ZWQnXVtrZXldKSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHRcdGxldCBvYmpTdHJpbmcgPSAnJztcblxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBPYmplY3Qua2V5cyhkaWZmWyd1cGRhdGVkJ11ba2V5XSkubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0bGV0IG9iaktleSA9IE9iamVjdC5rZXlzKGRpZmZbJ3VwZGF0ZWQnXVtrZXldKVtqXTtcblx0XHRcdFx0XHRcdFx0bGV0IG5ld09iaktleSA9IE9iamVjdC5rZXlzKG5ld0RpZmZbJ3VwZGF0ZWQnXVtrZXldKVtqXTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoaiA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRvYmpTdHJpbmcgKz0gJ2xsLCBcXG4nO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdG9ialN0cmluZyArPSB0b1RpdGxlQ2FzZShvYmpLZXkucmVwbGFjZSgvXy9nLCAnICcpKSArICc6IFwiJyArIGRpZmZbJ3VwZGF0ZWQnXVtrZXldW29iaktleV0gKyAnXCIgdG8gXCInICsgbmV3RGlmZlsndXBkYXRlZCddW2tleV1bbmV3T2JqS2V5XSArICdcIicgKyAoaiA8IE9iamVjdC5rZXlzKGRpZmZbJ3VwZGF0ZWQnXVtrZXldKS5sZW5ndGggLSAxID8gJywgJyA6ICcnKTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRkaWZmU3RyaW5nICs9ICdVcGRhdGVkOiBcXG4nICsgb2JqU3RyaW5nICsgJ1xcbic7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRkaWZmU3RyaW5nICs9ICdVcGRhdGVkOiBcXG4nICsgdG9UaXRsZUNhc2Uoa2V5LnJlcGxhY2UoL18vZywgJyAnKSkgKyAnOiBcIicgKyBkaWZmWyd1cGRhdGVkJ11ba2V5XSArICdcIiB0byBcIicgKyBuZXdEaWZmWyd1cGRhdGVkJ11bbmV3S2V5XSArICdcIicgKyAoaSA8IE9iamVjdC5rZXlzKGRpZmZbJ3VwZGF0ZWQnXSkubGVuZ3RoIC0gMSA/ICdcXG4nIDogJycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRcblx0cmV0dXJuIGRpZmZTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNyb25TdHJpbmdGcm9tRGF0ZShkYXRlOiBEYXRlKSB7XG5cdHJldHVybiBkYXRlLmdldFNlY29uZHMoKSArICcgJyArIGRhdGUuZ2V0TWludXRlcygpICsgJyAnICsgZGF0ZS5nZXRIb3VycygpICsgJyAnICsgZGF0ZS5nZXREYXRlKCkgKyAnICcgKyAoZGF0ZS5nZXRNb250aCgpICsgMSkgKyAnICcgKyBkYXRlLmdldERheSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gczJhYihzKSB7XG5cdGxldCBidWYgPSBuZXcgQXJyYXlCdWZmZXIocy5sZW5ndGgpO1xuXHRsZXQgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG5cdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG5cdGZvciAobGV0IGkgPSAwOyBpICE9PSBzLmxlbmd0aDsgKytpKSB7IHZpZXdbaV0gPSBzLmNoYXJDb2RlQXQoaSkgJiAweEZGOyB9XG5cdHJldHVybiBidWY7IFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEZWVwKHRhcmdldCwgLi4uc291cmNlcykge1xuXHRpZiAoIXNvdXJjZXMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIHRhcmdldDtcblx0fVxuXHRjb25zdCBzb3VyY2UgPSBzb3VyY2VzLnNoaWZ0KCk7XG5cblx0aWYgKGlzT2JqZWN0KHRhcmdldCkgJiYgaXNPYmplY3Qoc291cmNlKSkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIHNvdXJjZSkge1xuXHRcdFx0aWYgKGlzT2JqZWN0KHNvdXJjZVtrZXldKSkge1xuXHRcdFx0XHRpZiAoIXRhcmdldFtrZXldKSB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbih0YXJnZXQsIHsgW2tleV06IHt9IH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1lcmdlRGVlcCh0YXJnZXRba2V5XSwgc291cmNlW2tleV0pO1xuXHRcdFx0fSBcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKHRhcmdldCwgeyBba2V5XTogc291cmNlW2tleV0gfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1lcmdlRGVlcCh0YXJnZXQsIC4uLnNvdXJjZXMpO1xufSJdfQ==
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi91dGlsL2NvbW1vbi5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFO0lBQzNCLE9BQU8sTUFBTSxZQUFZLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7QUFDekUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFHO0lBQzlCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLElBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFHO0lBQzlCLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUk7SUFDNUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNqQixPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFO1FBQ3ZCLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0tBQ1o7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNWLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQUc7SUFDM0Is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TSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQ3JDO2dCQUNELFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDcEM7aUJBQ0k7Z0JBQ0osTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDOUM7U0FDRDtLQUNEO0lBRUQsT0FBTyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRldGFpbGVkRGlmZiB9IGZyb20gJ2RlZXAtb2JqZWN0LWRpZmYnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5jb25zdCBpc09iamVjdCA9IChvYmplY3QpID0+IHtcblx0cmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIE9iamVjdCAmJiBvYmplY3QuY29uc3RydWN0b3IubmFtZSA9PT0gJ09iamVjdCc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdG9UaXRsZUNhc2Uoc3RyKSB7XG5cdHJldHVybiBzdHIucmVwbGFjZSgvXFx3XFxTKi9nLCBmdW5jdGlvbih0eHQpe3JldHVybiB0eHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eHQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7IH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVcHBlckNhc2Uoc3RyKSB7XG5cdHJldHVybiAoL15bQS1aXSokLykudGVzdChzdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFkKG51bSwgc2l6ZSkge1xuXHRsZXQgcyA9IG51bSArICcnO1xuXHR3aGlsZSAocy5sZW5ndGggPCBzaXplKSB7XG5cdFx0cyA9ICcwJyArIHM7XG5cdH1cblx0cmV0dXJuIHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weShvYmopIHtcblx0cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSwgZGF0ZVJldml2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVJldml2ZXIoa2V5LCB2YWx1ZSkge1xuXHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuXHRcdGxldCBhID0gL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KD86XFwuXFxkKik/KVokLy5leGVjKHZhbHVlKTtcblx0XHRpZiAoYSkge1xuXHRcdFx0cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKCthWzFdLCArYVsyXSAtIDEsICthWzNdLCArYVs0XSwgK2FbNV0sICthWzZdLnNwbGl0KCcuJylbMF0sICthWzZdLnNwbGl0KCcuJylbMV0pKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYjY0dG9CbG9iVVJMKGI2NERhdGEsIGNvbnRlbnRUeXBlLCBzbGljZVNpemU/KSB7XG5cdGI2NERhdGEgPSBiNjREYXRhLnJlcGxhY2UoJ2RhdGE6YXBwbGljYXRpb24vcGRmO2Jhc2U2NCwnLCAnJyk7XG5cdGNvbnRlbnRUeXBlID0gY29udGVudFR5cGUgfHwgJyc7XG5cdHNsaWNlU2l6ZSA9IHNsaWNlU2l6ZSB8fCA1MTI7XG5cblx0bGV0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiNjREYXRhKTtcblx0bGV0IGJ5dGVBcnJheXMgPSBbXTtcblxuXHRmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IG9mZnNldCArPSBzbGljZVNpemUpIHtcblx0XHRsZXQgc2xpY2UgPSBieXRlQ2hhcmFjdGVycy5zbGljZShvZmZzZXQsIG9mZnNldCArIHNsaWNlU2l6ZSk7XG5cblx0XHRsZXQgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoc2xpY2UubGVuZ3RoKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0Ynl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpO1xuXHRcdH1cblxuXHRcdGxldCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XG5cblx0XHRieXRlQXJyYXlzLnB1c2goYnl0ZUFycmF5KTtcblx0fVxuXG5cdGxldCBibG9iID0gbmV3IEJsb2IoYnl0ZUFycmF5cywge3R5cGU6IGNvbnRlbnRUeXBlfSk7XG5cdHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvYlRvRmlsZSh0aGVCbG9iLCBmaWxlTmFtZSkgOiBGaWxlIHtcbiAgICAvL0EgQmxvYigpIGlzIGFsbW9zdCBhIEZpbGUoKSAtIGl0J3MganVzdCBtaXNzaW5nIHRoZSB0d28gcHJvcGVydGllcyBiZWxvdyB3aGljaCB3ZSB3aWxsIGFkZFxuICAgIHRoZUJsb2IubGFzdE1vZGlmaWVkRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgdGhlQmxvYi5uYW1lID0gZmlsZU5hbWU7XG4gICAgcmV0dXJuICg8RmlsZT50aGVCbG9iKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvRGF0YVVSTCh1cmwsIGNhbGxiYWNrKSB7XG5cdGxldCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0eGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuXHRcdGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXHRcdHJlYWRlci5vbmxvYWRlbmQgPSBmdW5jdGlvbigpIHtcblx0XHRcdGNhbGxiYWNrKHJlYWRlci5yZXN1bHQpO1xuXHRcdH07XG5cdFx0cmVhZGVyLnJlYWRBc0RhdGFVUkwoeGhyLnJlc3BvbnNlKTtcblx0fTtcblx0eGhyLm9wZW4oJ0dFVCcsIHVybCk7XG5cdHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG5cdHhoci5zZW5kKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWVwRGlmZkRldGFpbHMob2JqMTogT2JqZWN0LCBvYmoyOiBPYmplY3QpOiBzdHJpbmcge1xuXHRsZXQgZGlmZiA9IGRldGFpbGVkRGlmZihvYmoxLCBvYmoyKTtcblxuICAgIGxldCBkaWZmU3RyaW5nID0gJyc7XG5cbiAgICBjb25zdCBmb3JtYXRPYmplY3REaWZmID0gKG9iajE6IGFueSwgb2JqMjogYW55KSA9PiB7XG4gICAgICAgIGxldCBzdHIgPSAnJztcblxuICAgICAgICBPYmplY3Qua2V5cyhvYmoxKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmoxW2tleV0pICYmIEFycmF5LmlzQXJyYXkob2JqMltrZXldKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5RGlmZiA9IG9iajFba2V5XS5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmoyW2tleV1baW5kZXhdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGB7JHtmb3JtYXRPYmplY3REaWZmKGl0ZW0sIG9iajJba2V5XVtpbmRleF0pfX1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXCIke2l0ZW19XCIgdG8gXCIke29iajJba2V5XVtpbmRleF19XCJgO1xuICAgICAgICAgICAgICAgIH0pLmpvaW4oJywgJyk7XG5cbiAgICAgICAgICAgICAgICBzdHIgKz0gYCR7dG9UaXRsZUNhc2Uoa2V5LnJlcGxhY2UoL18vZywgJyAnKSl9OiBbJHthcnJheURpZmZ9XSwgYDtcbiAgICAgICAgICAgIH0gXG5cdFx0XHRlbHNlIGlmICh0eXBlb2Ygb2JqMVtrZXldID09PSAnb2JqZWN0JyAmJiBvYmoxW2tleV0gIT09IG51bGwgJiYgb2JqMltrZXldICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc3RyICs9IGAke3RvVGl0bGVDYXNlKGtleS5yZXBsYWNlKC9fL2csICcgJykpfTogeyR7Zm9ybWF0T2JqZWN0RGlmZihvYmoxW2tleV0sIG9iajJba2V5XSl9fSwgYDtcbiAgICAgICAgICAgIH0gXG5cdFx0XHRlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gYCR7dG9UaXRsZUNhc2Uoa2V5LnJlcGxhY2UoL18vZywgJyAnKSl9OiBcIiR7b2JqMVtrZXldfVwiIHRvIFwiJHtvYmoyW2tleV19XCIsIGA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzdHIuc2xpY2UoMCwgLTIpO1xuICAgIH07XG5cbiAgICBjb25zdCBmb3JtYXREaWZmID0gKGNoYW5nZVR5cGU6IHN0cmluZywgaXRlbXM6IGFueSkgPT4ge1xuICAgICAgICBsZXQgc3RyID0gYCR7Y2hhbmdlVHlwZX06XFxuYDtcblxuICAgICAgICBPYmplY3Qua2V5cyhpdGVtcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgc3RyICs9IGAke3RvVGl0bGVDYXNlKGtleS5yZXBsYWNlKC9fL2csICcgJykpfTogXCIke2l0ZW1zW2tleV19XCIsXFxuYDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHN0ci5zbGljZSgwLCAtMikgKyAnXFxuJztcbiAgICB9O1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGRpZmYuYWRkZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGlmZlN0cmluZyArPSBmb3JtYXREaWZmKCdBZGRlZCcsIGRpZmYuYWRkZWQpO1xuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyhkaWZmLmRlbGV0ZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGlmZlN0cmluZyArPSBmb3JtYXREaWZmKCdEZWxldGVkJywgZGlmZi5kZWxldGVkKTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoZGlmZi51cGRhdGVkKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRpZmZTdHJpbmcgKz0gJ1VwZGF0ZWQ6XFxuJztcblxuICAgICAgICBPYmplY3Qua2V5cyhkaWZmLnVwZGF0ZWQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkuc3Vic3RyKDAsIDIpICE9PSAnaWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1vbWVudC5pc0RhdGUoZGlmZi51cGRhdGVkW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpZmZTdHJpbmcgKz0gYCR7dG9UaXRsZUNhc2Uoa2V5LnJlcGxhY2UoL18vZywgJyAnKSl9OiBcIiR7bW9tZW50KGRpZmYudXBkYXRlZFtrZXldKS5mb3JtYXQoJ2xsbGwnKX1cIiB0byBcIiR7bW9tZW50KG9iajJba2V5XSkuZm9ybWF0KCdsbGxsJyl9XCIsXFxuYDtcbiAgICAgICAgICAgICAgICB9IFxuXHRcdFx0XHRlbHNlIGlmICh0eXBlb2YgZGlmZi51cGRhdGVkW2tleV0gPT09ICdvYmplY3QnICYmIGRpZmYudXBkYXRlZFtrZXldICE9PSBudWxsICYmIG9iajJba2V5XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkaWZmU3RyaW5nICs9IGAke3RvVGl0bGVDYXNlKGtleS5yZXBsYWNlKC9fL2csICcgJykpfTogeyR7Zm9ybWF0T2JqZWN0RGlmZihkaWZmLnVwZGF0ZWRba2V5XSwgb2JqMltrZXldKX19LFxcbmA7XG4gICAgICAgICAgICAgICAgfSBcblx0XHRcdFx0ZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRpZmZTdHJpbmcgKz0gYCR7dG9UaXRsZUNhc2Uoa2V5LnJlcGxhY2UoL18vZywgJyAnKSl9OiBcIiR7ZGlmZi51cGRhdGVkW2tleV19XCIgdG8gXCIke29iajJba2V5XX1cIixcXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGlmZlN0cmluZyA9IGRpZmZTdHJpbmcuc2xpY2UoMCwgLTIpICsgJ1xcbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZmZTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNyb25TdHJpbmdGcm9tRGF0ZShkYXRlOiBEYXRlKSB7XG5cdHJldHVybiBkYXRlLmdldFNlY29uZHMoKSArICcgJyArIGRhdGUuZ2V0TWludXRlcygpICsgJyAnICsgZGF0ZS5nZXRIb3VycygpICsgJyAnICsgZGF0ZS5nZXREYXRlKCkgKyAnICcgKyAoZGF0ZS5nZXRNb250aCgpICsgMSkgKyAnICcgKyBkYXRlLmdldERheSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gczJhYihzKSB7XG5cdGxldCBidWYgPSBuZXcgQXJyYXlCdWZmZXIocy5sZW5ndGgpO1xuXHRsZXQgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG5cdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXG5cdGZvciAobGV0IGkgPSAwOyBpICE9PSBzLmxlbmd0aDsgKytpKSB7IHZpZXdbaV0gPSBzLmNoYXJDb2RlQXQoaSkgJiAweEZGOyB9XG5cdHJldHVybiBidWY7IFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEZWVwKHRhcmdldCwgLi4uc291cmNlcykge1xuXHRpZiAoIXNvdXJjZXMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIHRhcmdldDtcblx0fVxuXHRjb25zdCBzb3VyY2UgPSBzb3VyY2VzLnNoaWZ0KCk7XG5cblx0aWYgKGlzT2JqZWN0KHRhcmdldCkgJiYgaXNPYmplY3Qoc291cmNlKSkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIHNvdXJjZSkge1xuXHRcdFx0aWYgKGlzT2JqZWN0KHNvdXJjZVtrZXldKSkge1xuXHRcdFx0XHRpZiAoIXRhcmdldFtrZXldKSB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbih0YXJnZXQsIHsgW2tleV06IHt9IH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1lcmdlRGVlcCh0YXJnZXRba2V5XSwgc291cmNlW2tleV0pO1xuXHRcdFx0fSBcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKHRhcmdldCwgeyBba2V5XTogc291cmNlW2tleV0gfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1lcmdlRGVlcCh0YXJnZXQsIC4uLnNvdXJjZXMpO1xufSJdfQ==